summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/LauncherModel.java
diff options
context:
space:
mode:
authorHyunyoung Song <hyunyoungs@google.com>2015-05-21 13:04:53 -0700
committerHyunyoung Song <hyunyoungs@google.com>2015-05-21 13:04:53 -0700
commit2bd3d7d1cb5e4d8d826982d11b456739fed6b817 (patch)
tree4e0ecf47c9b3ced1116d896b3b9e8487792201fb /src/com/android/launcher3/LauncherModel.java
parent3e4d5f20ba9128fcbe77b220380129be773887b3 (diff)
downloadandroid_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.java16
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,