Use app widget host instead of holder to get rid of deleteHost
Also putting the calls to destroy() in try-finally blocks.
Test: N/A
Fix: 272535886
Change-Id: I57ecd90e412b3b8b59b4ed755a5d4191b05fd9b3
diff --git a/src/com/android/launcher3/AppWidgetsRestoredReceiver.java b/src/com/android/launcher3/AppWidgetsRestoredReceiver.java
index eb6d096..9d5b08e 100644
--- a/src/com/android/launcher3/AppWidgetsRestoredReceiver.java
+++ b/src/com/android/launcher3/AppWidgetsRestoredReceiver.java
@@ -2,6 +2,7 @@
import static android.os.Process.myUserHandle;
+import android.appwidget.AppWidgetHost;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProviderInfo;
import android.content.BroadcastReceiver;
@@ -51,10 +52,10 @@
*/
@WorkerThread
public static void restoreAppWidgetIds(Context context, int[] oldWidgetIds, int[] newWidgetIds,
- @NonNull LauncherWidgetHolder holder) {
+ @NonNull AppWidgetHost host) {
if (WidgetsModel.GO_DISABLE_WIDGETS) {
Log.e(TAG, "Skipping widget ID remap as widgets not supported");
- holder.deleteHost();
+ host.deleteHost();
return;
}
if (!RestoreDbTask.isPending(context)) {
@@ -63,7 +64,7 @@
Log.e(TAG, "Skipping widget ID remap as DB already in use");
for (int widgetId : newWidgetIds) {
Log.d(TAG, "Deleting widgetId: " + widgetId);
- holder.deleteAppWidgetId(widgetId);
+ host.deleteAppWidgetId(widgetId);
}
return;
}
@@ -100,7 +101,7 @@
try {
if (!cursor.moveToFirst()) {
// The widget no long exists.
- holder.deleteAppWidgetId(newWidgetIds[i]);
+ host.deleteAppWidgetId(newWidgetIds[i]);
}
} finally {
cursor.close();
diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java
index 767c3d9..bccb894 100644
--- a/src/com/android/launcher3/LauncherProvider.java
+++ b/src/com/android/launcher3/LauncherProvider.java
@@ -550,39 +550,42 @@
Log.d(TAG, "loading default workspace");
LauncherWidgetHolder widgetHolder = mOpenHelper.newLauncherWidgetHolder();
- AutoInstallsLayout loader = createWorkspaceLoaderFromAppRestriction(widgetHolder);
- if (loader == null) {
- loader = AutoInstallsLayout.get(getContext(), widgetHolder, mOpenHelper);
- }
- if (loader == null) {
- final Partner partner = Partner.get(getContext().getPackageManager());
- if (partner != null) {
- int workspaceResId = partner.getXmlResId(RES_PARTNER_DEFAULT_LAYOUT);
- if (workspaceResId != 0) {
- loader = new DefaultLayoutParser(getContext(), widgetHolder,
- mOpenHelper, partner.getResources(), workspaceResId);
+ try {
+ AutoInstallsLayout loader = createWorkspaceLoaderFromAppRestriction(widgetHolder);
+ if (loader == null) {
+ loader = AutoInstallsLayout.get(getContext(), widgetHolder, mOpenHelper);
+ }
+ if (loader == null) {
+ final Partner partner = Partner.get(getContext().getPackageManager());
+ if (partner != null) {
+ int workspaceResId = partner.getXmlResId(RES_PARTNER_DEFAULT_LAYOUT);
+ if (workspaceResId != 0) {
+ loader = new DefaultLayoutParser(getContext(), widgetHolder,
+ mOpenHelper, partner.getResources(), workspaceResId);
+ }
}
}
- }
- final boolean usingExternallyProvidedLayout = loader != null;
- if (loader == null) {
- loader = getDefaultLayoutParser(widgetHolder);
- }
+ final boolean usingExternallyProvidedLayout = loader != null;
+ if (loader == null) {
+ loader = getDefaultLayoutParser(widgetHolder);
+ }
- // There might be some partially restored DB items, due to buggy restore logic in
- // previous versions of launcher.
- mOpenHelper.createEmptyDB(mOpenHelper.getWritableDatabase());
- // Populate favorites table with initial favorites
- if ((mOpenHelper.loadFavorites(mOpenHelper.getWritableDatabase(), loader) <= 0)
- && usingExternallyProvidedLayout) {
- // Unable to load external layout. Cleanup and load the internal layout.
+ // There might be some partially restored DB items, due to buggy restore logic in
+ // previous versions of launcher.
mOpenHelper.createEmptyDB(mOpenHelper.getWritableDatabase());
- mOpenHelper.loadFavorites(mOpenHelper.getWritableDatabase(),
- getDefaultLayoutParser(widgetHolder));
+ // Populate favorites table with initial favorites
+ if ((mOpenHelper.loadFavorites(mOpenHelper.getWritableDatabase(), loader) <= 0)
+ && usingExternallyProvidedLayout) {
+ // Unable to load external layout. Cleanup and load the internal layout.
+ mOpenHelper.createEmptyDB(mOpenHelper.getWritableDatabase());
+ mOpenHelper.loadFavorites(mOpenHelper.getWritableDatabase(),
+ getDefaultLayoutParser(widgetHolder));
+ }
+ clearFlagEmptyDbCreated();
+ } finally {
+ widgetHolder.destroy();
}
- clearFlagEmptyDbCreated();
- widgetHolder.destroy();
}
}
@@ -957,8 +960,6 @@
allWidgets = holder.getAppWidgetIds();
} catch (IncompatibleClassChangeError e) {
Log.e(TAG, "getAppWidgetIds not supported", e);
- // Necessary to destroy the holder to free up possible activity context
- holder.destroy();
return;
}
final IntSet validWidgets = IntSet.wrap(LauncherDbUtils.queryIntArray(false, db,
diff --git a/src/com/android/launcher3/provider/RestoreDbTask.java b/src/com/android/launcher3/provider/RestoreDbTask.java
index 2a452be..3a5ef10 100644
--- a/src/com/android/launcher3/provider/RestoreDbTask.java
+++ b/src/com/android/launcher3/provider/RestoreDbTask.java
@@ -21,8 +21,10 @@
import static com.android.launcher3.LauncherPrefs.OLD_APP_WIDGET_IDS;
import static com.android.launcher3.LauncherPrefs.RESTORE_DEVICE;
import static com.android.launcher3.provider.LauncherDbUtils.dropTable;
+import static com.android.launcher3.widget.LauncherWidgetHolder.APPWIDGET_HOST_ID;
import android.app.backup.BackupManager;
+import android.appwidget.AppWidgetHost;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
@@ -49,7 +51,6 @@
import com.android.launcher3.provider.LauncherDbUtils.SQLiteTransaction;
import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.LogConfig;
-import com.android.launcher3.widget.LauncherWidgetHolder;
import java.io.InvalidObjectException;
import java.util.Arrays;
@@ -354,12 +355,11 @@
private void restoreAppWidgetIdsIfExists(Context context) {
LauncherPrefs lp = LauncherPrefs.get(context);
if (lp.has(APP_WIDGET_IDS, OLD_APP_WIDGET_IDS)) {
- LauncherWidgetHolder holder = LauncherWidgetHolder.newInstance(context);
+ AppWidgetHost host = new AppWidgetHost(context, APPWIDGET_HOST_ID);
AppWidgetsRestoredReceiver.restoreAppWidgetIds(context,
IntArray.fromConcatString(lp.get(OLD_APP_WIDGET_IDS)).toArray(),
IntArray.fromConcatString(lp.get(APP_WIDGET_IDS)).toArray(),
- holder);
- holder.destroy();
+ host);
} else {
FileLog.d(TAG, "No app widget ids to restore.");
}
diff --git a/src/com/android/launcher3/widget/LauncherWidgetHolder.java b/src/com/android/launcher3/widget/LauncherWidgetHolder.java
index bea7517..8e67eb1 100644
--- a/src/com/android/launcher3/widget/LauncherWidgetHolder.java
+++ b/src/com/android/launcher3/widget/LauncherWidgetHolder.java
@@ -322,13 +322,6 @@
}
/**
- * Delete the host
- */
- public void deleteHost() {
- mWidgetHost.deleteHost();
- }
-
- /**
* @return The app widget ids
*/
@NonNull