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

Commit f469c4c0 authored by George Lin's avatar George Lin
Browse files

[Launcher] Hide preview bottom components when overlay tabs are shown

For deciding show/hide of the bottom components, we need to take care of 2 cases
1. When on color update, we need to set the QSB flag and re-render the
   surface
2. When show/hide the wallpaper control, we specifically send a message
   to show/hide the workspace bottom components

Test: https://drive.google.com/file/d/1z1EG6KsLKFxAlS8GBLV16GoGvwI72IHc/view?usp=sharing&resourcekey=0-OGzB0RmiK5qvV2rwMYvUHQ
Test: https://drive.google.com/file/d/1gK54Y5MuHTt2tAuFDxY7z8RIL22J5c9f/view?usp=sharing&resourcekey=0-jPPC1pl1VkCS_tib2-pVxA
Test: https://drive.google.com/file/d/1ntUSgD7KbHPDGNpomQ5zE0D2fsYVeuNA/view?usp=sharing&resourcekey=0-TCuuvL4p022ATzKYuF-Q1A
Test: https://drive.google.com/file/d/1yA1K52N-orajamnrxWD17Qg7bCclmq53/view?usp=sharing&resourcekey=0-6LHnZGM5JpFQISNJ6X7jEg
Bug: 266618769
Change-Id: I428e6f50dc71369aa8fcdee31629023709e6503f
parent f93aa98e
Loading
Loading
Loading
Loading
+13 −3
Original line number Original line Diff line number Diff line
@@ -66,6 +66,9 @@ public class GridCustomizationsProvider extends ContentProvider {


    private static final String KEY_SURFACE_PACKAGE = "surface_package";
    private static final String KEY_SURFACE_PACKAGE = "surface_package";
    private static final String KEY_CALLBACK = "callback";
    private static final String KEY_CALLBACK = "callback";
    public static final String KEY_HIDE_BOTTOM_ROW = "hide_bottom_row";

    private static final int MESSAGE_ID_UPDATE_PREVIEW = 1337;


    private final ArrayMap<IBinder, PreviewLifecycleObserver> mActivePreviews = new ArrayMap<>();
    private final ArrayMap<IBinder, PreviewLifecycleObserver> mActivePreviews = new ArrayMap<>();


@@ -224,7 +227,14 @@ public class GridCustomizationsProvider extends ContentProvider {


        @Override
        @Override
        public boolean handleMessage(Message message) {
        public boolean handleMessage(Message message) {
            if (destroyed) {
                return true;
            }
            if (message.what == MESSAGE_ID_UPDATE_PREVIEW) {
                renderer.hideBottomRow(message.getData().getBoolean(KEY_HIDE_BOTTOM_ROW));
            } else {
                destroyObserver(this);
                destroyObserver(this);
            }
            return true;
            return true;
        }
        }


+19 −0
Original line number Original line Diff line number Diff line
@@ -344,6 +344,25 @@ public class LauncherPreviewRenderer extends ContextWrapper
        return mHotseat;
        return mHotseat;
    }
    }


    /**
     * Hides the components in the bottom row.
     *
     * @param hide True to hide and false to show.
     */
    public void hideBottomRow(boolean hide) {
        mUiHandler.post(() -> {
            if (mDp.isTaskbarPresent) {
                // hotseat icons on bottom
                mHotseat.setIconsAlpha(hide ? 0 : 1);
                if (mDp.isQsbInline) {
                    mHotseat.setQsbAlpha(hide ? 0 : 1);
                }
            } else {
                mHotseat.setQsbAlpha(hide ? 0 : 1);
            }
        });
    }

    @Override
    @Override
    public CellLayout getScreenWithId(int screenId) {
    public CellLayout getScreenWithId(int screenId) {
        return mWorkspaceScreens.get(screenId);
        return mWorkspaceScreens.get(screenId);
+20 −4
Original line number Original line Diff line number Diff line
@@ -87,6 +87,8 @@ public class PreviewSurfaceRenderer {
    private final SurfaceControlViewHost mSurfaceControlViewHost;
    private final SurfaceControlViewHost mSurfaceControlViewHost;


    private boolean mDestroyed = false;
    private boolean mDestroyed = false;
    private LauncherPreviewRenderer mRenderer;
    private boolean mHideQsb;


    public PreviewSurfaceRenderer(Context context, Bundle bundle) throws Exception {
    public PreviewSurfaceRenderer(Context context, Bundle bundle) throws Exception {
        mContext = context;
        mContext = context;
@@ -97,6 +99,7 @@ public class PreviewSurfaceRenderer {
            gridName = InvariantDeviceProfile.getCurrentGridName(context);
            gridName = InvariantDeviceProfile.getCurrentGridName(context);
        }
        }
        mWallpaperColors = bundle.getParcelable(KEY_COLORS);
        mWallpaperColors = bundle.getParcelable(KEY_COLORS);
        mHideQsb = bundle.getBoolean(GridCustomizationsProvider.KEY_HIDE_BOTTOM_ROW);
        mIdp = new InvariantDeviceProfile(context, gridName);
        mIdp = new InvariantDeviceProfile(context, gridName);


        mHostToken = bundle.getBinder(KEY_HOST_TOKEN);
        mHostToken = bundle.getBinder(KEY_HOST_TOKEN);
@@ -174,6 +177,17 @@ public class PreviewSurfaceRenderer {
        MODEL_EXECUTOR.execute(this::loadModelData);
        MODEL_EXECUTOR.execute(this::loadModelData);
    }
    }


    /**
     * Hides the components in the bottom row.
     *
     * @param hide True to hide and false to show.
     */
    public void hideBottomRow(boolean hide) {
        if (mRenderer != null) {
            mRenderer.hideBottomRow(hide);
        }
    }

    @WorkerThread
    @WorkerThread
    private void loadModelData() {
    private void loadModelData() {
        final boolean migrated = doGridMigrationIfNecessary();
        final boolean migrated = doGridMigrationIfNecessary();
@@ -254,8 +268,10 @@ public class PreviewSurfaceRenderer {
        if (mDestroyed) {
        if (mDestroyed) {
            return;
            return;
        }
        }
        View view = new LauncherPreviewRenderer(inflationContext, mIdp, mWallpaperColors,
        mRenderer = new LauncherPreviewRenderer(inflationContext, mIdp,
                launcherWidgetSpanInfo).getRenderedView(dataModel, widgetProviderInfoMap);
                mWallpaperColors, launcherWidgetSpanInfo);
        mRenderer.hideBottomRow(mHideQsb);
        View view = mRenderer.getRenderedView(dataModel, widgetProviderInfoMap);
        // This aspect scales the view to fit in the surface and centers it
        // This aspect scales the view to fit in the surface and centers it
        final float scale = Math.min(mWidth / (float) view.getMeasuredWidth(),
        final float scale = Math.min(mWidth / (float) view.getMeasuredWidth(),
                mHeight / (float) view.getMeasuredHeight());
                mHeight / (float) view.getMeasuredHeight());