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

Commit 2a04cc40 authored by Beth Thibodeau's avatar Beth Thibodeau Committed by Automerger Merge Worker
Browse files

Merge "Add check for null token when updating state" into tm-dev am:...

Merge "Add check for null token when updating state" into tm-dev am: 0e29401d am: be6ae603 am: 291a87bc

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18634544



Change-Id: I54a04e4234c0f32ee359fc5d364b06694215bee0
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 9a60d8d8 291a87bc
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.media;

import android.annotation.NonNull;
import android.content.Context;
import android.media.session.MediaController;
import android.media.session.MediaSession;
@@ -39,7 +40,7 @@ public class MediaControllerFactory {
     *
     * @param token The token for the session. This value must never be null.
     */
    public MediaController create(MediaSession.Token token) {
    public MediaController create(@NonNull MediaSession.Token token) {
        return new MediaController(mContext, token);
    }
}
+5 −0
Original line number Diff line number Diff line
@@ -509,6 +509,11 @@ class MediaDataManager(
     */
    private fun updateState(key: String, state: PlaybackState) {
        mediaEntries.get(key)?.let {
            val token = it.token
            if (token == null) {
                if (DEBUG) Log.d(TAG, "State updated, but token was null")
                return
            }
            val actions = createActionsFromState(it.packageName,
                    mediaControllerFactory.create(it.token), UserHandle(it.userId))
            val data = it.copy(
+3 −2
Original line number Diff line number Diff line
@@ -161,8 +161,9 @@ class MediaTimeoutListener @Inject constructor(
                destroyed = false
                mediaController?.unregisterCallback(this)
                field = value
                mediaController = if (field.token != null) {
                    mediaControllerFactory.create(field.token)
                val token = field.token
                mediaController = if (token != null) {
                    mediaControllerFactory.create(token)
                } else {
                    null
                }
+20 −0
Original line number Diff line number Diff line
@@ -978,6 +978,26 @@ class MediaDataManagerTest : SysuiTestCase() {
                anyBoolean())
    }

    @Test
    fun testPlaybackStateChange_keyHasNullToken_doesNothing() {
        // When we get an update that sets the data's token to null
        whenever(controller.metadata).thenReturn(metadataBuilder.build())
        addNotificationAndLoad()
        val data = mediaDataCaptor.value
        assertThat(data.resumption).isFalse()
        mediaDataManager.onMediaDataLoaded(KEY, null, data.copy(token = null))

        // 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
        callbackCaptor.value.invoke(KEY, state)
        verify(listener, never()).onMediaDataLoaded(eq(KEY), any(), any(), anyBoolean(), anyInt(),
            anyBoolean())
    }

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