}
} else if (itemInfo instanceof LauncherAppWidgetInfo) {
final LauncherAppWidgetInfo widgetInfo = (LauncherAppWidgetInfo) itemInfo;
- unbindAppWidget(widgetInfo, deleteFromDb);
mWorkspace.removeWorkspaceItem(v);
+ removeWidgetToAutoAdvance(widgetInfo.hostView);
+ widgetInfo.hostView = null;
if (deleteFromDb) {
- LauncherModel.deleteItemFromDatabase(this, widgetInfo);
+ deleteWidgetInfo(widgetInfo);
}
+
} else {
return false;
}
}
/**
- * Unbinds any launcher references to the widget and deletes the app widget id.
+ * Deletes the widget info and the widget id.
*/
- private void unbindAppWidget(final LauncherAppWidgetInfo widgetInfo, boolean deleteAppWidgetId) {
+ private void deleteWidgetInfo(final LauncherAppWidgetInfo widgetInfo) {
final LauncherAppWidgetHost appWidgetHost = getAppWidgetHost();
- if (deleteAppWidgetId && appWidgetHost != null &&
- !widgetInfo.isCustomWidget() && widgetInfo.isWidgetIdValid()) {
+ if (appWidgetHost != null && !widgetInfo.isCustomWidget() && widgetInfo.isWidgetIdValid()) {
// Deleting an app widget ID is a void call but writes to disk before returning
// to the caller...
new AsyncTask<Void, Void, Void>() {
}
}.executeOnExecutor(Utilities.THREAD_POOL_EXECUTOR);
}
- removeWidgetToAutoAdvance(widgetInfo.hostView);
- widgetInfo.hostView = null;
+ LauncherModel.deleteItemFromDatabase(this, widgetInfo);
}
@Override
+ appWidgetInfo.provider);
}
+ // Verify that we own the widget
+ AppWidgetProviderInfo info = mAppWidgetManager.getAppWidgetInfo(appWidgetId);
+ if (info == null || appWidgetInfo == null ||
+ !info.provider.equals(appWidgetInfo.provider)) {
+ Log.e(TAG, "Removing invalid widget: id=" + item.appWidgetId);
+ deleteWidgetInfo(item);
+ return;
+ }
+
item.hostView = mAppWidgetHost.createView(this, appWidgetId, appWidgetInfo);
item.minSpanX = appWidgetInfo.minSpanX;
item.minSpanY = appWidgetInfo.minSpanY;