Loading src/com/android/launcher3/LauncherModel.java +8 −4 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 " Loading @@ -2787,8 +2791,6 @@ public class LauncherModel extends BroadcastReceiver } else { mHandler.post(r); } loadAndBindWidgetsAndShortcuts(mApp.getContext(), tryGetCallbacks(oldCallbacks), false /* refresh */); } private void loadAllApps() { Loading Loading @@ -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() { Loading @@ -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()); Loading src/com/android/launcher3/model/WidgetsModel.java +21 −9 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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. Loading @@ -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. Loading Loading @@ -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 Loading
src/com/android/launcher3/LauncherModel.java +8 −4 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 " Loading @@ -2787,8 +2791,6 @@ public class LauncherModel extends BroadcastReceiver } else { mHandler.post(r); } loadAndBindWidgetsAndShortcuts(mApp.getContext(), tryGetCallbacks(oldCallbacks), false /* refresh */); } private void loadAllApps() { Loading Loading @@ -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() { Loading @@ -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()); Loading
src/com/android/launcher3/model/WidgetsModel.java +21 −9 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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. Loading @@ -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. Loading Loading @@ -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