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

Commit 4daa7119 authored by Beth Thibodeau's avatar Beth Thibodeau Committed by Automerger Merge Worker
Browse files

Merge changes from topic "presubmit-am-66f9fba9d0a249a588735f9b6b3a2a81" into...

Merge changes from topic "presubmit-am-66f9fba9d0a249a588735f9b6b3a2a81" into tm-mainline-prod am: 5da91192

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17652004



Change-Id: I2ac2ec41da1da771f68a206d595ee7b673b7624b
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 401b185e 5da91192
Loading
Loading
Loading
Loading
+23 −7
Original line number Diff line number Diff line
@@ -852,18 +852,23 @@ class MediaDataManager(
    }

    /**
     * Get a [MediaAction] representing one of
     * - [PlaybackState.ACTION_PLAY]
     * - [PlaybackState.ACTION_PAUSE]
     * - [PlaybackState.ACTION_SKIP_TO_PREVIOUS]
     * - [PlaybackState.ACTION_SKIP_TO_NEXT]
     * Create a [MediaAction] for a given action and media session
     *
     * @param controller MediaController for the session
     * @param stateActions The actions included with the session's [PlaybackState]
     * @param action A [PlaybackState.Actions] value representing what action to generate. One of:
     *      [PlaybackState.ACTION_PLAY]
     *      [PlaybackState.ACTION_PAUSE]
     *      [PlaybackState.ACTION_SKIP_TO_PREVIOUS]
     *      [PlaybackState.ACTION_SKIP_TO_NEXT]
     * @return A [MediaAction] with correct values set, or null if the state doesn't support it
     */
    private fun getStandardAction(
        controller: MediaController,
        stateActions: Long,
        action: Long
        @PlaybackState.Actions action: Long
    ): MediaAction? {
        if (stateActions and action == 0L) {
        if (!includesAction(stateActions, action)) {
            return null
        }

@@ -904,6 +909,17 @@ class MediaDataManager(
        }
    }

    /**
     * Check whether the actions from a [PlaybackState] include a specific action
     */
    private fun includesAction(stateActions: Long, @PlaybackState.Actions action: Long): Boolean {
        if ((action == PlaybackState.ACTION_PLAY || action == PlaybackState.ACTION_PAUSE) &&
                (stateActions and PlaybackState.ACTION_PLAY_PAUSE > 0L)) {
            return true
        }
        return (stateActions and action != 0L)
    }

    /**
     * Get a [MediaAction] representing a [PlaybackState.CustomAction]
     */
+19 −0
Original line number Diff line number Diff line
@@ -811,6 +811,25 @@ class MediaDataManagerTest : SysuiTestCase() {
        assertThat(actions.custom1!!.contentDescription).isEqualTo(customDesc[1])
    }

    @Test
    fun testPlaybackActions_playPause_hasButton() {
        whenever(mediaFlags.areMediaSessionActionsEnabled(any(), any())).thenReturn(true)
        val stateActions = PlaybackState.ACTION_PLAY_PAUSE
        val stateBuilder = PlaybackState.Builder().setActions(stateActions)
        whenever(controller.playbackState).thenReturn(stateBuilder.build())

        addNotificationAndLoad()

        assertThat(mediaDataCaptor.value!!.semanticActions).isNotNull()
        val actions = mediaDataCaptor.value!!.semanticActions!!

        assertThat(actions.playOrPause).isNotNull()
        assertThat(actions.playOrPause!!.contentDescription).isEqualTo(
            context.getString(R.string.controls_media_button_play))
        actions.playOrPause!!.action!!.run()
        verify(transportControls).play()
    }

    @Test
    fun testPlaybackLocationChange_isLogged() {
        // Media control added for local playback