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

Commit d462ad3e authored by Merissa Mitchell's avatar Merissa Mitchell
Browse files

[PiP on CD] Update PipDesktopState#isPipInDesktopMode

to include rootTaskDisplayAreaOrganizer.isDisplayDesktopFirst check.
This ensures that on a Desktop-first display with an empty desk,
isPipInDesktopMode will still return true.

Bug: 416788154
Test: atest WMShellUnitTests:com.android.wm.shell.pip2.phone
Test: Manual - enter PiP on external display, close all other tasks.
Expand PiP and verify corners are rounded.
Flag: com.android.window.flags.enable_connected_displays_pip

Change-Id: Id613e9c6b84217b92d216d22564f906a24c42b0a
parent a246d0fd
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import com.android.wm.shell.RootTaskDisplayAreaOrganizer
import com.android.wm.shell.common.DisplayLayout
import com.android.wm.shell.desktopmode.DesktopUserRepositories
import com.android.wm.shell.desktopmode.DragToDesktopTransitionHandler
import com.android.wm.shell.desktopmode.desktopfirst.isDisplayDesktopFirst
import com.android.wm.shell.protolog.ShellProtoLogGroup
import com.android.wm.shell.recents.RecentsTransitionHandler
import com.android.wm.shell.recents.RecentsTransitionStateListener
@@ -105,7 +106,13 @@ class PipDesktopState(
        }

        val displayId = pipDisplayLayoutState.displayId
        return desktopUserRepositoriesOptional.get().current.isAnyDeskActive(displayId)
        logV(
            "isPipInDesktopMode isAnyDeskActive=%b isDisplayDesktopFirst=%b",
            desktopUserRepositoriesOptional.get().current.isAnyDeskActive(displayId),
            rootTaskDisplayAreaOrganizer.isDisplayDesktopFirst(displayId),
        )
        return desktopUserRepositoriesOptional.get().current.isAnyDeskActive(displayId) ||
                rootTaskDisplayAreaOrganizer.isDisplayDesktopFirst(displayId)
    }

    /** Returns the windowing mode to restore to when resizing out of PIP direction. */
+21 −5
Original line number Diff line number Diff line
@@ -35,6 +35,8 @@ import com.android.wm.shell.ShellTestCase
import com.android.wm.shell.desktopmode.DesktopRepository
import com.android.wm.shell.desktopmode.DesktopUserRepositories
import com.android.wm.shell.desktopmode.DragToDesktopTransitionHandler
import com.android.wm.shell.desktopmode.desktopfirst.DESKTOP_FIRST_DISPLAY_WINDOWING_MODE
import com.android.wm.shell.desktopmode.desktopfirst.TOUCH_FIRST_DISPLAY_WINDOWING_MODE
import com.android.wm.shell.recents.RecentsTransitionHandler
import com.android.wm.shell.recents.RecentsTransitionStateListener
import com.android.wm.shell.recents.RecentsTransitionStateListener.TRANSITION_STATE_ANIMATING
@@ -75,6 +77,8 @@ class PipDesktopStateTest : ShellTestCase() {
        whenever(mockPipDisplayLayoutState.displayId).thenReturn(DISPLAY_ID)

        defaultTda = DisplayAreaInfo(mock<WindowContainerToken>(), DISPLAY_ID, /* featureId = */ 0)
        defaultTda.configuration.windowConfiguration.windowingMode =
            TOUCH_FIRST_DISPLAY_WINDOWING_MODE
        whenever(mockRootTaskDisplayAreaOrganizer.getDisplayAreaInfo(DISPLAY_ID)).thenReturn(
            defaultTda
        )
@@ -92,6 +96,8 @@ class PipDesktopStateTest : ShellTestCase() {
        verify(mockRecentsTransitionHandler).addTransitionStateListener(captor.capture())
        recentsTransitionStateListener = captor.firstValue
        recentsTransitionStateListener.onTransitionStateChanged(TRANSITION_STATE_NOT_RUNNING)

        whenever(mockDesktopRepository.isAnyDeskActive(DISPLAY_ID)).thenReturn(true)
    }

    @Test
@@ -116,22 +122,33 @@ class PipDesktopStateTest : ShellTestCase() {

    @Test
    fun isPipInDesktopMode_anyDeskActive_returnsTrue() {
        whenever(mockDesktopRepository.isAnyDeskActive(DISPLAY_ID)).thenReturn(true)
        assertThat(pipDesktopState.isPipInDesktopMode()).isTrue()

        defaultTda.configuration.windowConfiguration.windowingMode =
            DESKTOP_FIRST_DISPLAY_WINDOWING_MODE
        assertThat(pipDesktopState.isPipInDesktopMode()).isTrue()
    }

    @Test
    fun isPipInDesktopMode_noDeskActive_returnsFalse() {
    fun isPipInDesktopMode_noDeskActive_touchFirstDisplay_returnsFalse() {
        whenever(mockDesktopRepository.isAnyDeskActive(DISPLAY_ID)).thenReturn(false)

        assertThat(pipDesktopState.isPipInDesktopMode()).isFalse()
    }

    @DisableFlags(FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND)
    @Test
    fun isPipInDesktopMode_desktopFirstDisplay_returnsTrue() {
        defaultTda.configuration.windowConfiguration.windowingMode =
            DESKTOP_FIRST_DISPLAY_WINDOWING_MODE
        assertThat(pipDesktopState.isPipInDesktopMode()).isTrue()

        whenever(mockDesktopRepository.isAnyDeskActive(DISPLAY_ID)).thenReturn(false)
        assertThat(pipDesktopState.isPipInDesktopMode()).isTrue()
    }

    @Test
    fun outPipWindowingMode_exitToDesktop_displayFreeform_returnsUndefined() {
        whenever(mockDesktopRepository.isAnyDeskActive(DISPLAY_ID)).thenReturn(true)
        setDisplayWindowingMode(WINDOWING_MODE_FREEFORM)

        assertThat(pipDesktopState.getOutPipWindowingMode()).isEqualTo(WINDOWING_MODE_UNDEFINED)
@@ -140,7 +157,6 @@ class PipDesktopStateTest : ShellTestCase() {
    @DisableFlags(FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND)
    @Test
    fun outPipWindowingMode_exitToDesktop_displayFullscreen_returnsFreeform() {
        whenever(mockDesktopRepository.isAnyDeskActive(DISPLAY_ID)).thenReturn(true)
        setDisplayWindowingMode(WINDOWING_MODE_FULLSCREEN)

        assertThat(pipDesktopState.getOutPipWindowingMode()).isEqualTo(WINDOWING_MODE_FREEFORM)
@@ -149,6 +165,7 @@ class PipDesktopStateTest : ShellTestCase() {
    @DisableFlags(FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND)
    @Test
    fun outPipWindowingMode_exitToFullscreen_displayFullscreen_returnsUndefined() {
        whenever(mockDesktopRepository.isAnyDeskActive(DISPLAY_ID)).thenReturn(false)
        setDisplayWindowingMode(WINDOWING_MODE_FULLSCREEN)

        assertThat(pipDesktopState.getOutPipWindowingMode()).isEqualTo(WINDOWING_MODE_UNDEFINED)
@@ -165,7 +182,6 @@ class PipDesktopStateTest : ShellTestCase() {
    @DisableFlags(FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND)
    @Test
    fun outPipWindowingMode_midRecents_inDesktop_returnsFullscreen() {
        whenever(mockDesktopRepository.isAnyDeskActive(DISPLAY_ID)).thenReturn(true)
        recentsTransitionStateListener.onTransitionStateChanged(TRANSITION_STATE_ANIMATING)

        assertThat(pipDesktopState.getOutPipWindowingMode()).isEqualTo(WINDOWING_MODE_FULLSCREEN)