Merge "Remove MediaData object reference" into udc-dev

This commit is contained in:
Beth Thibodeau
2023-04-13 15:16:51 +00:00
committed by Android (Google) Code Review

View File

@@ -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