1 package com.android.launcher3;
2 
3 import static com.android.launcher3.LauncherPrefs.APP_WIDGET_IDS;
4 import static com.android.launcher3.LauncherPrefs.OLD_APP_WIDGET_IDS;
5 
6 import android.appwidget.AppWidgetManager;
7 import android.content.BroadcastReceiver;
8 import android.content.Context;
9 import android.content.Intent;
10 import android.util.Log;
11 
12 import com.android.launcher3.logging.FileLog;
13 import com.android.launcher3.provider.RestoreDbTask;
14 import com.android.launcher3.util.IntArray;
15 import com.android.launcher3.widget.LauncherWidgetHolder;
16 
17 import java.util.Arrays;
18 
19 public class AppWidgetsRestoredReceiver extends BroadcastReceiver {
20 
21     private static final String TAG = "AppWidgetsRestoredReceiver";
22 
23     @Override
onReceive(final Context context, Intent intent)24     public void onReceive(final Context context, Intent intent) {
25         if (AppWidgetManager.ACTION_APPWIDGET_HOST_RESTORED.equals(intent.getAction())) {
26             int hostId = intent.getIntExtra(AppWidgetManager.EXTRA_HOST_ID, 0);
27             Log.d(TAG, "onReceive: Widget ID map received for host:" + hostId);
28             if (hostId != LauncherWidgetHolder.APPWIDGET_HOST_ID) {
29                 Log.w(TAG,  "onReceive: hostId does not match Launcher."
30                         + " Expected: " + LauncherWidgetHolder.APPWIDGET_HOST_ID
31                         + ", Actual: " + hostId);
32                 return;
33             }
34 
35             final int[] oldIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_OLD_IDS);
36             final int[] newIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);
37             if (oldIds != null && newIds != null && oldIds.length == newIds.length) {
38                 LauncherPrefs.get(context).putSync(
39                         OLD_APP_WIDGET_IDS.to(IntArray.wrap(oldIds).toConcatString()),
40                         APP_WIDGET_IDS.to(IntArray.wrap(newIds).toConcatString()));
41                 FileLog.d(TAG, "onReceive: Valid Widget IDs received."
42                         + " old IDs=" + Arrays.toString(oldIds)
43                         + ", new IDs=" + Arrays.toString(newIds));
44                 if (!RestoreDbTask.isPending(context)) {
45                     FileLog.w(TAG, "onReceive: Restored App Widget Ids received but Launcher"
46                             + " restore is not pending. New widget Ids might not get restored.");
47                 }
48             } else {
49                 Log.e(TAG, "onReceive: Invalid widget ids received for Launcher"
50                         + ", skipping restore of widget ids."
51                         + " newIds=" + Arrays.toString(newIds)
52                         + ", oldIds=" + Arrays.toString(oldIds));
53             }
54         }
55     }
56 }