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

Commit 6dc609bd authored by Michael Mikhail's avatar Michael Mikhail Committed by Automerger Merge Worker
Browse files

Merge "Fixing white circle in QS media player." into tm-qpr-dev am: b66710bb

parents d673cc0c b66710bb
Loading
Loading
Loading
Loading
+14 −3
Original line number Diff line number Diff line
@@ -518,9 +518,20 @@ class MediaDataManager(
            }
            val actions = createActionsFromState(it.packageName,
                    mediaControllerFactory.create(it.token), UserHandle(it.userId))
            val data = it.copy(

            // Control buttons
            // If flag is enabled and controller has a PlaybackState,
            // create actions from session info
            // otherwise, no need to update semantic actions.
            val data = if (actions != null) {
                it.copy(
                        semanticActions = actions,
                        isPlaying = isPlayingState(state.state))
            } else {
                it.copy(
                        isPlaying = isPlayingState(state.state)
                )
            }
            if (DEBUG) Log.d(TAG, "State updated outside of notification")
            onMediaDataLoaded(key, key, data)
        }
+78 −4
Original line number Diff line number Diff line
@@ -31,7 +31,6 @@ import com.android.systemui.statusbar.SbnBuilder
import com.android.systemui.tuner.TunerService
import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.argumentCaptor
import com.android.systemui.util.mockito.capture
import com.android.systemui.util.mockito.eq
import com.android.systemui.util.time.FakeSystemClock
@@ -108,6 +107,7 @@ class MediaDataManagerTest : SysuiTestCase() {
    private val clock = FakeSystemClock()
    @Mock private lateinit var tunerService: TunerService
    @Captor lateinit var tunableCaptor: ArgumentCaptor<TunerService.Tunable>
    @Captor lateinit var callbackCaptor: ArgumentCaptor<(String, PlaybackState) -> Unit>

    private val instanceIdSequence = InstanceIdSequenceFake(1 shl 20)

@@ -974,7 +974,6 @@ class MediaDataManagerTest : SysuiTestCase() {
    fun testPlaybackStateChange_keyExists_callsListener() {
        // Notification has been added
        addNotificationAndLoad()
        val callbackCaptor = argumentCaptor<(String, PlaybackState) -> Unit>()
        verify(mediaTimeoutListener).stateCallback = capture(callbackCaptor)

        // Callback gets an updated state
@@ -992,7 +991,6 @@ class MediaDataManagerTest : SysuiTestCase() {
    @Test
    fun testPlaybackStateChange_keyDoesNotExist_doesNothing() {
        val state = PlaybackState.Builder().build()
        val callbackCaptor = argumentCaptor<(String, PlaybackState) -> Unit>()
        verify(mediaTimeoutListener).stateCallback = capture(callbackCaptor)

        // No media added with this key
@@ -1013,7 +1011,6 @@ class MediaDataManagerTest : SysuiTestCase() {

        // And then get a state update
        val state = PlaybackState.Builder().build()
        val callbackCaptor = argumentCaptor<(String, PlaybackState) -> Unit>()
        verify(mediaTimeoutListener).stateCallback = capture(callbackCaptor)

        // Then no changes are made
@@ -1022,6 +1019,83 @@ class MediaDataManagerTest : SysuiTestCase() {
            anyBoolean())
    }

    @Test
    fun testPlaybackState_PauseWhenFlagTrue_keyExists_callsListener() {
        whenever(mediaFlags.areMediaSessionActionsEnabled(any(), any())).thenReturn(true)
        val state = PlaybackState.Builder()
                .setState(PlaybackState.STATE_PAUSED, 0L, 1f)
                .build()
        whenever(controller.playbackState).thenReturn(state)

        addNotificationAndLoad()
        verify(mediaTimeoutListener).stateCallback = capture(callbackCaptor)
        callbackCaptor.value.invoke(KEY, state)

        verify(listener).onMediaDataLoaded(eq(KEY), eq(KEY),
                capture(mediaDataCaptor), eq(true), eq(0), eq(false))
        assertThat(mediaDataCaptor.value.isPlaying).isFalse()
        assertThat(mediaDataCaptor.value.semanticActions).isNotNull()
    }

    @Test
    fun testPlaybackState_PauseStateAfterAddingResumption_keyExists_callsListener() {
        val desc = MediaDescription.Builder().run {
            setTitle(SESSION_TITLE)
            build()
        }
        val state = PlaybackState.Builder()
                .setState(PlaybackState.STATE_PAUSED, 0L, 1f)
                .setActions(PlaybackState.ACTION_PLAY_PAUSE)
                .build()

        // Add resumption controls in order to have semantic actions.
        // To make sure that they are not null after changing state.
        mediaDataManager.addResumptionControls(
                USER_ID,
                desc,
                Runnable {},
                session.sessionToken,
                APP_NAME,
                pendingIntent,
                PACKAGE_NAME
        )
        backgroundExecutor.runAllReady()
        foregroundExecutor.runAllReady()

        verify(mediaTimeoutListener).stateCallback = capture(callbackCaptor)
        callbackCaptor.value.invoke(PACKAGE_NAME, state)

        verify(listener)
                .onMediaDataLoaded(
                        eq(PACKAGE_NAME),
                        eq(PACKAGE_NAME),
                        capture(mediaDataCaptor),
                        eq(true),
                        eq(0),
                        eq(false)
                )
        assertThat(mediaDataCaptor.value.isPlaying).isFalse()
        assertThat(mediaDataCaptor.value.semanticActions).isNotNull()
    }

    @Test
    fun testPlaybackStateNull_Pause_keyExists_callsListener() {
        whenever(controller.playbackState).thenReturn(null)
        val state = PlaybackState.Builder()
                .setState(PlaybackState.STATE_PAUSED, 0L, 1f)
                .setActions(PlaybackState.ACTION_PLAY_PAUSE)
                .build()

        addNotificationAndLoad()
        verify(mediaTimeoutListener).stateCallback = capture(callbackCaptor)
        callbackCaptor.value.invoke(KEY, state)

        verify(listener).onMediaDataLoaded(eq(KEY), eq(KEY),
                capture(mediaDataCaptor), eq(true), eq(0), eq(false))
        assertThat(mediaDataCaptor.value.isPlaying).isFalse()
        assertThat(mediaDataCaptor.value.semanticActions).isNull()
    }

    /**
     * Helper function to add a media notification and capture the resulting MediaData
     */