[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
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipDesktopState.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipDesktopState.kt
index de4c5b0..899be0f 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipDesktopState.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipDesktopState.kt
@@ -24,6 +24,7 @@
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 @@
}
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. */
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/pip/PipDesktopStateTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/pip/PipDesktopStateTest.kt
index 877449f..c373ffd 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/pip/PipDesktopStateTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/pip/PipDesktopStateTest.kt
@@ -35,6 +35,8 @@
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 @@
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 @@
verify(mockRecentsTransitionHandler).addTransitionStateListener(captor.capture())
recentsTransitionStateListener = captor.firstValue
recentsTransitionStateListener.onTransitionStateChanged(TRANSITION_STATE_NOT_RUNNING)
+
+ whenever(mockDesktopRepository.isAnyDeskActive(DISPLAY_ID)).thenReturn(true)
}
@Test
@@ -116,13 +122,15 @@
@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()
@@ -130,8 +138,17 @@
@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 @@
@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 @@
@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 @@
@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)