diff options
3 files changed, 35 insertions, 2 deletions
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 a472f79c98e6..44fce81fa059 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,14 +836,21 @@ public abstract class WMShellModule { @Provides static Optional<DesktopImmersiveController> provideDesktopImmersiveController( Context context, + ShellInit shellInit, Transitions transitions, @DynamicOverride DesktopRepository desktopRepository, DisplayController displayController, - ShellTaskOrganizer shellTaskOrganizer) { + ShellTaskOrganizer shellTaskOrganizer, + ShellCommandHandler shellCommandHandler) { if (DesktopModeStatus.canEnterDesktopMode(context)) { return Optional.of( new DesktopImmersiveController( - transitions, desktopRepository, displayController, shellTaskOrganizer)); + shellInit, + transitions, + desktopRepository, + displayController, + shellTaskOrganizer, + shellCommandHandler)); } return Optional.empty(); } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopImmersiveController.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopImmersiveController.kt index f69aa6df6a1d..cdd54c05dbfc 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopImmersiveController.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopImmersiveController.kt @@ -34,10 +34,13 @@ import com.android.window.flags.Flags import com.android.wm.shell.ShellTaskOrganizer import com.android.wm.shell.common.DisplayController import com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE +import com.android.wm.shell.sysui.ShellCommandHandler +import com.android.wm.shell.sysui.ShellInit import com.android.wm.shell.transition.Transitions import com.android.wm.shell.transition.Transitions.TransitionHandler import com.android.wm.shell.transition.Transitions.TransitionObserver import com.android.wm.shell.windowdecor.OnTaskResizeAnimationListener +import java.io.PrintWriter /** * A controller to move tasks in/out of desktop's full immersive state where the task @@ -45,23 +48,29 @@ import com.android.wm.shell.windowdecor.OnTaskResizeAnimationListener * be transient below the status bar like in fullscreen immersive mode. */ class DesktopImmersiveController( + shellInit: ShellInit, private val transitions: Transitions, private val desktopRepository: DesktopRepository, private val displayController: DisplayController, private val shellTaskOrganizer: ShellTaskOrganizer, + private val shellCommandHandler: ShellCommandHandler, private val transactionSupplier: () -> SurfaceControl.Transaction, ) : TransitionHandler, TransitionObserver { constructor( + shellInit: ShellInit, transitions: Transitions, desktopRepository: DesktopRepository, displayController: DisplayController, shellTaskOrganizer: ShellTaskOrganizer, + shellCommandHandler: ShellCommandHandler, ) : this( + shellInit, transitions, desktopRepository, displayController, shellTaskOrganizer, + shellCommandHandler, { SurfaceControl.Transaction() } ) @@ -79,6 +88,14 @@ class DesktopImmersiveController( /** A listener to invoke on animation changes during entry/exit. */ var onTaskResizeAnimationListener: OnTaskResizeAnimationListener? = null + init { + shellInit.addInitCallback({ onInit() }, this) + } + + fun onInit() { + shellCommandHandler.addDumpCallback(this::dump, this) + } + /** Starts a transition to enter full immersive state inside the desktop. */ fun moveTaskToImmersive(taskInfo: RunningTaskInfo) { if (inProgress) { @@ -449,6 +466,13 @@ class DesktopImmersiveController( private fun TransitionInfo.hasTaskChange(taskId: Int): Boolean = changes.any { c -> c.taskInfo?.taskId == taskId } + private fun dump(pw: PrintWriter, prefix: String) { + val innerPrefix = "$prefix " + pw.println("${prefix}DesktopImmersiveController") + pw.println(innerPrefix + "state=" + state) + pw.println(innerPrefix + "pendingExternalExitTransitions=" + pendingExternalExitTransitions) + } + /** The state of the currently running transition. */ private data class TransitionState( val transition: IBinder, diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopImmersiveControllerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopImmersiveControllerTest.kt index e05a0b54fcf4..d5b1790f7af6 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopImmersiveControllerTest.kt +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopImmersiveControllerTest.kt @@ -89,10 +89,12 @@ class DesktopImmersiveControllerTest : ShellTestCase() { (invocation.getArgument(0) as Rect).set(STABLE_BOUNDS) } controller = DesktopImmersiveController( + shellInit = mock(), transitions = mockTransitions, desktopRepository = desktopRepository, displayController = mockDisplayController, shellTaskOrganizer = mockShellTaskOrganizer, + shellCommandHandler = mock(), transactionSupplier = transactionSupplier, ) } |