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

Commit ce3c17d7 authored by Michael Mikhail's avatar Michael Mikhail Committed by Android (Google) Code Review
Browse files

Merge "Send all binder calls in MediaTimeoutListener to background thread." into main

parents 2d6224dd e2b6ed23
Loading
Loading
Loading
Loading
+26 −18
Original line number Diff line number Diff line
@@ -16,12 +16,14 @@

package com.android.systemui.media.controls.domain.pipeline

import android.annotation.WorkerThread
import android.media.session.MediaController
import android.media.session.MediaSession
import android.media.session.PlaybackState
import android.os.SystemProperties
import com.android.internal.annotations.VisibleForTesting
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.media.controls.shared.model.MediaData
import com.android.systemui.media.controls.shared.model.SmartspaceMediaData
@@ -32,6 +34,7 @@ import com.android.systemui.statusbar.NotificationMediaManager.isPlayingState
import com.android.systemui.statusbar.SysuiStatusBarStateController
import com.android.systemui.util.concurrency.DelayableExecutor
import com.android.systemui.util.time.SystemClock
import java.util.concurrent.Executor
import java.util.concurrent.TimeUnit
import javax.inject.Inject

@@ -49,6 +52,8 @@ class MediaTimeoutListener
@Inject
constructor(
    private val mediaControllerFactory: MediaControllerFactory,
    @Background private val bgExecutor: Executor,
    @Main private val uiExecutor: Executor,
    @Main private val mainExecutor: DelayableExecutor,
    private val logger: MediaTimeoutLogger,
    statusBarStateController: SysuiStatusBarStateController,
@@ -147,6 +152,7 @@ constructor(
        }

        reusedListener?.let {
            bgExecutor.execute {
                val wasPlaying = it.isPlaying()
                logger.logUpdateListener(key, wasPlaying)
                it.setMediaData(data)
@@ -163,6 +169,7 @@ constructor(
                        }
                    }
                }
            }
            return
        }

@@ -221,15 +228,16 @@ constructor(
        fun isPlaying() = lastState?.state?.isPlaying() ?: false

        init {
            setMediaData(data)
            bgExecutor.execute { setMediaData(data) }
        }

        fun destroy() {
            mediaController?.unregisterCallback(this)
            bgExecutor.execute { mediaController?.unregisterCallback(this) }
            cancellation?.run()
            destroyed = true
        }

        @WorkerThread
        fun setMediaData(data: MediaData) {
            sessionToken = data.token
            destroyed = false
@@ -259,7 +267,7 @@ constructor(
            if (resumption == true) {
                // Some apps create a session when MBS is queried. We should unregister the
                // controller since it will no longer be valid, but don't cancel the timeout
                mediaController?.unregisterCallback(this)
                bgExecutor.execute { mediaController?.unregisterCallback(this) }
            } else {
                // For active controls, if the session is destroyed, clean up everything since we
                // will need to recreate it if this key is updated later
@@ -285,7 +293,7 @@ constructor(

            if ((!actionsSame || !playingStateSame) && state != null && dispatchEvents) {
                logger.logStateCallback(key)
                stateCallback.invoke(key, state)
                uiExecutor.execute { stateCallback.invoke(key, state) }
            }

            if (playingStateSame && !resumptionChanged) {
@@ -314,7 +322,7 @@ constructor(
                expireMediaTimeout(key, "playback started - $state, $key")
                timedOut = false
                if (dispatchEvents) {
                    timeoutCallback(key, timedOut)
                    uiExecutor.execute { timeoutCallback(key, timedOut) }
                }
            }
        }
+83 −65

File changed.

Preview size limit exceeded, changes collapsed.

+2 −0
Original line number Diff line number Diff line
@@ -28,6 +28,8 @@ val Kosmos.mediaTimeoutListener by
    Kosmos.Fixture {
        MediaTimeoutListener(
            mediaControllerFactory = fakeMediaControllerFactory,
            bgExecutor = fakeExecutor,
            uiExecutor = fakeExecutor,
            mainExecutor = fakeExecutor,
            logger = MediaTimeoutLogger(logcatLogBuffer("MediaTimeoutLogBuffer")),
            statusBarStateController = statusBarStateController,