diff options
author | Hyunyoung Song <hyunyoungs@google.com> | 2015-05-21 13:04:53 -0700 |
---|---|---|
committer | Hyunyoung Song <hyunyoungs@google.com> | 2015-05-21 13:04:53 -0700 |
commit | 2bd3d7d1cb5e4d8d826982d11b456739fed6b817 (patch) | |
tree | 4e0ecf47c9b3ced1116d896b3b9e8487792201fb /src/com/android/launcher3/LauncherModel.java | |
parent | 3e4d5f20ba9128fcbe77b220380129be773887b3 (diff) | |
download | android_packages_apps_Trebuchet-2bd3d7d1cb5e4d8d826982d11b456739fed6b817.tar.gz android_packages_apps_Trebuchet-2bd3d7d1cb5e4d8d826982d11b456739fed6b817.tar.bz2 android_packages_apps_Trebuchet-2bd3d7d1cb5e4d8d826982d11b456739fed6b817.zip |
Load PackageItemInfo in background thread to prevent ANR
- Decoupled widget model from widget view, and placed the
creation to LauncherModel.
- As a result packagemanager operation, iconcache retrieval is all done inside
LauncherModel on background thread
b/21311085
b/21325319
Change-Id: I294698527db58b89f3da558090a367530c058776
Diffstat (limited to 'src/com/android/launcher3/LauncherModel.java')
-rw-r--r-- | src/com/android/launcher3/LauncherModel.java | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 3e05f57b9..500253826 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -58,6 +58,7 @@ import com.android.launcher3.compat.PackageInstallerCompat; import com.android.launcher3.compat.PackageInstallerCompat.PackageInstallInfo; import com.android.launcher3.compat.UserHandleCompat; import com.android.launcher3.compat.UserManagerCompat; +import com.android.launcher3.model.WidgetsModel; import com.android.launcher3.util.ComponentKey; import com.android.launcher3.util.LongArrayMap; import com.android.launcher3.util.ManagedProfileHeuristic; @@ -203,7 +204,7 @@ public class LauncherModel extends BroadcastReceiver public void bindRestoreItemsChange(HashSet<ItemInfo> updates); public void bindComponentsRemoved(ArrayList<String> packageNames, ArrayList<AppInfo> appInfos, UserHandleCompat user, int reason); - public void bindAllPackages(ArrayList<Object> widgetsAndShortcuts); + public void bindAllPackages(WidgetsModel model); public void bindSearchablesChanged(); public boolean isAllAppsButtonRank(int rank); public void onPageBoundSynchronously(int page); @@ -3344,18 +3345,19 @@ public class LauncherModel extends BroadcastReceiver runOnWorkerThread(new Runnable(){ @Override public void run() { - final ArrayList<Object> list = getWidgetsAndShortcuts(context, refresh); + final WidgetsModel model = createWidgetsModel(context, refresh); mHandler.post(new Runnable() { @Override public void run() { Callbacks cb = getCallback(); if (callbacks == cb && cb != null) { - callbacks.bindAllPackages(list); + callbacks.bindAllPackages(model); } } }); // update the Widget entries inside DB on the worker thread. - LauncherAppState.getInstance().getWidgetCache().removeObsoletePreviews(list); + LauncherAppState.getInstance().getWidgetCache().removeObsoletePreviews( + model.getRawList()); } }); } @@ -3365,13 +3367,15 @@ public class LauncherModel extends BroadcastReceiver * * @see #loadAndBindWidgetsAndShortcuts */ - private ArrayList<Object> getWidgetsAndShortcuts(Context context, boolean refresh) { + private WidgetsModel createWidgetsModel(Context context, boolean refresh) { PackageManager packageManager = context.getPackageManager(); final ArrayList<Object> widgetsAndShortcuts = new ArrayList<Object>(); widgetsAndShortcuts.addAll(getWidgetProviders(context, refresh)); Intent shortcutsIntent = new Intent(Intent.ACTION_CREATE_SHORTCUT); widgetsAndShortcuts.addAll(packageManager.queryIntentActivities(shortcutsIntent, 0)); - return widgetsAndShortcuts; + WidgetsModel model = new WidgetsModel(context); + model.addWidgetsAndShortcuts(widgetsAndShortcuts); + return model; } @Thunk static boolean isPackageDisabled(Context context, String packageName, |