Merge "Fix widget tray crash on screen rotation introduced by ag/694693" into ub-launcher3-burnaby
This commit is contained in:
committed by
Android (Google) Code Review
commit
8f10dc21a0
@@ -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
|
||||
@@ -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 "
|
||||
@@ -2787,8 +2791,6 @@ public class LauncherModel extends BroadcastReceiver
|
||||
} else {
|
||||
mHandler.post(r);
|
||||
}
|
||||
loadAndBindWidgetsAndShortcuts(mApp.getContext(), tryGetCallbacks(oldCallbacks),
|
||||
false /* refresh */);
|
||||
}
|
||||
|
||||
private void loadAllApps() {
|
||||
@@ -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() {
|
||||
@@ -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());
|
||||
@@ -3342,9 +3346,9 @@ public class LauncherModel extends BroadcastReceiver
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of ResolveInfos/AppWidgetInfos.
|
||||
* Returns a list of ResolveInfos/AppWidgetInfos.
|
||||
*
|
||||
* @see #loadAndBindWidgetsAndShortcuts
|
||||
* @see #loadAndBindWidgetsAndShortcuts
|
||||
*/
|
||||
private WidgetsModel createWidgetsModel(Context context, boolean refresh) {
|
||||
PackageManager packageManager = context.getPackageManager();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user