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

Commit e2a52e18 authored by Ats Jenk's avatar Ats Jenk
Browse files

Use display for performing desktop availability checks

When checking if desktop is available from app handle, use the display
based checks.
Previously it was checking if the device itself has desktop. We should
be checking in per display.

Bug: 401151860
Test: atest DesktopModeVisualIndicator
Test: check on a foldable that desktop entry points from app handle (via
  menu or drag) are not available
Flag: com.android.wm.shell.enable_bubble_to_fullscreen
Change-Id: I70bac92b26519d5b29dc5222fd6607c423a8a4ce
parent 4d2a2953
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import android.content.Context;
import android.graphics.PointF;
import android.graphics.Rect;
import android.graphics.Region;
import android.view.Display;
import android.view.SurfaceControl;
import android.window.DesktopModeFlags;

@@ -114,6 +115,7 @@ public class DesktopModeVisualIndicator {
    private final Context mContext;
    private final DisplayController mDisplayController;
    private final ActivityManager.RunningTaskInfo mTaskInfo;
    private final Display mDisplay;

    private IndicatorType mCurrentType;
    private final DragStartState mDragStartState;
@@ -145,9 +147,10 @@ public class DesktopModeVisualIndicator {
        mCurrentType = NO_INDICATOR;
        mDragStartState = dragStartState;
        mSnapEventHandler = snapEventHandler;
        mDisplay = mDisplayController.getDisplay(mTaskInfo.displayId);
        mVisualIndicatorViewContainer.createView(
                mContext,
                mDisplayController.getDisplay(mTaskInfo.displayId),
                mDisplay,
                mDisplayController.getDisplayLayout(mTaskInfo.displayId),
                mTaskInfo,
                taskSurface
@@ -193,7 +196,7 @@ public class DesktopModeVisualIndicator {
        if (inputCoordinates.x > layout.width()) return TO_SPLIT_RIGHT_INDICATOR;
        IndicatorType result;
        if (BubbleAnythingFlagHelper.enableBubbleToFullscreen()
                && !DesktopModeStatus.canEnterDesktopMode(mContext)) {
                && !DesktopModeStatus.isDesktopModeSupportedOnDisplay(mContext, mDisplay)) {
            // If desktop is not available, default to "no indicator"
            result = NO_INDICATOR;
        } else {
+2 −1
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import static android.window.DesktopModeFlags.ENABLE_CAPTION_COMPAT_INSET_FORCE_

import static com.android.wm.shell.shared.desktopmode.DesktopModeStatus.canEnterDesktopMode;
import static com.android.wm.shell.shared.desktopmode.DesktopModeStatus.canEnterDesktopModeOrShowAppHandle;
import static com.android.wm.shell.shared.desktopmode.DesktopModeStatus.isDesktopModeSupportedOnDisplay;
import static com.android.wm.shell.shared.desktopmode.DesktopModeTransitionSource.APP_HANDLE_MENU_BUTTON;
import static com.android.wm.shell.shared.split.SplitScreenConstants.SPLIT_POSITION_BOTTOM_OR_RIGHT;
import static com.android.wm.shell.windowdecor.DragPositioningCallbackUtility.DragEventListener;
@@ -1410,7 +1411,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
                supportsMultiInstance,
                shouldShowManageWindowsButton,
                shouldShowChangeAspectRatioButton,
                canEnterDesktopMode(mContext),
                isDesktopModeSupportedOnDisplay(mContext, mDisplay),
                isBrowserApp,
                isBrowserApp ? getAppLink() : getBrowserLink(),
                mResult.mCaptionWidth,
+10 −9
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper.RunWithLooper
import android.view.Display
import android.view.SurfaceControl
import androidx.test.filters.SmallTest
import com.android.internal.policy.SystemBarUtils
@@ -67,7 +66,6 @@ class DesktopModeVisualIndicatorTest : ShellTestCase() {
    private lateinit var taskInfo: RunningTaskInfo
    @Mock private lateinit var syncQueue: SyncTransactionQueue
    @Mock private lateinit var displayController: DisplayController
    @Mock private lateinit var display: Display
    @Mock private lateinit var taskSurface: SurfaceControl
    @Mock private lateinit var taskDisplayAreaOrganizer: RootTaskDisplayAreaOrganizer
    @Mock private lateinit var displayLayout: DisplayLayout
@@ -83,12 +81,20 @@ class DesktopModeVisualIndicatorTest : ShellTestCase() {
        whenever(displayLayout.width()).thenReturn(DISPLAY_BOUNDS.width())
        whenever(displayLayout.height()).thenReturn(DISPLAY_BOUNDS.height())
        whenever(displayLayout.stableInsets()).thenReturn(STABLE_INSETS)
        whenever(displayController.getDisplay(anyInt())).thenReturn(display)
        whenever(displayController.getDisplayLayout(anyInt())).thenReturn(displayLayout)
        whenever(displayController.getDisplay(anyInt())).thenReturn(mContext.display)
        whenever(bubbleBoundsProvider.getBubbleBarExpandedViewDropTargetBounds(any()))
            .thenReturn(Rect())
        taskInfo = DesktopTestHelpers.createFullscreenTask()

        mContext.orCreateTestableResources.addOverride(
            com.android.internal.R.bool.config_isDesktopModeSupported,
            true,
        )
        mContext.orCreateTestableResources.addOverride(
            com.android.internal.R.bool.config_canInternalDisplayHostDesktops,
            true,
        )
    }

    @Test
@@ -260,14 +266,9 @@ class DesktopModeVisualIndicatorTest : ShellTestCase() {
    )
    fun testDefaultIndicatorWithNoDesktop() {
        mContext.orCreateTestableResources.addOverride(
            com.android.internal.R.bool.config_isDesktopModeSupported,
            com.android.internal.R.bool.config_canInternalDisplayHostDesktops,
            false,
        )
        mContext.orCreateTestableResources.addOverride(
            com.android.internal.R.bool.config_isDesktopModeDevOptionSupported,
            false,
        )

        // Fullscreen to center, no desktop indicator
        createVisualIndicator(DesktopModeVisualIndicator.DragStartState.FROM_FULLSCREEN)
        var result = visualIndicator.updateIndicatorType(PointF(500f, 500f))