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

Commit 767d362b authored by Beth Thibodeau's avatar Beth Thibodeau Committed by Android (Google) Code Review
Browse files

Merge "Add play/pause button when state has ACTION_PLAY_PAUSE" into tm-dev

parents e5d0c2d2 872a9d75
Loading
Loading
Loading
Loading
+23 −7
Original line number Diff line number Diff line
@@ -843,18 +843,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
        }

@@ -895,6 +900,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
@@ -780,6 +780,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