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

Commit af5c8ad1 authored by Sergey Nikolaienkov's avatar Sergey Nikolaienkov Committed by Android (Google) Code Review
Browse files

Merge "More TvPipMenuTests tests in WmShell"

parents df2aa886 b28adf0d
Loading
Loading
Loading
Loading
+61 −20
Original line number Diff line number Diff line
@@ -16,9 +16,10 @@

package com.android.wm.shell.flicker.pip.tv

import android.os.SystemClock
import androidx.test.filters.RequiresDevice
import org.junit.Assert.assertNotNull
import androidx.test.uiautomator.UiObject2
import com.android.wm.shell.flicker.SYSTEM_UI_PACKAGE_NAME
import com.android.wm.shell.flicker.wait
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
@@ -34,21 +35,27 @@ import org.junit.runners.Parameterized
class TvPipMenuTests(rotationName: String, rotation: Int)
    : TvPipTestBase(rotationName, rotation) {

    private val systemUiResources =
            packageManager.getResourcesForApplication(SYSTEM_UI_PACKAGE_NAME)
    private val playButtonDescription = systemUiResources.run {
        getString(getIdentifier("pip_play", "string", SYSTEM_UI_PACKAGE_NAME))
    }
    private val pauseButtonDescription = systemUiResources.run {
        getString(getIdentifier("pip_pause", "string", SYSTEM_UI_PACKAGE_NAME))
    }

    @Before
    override fun setUp() {
        super.setUp()
        // Launch the app and go to PiP
        testApp.launchViaIntent()
        testApp.clickEnterPipButton()
    }

    @Test
    fun pipMenu_open() {
        // Pressing the Window key should bring up Pip menu
        uiDevice.pressWindowKey()
        val pipMenu = uiDevice.waitForTvPipMenu()
                ?: fail("Pip notification should have been dismissed")
        val pipMenu = enterPip_openMenu_assertShown()

        // Make sure it's fullscreen
        assertTrue("Pip menu should be shown fullscreen", pipMenu.isFullscreen(uiDevice))

        testApp.closePipWindow()
@@ -56,22 +63,29 @@ class TvPipMenuTests(rotationName: String, rotation: Int)

    @Test
    fun pipMenu_backButton() {
        // Pressing the Window key should bring up Pip menu
        uiDevice.pressWindowKey()
        assertNotNull("Pip notification should have been dismissed", uiDevice.waitForTvPipMenu())
        enterPip_openMenu_assertShown()

        // Pressing the Back key should close the Pip menu
        uiDevice.pressBack()
        assertTrue("Pip notification should have closed", uiDevice.waitForTvPipMenuToClose())
        assertTrue("Pip menu should have closed", uiDevice.waitForTvPipMenuToClose())

        testApp.closePipWindow()
    }

    @Test
    fun pipMenu_homeButton() {
        enterPip_openMenu_assertShown()

        // Pressing the Home key should close the Pip menu
        uiDevice.pressHome()
        assertTrue("Pip menu should have closed", uiDevice.waitForTvPipMenuToClose())

        testApp.closePipWindow()
    }

    @Test
    fun pipMenu_closeButton() {
        // Pressing the Window key should bring up Pip menu
        uiDevice.pressWindowKey()
        assertNotNull("Pip notification should have been dismissed", uiDevice.waitForTvPipMenu())
        enterPip_openMenu_assertShown()

        // PiP menu should contain the Close button
        val closeButton = uiDevice.findTvPipMenuCloseButton()
@@ -84,26 +98,53 @@ class TvPipMenuTests(rotationName: String, rotation: Int)

    @Test
    fun pipMenu_fullscreenButton() {
        // Pressing the Window key should bring up Pip menu
        uiDevice.pressWindowKey()
        assertNotNull("Pip notification should have been dismissed", uiDevice.waitForTvPipMenu())
        enterPip_openMenu_assertShown()

        // PiP menu should contain the Fullscreen button
        val fullscreenButton = uiDevice.findTvPipMenuFullscreenButton()
                ?: fail("\"Full screen\" button should be shown in Pip menu")

        // Clicking on the fullscreen button should return app to the fullscreen mode.
        // Click, wait for 3 seconds, check the app is fullscreen
        // Click, wait for the app to go fullscreen
        fullscreenButton.click()
        SystemClock.sleep(3_000L)
        assertTrue("\"Full screen\" button should open the app fullscreen",
                testApp.ui?.isFullscreen(uiDevice) ?: false)
                wait { testApp.ui?.isFullscreen(uiDevice) ?: false })

        // Close the app
        uiDevice.pressBack()
        testApp.waitUntilClosed()
    }

    @Test
    fun pipMenu_mediaPlayPauseButtons() {
        // Start media session before entering PiP
        testApp.clickStartMediaSessionButton()

        enterPip_openMenu_assertShown()

        // PiP menu should contain the Pause button
        val pauseButton = uiDevice.findTvPipMenuElementWithDescription(pauseButtonDescription)
                ?: fail("\"Pause\" button should be shown in Pip menu if there is an active " +
                        "playing media session.")

        // When we pause media, the button should change from Pause to Play
        pauseButton.click()

        // PiP menu should contain the Play button now
        uiDevice.waitForTvPipMenuElementWithDescription(playButtonDescription)
                ?: fail("\"Play\" button should be shown in Pip menu if there is an active " +
                        "paused media session.")

        testApp.closePipWindow()
    }

    private fun enterPip_openMenu_assertShown(): UiObject2 {
        testApp.clickEnterPipButton()
        // Pressing the Window key should bring up Pip menu
        uiDevice.pressWindowKey()
        return uiDevice.waitForTvPipMenu() ?: fail("Pip menu should have been shown")
    }

    companion object {
        @Parameterized.Parameters(name = "{0}")
        @JvmStatic
+13 −0
Original line number Diff line number Diff line
@@ -45,6 +45,19 @@ fun UiDevice.findTvPipMenuCloseButton(): UiObject2? = findObject(
fun UiDevice.findTvPipMenuFullscreenButton(): UiObject2? = findObject(
        By.res(SYSTEM_UI_PACKAGE_NAME, TV_PIP_MENU_FULLSCREEN_BUTTON_ID))

fun UiDevice.findTvPipMenuElementWithDescription(desc: String): UiObject2? {
    val buttonSelector = By.desc(desc)
    val menuWithButtonSelector = By.copy(tvPipMenuSelector).hasDescendant(buttonSelector)
    return findObject(menuWithButtonSelector)?.findObject(buttonSelector)
}

fun UiDevice.waitForTvPipMenuElementWithDescription(desc: String): UiObject2? {
    val buttonSelector = By.desc(desc)
    val menuWithButtonSelector = By.copy(tvPipMenuSelector).hasDescendant(buttonSelector)
    return wait(Until.findObject(menuWithButtonSelector), WAIT_TIME_MS)
            ?.findObject(buttonSelector)
}

fun UiObject2.isFullscreen(uiDevice: UiDevice): Boolean = visibleBounds.run {
    height() == uiDevice.displayHeight && width() == uiDevice.displayWidth
}
 No newline at end of file
+3 −2
Original line number Diff line number Diff line
@@ -17,7 +17,8 @@
package com.android.wm.shell.flicker.testapp;

import static android.media.MediaMetadata.METADATA_KEY_TITLE;
import static android.media.session.PlaybackState.ACTION_PLAY_PAUSE;
import static android.media.session.PlaybackState.ACTION_PAUSE;
import static android.media.session.PlaybackState.ACTION_PLAY;
import static android.media.session.PlaybackState.ACTION_STOP;
import static android.media.session.PlaybackState.STATE_PAUSED;
import static android.media.session.PlaybackState.STATE_PLAYING;
@@ -48,7 +49,7 @@ public class PipActivity extends Activity {

    private MediaSession mMediaSession;
    private final PlaybackState.Builder mPlaybackStateBuilder = new PlaybackState.Builder()
            .setActions(ACTION_PLAY_PAUSE | ACTION_STOP)
            .setActions(ACTION_PLAY | ACTION_PAUSE | ACTION_STOP)
            .setState(STATE_STOPPED, 0, 1f);
    private PlaybackState mPlaybackState = mPlaybackStateBuilder.build();
    private final MediaMetadata.Builder mMediaMetadataBuilder = new MediaMetadata.Builder();