Merge "Skip showing the Smartspace recommendation card if it's an empty update." into sc-dev

This commit is contained in:
Cecilia Hong
2021-04-29 04:55:29 +00:00
committed by Android (Google) Code Review
2 changed files with 43 additions and 2 deletions

View File

@@ -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
@@ -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) }
}
@@ -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()
}
}

View File

@@ -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
@@ -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
@@ -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) {
@@ -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))
@@ -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)
@@ -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