Loading libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +4 −0 Original line number Diff line number Diff line Loading @@ -1499,6 +1499,8 @@ public abstract class WMShellModule { @Provides static Optional<DesktopDisplayModeController> provideDesktopDisplayModeController( Context context, ShellInit shellInit, ShellCommandHandler shellCommandHandler, Transitions transitions, RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer, IWindowManager windowManager, Loading @@ -1514,6 +1516,8 @@ public abstract class WMShellModule { return Optional.of( new DesktopDisplayModeController( context, shellInit, shellCommandHandler, transitions, rootTaskDisplayAreaOrganizer, windowManager, Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopDisplayModeController.kt +42 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.hardware.input.InputManager import android.os.Handler import android.provider.Settings import android.provider.Settings.Global.DEVELOPMENT_FORCE_DESKTOP_MODE_ON_EXTERNAL_DISPLAYS import android.util.IndentingPrintWriter import android.view.Display.DEFAULT_DISPLAY import android.view.IWindowManager import android.view.InputDevice Loading @@ -41,11 +42,16 @@ import com.android.wm.shell.desktopmode.desktopwallpaperactivity.DesktopWallpape import com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE import com.android.wm.shell.shared.annotations.ShellMainThread import com.android.wm.shell.shared.desktopmode.DesktopModeStatus import com.android.wm.shell.sysui.ShellCommandHandler import com.android.wm.shell.sysui.ShellInit import com.android.wm.shell.transition.Transitions import java.io.PrintWriter /** Controls the display windowing mode in desktop mode */ class DesktopDisplayModeController( private val context: Context, shellInit: ShellInit, shellCommandHandler: ShellCommandHandler, private val transitions: Transitions, private val rootTaskDisplayAreaOrganizer: RootTaskDisplayAreaOrganizer, private val windowManager: IWindowManager, Loading @@ -72,6 +78,7 @@ class DesktopDisplayModeController( } init { shellInit.addInitCallback({ shellCommandHandler.addDumpCallback(this::dump, this) }, this) if (DesktopExperienceFlags.FORM_FACTOR_BASED_DESKTOP_FIRST_SWITCH.isTrue) { inputManager.registerInputDeviceListener(inputDeviceListener, mainHandler) } Loading Loading @@ -252,6 +259,41 @@ class DesktopDisplayModeController( ProtoLog.w(WM_SHELL_DESKTOP_MODE, "%s: $msg", TAG, *arguments) } private fun dump(originalWriter: PrintWriter, prefix: String) { if (!DesktopExperienceFlags.ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING.isTrue) return val pw = IndentingPrintWriter(originalWriter, " ", prefix) pw.println(TAG) pw.increaseIndent() pw.println( "targetWindowingModeForDefaultDisplay=" + getTargetWindowingModeForDefaultDisplay() ) pw.println( "canDesktopFirstModeBeEnabledOnDefaultDisplay=" + canDesktopFirstModeBeEnabledOnDefaultDisplay() ) pw.println("isDefaultDisplayDesktopEligible=" + isDefaultDisplayDesktopEligible()) pw.println("isExtendedDisplayEnabled=" + isExtendedDisplayEnabled()) pw.println("hasExternalDisplay=" + hasExternalDisplay()) if (DesktopExperienceFlags.FORM_FACTOR_BASED_DESKTOP_FIRST_SWITCH.isTrue) { pw.println("hasAnyTouchpadDevice=" + hasAnyTouchpadDevice()) pw.println("hasAnyPhysicalKeyboardDevice=" + hasAnyPhysicalKeyboardDevice()) } pw.println("Current Desktop Display Modes:") pw.increaseIndent() rootTaskDisplayAreaOrganizer.displayIds.forEach { displayId -> val desktopFirstEnabled = rootTaskDisplayAreaOrganizer .getDisplayAreaInfo(displayId) ?.configuration ?.windowConfiguration ?.windowingMode == WINDOWING_MODE_FREEFORM ?: false pw.println("Display#$displayId desktopFirstEnabled=$desktopFirstEnabled") } } companion object { private const val TAG = "DesktopDisplayModeController" } Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopDisplayModeControllerTest.kt +6 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,8 @@ import com.android.wm.shell.TestRunningTaskInfoBuilder import com.android.wm.shell.common.DisplayController import com.android.wm.shell.desktopmode.desktopwallpaperactivity.DesktopWallpaperActivityTokenProvider import com.android.wm.shell.shared.desktopmode.DesktopModeStatus import com.android.wm.shell.sysui.ShellCommandHandler import com.android.wm.shell.sysui.ShellInit import com.android.wm.shell.transition.Transitions import com.google.common.truth.Truth.assertThat import com.google.testing.junit.testparameterinjector.TestParameter Loading Loading @@ -83,6 +85,8 @@ class DesktopDisplayModeControllerTest( @TestParameter(valuesProvider = FlagsParameterizationProvider::class) flags: FlagsParameterization ) : ShellTestCase() { private val shellInit = mock<ShellInit>() private val shellCommandHandler = mock<ShellCommandHandler>() private val transitions = mock<Transitions>() private val rootTaskDisplayAreaOrganizer = mock<RootTaskDisplayAreaOrganizer>() private val mockWindowManager = mock<IWindowManager>() Loading Loading @@ -135,6 +139,8 @@ class DesktopDisplayModeControllerTest( controller = DesktopDisplayModeController( context, shellInit, shellCommandHandler, transitions, rootTaskDisplayAreaOrganizer, mockWindowManager, Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +4 −0 Original line number Diff line number Diff line Loading @@ -1499,6 +1499,8 @@ public abstract class WMShellModule { @Provides static Optional<DesktopDisplayModeController> provideDesktopDisplayModeController( Context context, ShellInit shellInit, ShellCommandHandler shellCommandHandler, Transitions transitions, RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer, IWindowManager windowManager, Loading @@ -1514,6 +1516,8 @@ public abstract class WMShellModule { return Optional.of( new DesktopDisplayModeController( context, shellInit, shellCommandHandler, transitions, rootTaskDisplayAreaOrganizer, windowManager, Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopDisplayModeController.kt +42 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.hardware.input.InputManager import android.os.Handler import android.provider.Settings import android.provider.Settings.Global.DEVELOPMENT_FORCE_DESKTOP_MODE_ON_EXTERNAL_DISPLAYS import android.util.IndentingPrintWriter import android.view.Display.DEFAULT_DISPLAY import android.view.IWindowManager import android.view.InputDevice Loading @@ -41,11 +42,16 @@ import com.android.wm.shell.desktopmode.desktopwallpaperactivity.DesktopWallpape import com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE import com.android.wm.shell.shared.annotations.ShellMainThread import com.android.wm.shell.shared.desktopmode.DesktopModeStatus import com.android.wm.shell.sysui.ShellCommandHandler import com.android.wm.shell.sysui.ShellInit import com.android.wm.shell.transition.Transitions import java.io.PrintWriter /** Controls the display windowing mode in desktop mode */ class DesktopDisplayModeController( private val context: Context, shellInit: ShellInit, shellCommandHandler: ShellCommandHandler, private val transitions: Transitions, private val rootTaskDisplayAreaOrganizer: RootTaskDisplayAreaOrganizer, private val windowManager: IWindowManager, Loading @@ -72,6 +78,7 @@ class DesktopDisplayModeController( } init { shellInit.addInitCallback({ shellCommandHandler.addDumpCallback(this::dump, this) }, this) if (DesktopExperienceFlags.FORM_FACTOR_BASED_DESKTOP_FIRST_SWITCH.isTrue) { inputManager.registerInputDeviceListener(inputDeviceListener, mainHandler) } Loading Loading @@ -252,6 +259,41 @@ class DesktopDisplayModeController( ProtoLog.w(WM_SHELL_DESKTOP_MODE, "%s: $msg", TAG, *arguments) } private fun dump(originalWriter: PrintWriter, prefix: String) { if (!DesktopExperienceFlags.ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING.isTrue) return val pw = IndentingPrintWriter(originalWriter, " ", prefix) pw.println(TAG) pw.increaseIndent() pw.println( "targetWindowingModeForDefaultDisplay=" + getTargetWindowingModeForDefaultDisplay() ) pw.println( "canDesktopFirstModeBeEnabledOnDefaultDisplay=" + canDesktopFirstModeBeEnabledOnDefaultDisplay() ) pw.println("isDefaultDisplayDesktopEligible=" + isDefaultDisplayDesktopEligible()) pw.println("isExtendedDisplayEnabled=" + isExtendedDisplayEnabled()) pw.println("hasExternalDisplay=" + hasExternalDisplay()) if (DesktopExperienceFlags.FORM_FACTOR_BASED_DESKTOP_FIRST_SWITCH.isTrue) { pw.println("hasAnyTouchpadDevice=" + hasAnyTouchpadDevice()) pw.println("hasAnyPhysicalKeyboardDevice=" + hasAnyPhysicalKeyboardDevice()) } pw.println("Current Desktop Display Modes:") pw.increaseIndent() rootTaskDisplayAreaOrganizer.displayIds.forEach { displayId -> val desktopFirstEnabled = rootTaskDisplayAreaOrganizer .getDisplayAreaInfo(displayId) ?.configuration ?.windowConfiguration ?.windowingMode == WINDOWING_MODE_FREEFORM ?: false pw.println("Display#$displayId desktopFirstEnabled=$desktopFirstEnabled") } } companion object { private const val TAG = "DesktopDisplayModeController" } Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopDisplayModeControllerTest.kt +6 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,8 @@ import com.android.wm.shell.TestRunningTaskInfoBuilder import com.android.wm.shell.common.DisplayController import com.android.wm.shell.desktopmode.desktopwallpaperactivity.DesktopWallpaperActivityTokenProvider import com.android.wm.shell.shared.desktopmode.DesktopModeStatus import com.android.wm.shell.sysui.ShellCommandHandler import com.android.wm.shell.sysui.ShellInit import com.android.wm.shell.transition.Transitions import com.google.common.truth.Truth.assertThat import com.google.testing.junit.testparameterinjector.TestParameter Loading Loading @@ -83,6 +85,8 @@ class DesktopDisplayModeControllerTest( @TestParameter(valuesProvider = FlagsParameterizationProvider::class) flags: FlagsParameterization ) : ShellTestCase() { private val shellInit = mock<ShellInit>() private val shellCommandHandler = mock<ShellCommandHandler>() private val transitions = mock<Transitions>() private val rootTaskDisplayAreaOrganizer = mock<RootTaskDisplayAreaOrganizer>() private val mockWindowManager = mock<IWindowManager>() Loading Loading @@ -135,6 +139,8 @@ class DesktopDisplayModeControllerTest( controller = DesktopDisplayModeController( context, shellInit, shellCommandHandler, transitions, rootTaskDisplayAreaOrganizer, mockWindowManager, Loading