diff options
author | Hyunyoung Song <hyunyoungs@google.com> | 2016-02-09 02:19:43 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2016-02-09 02:19:43 +0000 |
commit | 39a98ed8038d12f40c2ce59e5347fe605ca4d258 (patch) | |
tree | 1f18eddf9e386b7f38a10c77d4937e09f30097c6 | |
parent | f87b8e3b6b51f0c35185e154bb6301adae024ece (diff) | |
parent | 747a5bc486a7c8335fc4a481cab1567369570c24 (diff) | |
download | android_packages_apps_Trebuchet-39a98ed8038d12f40c2ce59e5347fe605ca4d258.tar.gz android_packages_apps_Trebuchet-39a98ed8038d12f40c2ce59e5347fe605ca4d258.tar.bz2 android_packages_apps_Trebuchet-39a98ed8038d12f40c2ce59e5347fe605ca4d258.zip |
Merge "WidgetsModel clone method should be called in worker thread" into ub-launcher3-calgary
-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 be745202b..d8bc63176 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -138,6 +138,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 @@ -241,6 +243,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); @@ -2684,18 +2687,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"); } } }; @@ -3336,20 +3338,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()); } }); } @@ -3360,6 +3360,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)); @@ -3387,6 +3388,7 @@ public class LauncherModel extends BroadcastReceiver } } mBgWidgetsModel.setWidgetsAndShortcuts(widgetsAndShortcuts); + mFgWidgetsModel = mBgWidgetsModel.clone(); } @Thunk static boolean isPackageDisabled(Context context, String packageName, |