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:
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user