summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2017-07-12 12:09:37 -0700
committerSunny Goyal <sunnygoyal@google.com>2017-07-12 12:14:29 -0700
commitf5b4b8097239411bdad28be71d50ae883bd82278 (patch)
treec1f49e4b2235f329a8db0ea34d2ed3ec170a4a38 /src
parenta9f4bffbfc9802ca86a813de2bccea9572f710af (diff)
downloadandroid_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')
-rw-r--r--src/com/android/launcher3/AppWidgetsRestoredReceiver.java22
-rw-r--r--src/com/android/launcher3/provider/RestoreDbTask.java2
2 files changed, 22 insertions, 2 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]);
diff --git a/src/com/android/launcher3/provider/RestoreDbTask.java b/src/com/android/launcher3/provider/RestoreDbTask.java
index 00e2644a5..523016008 100644
--- a/src/com/android/launcher3/provider/RestoreDbTask.java
+++ b/src/com/android/launcher3/provider/RestoreDbTask.java
@@ -134,7 +134,7 @@ public class RestoreDbTask {
}
public static void setPending(Context context, boolean isPending) {
- FileLog.d(TAG, "Restore data received through full backup");
+ FileLog.d(TAG, "Restore data received through full backup " + isPending);
Utilities.getPrefs(context).edit().putBoolean(RESTORE_TASK_PENDING, isPending).commit();
}
}