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

Commit feef5b17 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add dump command to DesktopDisplayModeController" into main

parents f185719e db980461
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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,
@@ -1514,6 +1516,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,