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

Commit f91c1d0e authored by Sreyas's avatar Sreyas
Browse files

Disabling OverviewActions when rotated.

Bug: 157272300
Bug: 159135247
Change-Id: I9c9eeb49b7d18c1c81a830b7a35113070e7ac793
parent ff6bc2ab
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.quickstep;
import static android.view.Surface.ROTATION_0;

import static com.android.launcher3.util.MainThreadInitializedObject.forOverride;
import static com.android.quickstep.views.OverviewActionsView.DISABLED_ROTATED;

import android.annotation.SuppressLint;
import android.content.Context;
@@ -143,8 +144,12 @@ public class TaskOverlayFactory implements ResourceBasedOverride {
        /**
         * Called when the current task is interactive for the user
         */
        public void initOverlay(Task task, ThumbnailData thumbnail, Matrix matrix) {
        public void initOverlay(Task task, ThumbnailData thumbnail, Matrix matrix,
                boolean rotated) {
            final boolean isAllowedByPolicy = thumbnail.isRealSnapshot;

            mActionsView.updateDisabledFlags(DISABLED_ROTATED, rotated);

            getActionsView().setCallbacks(new OverlayUICallbacks() {
                @Override
                public void onShare() {
+32 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import com.android.launcher3.util.MultiValueAlpha.AlphaProperty;
import com.android.quickstep.SysUINavigationMode;
import com.android.quickstep.SysUINavigationMode.Mode;
import com.android.quickstep.TaskOverlayFactory.OverlayUICallbacks;
import com.android.quickstep.util.LayoutUtils;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -67,6 +68,15 @@ public class OverviewActionsView<T extends OverlayUICallbacks> extends FrameLayo
    public static final int HIDDEN_GESTURE_RUNNING = 1 << 4;
    public static final int HIDDEN_NO_RECENTS = 1 << 5;

    @IntDef(flag = true, value = {
            DISABLED_SCROLLING,
            DISABLED_ROTATED})
    @Retention(RetentionPolicy.SOURCE)
    public @interface ActionsDisabledFlags { }

    public static final int DISABLED_SCROLLING = 1 << 0;
    public static final int DISABLED_ROTATED = 1 << 1;

    private static final int INDEX_CONTENT_ALPHA = 0;
    private static final int INDEX_VISIBILITY_ALPHA = 1;
    private static final int INDEX_FULLSCREEN_ALPHA = 2;
@@ -77,6 +87,9 @@ public class OverviewActionsView<T extends OverlayUICallbacks> extends FrameLayo
    @ActionsHiddenFlags
    private int mHiddenFlags;

    @ActionsDisabledFlags
    protected int mDisabledFlags;

    protected T mCallbacks;

    public OverviewActionsView(Context context) {
@@ -156,6 +169,25 @@ public class OverviewActionsView<T extends OverlayUICallbacks> extends FrameLayo
        setVisibility(isHidden ? INVISIBLE : VISIBLE);
    }

    /**
     * Updates the proper disabled flag to indicate whether OverviewActionsView should be enabled.
     * Ignores DISABLED_ROTATED flag for determining enabled. Flag is used to enable/disable
     * buttons individually, currently done for select button in subclass.
     *
     * @param disabledFlags The flag to update.
     * @param enable        Whether to enable the disable flag: True will cause view to be disabled.
     */
    public void updateDisabledFlags(@ActionsDisabledFlags int disabledFlags, boolean enable) {
        if (enable) {
            mDisabledFlags |= disabledFlags;
        } else {
            mDisabledFlags &= ~disabledFlags;
        }
        //
        boolean isEnabled = (mDisabledFlags & ~DISABLED_ROTATED) == 0;
        LayoutUtils.setViewEnabled(this, isEnabled);
    }

    public AlphaProperty getContentAlpha() {
        return mMultiValueAlpha.getProperty(INDEX_CONTENT_ALPHA);
    }
+2 −3
Original line number Diff line number Diff line
@@ -622,14 +622,14 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
    @Override
    protected void onPageBeginTransition() {
        super.onPageBeginTransition();
        LayoutUtils.setViewEnabled(mActionsView, false);
        mActionsView.updateDisabledFlags(OverviewActionsView.DISABLED_SCROLLING, true);
    }

    @Override
    protected void onPageEndTransition() {
        super.onPageEndTransition();
        if (isClearAllHidden()) {
            LayoutUtils.setViewEnabled(mActionsView, true);
            mActionsView.updateDisabledFlags(OverviewActionsView.DISABLED_SCROLLING, false);
        }
        if (getNextPage() > 0) {
            setSwipeDownShouldLaunchApp(true);
@@ -2216,7 +2216,6 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
        boolean inPlaceLandscape = !mOrientationState.canLauncherRotate()
                && mOrientationState.getTouchRotation() != ROTATION_0;
        mActionsView.updateHiddenFlags(HIDDEN_NON_ZERO_ROTATION, modalness < 1 && inPlaceLandscape);
        LayoutUtils.setViewEnabled(mActionsView, true);
    }

    @Nullable
+3 −4
Original line number Diff line number Diff line
@@ -357,10 +357,9 @@ public class TaskThumbnailView extends View implements PluginListener<OverviewSc
    }

    private void updateOverlay() {
        // The overlay doesn't really work when the screenshot is rotated, so don't add it.
        if (mOverlayEnabled && !mPreviewPositionHelper.mIsOrientationChanged
                && mBitmapShader != null && mThumbnailData != null) {
            mOverlay.initOverlay(mTask, mThumbnailData, mPreviewPositionHelper.mMatrix);
        if (mOverlayEnabled && mBitmapShader != null && mThumbnailData != null) {
            mOverlay.initOverlay(mTask, mThumbnailData, mPreviewPositionHelper.mMatrix,
                    mPreviewPositionHelper.mIsOrientationChanged);
        } else {
            mOverlay.reset();
        }
+6 −9
Original line number Diff line number Diff line
@@ -74,17 +74,14 @@ public class LayoutUtils {

    /**
     * Recursively sets view and all children enabled/disabled.
     * @param viewGroup Top most parent view to change.
     * @param view Top most parent view to change.
     * @param enabled True = enable, False = disable.
     */
    public static void setViewEnabled(ViewGroup viewGroup, boolean enabled) {
        viewGroup.setEnabled(enabled);
        for (int i = 0; i < viewGroup.getChildCount(); i++) {
            View child = viewGroup.getChildAt(i);
            if (child instanceof ViewGroup) {
                setViewEnabled((ViewGroup) child, enabled);
            } else {
                child.setEnabled(enabled);
    public static void setViewEnabled(View view, boolean enabled) {
        view.setEnabled(enabled);
        if (view instanceof ViewGroup) {
            for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
                setViewEnabled(((ViewGroup) view).getChildAt(i), enabled);
            }
        }
    }