Loading libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +3 −18 Original line number Diff line number Diff line Loading @@ -57,7 +57,6 @@ import com.android.wm.shell.dagger.back.ShellBackAnimationModule; import com.android.wm.shell.dagger.pip.PipModule; import com.android.wm.shell.desktopmode.DesktopModeEventLogger; import com.android.wm.shell.desktopmode.DesktopModeLoggerTransitionObserver; import com.android.wm.shell.desktopmode.DesktopModeShellCommandHandler; import com.android.wm.shell.desktopmode.DesktopModeTaskRepository; import com.android.wm.shell.desktopmode.DesktopTasksController; import com.android.wm.shell.desktopmode.DesktopTasksLimiter; Loading Loading @@ -534,7 +533,8 @@ public abstract class WMShellModule { exitDesktopTransitionHandler, toggleResizeDesktopTaskTransitionHandler, dragToDesktopTransitionHandler, desktopModeTaskRepository, desktopModeLoggerTransitionObserver, launchAdjacentController, recentsTransitionHandler, multiInstanceHelper, mainExecutor, desktopTasksLimiter); recentsTransitionHandler, multiInstanceHelper, mainExecutor, desktopTasksLimiter); } @WMSingleton Loading Loading @@ -633,20 +633,6 @@ public abstract class WMShellModule { return new ResizeHandleSizeRepository(); } @WMSingleton @Provides static Optional<DesktopModeShellCommandHandler> provideDesktopModeShellCommandHandler( ShellInit shellInit, ShellCommandHandler shellCommandHandler, Optional<DesktopTasksController> tasksController, ResizeHandleSizeRepository resizeHandleSizeRepository) { if (!DesktopModeStatus.isEnabled()) { return Optional.empty(); } return Optional.of( new DesktopModeShellCommandHandler(shellInit, shellCommandHandler, tasksController, resizeHandleSizeRepository)); } // // Drag and drop // Loading Loading @@ -687,8 +673,7 @@ public abstract class WMShellModule { @Provides static Object provideIndependentShellComponentsToCreate( DragAndDropController dragAndDropController, Optional<DesktopTasksTransitionObserver> desktopTasksTransitionObserverOptional, Optional<DesktopModeShellCommandHandler> desktopModeShellCommandHandler) { Optional<DesktopTasksTransitionObserver> desktopTasksTransitionObserverOptional) { return new Object(); } } libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeShellCommandHandler.kt +16 −141 Original line number Diff line number Diff line Loading @@ -16,45 +16,15 @@ package com.android.wm.shell.desktopmode import android.content.res.Resources import android.util.TypedValue import android.util.TypedValue.COMPLEX_UNIT_DIP import android.window.WindowContainerTransaction import com.android.wm.shell.protolog.ShellProtoLogGroup import com.android.wm.shell.shared.DesktopModeStatus import com.android.wm.shell.sysui.ShellCommandHandler import com.android.wm.shell.sysui.ShellInit import com.android.wm.shell.util.KtProtoLog import com.android.wm.shell.windowdecor.ResizeHandleSizeRepository import java.io.PrintWriter import java.util.Optional /** * Handles the shell commands for desktop windowing mode. * * <p>Use with {@code adb shell dumpsys activity service SystemUIService WMShell desktopmode ...}. * Handles the shell commands for the DesktopTasksController. */ class DesktopModeShellCommandHandler( shellInit: ShellInit, private val shellCommandHandler: ShellCommandHandler, private val controller: Optional<DesktopTasksController>, private val resizeHandleSizeRepository: ResizeHandleSizeRepository ) : ShellCommandHandler.ShellCommandActionHandler { private var resources: Resources? = null init { if (DesktopModeStatus.isEnabled()) { shellInit.addInitCallback(::onInit, this) } } private fun onInit() { KtProtoLog.d(ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE, "Initialize DesktopModeShellCommandHandler") shellCommandHandler.addCommandCallback("desktopmode", this, this) resources = if (controller.isPresent) controller.get().context.resources else null } class DesktopModeShellCommandHandler(private val controller: DesktopTasksController) : ShellCommandHandler.ShellCommandActionHandler { override fun onShellCommand(args: Array<String>, pw: PrintWriter): Boolean { return when (args[0]) { Loading @@ -74,9 +44,6 @@ class DesktopModeShellCommandHandler( true } } "edgeResizeHandle" -> { return updateEdgeResizeHandle(args, pw) } else -> { pw.println("Invalid command: ${args[0]}") false Loading @@ -91,19 +58,14 @@ class DesktopModeShellCommandHandler( return false } val taskId = try { val taskId = try { args[1].toInt() } catch (e: NumberFormatException) { pw.println("Error: task id should be an integer") return false } return if (controller.isPresent) { controller.get().moveToDesktop(taskId, WindowContainerTransaction()) } else { false } return controller.moveToDesktop(taskId, WindowContainerTransaction()) } private fun runMoveToNextDisplay(args: Array<String>, pw: PrintWriter): Boolean { Loading @@ -113,92 +75,14 @@ class DesktopModeShellCommandHandler( return false } val taskId = try { val taskId = try { args[1].toInt() } catch (e: NumberFormatException) { pw.println("Error: task id should be an integer") return false } if (controller.isPresent) { controller.get().moveToNextDisplay(taskId) return true } else { return false } } private fun updateEdgeResizeHandle(args: Array<String>, pw: PrintWriter): Boolean { if (args.size < 2) { // First argument is the action name. pw.println("Error: edge resize action should be provided as arguments [set|reset|get]") return false } when (val action = args[1]) { "set" -> { if (resources == null) { pw.println("Error: unable to convert given dp to pixel units") return false } if (args.size < 3) { pw.println( "Error: edge resize size should be provided as argument " + "<positive integer>" ) return false } val newEdgeSizeDp = try { args[2].toFloat() } catch (e: NumberFormatException) { pw.println("Error: edge resize width should be an integer") return false } if (newEdgeSizeDp <= 0) { pw.println("Error: edge resize width should be a positive integer") return false } val newEdgeSizePixels = TypedValue.convertDimensionToPixels( COMPLEX_UNIT_DIP, newEdgeSizeDp, resources!!.displayMetrics ) .toInt() resizeHandleSizeRepository.setResizeEdgeHandlePixels(newEdgeSizePixels) pw.println( "Handling set request for edge handle size of $newEdgeSizeDp dp " + "(or $newEdgeSizePixels px)" ) } "reset" -> { resizeHandleSizeRepository.resetResizeEdgeHandlePixels() pw.println("Handling reset request for edge handle size") } "get" -> { if (resources == null) { pw.println("Error: unable to retrieve edge handle size") return false } val edgeSizePixels = resizeHandleSizeRepository .getResizeEdgeHandlePixels(resources!!) .toFloat() val edgeSizeDp = TypedValue.deriveDimension( COMPLEX_UNIT_DIP, edgeSizePixels, resources!!.displayMetrics ) pw.println("Current edge handle size is $edgeSizeDp dp (or $edgeSizePixels px)") } else -> { pw.println( "Error: must provide a valid argument (set, reset, or get); received " + action ) return false } } controller.moveToNextDisplay(taskId) return true } Loading @@ -207,14 +91,5 @@ class DesktopModeShellCommandHandler( pw.println("$prefix Move a task with given id to desktop mode.") pw.println("$prefix moveToNextDisplay <taskId> ") pw.println("$prefix Move a task with given id to next display.") pw.println("$prefix edgeResizeHandle set <positive integer>") pw.println("$prefix Sets the width of the handle, in dp, to use for edge resizing.") pw.println("$prefix edgeResizeHandle reset") pw.println("$prefix Restore the original width of the handle to use for edge resizing.") pw.println("$prefix edgeResizeHandle get") pw.println( "$prefix Retrieves the current width, in dp, of the handle to use for edge " + "resizing." ) } } No newline at end of file libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +7 −0 Original line number Diff line number Diff line Loading @@ -124,6 +124,8 @@ class DesktopTasksController( private val desktopMode: DesktopModeImpl private var visualIndicator: DesktopModeVisualIndicator? = null private val desktopModeShellCommandHandler: DesktopModeShellCommandHandler = DesktopModeShellCommandHandler(this) private val mOnAnimationFinishedCallback = Consumer<SurfaceControl.Transaction> { t: SurfaceControl.Transaction -> visualIndicator?.releaseVisualIndicator(t) Loading Loading @@ -176,6 +178,11 @@ class DesktopTasksController( private fun onInit() { KtProtoLog.d(WM_SHELL_DESKTOP_MODE, "Initialize DesktopTasksController") shellCommandHandler.addDumpCallback(this::dump, this) shellCommandHandler.addCommandCallback( "desktopmode", desktopModeShellCommandHandler, this ) shellController.addExternalInterface( ShellSharedConstants.KEY_EXTRA_SHELL_DESKTOP_MODE, { createExternalInterface() }, Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt +1 −1 Original line number Diff line number Diff line Loading @@ -93,7 +93,6 @@ import com.android.wm.shell.transition.Transitions.TRANSIT_EXIT_DESKTOP_MODE import com.android.wm.shell.transition.Transitions.TransitionHandler import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertWithMessage import java.util.Optional import org.junit.After import org.junit.Assume.assumeTrue import org.junit.Before Loading @@ -116,6 +115,7 @@ import org.mockito.kotlin.anyOrNull import org.mockito.kotlin.atLeastOnce import org.mockito.kotlin.capture import org.mockito.quality.Strictness import java.util.Optional import junit.framework.Assert.assertFalse import junit.framework.Assert.assertTrue import org.mockito.Mockito.`when` as whenever Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +3 −18 Original line number Diff line number Diff line Loading @@ -57,7 +57,6 @@ import com.android.wm.shell.dagger.back.ShellBackAnimationModule; import com.android.wm.shell.dagger.pip.PipModule; import com.android.wm.shell.desktopmode.DesktopModeEventLogger; import com.android.wm.shell.desktopmode.DesktopModeLoggerTransitionObserver; import com.android.wm.shell.desktopmode.DesktopModeShellCommandHandler; import com.android.wm.shell.desktopmode.DesktopModeTaskRepository; import com.android.wm.shell.desktopmode.DesktopTasksController; import com.android.wm.shell.desktopmode.DesktopTasksLimiter; Loading Loading @@ -534,7 +533,8 @@ public abstract class WMShellModule { exitDesktopTransitionHandler, toggleResizeDesktopTaskTransitionHandler, dragToDesktopTransitionHandler, desktopModeTaskRepository, desktopModeLoggerTransitionObserver, launchAdjacentController, recentsTransitionHandler, multiInstanceHelper, mainExecutor, desktopTasksLimiter); recentsTransitionHandler, multiInstanceHelper, mainExecutor, desktopTasksLimiter); } @WMSingleton Loading Loading @@ -633,20 +633,6 @@ public abstract class WMShellModule { return new ResizeHandleSizeRepository(); } @WMSingleton @Provides static Optional<DesktopModeShellCommandHandler> provideDesktopModeShellCommandHandler( ShellInit shellInit, ShellCommandHandler shellCommandHandler, Optional<DesktopTasksController> tasksController, ResizeHandleSizeRepository resizeHandleSizeRepository) { if (!DesktopModeStatus.isEnabled()) { return Optional.empty(); } return Optional.of( new DesktopModeShellCommandHandler(shellInit, shellCommandHandler, tasksController, resizeHandleSizeRepository)); } // // Drag and drop // Loading Loading @@ -687,8 +673,7 @@ public abstract class WMShellModule { @Provides static Object provideIndependentShellComponentsToCreate( DragAndDropController dragAndDropController, Optional<DesktopTasksTransitionObserver> desktopTasksTransitionObserverOptional, Optional<DesktopModeShellCommandHandler> desktopModeShellCommandHandler) { Optional<DesktopTasksTransitionObserver> desktopTasksTransitionObserverOptional) { return new Object(); } }
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeShellCommandHandler.kt +16 −141 Original line number Diff line number Diff line Loading @@ -16,45 +16,15 @@ package com.android.wm.shell.desktopmode import android.content.res.Resources import android.util.TypedValue import android.util.TypedValue.COMPLEX_UNIT_DIP import android.window.WindowContainerTransaction import com.android.wm.shell.protolog.ShellProtoLogGroup import com.android.wm.shell.shared.DesktopModeStatus import com.android.wm.shell.sysui.ShellCommandHandler import com.android.wm.shell.sysui.ShellInit import com.android.wm.shell.util.KtProtoLog import com.android.wm.shell.windowdecor.ResizeHandleSizeRepository import java.io.PrintWriter import java.util.Optional /** * Handles the shell commands for desktop windowing mode. * * <p>Use with {@code adb shell dumpsys activity service SystemUIService WMShell desktopmode ...}. * Handles the shell commands for the DesktopTasksController. */ class DesktopModeShellCommandHandler( shellInit: ShellInit, private val shellCommandHandler: ShellCommandHandler, private val controller: Optional<DesktopTasksController>, private val resizeHandleSizeRepository: ResizeHandleSizeRepository ) : ShellCommandHandler.ShellCommandActionHandler { private var resources: Resources? = null init { if (DesktopModeStatus.isEnabled()) { shellInit.addInitCallback(::onInit, this) } } private fun onInit() { KtProtoLog.d(ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE, "Initialize DesktopModeShellCommandHandler") shellCommandHandler.addCommandCallback("desktopmode", this, this) resources = if (controller.isPresent) controller.get().context.resources else null } class DesktopModeShellCommandHandler(private val controller: DesktopTasksController) : ShellCommandHandler.ShellCommandActionHandler { override fun onShellCommand(args: Array<String>, pw: PrintWriter): Boolean { return when (args[0]) { Loading @@ -74,9 +44,6 @@ class DesktopModeShellCommandHandler( true } } "edgeResizeHandle" -> { return updateEdgeResizeHandle(args, pw) } else -> { pw.println("Invalid command: ${args[0]}") false Loading @@ -91,19 +58,14 @@ class DesktopModeShellCommandHandler( return false } val taskId = try { val taskId = try { args[1].toInt() } catch (e: NumberFormatException) { pw.println("Error: task id should be an integer") return false } return if (controller.isPresent) { controller.get().moveToDesktop(taskId, WindowContainerTransaction()) } else { false } return controller.moveToDesktop(taskId, WindowContainerTransaction()) } private fun runMoveToNextDisplay(args: Array<String>, pw: PrintWriter): Boolean { Loading @@ -113,92 +75,14 @@ class DesktopModeShellCommandHandler( return false } val taskId = try { val taskId = try { args[1].toInt() } catch (e: NumberFormatException) { pw.println("Error: task id should be an integer") return false } if (controller.isPresent) { controller.get().moveToNextDisplay(taskId) return true } else { return false } } private fun updateEdgeResizeHandle(args: Array<String>, pw: PrintWriter): Boolean { if (args.size < 2) { // First argument is the action name. pw.println("Error: edge resize action should be provided as arguments [set|reset|get]") return false } when (val action = args[1]) { "set" -> { if (resources == null) { pw.println("Error: unable to convert given dp to pixel units") return false } if (args.size < 3) { pw.println( "Error: edge resize size should be provided as argument " + "<positive integer>" ) return false } val newEdgeSizeDp = try { args[2].toFloat() } catch (e: NumberFormatException) { pw.println("Error: edge resize width should be an integer") return false } if (newEdgeSizeDp <= 0) { pw.println("Error: edge resize width should be a positive integer") return false } val newEdgeSizePixels = TypedValue.convertDimensionToPixels( COMPLEX_UNIT_DIP, newEdgeSizeDp, resources!!.displayMetrics ) .toInt() resizeHandleSizeRepository.setResizeEdgeHandlePixels(newEdgeSizePixels) pw.println( "Handling set request for edge handle size of $newEdgeSizeDp dp " + "(or $newEdgeSizePixels px)" ) } "reset" -> { resizeHandleSizeRepository.resetResizeEdgeHandlePixels() pw.println("Handling reset request for edge handle size") } "get" -> { if (resources == null) { pw.println("Error: unable to retrieve edge handle size") return false } val edgeSizePixels = resizeHandleSizeRepository .getResizeEdgeHandlePixels(resources!!) .toFloat() val edgeSizeDp = TypedValue.deriveDimension( COMPLEX_UNIT_DIP, edgeSizePixels, resources!!.displayMetrics ) pw.println("Current edge handle size is $edgeSizeDp dp (or $edgeSizePixels px)") } else -> { pw.println( "Error: must provide a valid argument (set, reset, or get); received " + action ) return false } } controller.moveToNextDisplay(taskId) return true } Loading @@ -207,14 +91,5 @@ class DesktopModeShellCommandHandler( pw.println("$prefix Move a task with given id to desktop mode.") pw.println("$prefix moveToNextDisplay <taskId> ") pw.println("$prefix Move a task with given id to next display.") pw.println("$prefix edgeResizeHandle set <positive integer>") pw.println("$prefix Sets the width of the handle, in dp, to use for edge resizing.") pw.println("$prefix edgeResizeHandle reset") pw.println("$prefix Restore the original width of the handle to use for edge resizing.") pw.println("$prefix edgeResizeHandle get") pw.println( "$prefix Retrieves the current width, in dp, of the handle to use for edge " + "resizing." ) } } No newline at end of file
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +7 −0 Original line number Diff line number Diff line Loading @@ -124,6 +124,8 @@ class DesktopTasksController( private val desktopMode: DesktopModeImpl private var visualIndicator: DesktopModeVisualIndicator? = null private val desktopModeShellCommandHandler: DesktopModeShellCommandHandler = DesktopModeShellCommandHandler(this) private val mOnAnimationFinishedCallback = Consumer<SurfaceControl.Transaction> { t: SurfaceControl.Transaction -> visualIndicator?.releaseVisualIndicator(t) Loading Loading @@ -176,6 +178,11 @@ class DesktopTasksController( private fun onInit() { KtProtoLog.d(WM_SHELL_DESKTOP_MODE, "Initialize DesktopTasksController") shellCommandHandler.addDumpCallback(this::dump, this) shellCommandHandler.addCommandCallback( "desktopmode", desktopModeShellCommandHandler, this ) shellController.addExternalInterface( ShellSharedConstants.KEY_EXTRA_SHELL_DESKTOP_MODE, { createExternalInterface() }, Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt +1 −1 Original line number Diff line number Diff line Loading @@ -93,7 +93,6 @@ import com.android.wm.shell.transition.Transitions.TRANSIT_EXIT_DESKTOP_MODE import com.android.wm.shell.transition.Transitions.TransitionHandler import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertWithMessage import java.util.Optional import org.junit.After import org.junit.Assume.assumeTrue import org.junit.Before Loading @@ -116,6 +115,7 @@ import org.mockito.kotlin.anyOrNull import org.mockito.kotlin.atLeastOnce import org.mockito.kotlin.capture import org.mockito.quality.Strictness import java.util.Optional import junit.framework.Assert.assertFalse import junit.framework.Assert.assertTrue import org.mockito.Mockito.`when` as whenever Loading