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

Commit 0d868923 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Conserve activity flag after notif update" into rvc-dev

parents e948137a e267f4da
Loading
Loading
Loading
Loading
+4 −3
Original line number Original line 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 {
        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,
            onMediaDataLoaded(key, oldKey, MediaData(true, bgColor, app, smallIconDrawable, artist,
                    song, artWorkIcon, actionIcons, actionsToShowCollapsed, sbn.packageName, token,
                    song, artWorkIcon, actionIcons, actionsToShowCollapsed, sbn.packageName, token,
                    notif.contentIntent, null, active = true, resumeAction = resumeAction,
                    notif.contentIntent, null, active, resumeAction = resumeAction,
                    notificationKey = key, hasCheckedForResume = hasCheckedForResume))
                    notificationKey = key, hasCheckedForResume = hasCheckedForResume))
        }
        }
    }
    }
+8 −1
Original line number Original line Diff line number Diff line
@@ -71,6 +71,7 @@ class MediaTimeoutListener @Inject constructor(
    ) : MediaController.Callback() {
    ) : MediaController.Callback() {


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


        // Resume controls may have null token
        // Resume controls may have null token
        private val mediaController = if (data.token != null) {
        private val mediaController = if (data.token != null) {
@@ -94,7 +95,13 @@ class MediaTimeoutListener @Inject constructor(
                Log.v(TAG, "onPlaybackStateChanged: $state")
                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) {
                if (DEBUG) {
                    Log.v(TAG, "schedule timeout for $key")
                    Log.v(TAG, "schedule timeout for $key")
                }
                }
+39 −2
Original line number Original line 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.dump.DumpManager
import com.android.systemui.statusbar.SbnBuilder
import com.android.systemui.statusbar.SbnBuilder
import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.mockito.eq
import com.android.systemui.util.time.FakeSystemClock
import com.android.systemui.util.time.FakeSystemClock
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertThat
import org.junit.After
import org.junit.After
@@ -26,8 +27,8 @@ import org.mockito.Mock
import org.mockito.Mockito
import org.mockito.Mockito
import org.mockito.Mockito.mock
import org.mockito.Mockito.mock
import org.mockito.Mockito.verify
import org.mockito.Mockito.verify
import org.mockito.Mockito.`when` as whenever
import org.mockito.junit.MockitoJUnit
import org.mockito.junit.MockitoJUnit
import org.mockito.Mockito.`when` as whenever


private const val KEY = "KEY"
private const val KEY = "KEY"
private const val PACKAGE_NAME = "com.android.systemui"
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_ARTIST = "artist"
private const val SESSION_TITLE = "title"
private const val SESSION_TITLE = "title"


private fun <T> eq(value: T): T = Mockito.eq(value) ?: value
private fun <T> anyObject(): T {
private fun <T> anyObject(): T {
    return Mockito.anyObject<T>()
    return Mockito.anyObject<T>()
}
}
@@ -103,6 +103,19 @@ class MediaDataManagerTest : SysuiTestCase() {
        assertThat(mediaDataManager.hasActiveMedia()).isTrue()
        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
    @Test
    fun testLoadsMetadataOnBackground() {
    fun testLoadsMetadataOnBackground() {
        mediaDataManager.onNotificationAdded(KEY, mediaNotification)
        mediaDataManager.onNotificationAdded(KEY, mediaNotification)
@@ -118,6 +131,30 @@ class MediaDataManagerTest : SysuiTestCase() {
        verify(listener).onMediaDataLoaded(eq(KEY), eq(null), anyObject())
        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
    @Test
    fun testHasAnyMedia_whenAddingMedia() {
    fun testHasAnyMedia_whenAddingMedia() {
        assertThat(mediaDataManager.hasAnyMedia()).isFalse()
        assertThat(mediaDataManager.hasAnyMedia()).isFalse()