diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2017-07-12 12:09:37 -0700 |
---|---|---|
committer | Sunny Goyal <sunnygoyal@google.com> | 2017-07-12 12:14:29 -0700 |
commit | f5b4b8097239411bdad28be71d50ae883bd82278 (patch) | |
tree | c1f49e4b2235f329a8db0ea34d2ed3ec170a4a38 /src/com/android/launcher3/AppWidgetsRestoredReceiver.java | |
parent | a9f4bffbfc9802ca86a813de2bccea9572f710af (diff) | |
download | android_packages_apps_Trebuchet-f5b4b8097239411bdad28be71d50ae883bd82278.tar.gz android_packages_apps_Trebuchet-f5b4b8097239411bdad28be71d50ae883bd82278.tar.bz2 android_packages_apps_Trebuchet-f5b4b8097239411bdad28be71d50ae883bd82278.zip |
Fixing widget id restore broadcast.
Ignoring thw broadcast if its not for the main widget host, or if
the Launcher DB is already in use. Launcher already handles missing
widget-Id map broadcast, by binding a new widgetId at runtime.
Bug: 63389280
Change-Id: Iaa9774d6d7adde3711cba9615328020e2b2e66aa
Diffstat (limited to 'src/com/android/launcher3/AppWidgetsRestoredReceiver.java')
-rw-r--r-- | src/com/android/launcher3/AppWidgetsRestoredReceiver.java | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/com/android/launcher3/AppWidgetsRestoredReceiver.java b/src/com/android/launcher3/AppWidgetsRestoredReceiver.java index 70be7dae4..6e33d2a55 100644 --- a/src/com/android/launcher3/AppWidgetsRestoredReceiver.java +++ b/src/com/android/launcher3/AppWidgetsRestoredReceiver.java @@ -9,10 +9,12 @@ import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.os.Handler; +import android.support.annotation.WorkerThread; import android.util.Log; import com.android.launcher3.LauncherSettings.Favorites; import com.android.launcher3.model.LoaderTask; +import com.android.launcher3.provider.RestoreDbTask; import com.android.launcher3.util.ContentWriter; public class AppWidgetsRestoredReceiver extends BroadcastReceiver { @@ -22,6 +24,12 @@ public class AppWidgetsRestoredReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context, Intent intent) { if (AppWidgetManager.ACTION_APPWIDGET_HOST_RESTORED.equals(intent.getAction())) { + int hostId = intent.getIntExtra(AppWidgetManager.EXTRA_HOST_ID, 0); + Log.d(TAG, "Widget ID map received for host:" + hostId); + if (hostId != Launcher.APPWIDGET_HOST_ID) { + return; + } + final int[] oldIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_OLD_IDS); final int[] newIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS); if (oldIds.length == newIds.length) { @@ -42,11 +50,23 @@ public class AppWidgetsRestoredReceiver extends BroadcastReceiver { /** * Updates the app widgets whose id has changed during the restore process. */ + @WorkerThread static void restoreAppWidgetIds(Context context, PendingResult asyncResult, int[] oldWidgetIds, int[] newWidgetIds) { + AppWidgetHost appWidgetHost = new AppWidgetHost(context, Launcher.APPWIDGET_HOST_ID); + if (!RestoreDbTask.isPending(context)) { + // Someone has already gone through our DB once, probably LoaderTask. Skip any further + // modifications of the DB. + Log.e(TAG, "Skipping widget ID remap as DB already in use"); + for (int widgetId : newWidgetIds) { + Log.d(TAG, "Deleting widgetId: " + widgetId); + appWidgetHost.deleteAppWidgetId(widgetId); + } + asyncResult.finish(); + return; + } final ContentResolver cr = context.getContentResolver(); final AppWidgetManager widgets = AppWidgetManager.getInstance(context); - AppWidgetHost appWidgetHost = new AppWidgetHost(context, Launcher.APPWIDGET_HOST_ID); for (int i = 0; i < oldWidgetIds.length; i++) { Log.i(TAG, "Widget state restore id " + oldWidgetIds[i] + " => " + newWidgetIds[i]); |