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

Commit 5b8c5b64 authored by Beth Thibodeau's avatar Beth Thibodeau
Browse files

Remove MEDIA_RETAIN_RECOMMENDATIONS flag

Fixes: 267166152
Bug: 382680767
Test: build, atest
Flag: EXEMPT removing unused flag code
Change-Id: I7cb8f9a663d50e90f5aa3372c0be28f0c397c833
parent 62d502b5
Loading
Loading
Loading
Loading
+0 −25
Original line number Original line Diff line number Diff line
@@ -22,8 +22,6 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.flags.Flags
import com.android.systemui.flags.fakeFeatureFlagsClassic
import com.android.systemui.kosmos.testScope
import com.android.systemui.kosmos.testScope
import com.android.systemui.media.controls.MediaTestHelper
import com.android.systemui.media.controls.MediaTestHelper
import com.android.systemui.media.controls.shared.model.MediaData
import com.android.systemui.media.controls.shared.model.MediaData
@@ -78,29 +76,6 @@ class MediaDataRepositoryTest : SysuiTestCase() {
            assertThat(entries!![secondKey]).isEqualTo(secondData)
            assertThat(entries!![secondKey]).isEqualTo(secondData)
        }
        }


    @Test
    fun setRecommendationInactive() =
        testScope.runTest {
            kosmos.fakeFeatureFlagsClassic.set(Flags.MEDIA_RETAIN_RECOMMENDATIONS, true)
            val smartspaceData by collectLastValue(underTest.smartspaceMediaData)
            val icon = Icon.createWithResource(context, R.drawable.ic_media_play)
            val recommendation =
                SmartspaceMediaData(
                    targetId = KEY_MEDIA_SMARTSPACE,
                    isActive = true,
                    recommendations = MediaTestHelper.getValidRecommendationList(icon),
                )

            underTest.setRecommendation(recommendation)

            assertThat(smartspaceData).isEqualTo(recommendation)

            underTest.setRecommendationInactive(KEY_MEDIA_SMARTSPACE)

            assertThat(smartspaceData).isNotEqualTo(recommendation)
            assertThat(smartspaceData!!.isActive).isFalse()
        }

    @Test
    @Test
    fun dismissRecommendation() =
    fun dismissRecommendation() =
        testScope.runTest {
        testScope.runTest {
+9 −14
Original line number Original line Diff line number Diff line
@@ -24,8 +24,6 @@ import androidx.test.filters.SmallTest
import com.android.internal.logging.InstanceId
import com.android.internal.logging.InstanceId
import com.android.systemui.SysuiTestCase
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.flags.Flags
import com.android.systemui.flags.fakeFeatureFlagsClassic
import com.android.systemui.kosmos.testScope
import com.android.systemui.kosmos.testScope
import com.android.systemui.media.controls.MediaTestHelper
import com.android.systemui.media.controls.MediaTestHelper
import com.android.systemui.media.controls.data.repository.MediaFilterRepository
import com.android.systemui.media.controls.data.repository.MediaFilterRepository
@@ -140,7 +138,6 @@ class MediaCarouselInteractorTest : SysuiTestCase() {
            val hasAnyMediaOrRecommendation by
            val hasAnyMediaOrRecommendation by
                collectLastValue(underTest.hasAnyMediaOrRecommendation)
                collectLastValue(underTest.hasAnyMediaOrRecommendation)
            val currentMedia by collectLastValue(underTest.currentMedia)
            val currentMedia by collectLastValue(underTest.currentMedia)
            kosmos.fakeFeatureFlagsClassic.set(Flags.MEDIA_RETAIN_RECOMMENDATIONS, false)


            val userMedia = MediaData(active = false)
            val userMedia = MediaData(active = false)
            val recsLoadingModel = SmartspaceMediaLoadingModel.Loaded(KEY_MEDIA_SMARTSPACE, true)
            val recsLoadingModel = SmartspaceMediaLoadingModel.Loaded(KEY_MEDIA_SMARTSPACE, true)
@@ -163,7 +160,7 @@ class MediaCarouselInteractorTest : SysuiTestCase() {
            assertThat(currentMedia)
            assertThat(currentMedia)
                .containsExactly(
                .containsExactly(
                    MediaCommonModel.MediaRecommendations(recsLoadingModel),
                    MediaCommonModel.MediaRecommendations(recsLoadingModel),
                    MediaCommonModel.MediaControl(mediaLoadingModel, true)
                    MediaCommonModel.MediaControl(mediaLoadingModel, true),
                )
                )
                .inOrder()
                .inOrder()


@@ -176,7 +173,7 @@ class MediaCarouselInteractorTest : SysuiTestCase() {
                    Process.INVALID_UID,
                    Process.INVALID_UID,
                    surface = SURFACE,
                    surface = SURFACE,
                    2,
                    2,
                    true
                    true,
                )
                )
        }
        }


@@ -187,7 +184,6 @@ class MediaCarouselInteractorTest : SysuiTestCase() {
                collectLastValue(underTest.hasActiveMediaOrRecommendation)
                collectLastValue(underTest.hasActiveMediaOrRecommendation)
            val hasAnyMediaOrRecommendation by
            val hasAnyMediaOrRecommendation by
                collectLastValue(underTest.hasAnyMediaOrRecommendation)
                collectLastValue(underTest.hasAnyMediaOrRecommendation)
            kosmos.fakeFeatureFlagsClassic.set(Flags.MEDIA_RETAIN_RECOMMENDATIONS, false)


            mediaFilterRepository.setRecommendation(mediaRecommendation)
            mediaFilterRepository.setRecommendation(mediaRecommendation)


@@ -207,7 +203,6 @@ class MediaCarouselInteractorTest : SysuiTestCase() {
                collectLastValue(underTest.hasActiveMediaOrRecommendation)
                collectLastValue(underTest.hasActiveMediaOrRecommendation)
            val hasAnyMediaOrRecommendation by
            val hasAnyMediaOrRecommendation by
                collectLastValue(underTest.hasAnyMediaOrRecommendation)
                collectLastValue(underTest.hasAnyMediaOrRecommendation)
            kosmos.fakeFeatureFlagsClassic.set(Flags.MEDIA_RETAIN_RECOMMENDATIONS, false)


            mediaFilterRepository.setRecommendation(mediaRecommendation)
            mediaFilterRepository.setRecommendation(mediaRecommendation)


@@ -248,7 +243,7 @@ class MediaCarouselInteractorTest : SysuiTestCase() {
                    active = true,
                    active = true,
                    instanceId = instanceId,
                    instanceId = instanceId,
                    packageName = PACKAGE_NAME,
                    packageName = PACKAGE_NAME,
                    notificationKey = KEY
                    notificationKey = KEY,
                )
                )
            val smartspaceLoadingModel = SmartspaceMediaLoadingModel.Loaded(KEY_MEDIA_SMARTSPACE)
            val smartspaceLoadingModel = SmartspaceMediaLoadingModel.Loaded(KEY_MEDIA_SMARTSPACE)
            val mediaLoadingModel = MediaDataLoadingModel.Loaded(instanceId)
            val mediaLoadingModel = MediaDataLoadingModel.Loaded(instanceId)
@@ -269,7 +264,7 @@ class MediaCarouselInteractorTest : SysuiTestCase() {
            assertThat(currentMedia)
            assertThat(currentMedia)
                .containsExactly(
                .containsExactly(
                    MediaCommonModel.MediaControl(mediaLoadingModel, isMediaFromRec = true),
                    MediaCommonModel.MediaControl(mediaLoadingModel, isMediaFromRec = true),
                    MediaCommonModel.MediaRecommendations(smartspaceLoadingModel)
                    MediaCommonModel.MediaRecommendations(smartspaceLoadingModel),
                )
                )
                .inOrder()
                .inOrder()
        }
        }
@@ -282,7 +277,7 @@ class MediaCarouselInteractorTest : SysuiTestCase() {
                active = true,
                active = true,
                instanceId = instanceId,
                instanceId = instanceId,
                packageName = PACKAGE_NAME,
                packageName = PACKAGE_NAME,
                notificationKey = KEY
                notificationKey = KEY,
            )
            )
        val smartspaceLoadingModel = SmartspaceMediaLoadingModel.Loaded(KEY_MEDIA_SMARTSPACE)
        val smartspaceLoadingModel = SmartspaceMediaLoadingModel.Loaded(KEY_MEDIA_SMARTSPACE)
        val mediaLoadingModel = MediaDataLoadingModel.Loaded(instanceId)
        val mediaLoadingModel = MediaDataLoadingModel.Loaded(instanceId)
@@ -297,7 +292,7 @@ class MediaCarouselInteractorTest : SysuiTestCase() {
                data.smartspaceId,
                data.smartspaceId,
                data.appUid,
                data.appUid,
                surface = SURFACE,
                surface = SURFACE,
                1
                1,
            )
            )


        reset(smartspaceLogger)
        reset(smartspaceLogger)
@@ -311,7 +306,7 @@ class MediaCarouselInteractorTest : SysuiTestCase() {
                data.smartspaceId,
                data.smartspaceId,
                data.appUid,
                data.appUid,
                surface = SURFACE,
                surface = SURFACE,
                2
                2,
            )
            )


        reset(smartspaceLogger)
        reset(smartspaceLogger)
@@ -327,7 +322,7 @@ class MediaCarouselInteractorTest : SysuiTestCase() {
                surface = SURFACE,
                surface = SURFACE,
                2,
                2,
                true,
                true,
                rank = 1
                rank = 1,
            )
            )


        reset(smartspaceLogger)
        reset(smartspaceLogger)
@@ -343,7 +338,7 @@ class MediaCarouselInteractorTest : SysuiTestCase() {
                data.smartspaceId,
                data.smartspaceId,
                data.appUid,
                data.appUid,
                surface = SURFACE,
                surface = SURFACE,
                2
                2,
            )
            )
    }
    }


+5 −23
Original line number Original line Diff line number Diff line
@@ -29,8 +29,6 @@ import com.android.systemui.animation.Expandable
import com.android.systemui.broadcast.broadcastSender
import com.android.systemui.broadcast.broadcastSender
import com.android.systemui.broadcast.mockBroadcastSender
import com.android.systemui.broadcast.mockBroadcastSender
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.flags.Flags
import com.android.systemui.flags.fakeFeatureFlagsClassic
import com.android.systemui.kosmos.testScope
import com.android.systemui.kosmos.testScope
import com.android.systemui.media.controls.MediaTestHelper
import com.android.systemui.media.controls.MediaTestHelper
import com.android.systemui.media.controls.domain.pipeline.MediaDataFilterImpl
import com.android.systemui.media.controls.domain.pipeline.MediaDataFilterImpl
@@ -104,8 +102,8 @@ class MediaRecommendationsInteractorTest : SysuiTestCase() {
                        listOf(
                        listOf(
                            MediaRecModel(icon = icon),
                            MediaRecModel(icon = icon),
                            MediaRecModel(icon = icon),
                            MediaRecModel(icon = icon),
                            MediaRecModel(icon = icon)
                            MediaRecModel(icon = icon),
                        )
                        ),
                )
                )


            mediaDataFilter.onSmartspaceMediaDataLoaded(KEY_MEDIA_SMARTSPACE, smartspaceMediaData)
            mediaDataFilter.onSmartspaceMediaDataLoaded(KEY_MEDIA_SMARTSPACE, smartspaceMediaData)
@@ -113,22 +111,6 @@ class MediaRecommendationsInteractorTest : SysuiTestCase() {
            assertThat(recommendations).isEqualTo(model)
            assertThat(recommendations).isEqualTo(model)
        }
        }


    @Test
    fun setRecommendationInactive_isActiveUpdate() =
        testScope.runTest {
            kosmos.fakeFeatureFlagsClassic.set(Flags.MEDIA_RETAIN_RECOMMENDATIONS, true)
            val isActive by collectLastValue(underTest.isActive)

            mediaDataFilter.onSmartspaceMediaDataLoaded(KEY_MEDIA_SMARTSPACE, smartspaceMediaData)
            assertThat(isActive).isTrue()

            mediaDataFilter.onSmartspaceMediaDataLoaded(
                KEY_MEDIA_SMARTSPACE,
                smartspaceMediaData.copy(isActive = false)
            )
            assertThat(isActive).isFalse()
        }

    @Test
    @Test
    fun addInvalidRecommendation() =
    fun addInvalidRecommendation() =
        testScope.runTest {
        testScope.runTest {
@@ -155,7 +137,7 @@ class MediaRecommendationsInteractorTest : SysuiTestCase() {
            intent,
            intent,
            0,
            0,
            SMARTSPACE_CARD_DISMISS_EVENT,
            SMARTSPACE_CARD_DISMISS_EVENT,
            1
            1,
        )
        )


        verify(smartspaceLogger)
        verify(smartspaceLogger)
@@ -183,7 +165,7 @@ class MediaRecommendationsInteractorTest : SysuiTestCase() {
            intent,
            intent,
            0,
            0,
            SMARTSPACE_CARD_DISMISS_EVENT,
            SMARTSPACE_CARD_DISMISS_EVENT,
            1
            1,
        )
        )


        verify(spyContext).startActivity(eq(intent))
        verify(spyContext).startActivity(eq(intent))
@@ -216,7 +198,7 @@ class MediaRecommendationsInteractorTest : SysuiTestCase() {
                cardinality = 1,
                cardinality = 1,
                isRecommendationCard = true,
                isRecommendationCard = true,
                interactedSubcardRank = 2,
                interactedSubcardRank = 2,
                interactedSubcardCardinality = 3
                interactedSubcardCardinality = 3,
            )
            )
        verify(spyContext).startActivity(eq(intent))
        verify(spyContext).startActivity(eq(intent))
    }
    }
+0 −84
Original line number Original line Diff line number Diff line
@@ -96,7 +96,6 @@ class MediaTimeoutListenerTest : SysuiTestCase() {
    @Before
    @Before
    fun setup() {
    fun setup() {
        whenever(mediaControllerFactory.create(any())).thenReturn(mediaController)
        whenever(mediaControllerFactory.create(any())).thenReturn(mediaController)
        whenever(mediaFlags.isPersistentSsCardEnabled()).thenReturn(false)
        mainExecutor = FakeExecutor(clock)
        mainExecutor = FakeExecutor(clock)
        bgExecutor = FakeExecutor(clock)
        bgExecutor = FakeExecutor(clock)
        uiExecutor = FakeExecutor(clock)
        uiExecutor = FakeExecutor(clock)
@@ -612,89 +611,6 @@ class MediaTimeoutListenerTest : SysuiTestCase() {
        assertThat(mainExecutor.numPending()).isEqualTo(1)
        assertThat(mainExecutor.numPending()).isEqualTo(1)
    }
    }


    @Test
    fun testSmartspaceDataLoaded_schedulesTimeout() {
        whenever(mediaFlags.isPersistentSsCardEnabled()).thenReturn(true)
        val duration = 60_000
        val createTime = 1234L
        val expireTime = createTime + duration
        whenever(smartspaceData.headphoneConnectionTimeMillis).thenReturn(createTime)
        whenever(smartspaceData.expiryTimeMs).thenReturn(expireTime)

        mediaTimeoutListener.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
        assertThat(mainExecutor.numPending()).isEqualTo(1)
        assertThat(mainExecutor.advanceClockToNext()).isEqualTo(duration)
    }

    @Test
    fun testSmartspaceMediaData_timesOut_invokesCallback() {
        // Given a pending timeout
        testSmartspaceDataLoaded_schedulesTimeout()

        mainExecutor.runAllReady()
        verify(timeoutCallback).invoke(eq(SMARTSPACE_KEY), eq(true))
    }

    @Test
    fun testSmartspaceDataLoaded_alreadyExists_updatesTimeout() {
        whenever(mediaFlags.isPersistentSsCardEnabled()).thenReturn(true)
        whenever(mediaFlags.isPersistentSsCardEnabled()).thenReturn(true)
        val duration = 100
        val createTime = 1234L
        val expireTime = createTime + duration
        whenever(smartspaceData.headphoneConnectionTimeMillis).thenReturn(createTime)
        whenever(smartspaceData.expiryTimeMs).thenReturn(expireTime)

        mediaTimeoutListener.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
        assertThat(mainExecutor.numPending()).isEqualTo(1)

        val expiryLonger = expireTime + duration
        whenever(smartspaceData.expiryTimeMs).thenReturn(expiryLonger)
        mediaTimeoutListener.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)

        assertThat(mainExecutor.numPending()).isEqualTo(1)
        assertThat(mainExecutor.advanceClockToNext()).isEqualTo(duration * 2)
    }

    @Test
    fun testSmartspaceDataRemoved_cancelTimeout() {
        whenever(mediaFlags.isPersistentSsCardEnabled()).thenReturn(true)

        mediaTimeoutListener.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
        assertThat(mainExecutor.numPending()).isEqualTo(1)

        mediaTimeoutListener.onSmartspaceMediaDataRemoved(SMARTSPACE_KEY)
        assertThat(mainExecutor.numPending()).isEqualTo(0)
    }

    @Test
    fun testSmartspaceData_dozedPastTimeout_invokedOnWakeup() {
        // Given a pending timeout
        whenever(mediaFlags.isPersistentSsCardEnabled()).thenReturn(true)
        verify(statusBarStateController).addCallback(capture(dozingCallbackCaptor))
        val duration = 60_000
        val createTime = 1234L
        val expireTime = createTime + duration
        whenever(smartspaceData.headphoneConnectionTimeMillis).thenReturn(createTime)
        whenever(smartspaceData.expiryTimeMs).thenReturn(expireTime)

        mediaTimeoutListener.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
        assertThat(mainExecutor.numPending()).isEqualTo(1)

        // And we doze past the scheduled timeout
        val time = clock.currentTimeMillis()
        clock.setElapsedRealtime(time + duration * 2)
        assertThat(mainExecutor.numPending()).isEqualTo(1)

        // Then when no longer dozing, the timeout runs immediately
        dozingCallbackCaptor.value.onDozingChanged(false)
        verify(timeoutCallback).invoke(eq(SMARTSPACE_KEY), eq(true))
        verify(logger).logTimeout(eq(SMARTSPACE_KEY))

        // and cancel any later scheduled timeout
        assertThat(mainExecutor.numPending()).isEqualTo(0)
    }

    private fun loadMediaDataWithPlaybackState(state: PlaybackState) {
    private fun loadMediaDataWithPlaybackState(state: PlaybackState) {
        whenever(mediaController.playbackState).thenReturn(state)
        whenever(mediaController.playbackState).thenReturn(state)
        loadMediaData(data = mediaData)
        loadMediaData(data = mediaData)
+0 −5
Original line number Original line Diff line number Diff line
@@ -25,8 +25,6 @@ import androidx.test.filters.SmallTest
import com.android.internal.logging.InstanceId
import com.android.internal.logging.InstanceId
import com.android.systemui.SysuiTestCase
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.flags.Flags
import com.android.systemui.flags.fakeFeatureFlagsClassic
import com.android.systemui.kosmos.testScope
import com.android.systemui.kosmos.testScope
import com.android.systemui.media.controls.MediaTestHelper
import com.android.systemui.media.controls.MediaTestHelper
import com.android.systemui.media.controls.domain.pipeline.MediaDataFilterImpl
import com.android.systemui.media.controls.domain.pipeline.MediaDataFilterImpl
@@ -126,7 +124,6 @@ class MediaCarouselViewModelTest : SysuiTestCase() {
    fun loadMediaControlsAndRecommendations_mediaItemsAreUpdated() =
    fun loadMediaControlsAndRecommendations_mediaItemsAreUpdated() =
        testScope.runTest {
        testScope.runTest {
            val sortedMedia by collectLastValue(underTest.mediaItems)
            val sortedMedia by collectLastValue(underTest.mediaItems)
            kosmos.fakeFeatureFlagsClassic.set(Flags.MEDIA_RETAIN_RECOMMENDATIONS, false)
            val instanceId1 = InstanceId.fakeInstanceId(123)
            val instanceId1 = InstanceId.fakeInstanceId(123)
            val instanceId2 = InstanceId.fakeInstanceId(456)
            val instanceId2 = InstanceId.fakeInstanceId(456)


@@ -147,7 +144,6 @@ class MediaCarouselViewModelTest : SysuiTestCase() {
        testScope.runTest {
        testScope.runTest {
            val sortedMedia by collectLastValue(underTest.mediaItems)
            val sortedMedia by collectLastValue(underTest.mediaItems)
            kosmos.visualStabilityProvider.isReorderingAllowed = false
            kosmos.visualStabilityProvider.isReorderingAllowed = false
            kosmos.fakeFeatureFlagsClassic.set(Flags.MEDIA_RETAIN_RECOMMENDATIONS, false)
            val instanceId = InstanceId.fakeInstanceId(123)
            val instanceId = InstanceId.fakeInstanceId(123)


            loadMediaRecommendations()
            loadMediaRecommendations()
@@ -207,7 +203,6 @@ class MediaCarouselViewModelTest : SysuiTestCase() {
    fun addMediaRecommendationThenRemove_mediaEventsAreLogged() =
    fun addMediaRecommendationThenRemove_mediaEventsAreLogged() =
        testScope.runTest {
        testScope.runTest {
            val sortedMedia by collectLastValue(underTest.mediaItems)
            val sortedMedia by collectLastValue(underTest.mediaItems)
            kosmos.fakeFeatureFlagsClassic.set(Flags.MEDIA_RETAIN_RECOMMENDATIONS, false)


            loadMediaRecommendations()
            loadMediaRecommendations()


Loading