summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java21
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeShellCommandHandler.kt157
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt7
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt2
4 files changed, 160 insertions, 27 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 4e9e8f97620c..0860fe4ea88c 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
@@ -57,6 +57,7 @@ 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;
@@ -533,8 +534,7 @@ public abstract class WMShellModule {
exitDesktopTransitionHandler, toggleResizeDesktopTaskTransitionHandler,
dragToDesktopTransitionHandler, desktopModeTaskRepository,
desktopModeLoggerTransitionObserver, launchAdjacentController,
- recentsTransitionHandler, multiInstanceHelper,
- mainExecutor, desktopTasksLimiter);
+ recentsTransitionHandler, multiInstanceHelper, mainExecutor, desktopTasksLimiter);
}
@WMSingleton
@@ -633,6 +633,20 @@ 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
//
@@ -673,7 +687,8 @@ public abstract class WMShellModule {
@Provides
static Object provideIndependentShellComponentsToCreate(
DragAndDropController dragAndDropController,
- Optional<DesktopTasksTransitionObserver> desktopTasksTransitionObserverOptional) {
+ Optional<DesktopTasksTransitionObserver> desktopTasksTransitionObserverOptional,
+ Optional<DesktopModeShellCommandHandler> desktopModeShellCommandHandler) {
return new Object();
}
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeShellCommandHandler.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeShellCommandHandler.kt
index f1a475a42452..f26db8a7d3cf 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeShellCommandHandler.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeShellCommandHandler.kt
@@ -16,15 +16,45 @@
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 the DesktopTasksController.
+ * Handles the shell commands for desktop windowing mode.
+ *
+ * <p>Use with {@code adb shell dumpsys activity service SystemUIService WMShell desktopmode ...}.
*/
-class DesktopModeShellCommandHandler(private val controller: DesktopTasksController) :
- ShellCommandHandler.ShellCommandActionHandler {
+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
+ }
override fun onShellCommand(args: Array<String>, pw: PrintWriter): Boolean {
return when (args[0]) {
@@ -44,6 +74,9 @@ class DesktopModeShellCommandHandler(private val controller: DesktopTasksControl
true
}
}
+ "edgeResizeHandle" -> {
+ return updateEdgeResizeHandle(args, pw)
+ }
else -> {
pw.println("Invalid command: ${args[0]}")
false
@@ -58,14 +91,19 @@ class DesktopModeShellCommandHandler(private val controller: DesktopTasksControl
return false
}
- val taskId = try {
- args[1].toInt()
- } catch (e: NumberFormatException) {
- pw.println("Error: task id should be an integer")
- return false
- }
+ val taskId =
+ try {
+ args[1].toInt()
+ } catch (e: NumberFormatException) {
+ pw.println("Error: task id should be an integer")
+ return false
+ }
- return controller.moveToDesktop(taskId, WindowContainerTransaction())
+ return if (controller.isPresent) {
+ controller.get().moveToDesktop(taskId, WindowContainerTransaction())
+ } else {
+ false
+ }
}
private fun runMoveToNextDisplay(args: Array<String>, pw: PrintWriter): Boolean {
@@ -75,14 +113,92 @@ class DesktopModeShellCommandHandler(private val controller: DesktopTasksControl
return false
}
- val taskId = try {
- args[1].toInt()
- } catch (e: NumberFormatException) {
- pw.println("Error: task id should be an integer")
+ 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
}
+ }
- controller.moveToNextDisplay(taskId)
+ 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
+ }
+ }
return true
}
@@ -91,5 +207,14 @@ class DesktopModeShellCommandHandler(private val controller: DesktopTasksControl
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
+}
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 e5bf53a4afdb..693654441722 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
@@ -124,8 +124,6 @@ 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)
@@ -178,11 +176,6 @@ 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() },
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 d8d534bec6ea..004b044f567a 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
@@ -93,6 +93,7 @@ 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
@@ -115,7 +116,6 @@ 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