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

Commit 707aca0d authored by Jorge Gil's avatar Jorge Gil
Browse files

Disable Maximize Menu when in desktop's immersive

Disables hover to open or long click to open the maximize menu when in
desktop immersive mode.

Flag: com.android.window.flags.enable_fully_immersive_in_desktop
Bug: 372319957
Test: enter desktop immersive, click/hover over button, verify it does
not open the maximize menu

Change-Id: Ia7faebd505318ae5be10dc5df3cf12a611c848d7
parent 691e8f28
Loading
Loading
Loading
Loading
+24 −4
Original line number Diff line number Diff line
@@ -514,8 +514,12 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
            ));
        } else {
            mWindowDecorViewHolder.bindData(new AppHeaderViewHolder.HeaderData(
                    mTaskInfo, TaskInfoKt.getRequestingImmersive(mTaskInfo), inFullImmersive,
                    hasGlobalFocus
                    mTaskInfo,
                    TaskInfoKt.getRequestingImmersive(mTaskInfo),
                    inFullImmersive,
                    hasGlobalFocus,
                    /* maximizeHoverEnabled= */ canOpenMaximizeMenu(
                            /* animatingTaskResizeOrReposition= */ false)
            ));
        }
        Trace.endSection();
@@ -1616,8 +1620,14 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin

    void setAnimatingTaskResizeOrReposition(boolean animatingTaskResizeOrReposition) {
        if (mRelayoutParams.mLayoutResId == R.layout.desktop_mode_app_handle) return;
        asAppHeader(mWindowDecorViewHolder)
                .setAnimatingTaskResizeOrReposition(animatingTaskResizeOrReposition);
        final boolean inFullImmersive =
                mDesktopRepository.isTaskInFullImmersiveState(mTaskInfo.taskId);
        asAppHeader(mWindowDecorViewHolder).bindData(new AppHeaderViewHolder.HeaderData(
                mTaskInfo,
                TaskInfoKt.getRequestingImmersive(mTaskInfo),
                inFullImmersive,
                isFocused(),
                /* maximizeHoverEnabled= */ canOpenMaximizeMenu(animatingTaskResizeOrReposition)));
    }

    /**
@@ -1634,6 +1644,16 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
        asAppHeader(mWindowDecorViewHolder).onMaximizeWindowHoverEnter();
    }

    private boolean canOpenMaximizeMenu(boolean animatingTaskResizeOrReposition) {
        if (!Flags.enableFullyImmersiveInDesktop()) {
            return !animatingTaskResizeOrReposition;
        }
        final boolean inImmersiveAndRequesting =
                mDesktopRepository.isTaskInFullImmersiveState(mTaskInfo.taskId)
                        && TaskInfoKt.getRequestingImmersive(mTaskInfo);
        return !animatingTaskResizeOrReposition && !inImmersiveAndRequesting;
    }

    @Override
    public String toString() {
        return "{"
+36 −16
Original line number Diff line number Diff line
@@ -70,7 +70,7 @@ class AppHeaderViewHolder(
        rootView: View,
        onCaptionTouchListener: View.OnTouchListener,
        onCaptionButtonClickListener: View.OnClickListener,
        onLongClickListener: OnLongClickListener,
        private val onLongClickListener: OnLongClickListener,
        onCaptionGenericMotionListener: View.OnGenericMotionListener,
        appName: CharSequence,
        appIconBitmap: Bitmap,
@@ -81,7 +81,8 @@ class AppHeaderViewHolder(
        val taskInfo: RunningTaskInfo,
        val isRequestingImmersive: Boolean,
        val inFullImmersiveState: Boolean,
        val hasGlobalFocus: Boolean
        val hasGlobalFocus: Boolean,
        val enableMaximizeLongClick: Boolean,
    ) : Data()

    private val decorThemeUtil = DecorThemeUtil(context)
@@ -160,19 +161,30 @@ class AppHeaderViewHolder(
    }

    override fun bindData(data: HeaderData) {
        bindData(data.taskInfo, data.isRequestingImmersive, data.inFullImmersiveState,
            data.hasGlobalFocus)
        bindData(
            data.taskInfo,
            data.isRequestingImmersive,
            data.inFullImmersiveState,
            data.hasGlobalFocus,
            data.enableMaximizeLongClick
        )
    }

    private fun bindData(
        taskInfo: RunningTaskInfo,
        isRequestingImmersive: Boolean,
        inFullImmersiveState: Boolean,
        hasGlobalFocus: Boolean
        hasGlobalFocus: Boolean,
        enableMaximizeLongClick: Boolean,
    ) {
        if (DesktopModeFlags.ENABLE_THEMED_APP_HEADERS.isTrue()) {
            bindDataWithThemedHeaders(taskInfo, isRequestingImmersive, inFullImmersiveState,
                hasGlobalFocus)
            bindDataWithThemedHeaders(
                taskInfo,
                isRequestingImmersive,
                inFullImmersiveState,
                hasGlobalFocus,
                enableMaximizeLongClick,
            )
        } else {
            bindDataLegacy(taskInfo, hasGlobalFocus)
        }
@@ -215,7 +227,8 @@ class AppHeaderViewHolder(
        taskInfo: RunningTaskInfo,
        requestingImmersive: Boolean,
        inFullImmersiveState: Boolean,
        hasGlobalFocus: Boolean
        hasGlobalFocus: Boolean,
        enableMaximizeLongClick: Boolean,
    ) {
        val header = fillHeaderInfo(taskInfo, hasGlobalFocus)
        val headerStyle = getHeaderStyle(header)
@@ -281,6 +294,16 @@ class AppHeaderViewHolder(
                drawableInsets = closeDrawableInsets
            )
        }
        if (!enableMaximizeLongClick) {
            maximizeButtonView.cancelHoverAnimation()
        }
        maximizeButtonView.hoverDisabled = !enableMaximizeLongClick
        maximizeWindowButton.onLongClickListener = if (enableMaximizeLongClick) {
            onLongClickListener
        } else {
            // Disable long-click to open maximize menu when in immersive.
            null
        }
    }

    override fun onHandleMenuOpened() {}
@@ -291,14 +314,6 @@ class AppHeaderViewHolder(
        }
    }

    fun setAnimatingTaskResizeOrReposition(animatingTaskResizeOrReposition: Boolean) {
        // If animating a task resize or reposition, cancel any running hover animations
        if (animatingTaskResizeOrReposition) {
            maximizeButtonView.cancelHoverAnimation()
        }
        maximizeButtonView.hoverDisabled = animatingTaskResizeOrReposition
    }

    fun onMaximizeWindowHoverExit() {
        maximizeButtonView.cancelHoverAnimation()
    }
@@ -364,6 +379,11 @@ class AppHeaderViewHolder(
    private fun shouldShowExitFullImmersiveIcon(
        requestingImmersive: Boolean,
        inFullImmersiveState: Boolean
    ): Boolean = isInFullImmersiveStateAndRequesting(requestingImmersive, inFullImmersiveState)

    private fun isInFullImmersiveStateAndRequesting(
        requestingImmersive: Boolean,
        inFullImmersiveState: Boolean
    ): Boolean = Flags.enableFullyImmersiveInDesktop()
            && requestingImmersive && inFullImmersiveState