Make DisplayDisconnectTransitionHandler an independent component.
Currently, DisplayDisconnectTransitionHandler only exists in
DesktopTasksController, meaning it only exists if the device supports
desktop mode. This causes test failures on devices that do not support
desktop since they do not create an instance of DesktopTasksController.
This CL fixes this by adding this transition handler as an independent
component, ensuring it's always built.
Bug: 365873835
Test: logcat on non-desktop device, confirm disconnect handler inits
Flag: com.android.window.flags.enable_display_disconnect_interaction
Change-Id: I81922aac7dcacd4cc143ab1d0a0834683d203356
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
index e46736a..18d04a1 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
@@ -836,7 +836,6 @@
DesktopModeDragAndDropTransitionHandler desktopModeDragAndDropTransitionHandler,
ToggleResizeDesktopTaskTransitionHandler toggleResizeDesktopTaskTransitionHandler,
DragToDesktopTransitionHandler dragToDesktopTransitionHandler,
- DisplayDisconnectTransitionHandler displayDisconnectTransitionHandler,
@DynamicOverride DesktopUserRepositories desktopUserRepositories,
DesktopRepositoryInitializer desktopRepositoryInitializer,
Optional<DesktopImmersiveController> desktopImmersiveController,
@@ -887,7 +886,6 @@
desktopModeDragAndDropTransitionHandler,
toggleResizeDesktopTaskTransitionHandler,
dragToDesktopTransitionHandler,
- displayDisconnectTransitionHandler,
desktopImmersiveController.get(),
desktopUserRepositories,
desktopRepositoryInitializer,
@@ -1049,10 +1047,15 @@
@WMSingleton
@Provides
- static DisplayDisconnectTransitionHandler provideDesktopDisconnectTransitionHandler(
- Transitions transitions,
- ShellInit shellInit) {
- return new DisplayDisconnectTransitionHandler(transitions, shellInit);
+ static Optional<DisplayDisconnectTransitionHandler> provideDisplayDisconnectTransitionHandler(
+ ShellInit shellInit, Transitions transitions) {
+ if (!DesktopExperienceFlags.ENABLE_DISPLAY_DISCONNECT_INTERACTION.isTrue()) {
+ return Optional.empty();
+ } else {
+ return Optional.of(
+ new DisplayDisconnectTransitionHandler(transitions, shellInit)
+ );
+ }
}
@WMSingleton
@@ -1792,6 +1795,7 @@
Optional<DesktopDisplayEventHandler> desktopDisplayEventHandler,
Optional<DesktopModeKeyGestureHandler> desktopModeKeyGestureHandler,
Optional<SystemModalsTransitionHandler> systemModalsTransitionHandler,
+ Optional<DisplayDisconnectTransitionHandler> displayDisconnectTransitionHandler,
Optional<DesktopImeHandler> desktopImeHandler,
ShellCrashHandler shellCrashHandler) {
return new Object();
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt
index 730d99d..900c0b5 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt
@@ -205,7 +205,6 @@
private val desktopModeDragAndDropTransitionHandler: DesktopModeDragAndDropTransitionHandler,
private val toggleResizeDesktopTaskTransitionHandler: ToggleResizeDesktopTaskTransitionHandler,
private val dragToDesktopTransitionHandler: DragToDesktopTransitionHandler,
- private val displayDisconnectTransitionHandler: DisplayDisconnectTransitionHandler,
private val desktopImmersiveController: DesktopImmersiveController,
private val userRepositories: DesktopUserRepositories,
desktopRepositoryInitializer: DesktopRepositoryInitializer,
@@ -734,8 +733,6 @@
}
}
}
- // Inform the transition handler here since this class will handle the request.
- displayDisconnectTransitionHandler.addPendingTransition(transition)
return wct
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DisplayDisconnectTransitionHandler.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DisplayDisconnectTransitionHandler.kt
index 41ba040..3ddbf29 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DisplayDisconnectTransitionHandler.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DisplayDisconnectTransitionHandler.kt
@@ -26,7 +26,12 @@
import com.android.wm.shell.sysui.ShellInit
import com.android.wm.shell.transition.Transitions
-/** Handler to animate the transition from disconnecting a display. */
+/**
+ * Handler to animate the transition from disconnecting a display.
+ *
+ * TODO: b/391652399 Consider moving this out of desktop package as it becomes less
+ * desktop-specific.
+ */
class DisplayDisconnectTransitionHandler(val transitions: Transitions, shellInit: ShellInit) :
Transitions.TransitionHandler {
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt
index 47b1a38..6972692 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt
@@ -237,7 +237,6 @@
@Mock
lateinit var toggleResizeDesktopTaskTransitionHandler: ToggleResizeDesktopTaskTransitionHandler
@Mock lateinit var dragToDesktopTransitionHandler: DragToDesktopTransitionHandler
- @Mock lateinit var mDisplayDisconnectTransitionHandler: DisplayDisconnectTransitionHandler
@Mock lateinit var mMockDesktopImmersiveController: DesktopImmersiveController
@Mock lateinit var splitScreenController: SplitScreenController
@Mock lateinit var recentsTransitionHandler: RecentsTransitionHandler
@@ -461,7 +460,6 @@
dragAndDropTransitionHandler,
toggleResizeDesktopTaskTransitionHandler,
dragToDesktopTransitionHandler,
- mDisplayDisconnectTransitionHandler,
mMockDesktopImmersiveController,
userRepositories,
repositoryInitializer,