summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHyunyoung Song <hyunyoungs@google.com>2015-05-22 21:50:17 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-05-22 21:51:57 +0000
commit8f10dc21a08b486a07f4805adcce71b2d77d968c (patch)
treede039f666ca395f08ccaf009f66570a04e05fa67
parent5f4e0fdd2e4edeb9211e2dcd1c99497f175731f8 (diff)
parent9110d485fa12c03df3061278717efb342f1142cf (diff)
downloadandroid_packages_apps_Trebuchet-8f10dc21a08b486a07f4805adcce71b2d77d968c.tar.gz
android_packages_apps_Trebuchet-8f10dc21a08b486a07f4805adcce71b2d77d968c.tar.bz2
android_packages_apps_Trebuchet-8f10dc21a08b486a07f4805adcce71b2d77d968c.zip
Merge "Fix widget tray crash on screen rotation introduced by ag/694693" into ub-launcher3-burnaby
-rw-r--r--src/com/android/launcher3/LauncherModel.java12
-rw-r--r--src/com/android/launcher3/model/WidgetsModel.java30
2 files changed, 29 insertions, 13 deletions
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index 8d321e668..224ebbf89 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -139,6 +139,8 @@ public class LauncherModel extends BroadcastReceiver
// < only access in worker thread >
AllAppsList mBgAllAppsList;
+ // Entire list of widgets.
+ WidgetsModel mBgWidgetsModel;
// The lock that must be acquired before referencing any static bg data structures. Unlike
// other locks, this one can generally be held long-term because we never expect any of these
@@ -2768,12 +2770,14 @@ public class LauncherModel extends BroadcastReceiver
@SuppressWarnings("unchecked")
final ArrayList<AppInfo> list
= (ArrayList<AppInfo>) mBgAllAppsList.data.clone();
+ final WidgetsModel widgetList = mBgWidgetsModel.clone();
Runnable r = new Runnable() {
public void run() {
final long t = SystemClock.uptimeMillis();
final Callbacks callbacks = tryGetCallbacks(oldCallbacks);
if (callbacks != null) {
callbacks.bindAllApplications(list);
+ callbacks.bindAllPackages(widgetList);
}
if (DEBUG_LOADERS) {
Log.d(TAG, "bound all " + list.size() + " apps from cache in "
@@ -2787,8 +2791,6 @@ public class LauncherModel extends BroadcastReceiver
} else {
mHandler.post(r);
}
- loadAndBindWidgetsAndShortcuts(mApp.getContext(), tryGetCallbacks(oldCallbacks),
- false /* refresh */);
}
private void loadAllApps() {
@@ -3321,6 +3323,7 @@ public class LauncherModel extends BroadcastReceiver
public void loadAndBindWidgetsAndShortcuts(final Context context, final Callbacks callbacks,
final boolean refresh) {
+
runOnWorkerThread(new Runnable(){
@Override
public void run() {
@@ -3334,6 +3337,7 @@ public class LauncherModel extends BroadcastReceiver
}
}
});
+ mBgWidgetsModel = model;
// update the Widget entries inside DB on the worker thread.
LauncherAppState.getInstance().getWidgetCache().removeObsoletePreviews(
model.getRawList());
@@ -3342,9 +3346,9 @@ public class LauncherModel extends BroadcastReceiver
}
/**
- * Returns a list of ResolveInfos/AppWidgetInfos.
+ * Returns a list of ResolveInfos/AppWidgetInfos.
*
- * @see #loadAndBindWidgetsAndShortcuts
+ * @see #loadAndBindWidgetsAndShortcuts
*/
private WidgetsModel createWidgetsModel(Context context, boolean refresh) {
PackageManager packageManager = context.getPackageManager();
diff --git a/src/com/android/launcher3/model/WidgetsModel.java b/src/com/android/launcher3/model/WidgetsModel.java
index b72b98126..fdb9795d8 100644
--- a/src/com/android/launcher3/model/WidgetsModel.java
+++ b/src/com/android/launcher3/model/WidgetsModel.java
@@ -3,15 +3,12 @@ package com.android.launcher3.model;
import android.content.Context;
import android.content.pm.ResolveInfo;
-import android.os.Handler;
-import android.os.Process;
import android.util.Log;
import com.android.launcher3.IconCache;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherAppWidgetProviderInfo;
-import com.android.launcher3.LauncherModel;
import com.android.launcher3.Utilities;
import com.android.launcher3.compat.UserHandleCompat;
@@ -20,7 +17,6 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
-import java.util.Map;
/**
* Widgets data model that is used by the adapters of the widget views and controllers.
@@ -33,24 +29,30 @@ public class WidgetsModel {
private static final boolean DEBUG = false;
/* List of packages that is tracked by this model. */
- private List<PackageItemInfo> mPackageItemInfos = new ArrayList<>();
+ private ArrayList<PackageItemInfo> mPackageItemInfos = new ArrayList<>();
/* Map of widgets and shortcuts that are tracked per package. */
- private Map<PackageItemInfo, ArrayList<Object>> mWidgetsList = new HashMap<>();
+ private HashMap<PackageItemInfo, ArrayList<Object>> mWidgetsList = new HashMap<>();
private ArrayList<Object> mRawList;
private final Comparator mWidgetAndShortcutNameComparator;
private final Comparator mAppNameComparator;
-
private final IconCache mIconCache;
- private final Handler mWorkerHandler;
public WidgetsModel(Context context) {
mWidgetAndShortcutNameComparator = new WidgetsAndShortcutNameComparator(context);
mAppNameComparator = (new AppNameComparator(context)).getAppInfoComparator();
mIconCache = LauncherAppState.getInstance().getIconCache();
- mWorkerHandler = new Handler(LauncherModel.getWorkerLooper());
+ }
+
+ private WidgetsModel(WidgetsModel model) {
+ mPackageItemInfos = (ArrayList<PackageItemInfo>) model.mPackageItemInfos.clone();
+ mWidgetsList = (HashMap<PackageItemInfo, ArrayList<Object>>) model.mWidgetsList.clone();
+ // mRawList is not copied as should not be needed.
+ mWidgetAndShortcutNameComparator = model.mWidgetAndShortcutNameComparator;
+ mAppNameComparator = model.mAppNameComparator;
+ mIconCache = model.mIconCache;
}
// Access methods that may be deleted if the private fields are made package-private.
@@ -122,4 +124,14 @@ public class WidgetsModel {
Collections.sort(mWidgetsList.get(p), mWidgetAndShortcutNameComparator);
}
}
+
+ /**
+ * Create a snapshot of the widgets model.
+ * <p>
+ * Usage case: view binding without being modified from package updates.
+ */
+ @Override
+ public WidgetsModel clone(){
+ return new WidgetsModel(this);
+ }
} \ No newline at end of file