Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4a4a3d82 authored by Tracy Zhou's avatar Tracy Zhou Committed by Automerger Merge Worker
Browse files

Merge "Improve grid preview performance" into rvc-d1-dev am: 8951db2d am:...

Merge "Improve grid preview performance" into rvc-d1-dev am: 8951db2d am: 3f6c8951 am: 70daac0c

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

Change-Id: I1b7d699e39cbc981550657add53c9b49560c477f
parents 5412f0f8 70daac0c
Loading
Loading
Loading
Loading
+36 −7
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
import android.annotation.TargetApi;
import android.app.Fragment;
import android.appwidget.AppWidgetHostView;
import android.appwidget.AppWidgetProviderInfo;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
@@ -56,6 +57,7 @@ import com.android.launcher3.Hotseat;
import com.android.launcher3.InsettableFrameLayout;
import com.android.launcher3.InvariantDeviceProfile;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherAppWidgetProviderInfo;
import com.android.launcher3.LauncherModel;
import com.android.launcher3.LauncherSettings;
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.uioverrides.PredictedAppIconInflater;
import com.android.launcher3.uioverrides.plugins.PluginManagerWrapper;
import com.android.launcher3.util.ComponentKey;
import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.MainThreadInitializedObject;
import com.android.launcher3.views.ActivityContext;
@@ -339,14 +342,33 @@ public class LauncherPreviewRenderer {
            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) {
            WidgetItem widgetItem = widgetsModel.getWidgetProviderInfoByProviderName(
                    info.providerName);
            if (widgetItem == null) {
                return;
            }
            inflateAndAddWidgets(info, widgetItem.widgetInfo);
        }

        private void inflateAndAddWidgets(LauncherAppWidgetInfo info,
                LauncherAppWidgetProviderInfo providerInfo) {
            AppWidgetHostView view = new AppWidgetHostView(mContext);
            view.setAppWidget(-1, widgetItem.widgetInfo);
            view.setAppWidget(-1, providerInfo);
            view.updateAppWidget(null);
            view.setTag(info);
            addInScreenFromBind(view, info);
@@ -433,8 +455,13 @@ public class LauncherPreviewRenderer {
                    switch (itemInfo.itemType) {
                        case Favorites.ITEM_TYPE_APPWIDGET:
                        case Favorites.ITEM_TYPE_CUSTOM_APPWIDGET:
                            if (mMigrated) {
                                inflateAndAddWidgets((LauncherAppWidgetInfo) itemInfo,
                                        workspaceResult.mWidgetProvidersMap);
                            } else {
                                inflateAndAddWidgets((LauncherAppWidgetInfo) itemInfo,
                                        workspaceResult.mWidgetsModel);
                            }
                            break;
                        default:
                            break;
@@ -542,7 +569,7 @@ public class LauncherPreviewRenderer {
            }

            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 {
            List<ShortcutInfo> allShortcuts = new ArrayList<>();
            loadWorkspace(allShortcuts, LauncherSettings.Favorites.PREVIEW_CONTENT_URI);
            mBgDataModel.widgetsModel.update(mApp, null);
            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<AppInfo> mCachedPredictedItems;
        private final WidgetsModel mWidgetsModel;
        private final Map<ComponentKey, AppWidgetProviderInfo> mWidgetProvidersMap;

        private WorkspaceResult(ArrayList<ItemInfo> workspaceItems,
                ArrayList<LauncherAppWidgetInfo> appWidgets,
                ArrayList<AppInfo> cachedPredictedItems, WidgetsModel widgetsModel) {
                ArrayList<AppInfo> cachedPredictedItems, WidgetsModel widgetsModel,
                Map<ComponentKey, AppWidgetProviderInfo> widgetProviderInfoMap) {
            mWorkspaceItems = workspaceItems;
            mAppWidgets = appWidgets;
            mCachedPredictedItems = cachedPredictedItems;
            mWidgetsModel = widgetsModel;
            mWidgetProvidersMap = widgetProviderInfoMap;
        }
    }
}
+6 −5
Original line number Diff line number Diff line
@@ -126,6 +126,8 @@ public class LoaderTask implements Runnable {

    private final UserManagerState mUserManagerState = new UserManagerState();

    protected Map<ComponentKey, AppWidgetProviderInfo> mWidgetProvidersMap;

    private boolean mStopped;

    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,
                    mUserManagerState);

            Map<ComponentKey, AppWidgetProviderInfo> widgetProvidersMap = null;

            try {
                final int appWidgetIdIndex = c.getColumnIndexOrThrow(
                        LauncherSettings.Favorites.APPWIDGET_ID);
@@ -650,10 +650,11 @@ public class LoaderTask implements Runnable {
                            final boolean wasProviderReady = !c.hasRestoreFlag(
                                    LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY);

                            if (widgetProvidersMap == null) {
                                widgetProvidersMap = WidgetManagerHelper.getAllProvidersMap(context);
                            if (mWidgetProvidersMap == null) {
                                mWidgetProvidersMap = WidgetManagerHelper.getAllProvidersMap(
                                        context);
                            }
                            final AppWidgetProviderInfo provider = widgetProvidersMap.get(
                            final AppWidgetProviderInfo provider = mWidgetProvidersMap.get(
                                    new ComponentKey(component, c.user));

                            final boolean isProviderReady = isValidProvider(provider);