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

Commit d752b2e3 authored by Charles Chen's avatar Charles Chen
Browse files

Test entering PIP from split-screen with bottom half layout

Bug: 356277166
Test: atest BottomHalfEnterPipToOtherOrientation
Test: atest BottomHalfSetRequestedOrientationWhilePinned
Flag: com.android.window.flags.better_support_non_match_parent_activity

Change-Id: If6564c17084c1f3cc339e093a3a071532df8667b
parent 6e7c4101
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -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"],
}
@@ -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
////////////////////////////////////////////////////////////////////////////////
+1 −1
Original line number Diff line number Diff line
@@ -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 {
+2 −2
Original line number Diff line number Diff line
@@ -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,
+2 −2
Original line number Diff line number Diff line
@@ -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,
+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