Merge "Skip showing the Smartspace recommendation card if it's an empty update." into sc-dev
This commit is contained in:
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.android.systemui.media
|
package com.android.systemui.media
|
||||||
|
|
||||||
|
import android.app.smartspace.SmartspaceAction
|
||||||
import android.app.smartspace.SmartspaceTarget
|
import android.app.smartspace.SmartspaceTarget
|
||||||
import android.os.SystemProperties
|
import android.os.SystemProperties
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
@@ -121,6 +122,12 @@ class MediaDataFilter @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If no recent media, continue with smartspace update
|
// 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) }
|
listeners.forEach { it.onSmartspaceMediaDataLoaded(key, data) }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -214,4 +221,10 @@ class MediaDataFilter @Inject constructor(
|
|||||||
* Remove a listener that was registered with addListener
|
* Remove a listener that was registered with addListener
|
||||||
*/
|
*/
|
||||||
fun removeListener(listener: MediaDataManager.Listener) = _listeners.remove(listener)
|
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()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.android.systemui.media
|
package com.android.systemui.media
|
||||||
|
|
||||||
|
import android.app.smartspace.SmartspaceAction
|
||||||
import android.app.smartspace.SmartspaceTarget
|
import android.app.smartspace.SmartspaceTarget
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import androidx.test.filters.SmallTest
|
import androidx.test.filters.SmallTest
|
||||||
@@ -72,6 +73,8 @@ class MediaDataFilterTest : SysuiTestCase() {
|
|||||||
private lateinit var executor: Executor
|
private lateinit var executor: Executor
|
||||||
@Mock
|
@Mock
|
||||||
private lateinit var smartspaceData: SmartspaceTarget
|
private lateinit var smartspaceData: SmartspaceTarget
|
||||||
|
@Mock
|
||||||
|
private lateinit var smartspaceMediaRecommendationItem: SmartspaceAction
|
||||||
|
|
||||||
private lateinit var mediaDataFilter: MediaDataFilter
|
private lateinit var mediaDataFilter: MediaDataFilter
|
||||||
private lateinit var dataMain: MediaData
|
private lateinit var dataMain: MediaData
|
||||||
@@ -97,6 +100,7 @@ class MediaDataFilterTest : SysuiTestCase() {
|
|||||||
emptyList(), emptyList(), PACKAGE, null, null, device, true, null)
|
emptyList(), emptyList(), PACKAGE, null, null, device, true, null)
|
||||||
|
|
||||||
`when`(smartspaceData.smartspaceTargetId).thenReturn(SMARTSPACE_KEY)
|
`when`(smartspaceData.smartspaceTargetId).thenReturn(SMARTSPACE_KEY)
|
||||||
|
`when`(smartspaceData.iconGrid).thenReturn(listOf(smartspaceMediaRecommendationItem))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUser(id: Int) {
|
private fun setUser(id: Int) {
|
||||||
@@ -222,7 +226,7 @@ class MediaDataFilterTest : SysuiTestCase() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testOnSmartspaceMediaDataLoaded_noMedia_usesSmartspace() {
|
fun testOnSmartspaceMediaDataLoaded_noMedia_nonEmptyRecommendation_usesSmartspace() {
|
||||||
mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
|
mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
|
||||||
|
|
||||||
verify(listener).onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(smartspaceData))
|
verify(listener).onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(smartspaceData))
|
||||||
@@ -230,7 +234,18 @@ class MediaDataFilterTest : SysuiTestCase() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@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)
|
val dataOld = dataMain.copy(active = false, lastActive = 0L)
|
||||||
mediaDataFilter.onMediaDataLoaded(KEY, null, dataOld)
|
mediaDataFilter.onMediaDataLoaded(KEY, null, dataOld)
|
||||||
mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
|
mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
|
||||||
@@ -239,6 +254,19 @@ class MediaDataFilterTest : SysuiTestCase() {
|
|||||||
assertThat(mediaDataFilter.hasActiveMedia()).isTrue()
|
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
|
@Test
|
||||||
fun testOnSmartspaceMediaDataLoaded_hasRecentMedia_usesMedia() {
|
fun testOnSmartspaceMediaDataLoaded_hasRecentMedia_usesMedia() {
|
||||||
// WHEN we have media that was recently played, but not currently active
|
// WHEN we have media that was recently played, but not currently active
|
||||||
|
|||||||
Reference in New Issue
Block a user