diff options
author | Hyunyoung Song <hyunyoungs@google.com> | 2016-02-08 11:31:33 -0800 |
---|---|---|
committer | Hyunyoung Song <hyunyoungs@google.com> | 2016-02-09 02:19:59 +0000 |
commit | f97083245c440e0c09e2485094157bb8389cdd95 (patch) | |
tree | 5b2f74512bae810fb74c46f69cf978ce072b260a | |
parent | a27d7a5a194846a3c98fa69495e627db2343f6db (diff) | |
download | android_packages_apps_Trebuchet-f97083245c440e0c09e2485094157bb8389cdd95.tar.gz android_packages_apps_Trebuchet-f97083245c440e0c09e2485094157bb8389cdd95.tar.bz2 android_packages_apps_Trebuchet-f97083245c440e0c09e2485094157bb8389cdd95.zip |
WidgetsModel clone method should be called in worker thread
b/24582368
Change-Id: I7b1d2ccfa7d7ac8235e4aeccc2b6b1a8eeea6461
(cherry picked from commit 747a5bc486a7c8335fc4a481cab1567369570c24)
-rw-r--r-- | src/com/android/launcher3/LauncherModel.java | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index a34e00127..774cca459 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -141,6 +141,8 @@ public class LauncherModel extends BroadcastReceiver AllAppsList mBgAllAppsList; // Entire list of widgets. WidgetsModel mBgWidgetsModel; + // Keep a clone of widgets that can be accessed from non-worker thread. + WidgetsModel mFgWidgetsModel; // 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 @@ -243,6 +245,7 @@ public class LauncherModel extends BroadcastReceiver mApp = app; mBgAllAppsList = new AllAppsList(iconCache, appFilter); mBgWidgetsModel = new WidgetsModel(context, iconCache, appFilter); + mFgWidgetsModel = mBgWidgetsModel.clone(); mIconCache = iconCache; mLauncherApps = LauncherAppsCompat.getInstance(context); @@ -2757,18 +2760,17 @@ 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); + callbacks.bindAllPackages(mFgWidgetsModel); } if (DEBUG_LOADERS) { Log.d(TAG, "bound all " + list.size() + " apps from cache in " - + (SystemClock.uptimeMillis()-t) + "ms"); + + (SystemClock.uptimeMillis() - t) + "ms"); } } }; @@ -3403,20 +3405,18 @@ public class LauncherModel extends BroadcastReceiver @Override public void run() { updateWidgetsModel(refresh); - final WidgetsModel model = mBgWidgetsModel.clone(); - mHandler.post(new Runnable() { @Override public void run() { Callbacks cb = getCallback(); if (callbacks == cb && cb != null) { - callbacks.bindAllPackages(model); + callbacks.bindAllPackages(mFgWidgetsModel); } } }); // update the Widget entries inside DB on the worker thread. LauncherAppState.getInstance().getWidgetCache().removeObsoletePreviews( - model.getRawList()); + mFgWidgetsModel.getRawList()); } }); } @@ -3427,6 +3427,7 @@ public class LauncherModel extends BroadcastReceiver * @see #loadAndBindWidgetsAndShortcuts */ @Thunk void updateWidgetsModel(boolean refresh) { + Utilities.assertWorkerThread(); PackageManager packageManager = mApp.getContext().getPackageManager(); final ArrayList<Object> widgetsAndShortcuts = new ArrayList<Object>(); widgetsAndShortcuts.addAll(getWidgetProviders(mApp.getContext(), refresh)); @@ -3454,6 +3455,7 @@ public class LauncherModel extends BroadcastReceiver } } mBgWidgetsModel.setWidgetsAndShortcuts(widgetsAndShortcuts); + mFgWidgetsModel = mBgWidgetsModel.clone(); } @Thunk static boolean isPackageDisabled(Context context, String packageName, |