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

Commit a9f95517 authored by Andy Wickham's avatar Andy Wickham Committed by Android (Google) Code Review
Browse files

Merge "Refactors LauncherPreviewRenderer to better support subclassing." into ub-launcher3-master

parents 895ece29 a310e9c0
Loading
Loading
Loading
Loading
+244 −244
Original line number Diff line number Diff line
@@ -117,7 +117,8 @@ import java.util.concurrent.TimeoutException;
 *   4) Measure and draw the view on a canvas
 */
@TargetApi(Build.VERSION_CODES.O)
public class LauncherPreviewRenderer {
public class LauncherPreviewRenderer extends ContextThemeWrapper
        implements ActivityContext, WorkspaceLayoutManager, LayoutInflater.Factory2 {

    private static final String TAG = "LauncherPreviewRenderer";

@@ -211,10 +212,14 @@ public class LauncherPreviewRenderer {
    private final DeviceProfile mDp;
    private final boolean mMigrated;
    private final Rect mInsets;

    private final WorkspaceItemInfo mWorkspaceItemInfo;
    private final LayoutInflater mHomeElementInflater;
    private final InsettableFrameLayout mRootView;
    private final Hotseat mHotseat;
    private final CellLayout mWorkspace;

    public LauncherPreviewRenderer(Context context, InvariantDeviceProfile idp, boolean migrated) {
        super(context, R.style.AppTheme);
        mUiHandler = new Handler(Looper.getMainLooper());
        mContext = context;
        mIdp = idp;
@@ -239,26 +244,6 @@ public class LauncherPreviewRenderer {
        mWorkspaceItemInfo.intent = new Intent();
        mWorkspaceItemInfo.contentDescription = mWorkspaceItemInfo.title =
                context.getString(R.string.label_application);
    }

    /** Populate preview and render it. */
    public View getRenderedView() {
        MainThreadRenderer renderer = new MainThreadRenderer(mContext);
        renderer.populate();
        return renderer.mRootView;
    }

    private class MainThreadRenderer extends ContextThemeWrapper
            implements ActivityContext, WorkspaceLayoutManager, LayoutInflater.Factory2 {

        private final LayoutInflater mHomeElementInflater;
        private final InsettableFrameLayout mRootView;

        private final Hotseat mHotseat;
        private final CellLayout mWorkspace;

        MainThreadRenderer(Context context) {
            super(context, R.style.AppTheme);

        mHomeElementInflater = LayoutInflater.from(
                new ContextThemeWrapper(this, R.style.HomeScreenElementTheme));
@@ -279,6 +264,20 @@ public class LauncherPreviewRenderer {
                mDp.workspacePadding.bottom);
    }

    /** Populate preview and render it. */
    public View getRenderedView() {
        populate();
        return mRootView;
    }

    public boolean shouldShowRealLauncherPreview() {
        return ENABLE_LAUNCHER_PREVIEW_IN_GRID_PICKER.get();
    }

    public boolean shouldShowQsb() {
        return FeatureFlags.QSB_ON_FIRST_SCREEN;
    }

    @Override
    public View onCreateView(View parent, String name, Context context, AttributeSet attrs) {
        if ("TextClock".equals(name)) {
@@ -343,7 +342,8 @@ public class LauncherPreviewRenderer {
        addInScreenFromBind(folderIcon, info);
    }

        private void inflateAndAddWidgets(LauncherAppWidgetInfo info,
    private void inflateAndAddWidgets(
            LauncherAppWidgetInfo info,
            Map<ComponentKey, AppWidgetProviderInfo> widgetProviderInfoMap) {
        if (widgetProviderInfoMap == null) {
            return;
@@ -366,8 +366,8 @@ public class LauncherPreviewRenderer {
        inflateAndAddWidgets(info, widgetItem.widgetInfo);
    }

        private void inflateAndAddWidgets(LauncherAppWidgetInfo info,
                LauncherAppWidgetProviderInfo providerInfo) {
    private void inflateAndAddWidgets(
            LauncherAppWidgetInfo info, LauncherAppWidgetProviderInfo providerInfo) {
        AppWidgetHostView view = new AppWidgetHostView(mContext);
        view.setAppWidget(-1, providerInfo);
        view.updateAppWidget(null);
@@ -401,7 +401,7 @@ public class LauncherPreviewRenderer {
    }

    private void populate() {
            if (ENABLE_LAUNCHER_PREVIEW_IN_GRID_PICKER.get()) {
        if (shouldShowRealLauncherPreview()) {
            WorkspaceFetcher fetcher;
            PreviewContext previewContext = null;
            if (mMigrated) {
@@ -424,20 +424,17 @@ public class LauncherPreviewRenderer {
                return;
            }

                // Separate the items that are on the current screen, and all the other remaining
                // items
            // Separate the items that are on the current screen, and the other remaining items.
            ArrayList<ItemInfo> currentWorkspaceItems = new ArrayList<>();
            ArrayList<ItemInfo> otherWorkspaceItems = new ArrayList<>();
            ArrayList<LauncherAppWidgetInfo> currentAppWidgets = new ArrayList<>();
            ArrayList<LauncherAppWidgetInfo> otherAppWidgets = new ArrayList<>();

            filterCurrentWorkspaceItems(0 /* currentScreenId */,
                    workspaceResult.mWorkspaceItems, currentWorkspaceItems,
                    otherWorkspaceItems);
            filterCurrentWorkspaceItems(0 /* currentScreenId */, workspaceResult.mAppWidgets,
                    currentAppWidgets, otherAppWidgets);
            sortWorkspaceItemsSpatially(mIdp, currentWorkspaceItems);

            for (ItemInfo itemInfo : currentWorkspaceItems) {
                switch (itemInfo.itemType) {
                    case Favorites.ITEM_TYPE_APPLICATION:
@@ -445,7 +442,7 @@ public class LauncherPreviewRenderer {
                    case Favorites.ITEM_TYPE_DEEP_SHORTCUT:
                        inflateAndAddIcon((WorkspaceItemInfo) itemInfo);
                        break;
                        case LauncherSettings.Favorites.ITEM_TYPE_FOLDER:
                    case Favorites.ITEM_TYPE_FOLDER:
                        inflateAndAddFolder((FolderInfo) itemInfo);
                        break;
                    default:
@@ -468,7 +465,6 @@ public class LauncherPreviewRenderer {
                        break;
                }
            }

            IntArray ranks = getMissingHotseatRanks(currentWorkspaceItems,
                    mIdp.numHotseatIcons);
            int count = Math.min(ranks.size(), workspaceResult.mCachedPredictedItems.size());
@@ -476,7 +472,7 @@ public class LauncherPreviewRenderer {
                AppInfo appInfo = workspaceResult.mCachedPredictedItems.get(i);
                int rank = ranks.get(i);
                WorkspaceItemInfo itemInfo = new WorkspaceItemInfo(appInfo);
                    itemInfo.container = LauncherSettings.Favorites.CONTAINER_HOTSEAT_PREDICTION;
                itemInfo.container = Favorites.CONTAINER_HOTSEAT_PREDICTION;
                itemInfo.rank = rank;
                itemInfo.cellX = mHotseat.getCellXFromOrder(rank);
                itemInfo.cellY = mHotseat.getCellYFromOrder(rank);
@@ -503,7 +499,7 @@ public class LauncherPreviewRenderer {
        }

        // Add first page QSB
            if (FeatureFlags.QSB_ON_FIRST_SCREEN) {
        if (shouldShowQsb()) {
            View qsb = mHomeElementInflater.inflate(
                    R.layout.search_container_workspace, mWorkspace, false);
            CellLayout.LayoutParams lp =
@@ -517,6 +513,11 @@ public class LauncherPreviewRenderer {
                mRootView.findViewById(R.id.search_container_all_apps);
        mRootView.findViewById(R.id.apps_view).setTranslationY(
                mDp.heightPx - searchUiManager.getScrollRangeDelta(mInsets));
        ViewGroup searchView = (ViewGroup) searchUiManager;
        searchView.setEnabled(false);
        for (int i = 0; i < searchView.getChildCount(); i++) {
            searchView.getChildAt(i).setEnabled(false);
        }

        measureView(mRootView, mDp.widthPx, mDp.heightPx);
        dispatchVisibilityAggregated(mRootView, true);
@@ -524,7 +525,6 @@ public class LauncherPreviewRenderer {
        // Additional measure for views which use auto text size API
        measureView(mRootView, mDp.widthPx, mDp.heightPx);
    }
    }

    private static void measureView(View view, int width, int height) {
        view.measure(makeMeasureSpec(width, EXACTLY), makeMeasureSpec(height, EXACTLY));