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

Commit 92815b0e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Conserve activity flag after notif update" into rvc-dev am: 0d868923 am: 93cf1840

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

Change-Id: Id8c56230e4d772bf93873c6b20472ba516eb660a
parents 7e698ec1 93cf1840
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -432,12 +432,13 @@ class MediaDataManager(
            }
        }

        val resumeAction: Runnable? = mediaEntries.get(key)?.resumeAction
        val hasCheckedForResume = mediaEntries.get(key)?.hasCheckedForResume == true
        foregroundExecutor.execute {
            val resumeAction: Runnable? = mediaEntries[key]?.resumeAction
            val hasCheckedForResume = mediaEntries[key]?.hasCheckedForResume == true
            val active = mediaEntries[key]?.active ?: true
            onMediaDataLoaded(key, oldKey, MediaData(true, bgColor, app, smallIconDrawable, artist,
                    song, artWorkIcon, actionIcons, actionsToShowCollapsed, sbn.packageName, token,
                    notif.contentIntent, null, active = true, resumeAction = resumeAction,
                    notif.contentIntent, null, active, resumeAction = resumeAction,
                    notificationKey = key, hasCheckedForResume = hasCheckedForResume))
        }
    }
+8 −1
Original line number Diff line number Diff line
@@ -71,6 +71,7 @@ class MediaTimeoutListener @Inject constructor(
    ) : MediaController.Callback() {

        var timedOut = false
        private var playing: Boolean? = null

        // Resume controls may have null token
        private val mediaController = if (data.token != null) {
@@ -94,7 +95,13 @@ class MediaTimeoutListener @Inject constructor(
                Log.v(TAG, "onPlaybackStateChanged: $state")
            }

            if (state == null || !isPlayingState(state.state)) {
            val isPlaying = state != null && isPlayingState(state.state)
            if (playing == isPlaying && playing != null) {
                return
            }
            playing = isPlaying

            if (!isPlaying) {
                if (DEBUG) {
                    Log.v(TAG, "schedule timeout for $key")
                }
+39 −2
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.dump.DumpManager
import com.android.systemui.statusbar.SbnBuilder
import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.mockito.eq
import com.android.systemui.util.time.FakeSystemClock
import com.google.common.truth.Truth.assertThat
import org.junit.After
@@ -26,8 +27,8 @@ import org.mockito.Mock
import org.mockito.Mockito
import org.mockito.Mockito.mock
import org.mockito.Mockito.verify
import org.mockito.Mockito.`when` as whenever
import org.mockito.junit.MockitoJUnit
import org.mockito.Mockito.`when` as whenever

private const val KEY = "KEY"
private const val PACKAGE_NAME = "com.android.systemui"
@@ -35,7 +36,6 @@ private const val APP_NAME = "SystemUI"
private const val SESSION_ARTIST = "artist"
private const val SESSION_TITLE = "title"

private fun <T> eq(value: T): T = Mockito.eq(value) ?: value
private fun <T> anyObject(): T {
    return Mockito.anyObject<T>()
}
@@ -103,6 +103,19 @@ class MediaDataManagerTest : SysuiTestCase() {
        assertThat(mediaDataManager.hasActiveMedia()).isTrue()
    }

    @Test
    fun testOnSwipeToDismiss_deactivatesMedia() {
        val data = MediaData(initialized = true, backgroundColor = 0, app = null, appIcon = null,
                artist = null, song = null, artwork = null, actions = emptyList(),
                actionsToShowInCompact = emptyList(), packageName = "INVALID", token = null,
                clickIntent = null, device = null, active = true, resumeAction = null)
        mediaDataManager.onNotificationAdded(KEY, mediaNotification)
        mediaDataManager.onMediaDataLoaded(KEY, oldKey = null, data = data)

        mediaDataManager.onSwipeToDismiss()
        assertThat(data.active).isFalse()
    }

    @Test
    fun testLoadsMetadataOnBackground() {
        mediaDataManager.onNotificationAdded(KEY, mediaNotification)
@@ -118,6 +131,30 @@ class MediaDataManagerTest : SysuiTestCase() {
        verify(listener).onMediaDataLoaded(eq(KEY), eq(null), anyObject())
    }

    @Test
    fun testOnMetaDataLoaded_conservesActiveFlag() {
        val listener = TestListener()
        whenever(mediaControllerFactory.create(anyObject())).thenReturn(controller)
        whenever(controller.metadata).thenReturn(metadataBuilder.build())
        mediaDataManager.addListener(listener)
        mediaDataManager.onNotificationAdded(KEY, mediaNotification)
        assertThat(backgroundExecutor.runAllReady()).isEqualTo(1)
        assertThat(foregroundExecutor.runAllReady()).isEqualTo(1)
        assertThat(listener.data!!.active).isTrue()

        // Swiping away makes the notification not active
        mediaDataManager.onSwipeToDismiss()
        assertThat(mediaDataManager.hasActiveMedia()).isFalse()

        // And when a notification is updated
        mediaDataManager.onNotificationAdded(KEY, mediaNotification)
        assertThat(backgroundExecutor.runAllReady()).isEqualTo(1)
        assertThat(foregroundExecutor.runAllReady()).isEqualTo(1)

        // MediaData should still be inactive
        assertThat(mediaDataManager.hasActiveMedia()).isFalse()
    }

    @Test
    fun testHasAnyMedia_whenAddingMedia() {
        assertThat(mediaDataManager.hasAnyMedia()).isFalse()