Loading libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/Android.bp +8 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,7 @@ test_module_config { "com.android.wm.shell.functional.FocusAppFromTaskbarTest", "com.android.wm.shell.functional.FocusAppFromTaskbarOverflowTest", "com.android.wm.shell.functional.MoveToNextDisplayTest", "com.android.wm.shell.functional.MoveToNextDisplayProjectedTest", "com.android.wm.shell.functional.OpenTrampolineAppInDesktopModeTaskLimitTest", "com.android.wm.shell.functional.TabTearingDesktopWindowingLimitTest", "com.android.wm.shell.functional.TabTearingTest", Loading Loading @@ -244,6 +245,13 @@ test_module_config { include_filters: ["com.android.wm.shell.functional.MoveToNextDisplayTest"], } test_module_config { name: "FunctionalTestsDesktopMode-MoveToNextDisplayProjectedTest", base: "FunctionalTestsDesktopMode", test_suites: ["device-tests"], include_filters: ["com.android.wm.shell.functional.MoveToNextDisplayProjectedTest"], } test_module_config { name: "FunctionalTestsDesktopMode-OpenTrampolineAppInDesktopModeTaskLimitTest", base: "FunctionalTestsDesktopMode", Loading libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/TEST_MAPPING +3 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,9 @@ { "name": "FunctionalTestsDesktopMode-MoveToNextDisplayTest" }, { "name": "FunctionalTestsDesktopMode-MoveToNextDisplayProjectedTest" }, { "name": "FunctionalTestsDesktopMode-OpenTrampolineAppInDesktopModeTaskLimitTest" }, Loading libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/src/com/android/wm/shell/functional/MoveToNextDisplayProjectedTest.kt 0 → 100644 +27 −0 Original line number Diff line number Diff line /* * Copyright (C) 2025 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.wm.shell.functional import android.platform.test.annotations.Presubmit import com.android.wm.shell.scenarios.MoveToNextDisplayProjected import org.junit.runner.RunWith import org.junit.runners.BlockJUnit4ClassRunner /* Functional test for [MoveToNextDisplayProjected]. */ @RunWith(BlockJUnit4ClassRunner::class) @Presubmit class MoveToNextDisplayProjectedTest : MoveToNextDisplayProjected() libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/src/com/android/wm/shell/scenarios/MoveToNextDisplayProjected.kt 0 → 100644 +81 −0 Original line number Diff line number Diff line /* * Copyright (C) 2025 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.wm.shell.scenarios import android.platform.test.annotations.RequiresFlagsEnabled import android.platform.test.flag.junit.DeviceFlagsValueProvider import android.tools.NavBar import android.tools.PlatformConsts.DEFAULT_DISPLAY import android.tools.Rotation import android.tools.traces.parsers.WindowManagerStateHelper import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation import com.android.launcher3.tapl.LauncherInstrumentation import com.android.server.wm.flicker.helpers.DesktopModeAppHelper import com.android.server.wm.flicker.helpers.SimpleAppHelper import com.android.window.flags.Flags import com.android.wm.shell.Utils import com.android.wm.shell.shared.desktopmode.DesktopState import org.junit.After import org.junit.Assume import org.junit.Before import org.junit.Ignore import org.junit.Rule import org.junit.Test import platform.test.desktop.SimulatedConnectedDisplayTestRule /** * Base scenario test for moving a projected task to another display via the keyboard shortcut. */ @Ignore("Test Base Class") @RequiresFlagsEnabled( Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE, Flags.FLAG_ENABLE_MOVE_TO_NEXT_DISPLAY_SHORTCUT, Flags.FLAG_MOVE_TO_NEXT_DISPLAY_SHORTCUT_WITH_PROJECTED_MODE, ) abstract class MoveToNextDisplayProjected { private val tapl = LauncherInstrumentation() private val wmHelper = WindowManagerStateHelper(getInstrumentation()) private val testApp = DesktopModeAppHelper(SimpleAppHelper(getInstrumentation())) @get:Rule(order = 0) val checkFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule() @get:Rule(order = 1) val testSetupRule = Utils.testSetupRule(NavBar.MODE_GESTURAL, Rotation.ROTATION_0) @get:Rule(order = 2) val connectedDisplayRule = SimulatedConnectedDisplayTestRule() @Before fun setup() { val desktopState = DesktopState.fromContext(getInstrumentation().context) Assume.assumeTrue(desktopState.canEnterDesktopMode) Assume.assumeFalse(desktopState.isDesktopModeSupportedOnDisplay(DEFAULT_DISPLAY)) } @Test open fun moveToNextDisplayProjected() { val connectedDisplayId = connectedDisplayRule.setupTestDisplay() testApp.launchViaIntent(wmHelper) // Move from internal to external testApp.moveToNextDisplayViaKeyboard(wmHelper, connectedDisplayId) // Move from external to internal testApp.moveToNextDisplayViaKeyboard(wmHelper, DEFAULT_DISPLAY) } @After fun teardown() { testApp.exit(wmHelper) } } Loading
libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/Android.bp +8 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,7 @@ test_module_config { "com.android.wm.shell.functional.FocusAppFromTaskbarTest", "com.android.wm.shell.functional.FocusAppFromTaskbarOverflowTest", "com.android.wm.shell.functional.MoveToNextDisplayTest", "com.android.wm.shell.functional.MoveToNextDisplayProjectedTest", "com.android.wm.shell.functional.OpenTrampolineAppInDesktopModeTaskLimitTest", "com.android.wm.shell.functional.TabTearingDesktopWindowingLimitTest", "com.android.wm.shell.functional.TabTearingTest", Loading Loading @@ -244,6 +245,13 @@ test_module_config { include_filters: ["com.android.wm.shell.functional.MoveToNextDisplayTest"], } test_module_config { name: "FunctionalTestsDesktopMode-MoveToNextDisplayProjectedTest", base: "FunctionalTestsDesktopMode", test_suites: ["device-tests"], include_filters: ["com.android.wm.shell.functional.MoveToNextDisplayProjectedTest"], } test_module_config { name: "FunctionalTestsDesktopMode-OpenTrampolineAppInDesktopModeTaskLimitTest", base: "FunctionalTestsDesktopMode", Loading
libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/TEST_MAPPING +3 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,9 @@ { "name": "FunctionalTestsDesktopMode-MoveToNextDisplayTest" }, { "name": "FunctionalTestsDesktopMode-MoveToNextDisplayProjectedTest" }, { "name": "FunctionalTestsDesktopMode-OpenTrampolineAppInDesktopModeTaskLimitTest" }, Loading
libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/src/com/android/wm/shell/functional/MoveToNextDisplayProjectedTest.kt 0 → 100644 +27 −0 Original line number Diff line number Diff line /* * Copyright (C) 2025 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.wm.shell.functional import android.platform.test.annotations.Presubmit import com.android.wm.shell.scenarios.MoveToNextDisplayProjected import org.junit.runner.RunWith import org.junit.runners.BlockJUnit4ClassRunner /* Functional test for [MoveToNextDisplayProjected]. */ @RunWith(BlockJUnit4ClassRunner::class) @Presubmit class MoveToNextDisplayProjectedTest : MoveToNextDisplayProjected()
libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/src/com/android/wm/shell/scenarios/MoveToNextDisplayProjected.kt 0 → 100644 +81 −0 Original line number Diff line number Diff line /* * Copyright (C) 2025 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.wm.shell.scenarios import android.platform.test.annotations.RequiresFlagsEnabled import android.platform.test.flag.junit.DeviceFlagsValueProvider import android.tools.NavBar import android.tools.PlatformConsts.DEFAULT_DISPLAY import android.tools.Rotation import android.tools.traces.parsers.WindowManagerStateHelper import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation import com.android.launcher3.tapl.LauncherInstrumentation import com.android.server.wm.flicker.helpers.DesktopModeAppHelper import com.android.server.wm.flicker.helpers.SimpleAppHelper import com.android.window.flags.Flags import com.android.wm.shell.Utils import com.android.wm.shell.shared.desktopmode.DesktopState import org.junit.After import org.junit.Assume import org.junit.Before import org.junit.Ignore import org.junit.Rule import org.junit.Test import platform.test.desktop.SimulatedConnectedDisplayTestRule /** * Base scenario test for moving a projected task to another display via the keyboard shortcut. */ @Ignore("Test Base Class") @RequiresFlagsEnabled( Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE, Flags.FLAG_ENABLE_MOVE_TO_NEXT_DISPLAY_SHORTCUT, Flags.FLAG_MOVE_TO_NEXT_DISPLAY_SHORTCUT_WITH_PROJECTED_MODE, ) abstract class MoveToNextDisplayProjected { private val tapl = LauncherInstrumentation() private val wmHelper = WindowManagerStateHelper(getInstrumentation()) private val testApp = DesktopModeAppHelper(SimpleAppHelper(getInstrumentation())) @get:Rule(order = 0) val checkFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule() @get:Rule(order = 1) val testSetupRule = Utils.testSetupRule(NavBar.MODE_GESTURAL, Rotation.ROTATION_0) @get:Rule(order = 2) val connectedDisplayRule = SimulatedConnectedDisplayTestRule() @Before fun setup() { val desktopState = DesktopState.fromContext(getInstrumentation().context) Assume.assumeTrue(desktopState.canEnterDesktopMode) Assume.assumeFalse(desktopState.isDesktopModeSupportedOnDisplay(DEFAULT_DISPLAY)) } @Test open fun moveToNextDisplayProjected() { val connectedDisplayId = connectedDisplayRule.setupTestDisplay() testApp.launchViaIntent(wmHelper) // Move from internal to external testApp.moveToNextDisplayViaKeyboard(wmHelper, connectedDisplayId) // Move from external to internal testApp.moveToNextDisplayViaKeyboard(wmHelper, DEFAULT_DISPLAY) } @After fun teardown() { testApp.exit(wmHelper) } }