Loading packages/SystemUI/src/com/android/systemui/media/MediaDataFilter.kt +13 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.media import android.app.smartspace.SmartspaceAction import android.app.smartspace.SmartspaceTarget import android.os.SystemProperties import android.util.Log Loading Loading @@ -121,6 +122,12 @@ class MediaDataFilter @Inject constructor( } // If no recent media, continue with smartspace update if (isMediaRecommendationEmpty(data)) { Log.d(TAG, "Empty media recommendations. Skip showing the card") return } // Proceed only if the Smartspace recommendation is not empty. listeners.forEach { it.onSmartspaceMediaDataLoaded(key, data) } } Loading Loading @@ -214,4 +221,10 @@ class MediaDataFilter @Inject constructor( * Remove a listener that was registered with addListener */ fun removeListener(listener: MediaDataManager.Listener) = _listeners.remove(listener) /** Check if the Smartspace sends an empty update. */ private fun isMediaRecommendationEmpty(data: SmartspaceTarget): Boolean { val mediaRecommendationList: List<SmartspaceAction> = data.getIconGrid() return mediaRecommendationList == null || mediaRecommendationList.isEmpty() } } packages/SystemUI/tests/src/com/android/systemui/media/MediaDataFilterTest.kt +30 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.media import android.app.smartspace.SmartspaceAction import android.app.smartspace.SmartspaceTarget import android.graphics.Color import androidx.test.filters.SmallTest Loading Loading @@ -72,6 +73,8 @@ class MediaDataFilterTest : SysuiTestCase() { private lateinit var executor: Executor @Mock private lateinit var smartspaceData: SmartspaceTarget @Mock private lateinit var smartspaceMediaRecommendationItem: SmartspaceAction private lateinit var mediaDataFilter: MediaDataFilter private lateinit var dataMain: MediaData Loading @@ -97,6 +100,7 @@ class MediaDataFilterTest : SysuiTestCase() { emptyList(), emptyList(), PACKAGE, null, null, device, true, null) `when`(smartspaceData.smartspaceTargetId).thenReturn(SMARTSPACE_KEY) `when`(smartspaceData.iconGrid).thenReturn(listOf(smartspaceMediaRecommendationItem)) } private fun setUser(id: Int) { Loading Loading @@ -222,7 +226,7 @@ class MediaDataFilterTest : SysuiTestCase() { } @Test fun testOnSmartspaceMediaDataLoaded_noMedia_usesSmartspace() { fun testOnSmartspaceMediaDataLoaded_noMedia_nonEmptyRecommendation_usesSmartspace() { mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData) verify(listener).onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(smartspaceData)) Loading @@ -230,7 +234,18 @@ class MediaDataFilterTest : SysuiTestCase() { } @Test fun testOnSmartspaceMediaDataLoaded_noRecentMedia_usesSmartspace() { fun testOnSmartspaceMediaDataLoaded_noMedia_emptyRecommendation_showsNothing() { `when`(smartspaceData.iconGrid).thenReturn(listOf()) mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData) verify(listener, never()) .onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(smartspaceData)) assertThat(mediaDataFilter.hasActiveMedia()).isTrue() } @Test fun testOnSmartspaceMediaDataLoaded_noRecentMedia_nonEmptyRecommendation_usesSmartspace() { val dataOld = dataMain.copy(active = false, lastActive = 0L) mediaDataFilter.onMediaDataLoaded(KEY, null, dataOld) mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData) Loading @@ -239,6 +254,19 @@ class MediaDataFilterTest : SysuiTestCase() { assertThat(mediaDataFilter.hasActiveMedia()).isTrue() } @Test fun testOnSmartspaceMediaDataLoaded_noRecentMedia_emptyRecommendation_showsNothing() { `when`(smartspaceData.iconGrid).thenReturn(listOf()) val dataOld = dataMain.copy(active = false, lastActive = 0L) mediaDataFilter.onMediaDataLoaded(KEY, null, dataOld) mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData) verify(listener, never()) .onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(smartspaceData)) assertThat(mediaDataFilter.hasActiveMedia()).isTrue() } @Test fun testOnSmartspaceMediaDataLoaded_hasRecentMedia_usesMedia() { // WHEN we have media that was recently played, but not currently active Loading Loading
packages/SystemUI/src/com/android/systemui/media/MediaDataFilter.kt +13 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.media import android.app.smartspace.SmartspaceAction import android.app.smartspace.SmartspaceTarget import android.os.SystemProperties import android.util.Log Loading Loading @@ -121,6 +122,12 @@ class MediaDataFilter @Inject constructor( } // If no recent media, continue with smartspace update if (isMediaRecommendationEmpty(data)) { Log.d(TAG, "Empty media recommendations. Skip showing the card") return } // Proceed only if the Smartspace recommendation is not empty. listeners.forEach { it.onSmartspaceMediaDataLoaded(key, data) } } Loading Loading @@ -214,4 +221,10 @@ class MediaDataFilter @Inject constructor( * Remove a listener that was registered with addListener */ fun removeListener(listener: MediaDataManager.Listener) = _listeners.remove(listener) /** Check if the Smartspace sends an empty update. */ private fun isMediaRecommendationEmpty(data: SmartspaceTarget): Boolean { val mediaRecommendationList: List<SmartspaceAction> = data.getIconGrid() return mediaRecommendationList == null || mediaRecommendationList.isEmpty() } }
packages/SystemUI/tests/src/com/android/systemui/media/MediaDataFilterTest.kt +30 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.media import android.app.smartspace.SmartspaceAction import android.app.smartspace.SmartspaceTarget import android.graphics.Color import androidx.test.filters.SmallTest Loading Loading @@ -72,6 +73,8 @@ class MediaDataFilterTest : SysuiTestCase() { private lateinit var executor: Executor @Mock private lateinit var smartspaceData: SmartspaceTarget @Mock private lateinit var smartspaceMediaRecommendationItem: SmartspaceAction private lateinit var mediaDataFilter: MediaDataFilter private lateinit var dataMain: MediaData Loading @@ -97,6 +100,7 @@ class MediaDataFilterTest : SysuiTestCase() { emptyList(), emptyList(), PACKAGE, null, null, device, true, null) `when`(smartspaceData.smartspaceTargetId).thenReturn(SMARTSPACE_KEY) `when`(smartspaceData.iconGrid).thenReturn(listOf(smartspaceMediaRecommendationItem)) } private fun setUser(id: Int) { Loading Loading @@ -222,7 +226,7 @@ class MediaDataFilterTest : SysuiTestCase() { } @Test fun testOnSmartspaceMediaDataLoaded_noMedia_usesSmartspace() { fun testOnSmartspaceMediaDataLoaded_noMedia_nonEmptyRecommendation_usesSmartspace() { mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData) verify(listener).onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(smartspaceData)) Loading @@ -230,7 +234,18 @@ class MediaDataFilterTest : SysuiTestCase() { } @Test fun testOnSmartspaceMediaDataLoaded_noRecentMedia_usesSmartspace() { fun testOnSmartspaceMediaDataLoaded_noMedia_emptyRecommendation_showsNothing() { `when`(smartspaceData.iconGrid).thenReturn(listOf()) mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData) verify(listener, never()) .onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(smartspaceData)) assertThat(mediaDataFilter.hasActiveMedia()).isTrue() } @Test fun testOnSmartspaceMediaDataLoaded_noRecentMedia_nonEmptyRecommendation_usesSmartspace() { val dataOld = dataMain.copy(active = false, lastActive = 0L) mediaDataFilter.onMediaDataLoaded(KEY, null, dataOld) mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData) Loading @@ -239,6 +254,19 @@ class MediaDataFilterTest : SysuiTestCase() { assertThat(mediaDataFilter.hasActiveMedia()).isTrue() } @Test fun testOnSmartspaceMediaDataLoaded_noRecentMedia_emptyRecommendation_showsNothing() { `when`(smartspaceData.iconGrid).thenReturn(listOf()) val dataOld = dataMain.copy(active = false, lastActive = 0L) mediaDataFilter.onMediaDataLoaded(KEY, null, dataOld) mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData) verify(listener, never()) .onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(smartspaceData)) assertThat(mediaDataFilter.hasActiveMedia()).isTrue() } @Test fun testOnSmartspaceMediaDataLoaded_hasRecentMedia_usesMedia() { // WHEN we have media that was recently played, but not currently active Loading