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

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

Merge "Remove MediaData object reference" into udc-dev

parents a5ad6e30 b6d06713
Loading
Loading
Loading
Loading
+33 −25
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.media.controls.pipeline

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
@@ -148,7 +149,7 @@ constructor(
        reusedListener?.let {
            val wasPlaying = it.isPlaying()
            logger.logUpdateListener(key, wasPlaying)
            it.mediaData = data
            it.setMediaData(data)
            it.key = key
            mediaListeners[key] = it
            if (wasPlaying != it.isPlaying()) {
@@ -208,24 +209,7 @@ constructor(
        var resumption: Boolean? = null
        var destroyed = false
        var expiration = Long.MAX_VALUE

        var mediaData: MediaData = data
            set(value) {
                destroyed = false
                mediaController?.unregisterCallback(this)
                field = value
                val token = field.token
                mediaController =
                    if (token != null) {
                        mediaControllerFactory.create(token)
                    } else {
                        null
                    }
                mediaController?.registerCallback(this)
                // Let's register the cancellations, but not dispatch events now.
                // Timeouts didn't happen yet and reentrant events are troublesome.
                processState(mediaController?.playbackState, dispatchEvents = false)
            }
        var sessionToken: MediaSession.Token? = null

        // Resume controls may have null token
        private var mediaController: MediaController? = null
@@ -236,7 +220,7 @@ constructor(
        fun isPlaying() = lastState?.state?.isPlaying() ?: false

        init {
            mediaData = data
            setMediaData(data)
        }

        fun destroy() {
@@ -245,8 +229,28 @@ constructor(
            destroyed = true
        }

        fun setMediaData(data: MediaData) {
            sessionToken = data.token
            destroyed = false
            mediaController?.unregisterCallback(this)
            mediaController =
                if (data.token != null) {
                    mediaControllerFactory.create(data.token)
                } else {
                    null
                }
            mediaController?.registerCallback(this)
            // Let's register the cancellations, but not dispatch events now.
            // Timeouts didn't happen yet and reentrant events are troublesome.
            processState(
                mediaController?.playbackState,
                dispatchEvents = false,
                currentResumption = data.resumption,
            )
        }

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

        override fun onSessionDestroyed() {
@@ -263,14 +267,18 @@ constructor(
            }
        }

        private fun processState(state: PlaybackState?, dispatchEvents: Boolean) {
        private fun processState(
            state: PlaybackState?,
            dispatchEvents: Boolean,
            currentResumption: Boolean?,
        ) {
            logger.logPlaybackState(key, state)

            val playingStateSame = (state?.state?.isPlaying() == isPlaying())
            val actionsSame =
                (lastState?.actions == state?.actions) &&
                    areCustomActionListsEqual(lastState?.customActions, state?.customActions)
            val resumptionChanged = resumption != mediaData.resumption
            val resumptionChanged = resumption != currentResumption

            lastState = state

@@ -282,7 +290,7 @@ constructor(
            if (playingStateSame && !resumptionChanged) {
                return
            }
            resumption = mediaData.resumption
            resumption = currentResumption

            val playing = isPlaying()
            if (!playing) {
@@ -294,7 +302,7 @@ constructor(
                }
                expireMediaTimeout(key, "PLAYBACK STATE CHANGED - $state, $resumption")
                val timeout =
                    if (mediaData.resumption) {
                    if (currentResumption == true) {
                        RESUME_MEDIA_TIMEOUT
                    } else {
                        PAUSED_MEDIA_TIMEOUT