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

Commit 4be42068 authored by Michael Mikhail's avatar Michael Mikhail
Browse files

Run processState method in background thread

Flag: EXEMPT BUGFIX
Bug: 364610391
Test: atest MediaTimeoutListenerTest
Change-Id: Ic636ec67df98937d6a8817ef71e2c71438c7ac4e
parent c116e195
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -128,7 +128,7 @@ constructor(
        data: MediaData,
        immediately: Boolean,
        receivedSmartspaceCardLatency: Int,
        isSsReactivated: Boolean
        isSsReactivated: Boolean,
    ) {
        var reusedListener: PlaybackStateListener? = null

@@ -183,7 +183,7 @@ constructor(
    override fun onSmartspaceMediaDataLoaded(
        key: String,
        data: SmartspaceMediaData,
        shouldPrioritize: Boolean
        shouldPrioritize: Boolean,
    ) {
        if (!mediaFlags.isPersistentSsCardEnabled()) return

@@ -259,8 +259,10 @@ constructor(
        }

        override fun onPlaybackStateChanged(state: PlaybackState?) {
            bgExecutor.execute {
                processState(state, dispatchEvents = true, currentResumption = resumption)
            }
        }

        override fun onSessionDestroyed() {
            logger.logSessionDestroyed(key)
@@ -276,6 +278,7 @@ constructor(
            }
        }

        @WorkerThread
        private fun processState(
            state: PlaybackState?,
            dispatchEvents: Boolean,
+19 −14
Original line number Diff line number Diff line
@@ -137,7 +137,7 @@ class MediaTimeoutListenerTest : SysuiTestCase() {
            MediaTestUtils.emptyMediaData.copy(
                app = PACKAGE,
                packageName = PACKAGE,
                token = session.sessionToken
                token = session.sessionToken,
            )

        resumeData = mediaData.copy(token = null, active = false, resumption = true)
@@ -237,7 +237,7 @@ class MediaTimeoutListenerTest : SysuiTestCase() {
        // Assuming we're registered
        testOnMediaDataLoaded_registersPlaybackListener()

        mediaCallbackCaptor.value.onPlaybackStateChanged(
        onPlaybackStateChanged(
            PlaybackState.Builder().setState(PlaybackState.STATE_PAUSED, 0L, 0f).build()
        )
        assertThat(mainExecutor.numPending()).isEqualTo(1)
@@ -249,7 +249,7 @@ class MediaTimeoutListenerTest : SysuiTestCase() {
        // Assuming we have a pending timeout
        testOnPlaybackStateChanged_schedulesTimeout_whenPaused()

        mediaCallbackCaptor.value.onPlaybackStateChanged(
        onPlaybackStateChanged(
            PlaybackState.Builder().setState(PlaybackState.STATE_PLAYING, 0L, 0f).build()
        )
        assertThat(mainExecutor.numPending()).isEqualTo(0)
@@ -261,7 +261,7 @@ class MediaTimeoutListenerTest : SysuiTestCase() {
        // Assuming we have a pending timeout
        testOnPlaybackStateChanged_schedulesTimeout_whenPaused()

        mediaCallbackCaptor.value.onPlaybackStateChanged(
        onPlaybackStateChanged(
            PlaybackState.Builder().setState(PlaybackState.STATE_STOPPED, 0L, 0f).build()
        )
        assertThat(mainExecutor.numPending()).isEqualTo(1)
@@ -435,7 +435,7 @@ class MediaTimeoutListenerTest : SysuiTestCase() {

        // When the playback state changes, and has different actions
        val playingState = PlaybackState.Builder().setActions(PlaybackState.ACTION_PLAY).build()
        mediaCallbackCaptor.value.onPlaybackStateChanged(playingState)
        onPlaybackStateChanged(playingState)
        assertThat(uiExecutor.runAllReady()).isEqualTo(1)

        // Then the callback is invoked
@@ -448,7 +448,7 @@ class MediaTimeoutListenerTest : SysuiTestCase() {
            PlaybackState.CustomAction.Builder(
                    "ACTION_1",
                    "custom action 1",
                    android.R.drawable.ic_media_ff
                    android.R.drawable.ic_media_ff,
                )
                .build()
        val pausedState =
@@ -463,7 +463,7 @@ class MediaTimeoutListenerTest : SysuiTestCase() {
            PlaybackState.CustomAction.Builder(
                    "ACTION_2",
                    "custom action 2",
                    android.R.drawable.ic_media_rew
                    android.R.drawable.ic_media_rew,
                )
                .build()
        val pausedStateTwoActions =
@@ -472,7 +472,7 @@ class MediaTimeoutListenerTest : SysuiTestCase() {
                .addCustomAction(customOne)
                .addCustomAction(customTwo)
                .build()
        mediaCallbackCaptor.value.onPlaybackStateChanged(pausedStateTwoActions)
        onPlaybackStateChanged(pausedStateTwoActions)
        assertThat(uiExecutor.runAllReady()).isEqualTo(1)

        // Then the callback is invoked
@@ -485,7 +485,7 @@ class MediaTimeoutListenerTest : SysuiTestCase() {
        loadMediaDataWithPlaybackState(stateWithActions)

        // When the playback state updates with the same actions
        mediaCallbackCaptor.value.onPlaybackStateChanged(stateWithActions)
        onPlaybackStateChanged(stateWithActions)

        // Then the callback is not invoked again
        verify(stateCallback, never()).invoke(eq(KEY), any())
@@ -512,7 +512,7 @@ class MediaTimeoutListenerTest : SysuiTestCase() {
                .setActions(PlaybackState.ACTION_PAUSE)
                .addCustomAction(customTwo)
                .build()
        mediaCallbackCaptor.value.onPlaybackStateChanged(stateTwo)
        onPlaybackStateChanged(stateTwo)

        // Then the callback is not invoked
        verify(stateCallback, never()).invoke(eq(KEY), any())
@@ -544,7 +544,7 @@ class MediaTimeoutListenerTest : SysuiTestCase() {
        // When the playback state changes to playing
        val playingState =
            PlaybackState.Builder().setState(PlaybackState.STATE_PLAYING, 0L, 1f).build()
        mediaCallbackCaptor.value.onPlaybackStateChanged(playingState)
        onPlaybackStateChanged(playingState)
        uiExecutor.runAllReady()

        // Then the callback is invoked
@@ -561,7 +561,7 @@ class MediaTimeoutListenerTest : SysuiTestCase() {
        // When the playback state is updated, but still not playing
        val playingState =
            PlaybackState.Builder().setState(PlaybackState.STATE_STOPPED, 0L, 0f).build()
        mediaCallbackCaptor.value.onPlaybackStateChanged(playingState)
        onPlaybackStateChanged(playingState)

        // Then the callback is not invoked
        verify(stateCallback, never()).invoke(eq(KEY), eq(playingState!!))
@@ -571,7 +571,7 @@ class MediaTimeoutListenerTest : SysuiTestCase() {
    fun testTimeoutCallback_dozedPastTimeout_invokedOnWakeup() {
        // When paused media is loaded
        testOnMediaDataLoaded_registersPlaybackListener()
        mediaCallbackCaptor.value.onPlaybackStateChanged(
        onPlaybackStateChanged(
            PlaybackState.Builder().setState(PlaybackState.STATE_PAUSED, 0L, 0f).build()
        )
        verify(statusBarStateController).addCallback(capture(dozingCallbackCaptor))
@@ -597,7 +597,7 @@ class MediaTimeoutListenerTest : SysuiTestCase() {
        val time = clock.currentTimeMillis()
        clock.setElapsedRealtime(time)
        testOnMediaDataLoaded_registersPlaybackListener()
        mediaCallbackCaptor.value.onPlaybackStateChanged(
        onPlaybackStateChanged(
            PlaybackState.Builder().setState(PlaybackState.STATE_PAUSED, 0L, 0f).build()
        )
        verify(statusBarStateController).addCallback(capture(dozingCallbackCaptor))
@@ -706,4 +706,9 @@ class MediaTimeoutListenerTest : SysuiTestCase() {
        bgExecutor.runAllReady()
        uiExecutor.runAllReady()
    }

    private fun onPlaybackStateChanged(state: PlaybackState) {
        mediaCallbackCaptor.value.onPlaybackStateChanged(state)
        bgExecutor.runAllReady()
    }
}