Improve grid preview performance am: b023873bc3

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/12153148

Change-Id: I00c2cee5ddcbd27201de2043408109e553c3434b
This commit is contained in:
Tracy Zhou
2020-07-17 19:20:26 +00:00
committed by Automerger Merge Worker
2 changed files with 42 additions and 12 deletions
@@ -28,6 +28,7 @@ import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
import android.annotation.TargetApi; import android.annotation.TargetApi;
import android.app.Fragment; import android.app.Fragment;
import android.appwidget.AppWidgetHostView; import android.appwidget.AppWidgetHostView;
import android.appwidget.AppWidgetProviderInfo;
import android.content.Context; import android.content.Context;
import android.content.ContextWrapper; import android.content.ContextWrapper;
import android.content.Intent; import android.content.Intent;
@@ -56,6 +57,7 @@ import com.android.launcher3.Hotseat;
import com.android.launcher3.InsettableFrameLayout; import com.android.launcher3.InsettableFrameLayout;
import com.android.launcher3.InvariantDeviceProfile; import com.android.launcher3.InvariantDeviceProfile;
import com.android.launcher3.LauncherAppState; import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherAppWidgetProviderInfo;
import com.android.launcher3.LauncherModel; import com.android.launcher3.LauncherModel;
import com.android.launcher3.LauncherSettings; import com.android.launcher3.LauncherSettings;
import com.android.launcher3.LauncherSettings.Favorites; import com.android.launcher3.LauncherSettings.Favorites;
@@ -83,6 +85,7 @@ import com.android.launcher3.pm.InstallSessionHelper;
import com.android.launcher3.pm.UserCache; import com.android.launcher3.pm.UserCache;
import com.android.launcher3.uioverrides.PredictedAppIconInflater; import com.android.launcher3.uioverrides.PredictedAppIconInflater;
import com.android.launcher3.uioverrides.plugins.PluginManagerWrapper; import com.android.launcher3.uioverrides.plugins.PluginManagerWrapper;
import com.android.launcher3.util.ComponentKey;
import com.android.launcher3.util.IntArray; import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.MainThreadInitializedObject; import com.android.launcher3.util.MainThreadInitializedObject;
import com.android.launcher3.views.ActivityContext; import com.android.launcher3.views.ActivityContext;
@@ -339,14 +342,33 @@ public class LauncherPreviewRenderer {
addInScreenFromBind(folderIcon, info); addInScreenFromBind(folderIcon, info);
} }
private void inflateAndAddWidgets(LauncherAppWidgetInfo info,
Map<ComponentKey, AppWidgetProviderInfo> widgetProviderInfoMap) {
if (widgetProviderInfoMap == null) {
return;
}
AppWidgetProviderInfo providerInfo = widgetProviderInfoMap.get(
new ComponentKey(info.providerName, info.user));
if (providerInfo == null) {
return;
}
inflateAndAddWidgets(info, LauncherAppWidgetProviderInfo.fromProviderInfo(
getApplicationContext(), providerInfo));
}
private void inflateAndAddWidgets(LauncherAppWidgetInfo info, WidgetsModel widgetsModel) { private void inflateAndAddWidgets(LauncherAppWidgetInfo info, WidgetsModel widgetsModel) {
WidgetItem widgetItem = widgetsModel.getWidgetProviderInfoByProviderName( WidgetItem widgetItem = widgetsModel.getWidgetProviderInfoByProviderName(
info.providerName); info.providerName);
if (widgetItem == null) { if (widgetItem == null) {
return; return;
} }
inflateAndAddWidgets(info, widgetItem.widgetInfo);
}
private void inflateAndAddWidgets(LauncherAppWidgetInfo info,
LauncherAppWidgetProviderInfo providerInfo) {
AppWidgetHostView view = new AppWidgetHostView(mContext); AppWidgetHostView view = new AppWidgetHostView(mContext);
view.setAppWidget(-1, widgetItem.widgetInfo); view.setAppWidget(-1, providerInfo);
view.updateAppWidget(null); view.updateAppWidget(null);
view.setTag(info); view.setTag(info);
addInScreenFromBind(view, info); addInScreenFromBind(view, info);
@@ -433,8 +455,13 @@ public class LauncherPreviewRenderer {
switch (itemInfo.itemType) { switch (itemInfo.itemType) {
case Favorites.ITEM_TYPE_APPWIDGET: case Favorites.ITEM_TYPE_APPWIDGET:
case Favorites.ITEM_TYPE_CUSTOM_APPWIDGET: case Favorites.ITEM_TYPE_CUSTOM_APPWIDGET:
inflateAndAddWidgets((LauncherAppWidgetInfo) itemInfo, if (mMigrated) {
workspaceResult.mWidgetsModel); inflateAndAddWidgets((LauncherAppWidgetInfo) itemInfo,
workspaceResult.mWidgetProvidersMap);
} else {
inflateAndAddWidgets((LauncherAppWidgetInfo) itemInfo,
workspaceResult.mWidgetsModel);
}
break; break;
default: default:
break; break;
@@ -542,7 +569,7 @@ public class LauncherPreviewRenderer {
} }
return new WorkspaceResult(mBgDataModel.workspaceItems, mBgDataModel.appWidgets, return new WorkspaceResult(mBgDataModel.workspaceItems, mBgDataModel.appWidgets,
mBgDataModel.cachedPredictedItems, mBgDataModel.widgetsModel); mBgDataModel.cachedPredictedItems, mBgDataModel.widgetsModel, null);
} }
} }
@@ -569,9 +596,8 @@ public class LauncherPreviewRenderer {
public WorkspaceResult call() throws Exception { public WorkspaceResult call() throws Exception {
List<ShortcutInfo> allShortcuts = new ArrayList<>(); List<ShortcutInfo> allShortcuts = new ArrayList<>();
loadWorkspace(allShortcuts, LauncherSettings.Favorites.PREVIEW_CONTENT_URI); loadWorkspace(allShortcuts, LauncherSettings.Favorites.PREVIEW_CONTENT_URI);
mBgDataModel.widgetsModel.update(mApp, null);
return new WorkspaceResult(mBgDataModel.workspaceItems, mBgDataModel.appWidgets, return new WorkspaceResult(mBgDataModel.workspaceItems, mBgDataModel.appWidgets,
mBgDataModel.cachedPredictedItems, mBgDataModel.widgetsModel); mBgDataModel.cachedPredictedItems, null, mWidgetProvidersMap);
} }
} }
@@ -593,14 +619,17 @@ public class LauncherPreviewRenderer {
private final ArrayList<LauncherAppWidgetInfo> mAppWidgets; private final ArrayList<LauncherAppWidgetInfo> mAppWidgets;
private final ArrayList<AppInfo> mCachedPredictedItems; private final ArrayList<AppInfo> mCachedPredictedItems;
private final WidgetsModel mWidgetsModel; private final WidgetsModel mWidgetsModel;
private final Map<ComponentKey, AppWidgetProviderInfo> mWidgetProvidersMap;
private WorkspaceResult(ArrayList<ItemInfo> workspaceItems, private WorkspaceResult(ArrayList<ItemInfo> workspaceItems,
ArrayList<LauncherAppWidgetInfo> appWidgets, ArrayList<LauncherAppWidgetInfo> appWidgets,
ArrayList<AppInfo> cachedPredictedItems, WidgetsModel widgetsModel) { ArrayList<AppInfo> cachedPredictedItems, WidgetsModel widgetsModel,
Map<ComponentKey, AppWidgetProviderInfo> widgetProviderInfoMap) {
mWorkspaceItems = workspaceItems; mWorkspaceItems = workspaceItems;
mAppWidgets = appWidgets; mAppWidgets = appWidgets;
mCachedPredictedItems = cachedPredictedItems; mCachedPredictedItems = cachedPredictedItems;
mWidgetsModel = widgetsModel; mWidgetsModel = widgetsModel;
mWidgetProvidersMap = widgetProviderInfoMap;
} }
} }
} }
@@ -126,6 +126,8 @@ public class LoaderTask implements Runnable {
private final UserManagerState mUserManagerState = new UserManagerState(); private final UserManagerState mUserManagerState = new UserManagerState();
protected Map<ComponentKey, AppWidgetProviderInfo> mWidgetProvidersMap;
private boolean mStopped; private boolean mStopped;
public LoaderTask(LauncherAppState app, AllAppsList bgAllAppsList, BgDataModel dataModel, public LoaderTask(LauncherAppState app, AllAppsList bgAllAppsList, BgDataModel dataModel,
@@ -342,8 +344,6 @@ public class LoaderTask implements Runnable {
contentResolver.query(contentUri, null, null, null, null), contentUri, mApp, contentResolver.query(contentUri, null, null, null, null), contentUri, mApp,
mUserManagerState); mUserManagerState);
Map<ComponentKey, AppWidgetProviderInfo> widgetProvidersMap = null;
try { try {
final int appWidgetIdIndex = c.getColumnIndexOrThrow( final int appWidgetIdIndex = c.getColumnIndexOrThrow(
LauncherSettings.Favorites.APPWIDGET_ID); LauncherSettings.Favorites.APPWIDGET_ID);
@@ -650,10 +650,11 @@ public class LoaderTask implements Runnable {
final boolean wasProviderReady = !c.hasRestoreFlag( final boolean wasProviderReady = !c.hasRestoreFlag(
LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY); LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY);
if (widgetProvidersMap == null) { if (mWidgetProvidersMap == null) {
widgetProvidersMap = WidgetManagerHelper.getAllProvidersMap(context); mWidgetProvidersMap = WidgetManagerHelper.getAllProvidersMap(
context);
} }
final AppWidgetProviderInfo provider = widgetProvidersMap.get( final AppWidgetProviderInfo provider = mWidgetProvidersMap.get(
new ComponentKey(component, c.user)); new ComponentKey(component, c.user));
final boolean isProviderReady = isValidProvider(provider); final boolean isProviderReady = isValidProvider(provider);