[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)