Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit db980461 authored by Toshiki Kikuchi's avatar Toshiki Kikuchi
Browse files

Add dump command to DesktopDisplayModeController

Fix: 406615467
Flag: com.android.window.flags.enable_display_windowing_mode_switching
Flag: com.android.window.flags.form_factor_based_desktop_first_switch
Test: adb shell dumpsys activity service SystemUIService WMShell
Change-Id: I68d73e56f65598025e608b98ee8f11e349ff22d9
parent aaf54cb6
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -1496,6 +1496,8 @@ public abstract class WMShellModule {
    @Provides
    static Optional<DesktopDisplayModeController> provideDesktopDisplayModeController(
            Context context,
            ShellInit shellInit,
            ShellCommandHandler shellCommandHandler,
            Transitions transitions,
            RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer,
            IWindowManager windowManager,
@@ -1511,6 +1513,8 @@ public abstract class WMShellModule {
        return Optional.of(
                new DesktopDisplayModeController(
                        context,
                        shellInit,
                        shellCommandHandler,
                        transitions,
                        rootTaskDisplayAreaOrganizer,
                        windowManager,
+42 −0
Original line number Diff line number Diff line
@@ -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
@@ -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,
@@ -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)
        }
@@ -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"
    }
+6 −0
Original line number Diff line number Diff line
@@ -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
@@ -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>()
@@ -135,6 +139,8 @@ class DesktopDisplayModeControllerTest(
        controller =
            DesktopDisplayModeController(
                context,
                shellInit,
                shellCommandHandler,
                transitions,
                rootTaskDisplayAreaOrganizer,
                mockWindowManager,