Loading libs/WindowManager/Shell/tests/flicker/pip/Android.bp +16 −0 Original line number Diff line number Diff line Loading @@ -122,6 +122,8 @@ test_module_config { "com.android.wm.shell.flicker.pip.nonmatchparent.BottomHalfExitPipToAppViaExpandButtonTest", "com.android.wm.shell.flicker.pip.nonmatchparent.BottomHalfExitPipToAppViaIntentTest", "com.android.wm.shell.flicker.pip.nonmatchparent.BottomHalfSetRequestedOrientationWhilePinned", "com.android.wm.shell.flicker.pip.nonmatchparent.BottomHalfFromSplitScreenAutoEnterPipOnGoToHomeTest", "com.android.wm.shell.flicker.pip.nonmatchparent.BottomHalfFromSplitScreenEnterPipOnUserLeaveHintTest", ], test_suites: ["device-tests"], } Loading Loading @@ -324,5 +326,19 @@ test_module_config { test_suites: ["device-tests"], } test_module_config { name: "WMShellFlickerTestsPip-BottomHalfFromSplitScreenAutoEnterPipOnGoToHomeTest", base: "WMShellFlickerTestsPip", include_filters: ["com.android.wm.shell.flicker.pip.nonmatchparent.BottomHalfFromSplitScreenAutoEnterPipOnGoToHomeTest"], test_suites: ["device-tests"], } test_module_config { name: "WMShellFlickerTestsPip-BottomHalfFromSplitScreenEnterPipOnUserLeaveHintTest", base: "WMShellFlickerTestsPip", include_filters: ["com.android.wm.shell.flicker.pip.nonmatchparent.BottomHalfFromSplitScreenEnterPipOnUserLeaveHintTest"], test_suites: ["device-tests"], } // End breakdowns for WMShellFlickerTestsPip module //////////////////////////////////////////////////////////////////////////////// libs/WindowManager/Shell/tests/flicker/pip/src/com/android/wm/shell/flicker/pip/AutoEnterPipOnGoToHomeTest.kt +1 −1 Original line number Diff line number Diff line Loading @@ -114,7 +114,7 @@ open class AutoEnterPipOnGoToHomeTest(flicker: LegacyFlickerTest) : EnterPipTran /** Checks that [pipApp] window is animated towards default position in right bottom corner */ @FlakyTest(bugId = 255578530) @Test fun pipLayerMovesTowardsRightBottomCorner() { open fun pipLayerMovesTowardsRightBottomCorner() { // in gestural nav the swipe makes PiP first go upwards Assume.assumeFalse(flicker.scenario.isGesturalNavigation) flicker.assertLayers { Loading libs/WindowManager/Shell/tests/flicker/pip/src/com/android/wm/shell/flicker/pip/FromSplitScreenAutoEnterPipOnGoToHomeTest.kt +2 −2 Original line number Diff line number Diff line Loading @@ -65,11 +65,11 @@ import org.junit.runners.Parameterized @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) @RequiresFlagsDisabled(Flags.FLAG_ENABLE_PIP2) class FromSplitScreenAutoEnterPipOnGoToHomeTest(flicker: LegacyFlickerTest) : open class FromSplitScreenAutoEnterPipOnGoToHomeTest(flicker: LegacyFlickerTest) : AutoEnterPipOnGoToHomeTest(flicker) { private val portraitDisplayBounds = WindowUtils.getDisplayBounds(Rotation.ROTATION_0) /** Second app used to enter split screen mode */ private val secondAppForSplitScreen = internal val secondAppForSplitScreen = SimpleAppHelper( instrumentation, ActivityOptions.SplitScreen.Primary.LABEL, Loading libs/WindowManager/Shell/tests/flicker/pip/src/com/android/wm/shell/flicker/pip/FromSplitScreenEnterPipOnUserLeaveHintTest.kt +2 −2 Original line number Diff line number Diff line Loading @@ -67,12 +67,12 @@ import org.junit.runners.Parameterized @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) @RequiresFlagsDisabled(Flags.FLAG_ENABLE_PIP2) class FromSplitScreenEnterPipOnUserLeaveHintTest(flicker: LegacyFlickerTest) : open class FromSplitScreenEnterPipOnUserLeaveHintTest(flicker: LegacyFlickerTest) : EnterPipTransition(flicker) { override val pipApp: PipAppHelper = PipAppHelper(instrumentation) private val portraitDisplayBounds = WindowUtils.getDisplayBounds(Rotation.ROTATION_0) /** Second app used to enter split screen mode */ private val secondAppForSplitScreen = internal val secondAppForSplitScreen = SimpleAppHelper( instrumentation, ActivityOptions.SplitScreen.Primary.LABEL, Loading libs/WindowManager/Shell/tests/flicker/pip/src/com/android/wm/shell/flicker/pip/nonmatchparent/BottomHalfFromSplitScreenAutoEnterPipOnGoToHomeTest.kt 0 → 100644 +131 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 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.flicker.pip.nonmatchparent import android.platform.test.annotations.Presubmit import android.platform.test.annotations.RequiresDevice import android.platform.test.annotations.RequiresFlagsDisabled import android.platform.test.annotations.RequiresFlagsEnabled import android.tools.flicker.junit.FlickerParametersRunnerFactory import android.tools.flicker.legacy.FlickerBuilder import android.tools.flicker.legacy.LegacyFlickerTest import android.tools.traces.parsers.toFlickerComponent import com.android.server.wm.flicker.helpers.BottomHalfPipAppHelper import com.android.server.wm.flicker.testapp.ActivityOptions import com.android.window.flags.Flags import com.android.wm.shell.flicker.pip.FromSplitScreenAutoEnterPipOnGoToHomeTest import com.android.wm.shell.flicker.utils.SplitScreenUtils import org.junit.Assume import org.junit.FixMethodOrder import org.junit.Test import org.junit.runners.MethodSorters import org.junit.runners.Parameterized /** * Test entering pip from a bottom half layout app via auto-enter property when navigating to home * from split screen. * * To run this test: * `atest WMShellFlickerTestsPip:BottomHalfFromSplitScreenAutoEnterPipOnGoToHomeTest` * * Actions: * ``` * Launch an app in full screen * Open all apps and drag another app icon to enter split screen * Select "Auto-enter PiP" radio button * Layout the [pipApp] to the bottom half * Press Home button or swipe up to go Home and put [pipApp] in pip mode * ``` * * Notes: * ``` * 1. All assertions are inherited from [EnterPipTest] * 2. Part of the test setup occurs automatically via * [android.tools.flicker.legacy.runner.TransitionRunner], * including configuring navigation mode, initial orientation and ensuring no * apps are running before setup * ``` */ // TODO(b/380796448): re-enable tests after the support of non-match parent PIP animation for PIP2. @RequiresFlagsDisabled(com.android.wm.shell.Flags.FLAG_ENABLE_PIP2) @RequiresFlagsEnabled(Flags.FLAG_BETTER_SUPPORT_NON_MATCH_PARENT_ACTIVITY) @RequiresDevice @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) class BottomHalfFromSplitScreenAutoEnterPipOnGoToHomeTest(flicker: LegacyFlickerTest) : FromSplitScreenAutoEnterPipOnGoToHomeTest(flicker) { override val pipApp = BottomHalfPipAppHelper( instrumentation, useLaunchingActivity = true, // Set the activity to fill task to enable auto enter pip via the radio option. fillTaskOnCreate = true ) /** Defines the transition used to run the test */ override val transition: FlickerBuilder.() -> Unit get() = { setup { secondAppForSplitScreen.launchViaIntent(wmHelper) pipApp.launchViaIntent(wmHelper) tapl.goHome() SplitScreenUtils.enterSplit( wmHelper, tapl, device, pipApp, secondAppForSplitScreen, flicker.scenario.startRotation ) pipApp.enableAutoEnterForPipActivity() // Set BottomHalfPipActivity to bottom half layout to continue the test. pipApp.toggleBottomHalfLayout() wmHelper.StateSyncBuilder() .withLayerVisible( ActivityOptions.BottomHalfPip.LAUNCHING_APP_COMPONENT.toFlickerComponent() ).waitForAndVerify() } teardown { pipApp.exit(wmHelper) secondAppForSplitScreen.exit(wmHelper) } transitions { tapl.goHome() } } @Presubmit @Test override fun pipLayerMovesTowardsRightBottomCorner() { // For bottom half layout in split secondary, the start position may be lower than the final // pip task position. } /** * Verifies the left edge of the pip layer moves to the right continuously. */ @Presubmit @Test fun pipLayerMovesTowardsRight() { // in gestural nav the swipe makes PiP first go upwards Assume.assumeFalse(flicker.scenario.isGesturalNavigation) flicker.assertLayers { val pipLayerList = this.layers { pipApp.layerMatchesAnyOf(it) && it.isVisible } pipLayerList.zipWithNext { previous, current -> current.visibleRegion.isLeftEdgeToTheRight(previous.visibleRegion.region) } } } } No newline at end of file Loading
libs/WindowManager/Shell/tests/flicker/pip/Android.bp +16 −0 Original line number Diff line number Diff line Loading @@ -122,6 +122,8 @@ test_module_config { "com.android.wm.shell.flicker.pip.nonmatchparent.BottomHalfExitPipToAppViaExpandButtonTest", "com.android.wm.shell.flicker.pip.nonmatchparent.BottomHalfExitPipToAppViaIntentTest", "com.android.wm.shell.flicker.pip.nonmatchparent.BottomHalfSetRequestedOrientationWhilePinned", "com.android.wm.shell.flicker.pip.nonmatchparent.BottomHalfFromSplitScreenAutoEnterPipOnGoToHomeTest", "com.android.wm.shell.flicker.pip.nonmatchparent.BottomHalfFromSplitScreenEnterPipOnUserLeaveHintTest", ], test_suites: ["device-tests"], } Loading Loading @@ -324,5 +326,19 @@ test_module_config { test_suites: ["device-tests"], } test_module_config { name: "WMShellFlickerTestsPip-BottomHalfFromSplitScreenAutoEnterPipOnGoToHomeTest", base: "WMShellFlickerTestsPip", include_filters: ["com.android.wm.shell.flicker.pip.nonmatchparent.BottomHalfFromSplitScreenAutoEnterPipOnGoToHomeTest"], test_suites: ["device-tests"], } test_module_config { name: "WMShellFlickerTestsPip-BottomHalfFromSplitScreenEnterPipOnUserLeaveHintTest", base: "WMShellFlickerTestsPip", include_filters: ["com.android.wm.shell.flicker.pip.nonmatchparent.BottomHalfFromSplitScreenEnterPipOnUserLeaveHintTest"], test_suites: ["device-tests"], } // End breakdowns for WMShellFlickerTestsPip module ////////////////////////////////////////////////////////////////////////////////
libs/WindowManager/Shell/tests/flicker/pip/src/com/android/wm/shell/flicker/pip/AutoEnterPipOnGoToHomeTest.kt +1 −1 Original line number Diff line number Diff line Loading @@ -114,7 +114,7 @@ open class AutoEnterPipOnGoToHomeTest(flicker: LegacyFlickerTest) : EnterPipTran /** Checks that [pipApp] window is animated towards default position in right bottom corner */ @FlakyTest(bugId = 255578530) @Test fun pipLayerMovesTowardsRightBottomCorner() { open fun pipLayerMovesTowardsRightBottomCorner() { // in gestural nav the swipe makes PiP first go upwards Assume.assumeFalse(flicker.scenario.isGesturalNavigation) flicker.assertLayers { Loading
libs/WindowManager/Shell/tests/flicker/pip/src/com/android/wm/shell/flicker/pip/FromSplitScreenAutoEnterPipOnGoToHomeTest.kt +2 −2 Original line number Diff line number Diff line Loading @@ -65,11 +65,11 @@ import org.junit.runners.Parameterized @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) @RequiresFlagsDisabled(Flags.FLAG_ENABLE_PIP2) class FromSplitScreenAutoEnterPipOnGoToHomeTest(flicker: LegacyFlickerTest) : open class FromSplitScreenAutoEnterPipOnGoToHomeTest(flicker: LegacyFlickerTest) : AutoEnterPipOnGoToHomeTest(flicker) { private val portraitDisplayBounds = WindowUtils.getDisplayBounds(Rotation.ROTATION_0) /** Second app used to enter split screen mode */ private val secondAppForSplitScreen = internal val secondAppForSplitScreen = SimpleAppHelper( instrumentation, ActivityOptions.SplitScreen.Primary.LABEL, Loading
libs/WindowManager/Shell/tests/flicker/pip/src/com/android/wm/shell/flicker/pip/FromSplitScreenEnterPipOnUserLeaveHintTest.kt +2 −2 Original line number Diff line number Diff line Loading @@ -67,12 +67,12 @@ import org.junit.runners.Parameterized @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) @RequiresFlagsDisabled(Flags.FLAG_ENABLE_PIP2) class FromSplitScreenEnterPipOnUserLeaveHintTest(flicker: LegacyFlickerTest) : open class FromSplitScreenEnterPipOnUserLeaveHintTest(flicker: LegacyFlickerTest) : EnterPipTransition(flicker) { override val pipApp: PipAppHelper = PipAppHelper(instrumentation) private val portraitDisplayBounds = WindowUtils.getDisplayBounds(Rotation.ROTATION_0) /** Second app used to enter split screen mode */ private val secondAppForSplitScreen = internal val secondAppForSplitScreen = SimpleAppHelper( instrumentation, ActivityOptions.SplitScreen.Primary.LABEL, Loading
libs/WindowManager/Shell/tests/flicker/pip/src/com/android/wm/shell/flicker/pip/nonmatchparent/BottomHalfFromSplitScreenAutoEnterPipOnGoToHomeTest.kt 0 → 100644 +131 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 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.flicker.pip.nonmatchparent import android.platform.test.annotations.Presubmit import android.platform.test.annotations.RequiresDevice import android.platform.test.annotations.RequiresFlagsDisabled import android.platform.test.annotations.RequiresFlagsEnabled import android.tools.flicker.junit.FlickerParametersRunnerFactory import android.tools.flicker.legacy.FlickerBuilder import android.tools.flicker.legacy.LegacyFlickerTest import android.tools.traces.parsers.toFlickerComponent import com.android.server.wm.flicker.helpers.BottomHalfPipAppHelper import com.android.server.wm.flicker.testapp.ActivityOptions import com.android.window.flags.Flags import com.android.wm.shell.flicker.pip.FromSplitScreenAutoEnterPipOnGoToHomeTest import com.android.wm.shell.flicker.utils.SplitScreenUtils import org.junit.Assume import org.junit.FixMethodOrder import org.junit.Test import org.junit.runners.MethodSorters import org.junit.runners.Parameterized /** * Test entering pip from a bottom half layout app via auto-enter property when navigating to home * from split screen. * * To run this test: * `atest WMShellFlickerTestsPip:BottomHalfFromSplitScreenAutoEnterPipOnGoToHomeTest` * * Actions: * ``` * Launch an app in full screen * Open all apps and drag another app icon to enter split screen * Select "Auto-enter PiP" radio button * Layout the [pipApp] to the bottom half * Press Home button or swipe up to go Home and put [pipApp] in pip mode * ``` * * Notes: * ``` * 1. All assertions are inherited from [EnterPipTest] * 2. Part of the test setup occurs automatically via * [android.tools.flicker.legacy.runner.TransitionRunner], * including configuring navigation mode, initial orientation and ensuring no * apps are running before setup * ``` */ // TODO(b/380796448): re-enable tests after the support of non-match parent PIP animation for PIP2. @RequiresFlagsDisabled(com.android.wm.shell.Flags.FLAG_ENABLE_PIP2) @RequiresFlagsEnabled(Flags.FLAG_BETTER_SUPPORT_NON_MATCH_PARENT_ACTIVITY) @RequiresDevice @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) class BottomHalfFromSplitScreenAutoEnterPipOnGoToHomeTest(flicker: LegacyFlickerTest) : FromSplitScreenAutoEnterPipOnGoToHomeTest(flicker) { override val pipApp = BottomHalfPipAppHelper( instrumentation, useLaunchingActivity = true, // Set the activity to fill task to enable auto enter pip via the radio option. fillTaskOnCreate = true ) /** Defines the transition used to run the test */ override val transition: FlickerBuilder.() -> Unit get() = { setup { secondAppForSplitScreen.launchViaIntent(wmHelper) pipApp.launchViaIntent(wmHelper) tapl.goHome() SplitScreenUtils.enterSplit( wmHelper, tapl, device, pipApp, secondAppForSplitScreen, flicker.scenario.startRotation ) pipApp.enableAutoEnterForPipActivity() // Set BottomHalfPipActivity to bottom half layout to continue the test. pipApp.toggleBottomHalfLayout() wmHelper.StateSyncBuilder() .withLayerVisible( ActivityOptions.BottomHalfPip.LAUNCHING_APP_COMPONENT.toFlickerComponent() ).waitForAndVerify() } teardown { pipApp.exit(wmHelper) secondAppForSplitScreen.exit(wmHelper) } transitions { tapl.goHome() } } @Presubmit @Test override fun pipLayerMovesTowardsRightBottomCorner() { // For bottom half layout in split secondary, the start position may be lower than the final // pip task position. } /** * Verifies the left edge of the pip layer moves to the right continuously. */ @Presubmit @Test fun pipLayerMovesTowardsRight() { // in gestural nav the swipe makes PiP first go upwards Assume.assumeFalse(flicker.scenario.isGesturalNavigation) flicker.assertLayers { val pipLayerList = this.layers { pipApp.layerMatchesAnyOf(it) && it.isVisible } pipLayerList.zipWithNext { previous, current -> current.visibleRegion.isLeftEdgeToTheRight(previous.visibleRegion.region) } } } } No newline at end of file