summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/data/repository/MediaFilterRepositoryTest.kt32
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/interactor/MediaCarouselInteractorTest.kt13
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/controls/data/repository/MediaFilterRepository.kt30
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaDataFilterImpl.kt123
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaDataManager.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaCarouselInteractor.kt10
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/MediaDataFilterImplTest.kt168
7 files changed, 190 insertions, 190 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/data/repository/MediaFilterRepositoryTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/data/repository/MediaFilterRepositoryTest.kt
index d39e77da2f55..f6381c655649 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/data/repository/MediaFilterRepositoryTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/data/repository/MediaFilterRepositoryTest.kt
@@ -18,6 +18,7 @@ package com.android.systemui.media.controls.data.repository
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import com.android.internal.logging.InstanceId
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.kosmos.testScope
@@ -44,16 +45,17 @@ class MediaFilterRepositoryTest : SysuiTestCase() {
testScope.runTest {
val selectedUserEntries by collectLastValue(underTest.selectedUserEntries)
- val userMedia = MediaData().copy(active = true)
+ val instanceId = InstanceId.fakeInstanceId(123)
+ val userMedia = MediaData().copy(active = true, instanceId = instanceId)
- underTest.addSelectedUserMediaEntry(KEY, userMedia)
+ underTest.addSelectedUserMediaEntry(userMedia)
- assertThat(selectedUserEntries?.get(KEY)).isEqualTo(userMedia)
+ assertThat(selectedUserEntries?.get(instanceId)).isEqualTo(userMedia)
- underTest.addSelectedUserMediaEntry(KEY, userMedia.copy(active = false))
+ underTest.addSelectedUserMediaEntry(userMedia.copy(active = false))
- assertThat(selectedUserEntries?.get(KEY)).isNotEqualTo(userMedia)
- assertThat(selectedUserEntries?.get(KEY)?.active).isFalse()
+ assertThat(selectedUserEntries?.get(instanceId)).isNotEqualTo(userMedia)
+ assertThat(selectedUserEntries?.get(instanceId)?.active).isFalse()
}
@Test
@@ -61,13 +63,14 @@ class MediaFilterRepositoryTest : SysuiTestCase() {
testScope.runTest {
val selectedUserEntries by collectLastValue(underTest.selectedUserEntries)
- val userMedia = MediaData()
+ val instanceId = InstanceId.fakeInstanceId(123)
+ val userMedia = MediaData().copy(instanceId = instanceId)
- underTest.addSelectedUserMediaEntry(KEY, userMedia)
+ underTest.addSelectedUserMediaEntry(userMedia)
- assertThat(selectedUserEntries?.get(KEY)).isEqualTo(userMedia)
+ assertThat(selectedUserEntries?.get(instanceId)).isEqualTo(userMedia)
- assertThat(underTest.removeSelectedUserMediaEntry(KEY, userMedia)).isTrue()
+ assertThat(underTest.removeSelectedUserMediaEntry(instanceId, userMedia)).isTrue()
}
@Test
@@ -75,13 +78,14 @@ class MediaFilterRepositoryTest : SysuiTestCase() {
testScope.runTest {
val selectedUserEntries by collectLastValue(underTest.selectedUserEntries)
- val userMedia = MediaData()
+ val instanceId = InstanceId.fakeInstanceId(123)
+ val userMedia = MediaData().copy(instanceId = instanceId)
- underTest.addSelectedUserMediaEntry(KEY, userMedia)
+ underTest.addSelectedUserMediaEntry(userMedia)
- assertThat(selectedUserEntries?.get(KEY)).isEqualTo(userMedia)
+ assertThat(selectedUserEntries?.get(instanceId)).isEqualTo(userMedia)
- assertThat(underTest.removeSelectedUserMediaEntry(KEY)).isEqualTo(userMedia)
+ assertThat(underTest.removeSelectedUserMediaEntry(instanceId)).isEqualTo(userMedia)
}
@Test
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/interactor/MediaCarouselInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/interactor/MediaCarouselInteractorTest.kt
index 6e67000b1ab3..2d1115534de9 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/interactor/MediaCarouselInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/interactor/MediaCarouselInteractorTest.kt
@@ -56,13 +56,13 @@ class MediaCarouselInteractorTest : SysuiTestCase() {
val userMedia = MediaData().copy(active = true)
- mediaFilterRepository.addSelectedUserMediaEntry(KEY, userMedia)
+ mediaFilterRepository.addSelectedUserMediaEntry(userMedia)
assertThat(hasActiveMediaOrRecommendation).isTrue()
assertThat(hasActiveMedia).isTrue()
assertThat(hasAnyMedia).isTrue()
- mediaFilterRepository.addSelectedUserMediaEntry(KEY, userMedia.copy(active = false))
+ mediaFilterRepository.addSelectedUserMediaEntry(userMedia.copy(active = false))
assertThat(hasActiveMediaOrRecommendation).isFalse()
assertThat(hasActiveMedia).isFalse()
@@ -78,14 +78,16 @@ class MediaCarouselInteractorTest : SysuiTestCase() {
val hasAnyMedia by collectLastValue(underTest.hasAnyMedia)
val userMedia = MediaData().copy(active = false)
+ val instanceId = userMedia.instanceId
- mediaFilterRepository.addSelectedUserMediaEntry(KEY, userMedia)
+ mediaFilterRepository.addSelectedUserMediaEntry(userMedia)
assertThat(hasActiveMediaOrRecommendation).isFalse()
assertThat(hasActiveMedia).isFalse()
assertThat(hasAnyMedia).isTrue()
- assertThat(mediaFilterRepository.removeSelectedUserMediaEntry(KEY, userMedia)).isTrue()
+ assertThat(mediaFilterRepository.removeSelectedUserMediaEntry(instanceId, userMedia))
+ .isTrue()
assertThat(hasActiveMediaOrRecommendation).isFalse()
assertThat(hasActiveMedia).isFalse()
@@ -114,7 +116,7 @@ class MediaCarouselInteractorTest : SysuiTestCase() {
assertThat(hasActiveMediaOrRecommendation).isTrue()
assertThat(hasAnyMediaOrRecommendation).isTrue()
- mediaFilterRepository.addSelectedUserMediaEntry(KEY, userMedia)
+ mediaFilterRepository.addSelectedUserMediaEntry(userMedia)
assertThat(hasActiveMediaOrRecommendation).isTrue()
assertThat(hasAnyMediaOrRecommendation).isTrue()
@@ -193,7 +195,6 @@ class MediaCarouselInteractorTest : SysuiTestCase() {
testScope.runTest { assertThat(underTest.hasActiveMediaOrRecommendation.value).isFalse() }
companion object {
- private const val KEY = "KEY"
private const val KEY_MEDIA_SMARTSPACE = "MEDIA_SMARTSPACE_ID"
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/data/repository/MediaFilterRepository.kt b/packages/SystemUI/src/com/android/systemui/media/controls/data/repository/MediaFilterRepository.kt
index b94a4af65649..df34169c9a50 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/data/repository/MediaFilterRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/data/repository/MediaFilterRepository.kt
@@ -16,6 +16,7 @@
package com.android.systemui.media.controls.data.repository
+import com.android.internal.logging.InstanceId
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.media.controls.shared.model.MediaData
import com.android.systemui.media.controls.shared.model.SmartspaceMediaData
@@ -28,17 +29,18 @@ import kotlinx.coroutines.flow.asStateFlow
@SysUISingleton
class MediaFilterRepository @Inject constructor() {
- /** Key of media control that recommendations card reactivated. */
- private val _reactivatedKey: MutableStateFlow<String?> = MutableStateFlow(null)
- val reactivatedKey: StateFlow<String?> = _reactivatedKey.asStateFlow()
+ /** Instance id of media control that recommendations card reactivated. */
+ private val _reactivatedId: MutableStateFlow<InstanceId?> = MutableStateFlow(null)
+ val reactivatedId: StateFlow<InstanceId?> = _reactivatedId.asStateFlow()
private val _smartspaceMediaData: MutableStateFlow<SmartspaceMediaData> =
MutableStateFlow(SmartspaceMediaData())
val smartspaceMediaData: StateFlow<SmartspaceMediaData> = _smartspaceMediaData.asStateFlow()
- private val _selectedUserEntries: MutableStateFlow<Map<String, MediaData>> =
+ private val _selectedUserEntries: MutableStateFlow<Map<InstanceId, MediaData>> =
MutableStateFlow(LinkedHashMap())
- val selectedUserEntries: StateFlow<Map<String, MediaData>> = _selectedUserEntries.asStateFlow()
+ val selectedUserEntries: StateFlow<Map<InstanceId, MediaData>> =
+ _selectedUserEntries.asStateFlow()
private val _allUserEntries: MutableStateFlow<Map<String, MediaData>> =
MutableStateFlow(LinkedHashMap())
@@ -62,9 +64,9 @@ class MediaFilterRepository @Inject constructor() {
return mediaData
}
- fun addSelectedUserMediaEntry(key: String, data: MediaData) {
- val entries = LinkedHashMap<String, MediaData>(_selectedUserEntries.value)
- entries[key] = data
+ fun addSelectedUserMediaEntry(data: MediaData) {
+ val entries = LinkedHashMap<InstanceId, MediaData>(_selectedUserEntries.value)
+ entries[data.instanceId] = data
_selectedUserEntries.value = entries
}
@@ -73,8 +75,8 @@ class MediaFilterRepository @Inject constructor() {
*
* @return media data if an entry is actually removed, `null` otherwise.
*/
- fun removeSelectedUserMediaEntry(key: String): MediaData? {
- val entries = LinkedHashMap<String, MediaData>(_selectedUserEntries.value)
+ fun removeSelectedUserMediaEntry(key: InstanceId): MediaData? {
+ val entries = LinkedHashMap<InstanceId, MediaData>(_selectedUserEntries.value)
val mediaData = entries.remove(key)
_selectedUserEntries.value = entries
return mediaData
@@ -85,8 +87,8 @@ class MediaFilterRepository @Inject constructor() {
*
* @return true if media data is removed, false otherwise.
*/
- fun removeSelectedUserMediaEntry(key: String, data: MediaData): Boolean {
- val entries = LinkedHashMap<String, MediaData>(_selectedUserEntries.value)
+ fun removeSelectedUserMediaEntry(key: InstanceId, data: MediaData): Boolean {
+ val entries = LinkedHashMap<InstanceId, MediaData>(_selectedUserEntries.value)
val succeed = entries.remove(key, data)
if (!succeed) {
return false
@@ -105,7 +107,7 @@ class MediaFilterRepository @Inject constructor() {
}
/** Updates media control key that recommendations card reactivated. */
- fun setReactivatedKey(key: String?) {
- _reactivatedKey.value = key
+ fun setReactivatedId(instanceId: InstanceId?) {
+ _reactivatedId.value = instanceId
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaDataFilterImpl.kt b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaDataFilterImpl.kt
index a65db35030ea..d40069c4b3da 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaDataFilterImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaDataFilterImpl.kt
@@ -22,6 +22,7 @@ import android.os.SystemProperties
import android.util.Log
import com.android.internal.annotations.KeepForWeakReference
import com.android.internal.annotations.VisibleForTesting
+import com.android.internal.logging.InstanceId
import com.android.systemui.broadcast.BroadcastSender
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.media.controls.data.repository.MediaFilterRepository
@@ -66,8 +67,8 @@ constructor(
private val mediaFlags: MediaFlags,
private val mediaFilterRepository: MediaFilterRepository,
) : MediaDataManager.Listener {
- private val _listeners: MutableSet<MediaDataManager.Listener> = mutableSetOf()
- val listeners: Set<MediaDataManager.Listener>
+ private val _listeners: MutableSet<Listener> = mutableSetOf()
+ val listeners: Set<Listener>
get() = _listeners.toSet()
lateinit var mediaDataManager: MediaDataManager
@@ -108,13 +109,10 @@ constructor(
return
}
- if (oldKey != null && oldKey != key) {
- mediaFilterRepository.removeSelectedUserMediaEntry(oldKey)
- }
- mediaFilterRepository.addSelectedUserMediaEntry(key, data)
+ mediaFilterRepository.addSelectedUserMediaEntry(data)
// Notify listeners
- listeners.forEach { it.onMediaDataLoaded(key, oldKey, data) }
+ listeners.forEach { it.onMediaDataLoaded(data.instanceId) }
}
override fun onSmartspaceMediaDataLoaded(
@@ -160,11 +158,11 @@ constructor(
// It could happen there are existing active media resume cards, then we don't need to
// reactivate.
if (shouldReactivate) {
- val lastActiveKey = sorted.lastKey() // most recently active
+ val lastActiveId = sorted.lastKey() // most recently active id
// Notify listeners to consider this media active
- Log.d(TAG, "reactivating $lastActiveKey instead of smartspace")
- mediaFilterRepository.setReactivatedKey(lastActiveKey)
- val mediaData = sorted[lastActiveKey]!!.copy(active = true)
+ Log.d(TAG, "reactivating $lastActiveId instead of smartspace")
+ mediaFilterRepository.setReactivatedId(lastActiveId)
+ val mediaData = sorted[lastActiveId]!!.copy(active = true)
logger.logRecommendationActivated(
mediaData.appUid,
mediaData.packageName,
@@ -172,9 +170,7 @@ constructor(
)
listeners.forEach {
it.onMediaDataLoaded(
- lastActiveKey,
- lastActiveKey,
- mediaData,
+ lastActiveId,
receivedSmartspaceCardLatency =
(systemClock.currentTimeMillis() - data.headphoneConnectionTimeMillis)
.toInt(),
@@ -196,27 +192,28 @@ constructor(
smartspaceMediaData.packageName,
smartspaceMediaData.instanceId
)
- listeners.forEach { it.onSmartspaceMediaDataLoaded(key, data, shouldPrioritizeMutable) }
+ listeners.forEach { it.onSmartspaceMediaDataLoaded(key, shouldPrioritizeMutable) }
}
override fun onMediaDataRemoved(key: String) {
- mediaFilterRepository.removeMediaEntry(key)
- mediaFilterRepository.removeSelectedUserMediaEntry(key)?.let {
- // Only notify listeners if something actually changed
- listeners.forEach { it.onMediaDataRemoved(key) }
+ mediaFilterRepository.removeMediaEntry(key)?.let { mediaData ->
+ val instanceId = mediaData.instanceId
+ mediaFilterRepository.removeSelectedUserMediaEntry(instanceId)?.let {
+ // Only notify listeners if something actually changed
+ listeners.forEach { it.onMediaDataRemoved(instanceId) }
+ }
}
}
override fun onSmartspaceMediaDataRemoved(key: String, immediately: Boolean) {
// First check if we had reactivated media instead of forwarding smartspace
- mediaFilterRepository.reactivatedKey.value?.let {
- val lastActiveKey = it
- mediaFilterRepository.setReactivatedKey(null)
- Log.d(TAG, "expiring reactivated key $lastActiveKey")
+ mediaFilterRepository.reactivatedId.value?.let { lastActiveId ->
+ mediaFilterRepository.setReactivatedId(null)
+ Log.d(TAG, "expiring reactivated key $lastActiveId")
// Notify listeners to update with actual active value
- mediaFilterRepository.selectedUserEntries.value[lastActiveKey]?.let { mediaData ->
+ mediaFilterRepository.selectedUserEntries.value[lastActiveId]?.let {
listeners.forEach { listener ->
- listener.onMediaDataLoaded(lastActiveKey, lastActiveKey, mediaData, immediately)
+ listener.onMediaDataLoaded(lastActiveId, immediately)
}
}
}
@@ -240,8 +237,8 @@ constructor(
if (!lockscreenUserManager.isProfileAvailable(data.userId)) {
// Only remove media when the profile is unavailable.
if (DEBUG) Log.d(TAG, "Removing $key after profile change")
- mediaFilterRepository.removeSelectedUserMediaEntry(key, data)
- listeners.forEach { listener -> listener.onMediaDataRemoved(key) }
+ mediaFilterRepository.removeSelectedUserMediaEntry(data.instanceId, data)
+ listeners.forEach { listener -> listener.onMediaDataRemoved(data.instanceId) }
}
}
}
@@ -254,16 +251,16 @@ constructor(
// Clear the list first, to make sure callbacks from listeners if we have any entries
// are up to date
mediaFilterRepository.clearSelectedUserMedia()
- keyCopy.forEach {
- if (DEBUG) Log.d(TAG, "Removing $it after user change")
- listenersCopy.forEach { listener -> listener.onMediaDataRemoved(it) }
+ keyCopy.forEach { instanceId ->
+ if (DEBUG) Log.d(TAG, "Removing $instanceId after user change")
+ listenersCopy.forEach { listener -> listener.onMediaDataRemoved(instanceId) }
}
mediaFilterRepository.allUserEntries.value.forEach { (key, data) ->
if (lockscreenUserManager.isCurrentProfile(data.userId)) {
if (DEBUG) Log.d(TAG, "Re-adding $key after user change")
- mediaFilterRepository.addSelectedUserMediaEntry(key, data)
- listenersCopy.forEach { listener -> listener.onMediaDataLoaded(key, null, data) }
+ mediaFilterRepository.addSelectedUserMediaEntry(data)
+ listenersCopy.forEach { listener -> listener.onMediaDataLoaded(data.instanceId) }
}
}
}
@@ -271,10 +268,12 @@ constructor(
/** Invoked when the user has dismissed the media carousel */
fun onSwipeToDismiss() {
if (DEBUG) Log.d(TAG, "Media carousel swiped away")
- val mediaKeys = mediaFilterRepository.selectedUserEntries.value.keys.toSet()
- mediaKeys.forEach {
- // Force updates to listeners, needed for re-activated card
- mediaDataManager.setInactive(it, timedOut = true, forceUpdate = true)
+ val mediaEntries = mediaFilterRepository.allUserEntries.value.entries
+ mediaEntries.forEach { (key, data) ->
+ if (mediaFilterRepository.selectedUserEntries.value.containsKey(data.instanceId)) {
+ // Force updates to listeners, needed for re-activated card
+ mediaDataManager.setInactive(key, timedOut = true, forceUpdate = true)
+ }
}
val smartspaceMediaData = mediaFilterRepository.smartspaceMediaData.value
if (smartspaceMediaData.isActive) {
@@ -312,10 +311,10 @@ constructor(
}
/** Add a listener for filtered [MediaData] changes */
- fun addListener(listener: MediaDataManager.Listener) = _listeners.add(listener)
+ fun addListener(listener: Listener) = _listeners.add(listener)
/** Remove a listener that was registered with addListener */
- fun removeListener(listener: MediaDataManager.Listener) = _listeners.remove(listener)
+ fun removeListener(listener: Listener) = _listeners.remove(listener)
/**
* Return the time since last active for the most-recent media.
@@ -325,15 +324,57 @@ constructor(
* the present. MAX_VALUE will be returned if there is no media.
*/
private fun timeSinceActiveForMostRecentMedia(
- sortedEntries: SortedMap<String, MediaData>
+ sortedEntries: SortedMap<InstanceId, MediaData>
): Long {
if (sortedEntries.isEmpty()) {
return Long.MAX_VALUE
}
val now = systemClock.elapsedRealtime()
- val lastActiveKey = sortedEntries.lastKey() // most recently active
- return sortedEntries[lastActiveKey]?.let { now - it.lastActive } ?: Long.MAX_VALUE
+ val lastActiveInstanceId = sortedEntries.lastKey() // most recently active
+ return sortedEntries[lastActiveInstanceId]?.let { now - it.lastActive } ?: Long.MAX_VALUE
+ }
+
+ interface Listener {
+ /**
+ * Called whenever there's new MediaData Loaded for the consumption in views.
+ *
+ * @param immediately indicates should apply the UI changes immediately, otherwise wait
+ * until the next refresh-round before UI becomes visible. True by default to take in
+ * place immediately.
+ * @param receivedSmartspaceCardLatency is the latency between headphone connects and sysUI
+ * displays Smartspace media targets. Will be 0 if the data is not activated by Smartspace
+ * signal.
+ * @param isSsReactivated indicates resume media card is reactivated by Smartspace
+ * recommendation signal
+ */
+ fun onMediaDataLoaded(
+ instanceId: InstanceId,
+ immediately: Boolean = true,
+ receivedSmartspaceCardLatency: Int = 0,
+ isSsReactivated: Boolean = false,
+ )
+
+ /**
+ * Called whenever there's new Smartspace media data loaded.
+ *
+ * @param shouldPrioritize indicates the sorting priority of the Smartspace card. If true,
+ * it will be prioritized as the first card. Otherwise, it will show up as the last card
+ * as default.
+ */
+ fun onSmartspaceMediaDataLoaded(key: String, shouldPrioritize: Boolean = false)
+
+ /** Called whenever a previously existing Media notification was removed. */
+ fun onMediaDataRemoved(instanceId: InstanceId)
+
+ /**
+ * Called whenever a previously existing Smartspace media data was removed.
+ *
+ * @param immediately indicates should apply the UI changes immediately, otherwise wait
+ * until the next refresh-round before UI becomes visible. True by default to take in
+ * place immediately.
+ */
+ fun onSmartspaceMediaDataRemoved(key: String, immediately: Boolean = true)
}
companion object {
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaDataManager.kt b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaDataManager.kt
index 2b1070cfeedf..2331aa2170ef 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaDataManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaDataManager.kt
@@ -27,10 +27,10 @@ import com.android.systemui.media.controls.shared.model.SmartspaceMediaData
interface MediaDataManager {
/** Add a listener for changes in this class */
- fun addListener(listener: Listener)
+ fun addListener(listener: Listener) {}
/** Remove a listener for changes in this class */
- fun removeListener(listener: Listener)
+ fun removeListener(listener: Listener) {}
/**
* Called whenever the player has been paused or stopped for a while, or swiped from QQS. This
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaCarouselInteractor.kt b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaCarouselInteractor.kt
index 4a92b71f1155..7dbca0ae4cda 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaCarouselInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaCarouselInteractor.kt
@@ -70,7 +70,7 @@ constructor(
combine(
mediaFilterRepository.selectedUserEntries,
mediaFilterRepository.smartspaceMediaData,
- mediaFilterRepository.reactivatedKey
+ mediaFilterRepository.reactivatedId
) { entries, smartspaceMediaData, reactivatedKey ->
entries.any { it.value.active } ||
(smartspaceMediaData.isActive &&
@@ -142,14 +142,6 @@ constructor(
mediaDataFilter.mediaDataManager = this
}
- override fun addListener(listener: MediaDataManager.Listener) {
- mediaDataFilter.addListener(listener)
- }
-
- override fun removeListener(listener: MediaDataManager.Listener) {
- mediaDataFilter.removeListener(listener)
- }
-
override fun setInactive(key: String, timedOut: Boolean, forceUpdate: Boolean) {
mediaDataProcessor.setInactive(key, timedOut, forceUpdate)
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/MediaDataFilterImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/MediaDataFilterImplTest.kt
index 564bdc3f5880..b70cc30eb3e1 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/MediaDataFilterImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/MediaDataFilterImplTest.kt
@@ -64,6 +64,7 @@ private const val USER_GUEST = 10
private const val PRIVATE_PROFILE = 12
private const val PACKAGE = "PKG"
private val INSTANCE_ID = InstanceId.fakeInstanceId(123)!!
+private val INSTANCE_ID_GUEST = InstanceId.fakeInstanceId(321)!!
private const val APP_UID = 99
private const val SMARTSPACE_KEY = "SMARTSPACE_KEY"
private const val SMARTSPACE_PACKAGE = "SMARTSPACE_PKG"
@@ -75,7 +76,7 @@ private val SMARTSPACE_INSTANCE_ID = InstanceId.fakeInstanceId(456)!!
@TestableLooper.RunWithLooper
class MediaDataFilterImplTest : SysuiTestCase() {
- @Mock private lateinit var listener: MediaDataManager.Listener
+ @Mock private lateinit var listener: MediaDataFilterImpl.Listener
@Mock private lateinit var userTracker: UserTracker
@Mock private lateinit var broadcastSender: BroadcastSender
@Mock private lateinit var mediaDataManager: MediaDataManager
@@ -128,8 +129,8 @@ class MediaDataFilterImplTest : SysuiTestCase() {
instanceId = INSTANCE_ID,
appUid = APP_UID
)
- dataGuest = dataMain.copy(userId = USER_GUEST)
- dataPrivateProfile = dataMain.copy(userId = PRIVATE_PROFILE)
+ dataGuest = dataMain.copy(userId = USER_GUEST, instanceId = INSTANCE_ID_GUEST)
+ dataPrivateProfile = dataMain.copy(userId = PRIVATE_PROFILE, instanceId = INSTANCE_ID_GUEST)
whenever(smartspaceData.targetId).thenReturn(SMARTSPACE_KEY)
whenever(smartspaceData.isActive).thenReturn(true)
@@ -166,8 +167,7 @@ class MediaDataFilterImplTest : SysuiTestCase() {
mediaDataFilter.onMediaDataLoaded(KEY, null, dataMain)
// THEN we should tell the listener
- verify(listener)
- .onMediaDataLoaded(eq(KEY), eq(null), eq(dataMain), eq(true), eq(0), eq(false))
+ verify(listener).onMediaDataLoaded(eq(dataMain.instanceId), eq(true), eq(0), eq(false))
}
@Test
@@ -176,8 +176,7 @@ class MediaDataFilterImplTest : SysuiTestCase() {
mediaDataFilter.onMediaDataLoaded(KEY, null, dataGuest)
// THEN we should NOT tell the listener
- verify(listener, never())
- .onMediaDataLoaded(any(), any(), any(), anyBoolean(), anyInt(), anyBoolean())
+ verify(listener, never()).onMediaDataLoaded(any(), anyBoolean(), anyInt(), anyBoolean())
}
@Test
@@ -187,7 +186,7 @@ class MediaDataFilterImplTest : SysuiTestCase() {
mediaDataFilter.onMediaDataRemoved(KEY)
// THEN we should tell the listener
- verify(listener).onMediaDataRemoved(eq(KEY))
+ verify(listener).onMediaDataRemoved(eq(dataMain.instanceId))
}
@Test
@@ -197,7 +196,7 @@ class MediaDataFilterImplTest : SysuiTestCase() {
mediaDataFilter.onMediaDataRemoved(KEY)
// THEN we should NOT tell the listener
- verify(listener, never()).onMediaDataRemoved(eq(KEY))
+ verify(listener, never()).onMediaDataRemoved(eq(dataGuest.instanceId))
}
@Test
@@ -209,7 +208,7 @@ class MediaDataFilterImplTest : SysuiTestCase() {
setUser(USER_GUEST)
// THEN we should remove the main user's media
- verify(listener).onMediaDataRemoved(eq(KEY))
+ verify(listener).onMediaDataRemoved(eq(dataMain.instanceId))
}
@Test
@@ -223,12 +222,11 @@ class MediaDataFilterImplTest : SysuiTestCase() {
setUser(USER_GUEST)
// THEN we should add back the guest user media
- verify(listener)
- .onMediaDataLoaded(eq(KEY_ALT), eq(null), eq(dataGuest), eq(true), eq(0), eq(false))
+ verify(listener).onMediaDataLoaded(eq(dataGuest.instanceId), eq(true), eq(0), eq(false))
// but not the main user's
verify(listener, never())
- .onMediaDataLoaded(eq(KEY), any(), eq(dataMain), anyBoolean(), anyInt(), anyBoolean())
+ .onMediaDataLoaded(eq(dataMain.instanceId), anyBoolean(), anyInt(), anyBoolean())
}
@Test
@@ -242,7 +240,7 @@ class MediaDataFilterImplTest : SysuiTestCase() {
setPrivateProfileUnavailable()
// THEN we should add the private profile media
- verify(listener).onMediaDataRemoved(eq(KEY_ALT))
+ verify(listener).onMediaDataRemoved(eq(dataPrivateProfile.instanceId))
}
@Test
@@ -311,7 +309,7 @@ class MediaDataFilterImplTest : SysuiTestCase() {
testScope.runTest {
val selectedUserEntries by collectLastValue(mediaFilterRepository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(mediaFilterRepository.smartspaceMediaData)
- val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedKey)
+ val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedId)
val data = dataMain.copy(active = false)
mediaDataFilter.onMediaDataLoaded(KEY, oldKey = null, data = data)
@@ -330,7 +328,7 @@ class MediaDataFilterImplTest : SysuiTestCase() {
testScope.runTest {
val selectedUserEntries by collectLastValue(mediaFilterRepository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(mediaFilterRepository.smartspaceMediaData)
- val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedKey)
+ val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedId)
val data = dataMain.copy(active = true)
mediaDataFilter.onMediaDataLoaded(KEY, oldKey = null, data = data)
@@ -349,7 +347,7 @@ class MediaDataFilterImplTest : SysuiTestCase() {
testScope.runTest {
val selectedUserEntries by collectLastValue(mediaFilterRepository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(mediaFilterRepository.smartspaceMediaData)
- val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedKey)
+ val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedId)
whenever(smartspaceData.isActive).thenReturn(false)
mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
@@ -368,7 +366,7 @@ class MediaDataFilterImplTest : SysuiTestCase() {
testScope.runTest {
val selectedUserEntries by collectLastValue(mediaFilterRepository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(mediaFilterRepository.smartspaceMediaData)
- val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedKey)
+ val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedId)
whenever(smartspaceData.isValid()).thenReturn(false)
mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
@@ -387,7 +385,7 @@ class MediaDataFilterImplTest : SysuiTestCase() {
testScope.runTest {
val selectedUserEntries by collectLastValue(mediaFilterRepository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(mediaFilterRepository.smartspaceMediaData)
- val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedKey)
+ val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedId)
whenever(smartspaceData.isActive).thenReturn(true)
whenever(smartspaceData.isValid()).thenReturn(true)
mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
@@ -421,7 +419,7 @@ class MediaDataFilterImplTest : SysuiTestCase() {
testScope.runTest {
val selectedUserEntries by collectLastValue(mediaFilterRepository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(mediaFilterRepository.smartspaceMediaData)
- val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedKey)
+ val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedId)
assertThat(
hasActiveMediaOrRecommendation(
selectedUserEntries,
@@ -470,12 +468,11 @@ class MediaDataFilterImplTest : SysuiTestCase() {
testScope.runTest {
val selectedUserEntries by collectLastValue(mediaFilterRepository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(mediaFilterRepository.smartspaceMediaData)
- val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedKey)
+ val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedId)
mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
- verify(listener)
- .onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(smartspaceData), eq(true))
+ verify(listener).onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(true))
assertThat(
hasActiveMediaOrRecommendation(
selectedUserEntries,
@@ -494,15 +491,14 @@ class MediaDataFilterImplTest : SysuiTestCase() {
testScope.runTest {
val selectedUserEntries by collectLastValue(mediaFilterRepository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(mediaFilterRepository.smartspaceMediaData)
- val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedKey)
+ val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedId)
whenever(smartspaceData.isActive).thenReturn(false)
mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
- verify(listener, never())
- .onMediaDataLoaded(any(), any(), any(), anyBoolean(), anyInt(), anyBoolean())
- verify(listener, never()).onSmartspaceMediaDataLoaded(any(), any(), anyBoolean())
+ verify(listener, never()).onMediaDataLoaded(any(), anyBoolean(), anyInt(), anyBoolean())
+ verify(listener, never()).onSmartspaceMediaDataLoaded(any(), anyBoolean())
assertThat(
hasActiveMediaOrRecommendation(
selectedUserEntries,
@@ -521,14 +517,13 @@ class MediaDataFilterImplTest : SysuiTestCase() {
testScope.runTest {
val selectedUserEntries by collectLastValue(mediaFilterRepository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(mediaFilterRepository.smartspaceMediaData)
- val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedKey)
+ val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedId)
val dataOld = dataMain.copy(active = false, lastActive = clock.elapsedRealtime())
mediaDataFilter.onMediaDataLoaded(KEY, null, dataOld)
clock.advanceTime(MediaDataFilterImpl.SMARTSPACE_MAX_AGE + 100)
mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
- verify(listener)
- .onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(smartspaceData), eq(true))
+ verify(listener).onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(true))
assertThat(
hasActiveMediaOrRecommendation(
selectedUserEntries,
@@ -547,7 +542,7 @@ class MediaDataFilterImplTest : SysuiTestCase() {
testScope.runTest {
val selectedUserEntries by collectLastValue(mediaFilterRepository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(mediaFilterRepository.smartspaceMediaData)
- val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedKey)
+ val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedId)
whenever(smartspaceData.isActive).thenReturn(false)
val dataOld = dataMain.copy(active = false, lastActive = clock.elapsedRealtime())
@@ -555,7 +550,7 @@ class MediaDataFilterImplTest : SysuiTestCase() {
clock.advanceTime(MediaDataFilterImpl.SMARTSPACE_MAX_AGE + 100)
mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
- verify(listener, never()).onSmartspaceMediaDataLoaded(any(), any(), anyBoolean())
+ verify(listener, never()).onSmartspaceMediaDataLoaded(any(), anyBoolean())
assertThat(
hasActiveMediaOrRecommendation(
selectedUserEntries,
@@ -574,7 +569,7 @@ class MediaDataFilterImplTest : SysuiTestCase() {
testScope.runTest {
val selectedUserEntries by collectLastValue(mediaFilterRepository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(mediaFilterRepository.smartspaceMediaData)
- val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedKey)
+ val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedId)
whenever(smartspaceData.isActive).thenReturn(false)
@@ -582,15 +577,15 @@ class MediaDataFilterImplTest : SysuiTestCase() {
val dataCurrent = dataMain.copy(active = false, lastActive = clock.elapsedRealtime())
mediaDataFilter.onMediaDataLoaded(KEY, null, dataCurrent)
verify(listener)
- .onMediaDataLoaded(eq(KEY), eq(null), eq(dataCurrent), eq(true), eq(0), eq(false))
+ .onMediaDataLoaded(eq(dataCurrent.instanceId), eq(true), eq(0), eq(false))
+ reset(listener)
// AND we get a smartspace signal
mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
// THEN we should tell listeners to treat the media as not active instead
- verify(listener, never())
- .onMediaDataLoaded(eq(KEY), eq(KEY), any(), anyBoolean(), anyInt(), anyBoolean())
- verify(listener, never()).onSmartspaceMediaDataLoaded(any(), any(), anyBoolean())
+ verify(listener, never()).onMediaDataLoaded(any(), anyBoolean(), anyInt(), anyBoolean())
+ verify(listener, never()).onSmartspaceMediaDataLoaded(any(), anyBoolean())
assertThat(
hasActiveMediaOrRecommendation(
selectedUserEntries,
@@ -609,14 +604,14 @@ class MediaDataFilterImplTest : SysuiTestCase() {
testScope.runTest {
val selectedUserEntries by collectLastValue(mediaFilterRepository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(mediaFilterRepository.smartspaceMediaData)
- val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedKey)
+ val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedId)
whenever(smartspaceData.isValid()).thenReturn(false)
// WHEN we have media that was recently played, but not currently active
val dataCurrent = dataMain.copy(active = false, lastActive = clock.elapsedRealtime())
mediaDataFilter.onMediaDataLoaded(KEY, null, dataCurrent)
verify(listener)
- .onMediaDataLoaded(eq(KEY), eq(null), eq(dataCurrent), eq(true), eq(0), eq(false))
+ .onMediaDataLoaded(eq(dataCurrent.instanceId), eq(true), eq(0), eq(false))
// AND we get a smartspace signal
runCurrent()
@@ -625,14 +620,7 @@ class MediaDataFilterImplTest : SysuiTestCase() {
// THEN we should tell listeners to treat the media as active instead
val dataCurrentAndActive = dataCurrent.copy(active = true)
verify(listener)
- .onMediaDataLoaded(
- eq(KEY),
- eq(KEY),
- eq(dataCurrentAndActive),
- eq(true),
- eq(100),
- eq(true)
- )
+ .onMediaDataLoaded(eq(dataCurrentAndActive.instanceId), eq(true), eq(100), eq(true))
assertThat(
hasActiveMediaOrRecommendation(
selectedUserEntries,
@@ -642,7 +630,7 @@ class MediaDataFilterImplTest : SysuiTestCase() {
)
.isTrue()
// Smartspace update shouldn't be propagated for the empty rec list.
- verify(listener, never()).onSmartspaceMediaDataLoaded(any(), any(), anyBoolean())
+ verify(listener, never()).onSmartspaceMediaDataLoaded(any(), anyBoolean())
verify(logger, never()).logRecommendationAdded(any(), any())
verify(logger).logRecommendationActivated(eq(APP_UID), eq(PACKAGE), eq(INSTANCE_ID))
}
@@ -652,12 +640,12 @@ class MediaDataFilterImplTest : SysuiTestCase() {
testScope.runTest {
val selectedUserEntries by collectLastValue(mediaFilterRepository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(mediaFilterRepository.smartspaceMediaData)
- val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedKey)
+ val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedId)
// WHEN we have media that was recently played, but not currently active
val dataCurrent = dataMain.copy(active = false, lastActive = clock.elapsedRealtime())
mediaDataFilter.onMediaDataLoaded(KEY, null, dataCurrent)
verify(listener)
- .onMediaDataLoaded(eq(KEY), eq(null), eq(dataCurrent), eq(true), eq(0), eq(false))
+ .onMediaDataLoaded(eq(dataCurrent.instanceId), eq(true), eq(0), eq(false))
// AND we get a smartspace signal
runCurrent()
@@ -666,14 +654,7 @@ class MediaDataFilterImplTest : SysuiTestCase() {
// THEN we should tell listeners to treat the media as active instead
val dataCurrentAndActive = dataCurrent.copy(active = true)
verify(listener)
- .onMediaDataLoaded(
- eq(KEY),
- eq(KEY),
- eq(dataCurrentAndActive),
- eq(true),
- eq(100),
- eq(true)
- )
+ .onMediaDataLoaded(eq(dataCurrentAndActive.instanceId), eq(true), eq(100), eq(true))
assertThat(
hasActiveMediaOrRecommendation(
selectedUserEntries,
@@ -683,8 +664,7 @@ class MediaDataFilterImplTest : SysuiTestCase() {
)
.isTrue()
// Smartspace update should also be propagated but not prioritized.
- verify(listener)
- .onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(smartspaceData), eq(false))
+ verify(listener).onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(false))
verify(logger).logRecommendationAdded(SMARTSPACE_PACKAGE, SMARTSPACE_INSTANCE_ID)
verify(logger).logRecommendationActivated(eq(APP_UID), eq(PACKAGE), eq(INSTANCE_ID))
}
@@ -694,7 +674,7 @@ class MediaDataFilterImplTest : SysuiTestCase() {
testScope.runTest {
val selectedUserEntries by collectLastValue(mediaFilterRepository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(mediaFilterRepository.smartspaceMediaData)
- val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedKey)
+ val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedId)
mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
mediaDataFilter.onSmartspaceMediaDataRemoved(SMARTSPACE_KEY)
@@ -716,25 +696,18 @@ class MediaDataFilterImplTest : SysuiTestCase() {
testScope.runTest {
val selectedUserEntries by collectLastValue(mediaFilterRepository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(mediaFilterRepository.smartspaceMediaData)
- val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedKey)
+ val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedId)
val dataCurrent = dataMain.copy(active = false, lastActive = clock.elapsedRealtime())
mediaDataFilter.onMediaDataLoaded(KEY, null, dataCurrent)
verify(listener)
- .onMediaDataLoaded(eq(KEY), eq(null), eq(dataCurrent), eq(true), eq(0), eq(false))
+ .onMediaDataLoaded(eq(dataCurrent.instanceId), eq(true), eq(0), eq(false))
runCurrent()
mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
val dataCurrentAndActive = dataCurrent.copy(active = true)
verify(listener)
- .onMediaDataLoaded(
- eq(KEY),
- eq(KEY),
- eq(dataCurrentAndActive),
- eq(true),
- eq(100),
- eq(true)
- )
+ .onMediaDataLoaded(eq(dataCurrentAndActive.instanceId), eq(true), eq(100), eq(true))
mediaDataFilter.onSmartspaceMediaDataRemoved(SMARTSPACE_KEY)
@@ -755,14 +728,13 @@ class MediaDataFilterImplTest : SysuiTestCase() {
testScope.runTest {
val selectedUserEntries by collectLastValue(mediaFilterRepository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(mediaFilterRepository.smartspaceMediaData)
- val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedKey)
+ val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedId)
whenever(mediaFlags.isPersistentSsCardEnabled()).thenReturn(true)
whenever(smartspaceData.isActive).thenReturn(false)
mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
- verify(listener)
- .onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(smartspaceData), eq(false))
+ verify(listener).onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(false))
assertThat(
hasActiveMediaOrRecommendation(
selectedUserEntries,
@@ -780,7 +752,7 @@ class MediaDataFilterImplTest : SysuiTestCase() {
testScope.runTest {
val selectedUserEntries by collectLastValue(mediaFilterRepository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(mediaFilterRepository.smartspaceMediaData)
- val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedKey)
+ val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedId)
whenever(mediaFlags.isPersistentSsCardEnabled()).thenReturn(true)
whenever(smartspaceData.isActive).thenReturn(false)
@@ -789,16 +761,15 @@ class MediaDataFilterImplTest : SysuiTestCase() {
val dataCurrent = dataMain.copy(active = false, lastActive = clock.elapsedRealtime())
mediaDataFilter.onMediaDataLoaded(KEY, null, dataCurrent)
verify(listener)
- .onMediaDataLoaded(eq(KEY), eq(null), eq(dataCurrent), eq(true), eq(0), eq(false))
+ .onMediaDataLoaded(eq(dataCurrent.instanceId), eq(true), eq(0), eq(false))
+ reset(listener)
// And an inactive recommendation is loaded
mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
// Smartspace is loaded but the media stays inactive
- verify(listener)
- .onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(smartspaceData), eq(false))
- verify(listener, never())
- .onMediaDataLoaded(any(), any(), any(), anyBoolean(), anyInt(), anyBoolean())
+ verify(listener).onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(false))
+ verify(listener, never()).onMediaDataLoaded(any(), anyBoolean(), anyInt(), anyBoolean())
assertThat(
hasActiveMediaOrRecommendation(
selectedUserEntries,
@@ -835,12 +806,12 @@ class MediaDataFilterImplTest : SysuiTestCase() {
testScope.runTest {
val selectedUserEntries by collectLastValue(mediaFilterRepository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(mediaFilterRepository.smartspaceMediaData)
- val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedKey)
+ val reactivatedKey by collectLastValue(mediaFilterRepository.reactivatedId)
// WHEN we have media that was recently played, but not currently active
val dataCurrent = dataMain.copy(active = false, lastActive = clock.elapsedRealtime())
mediaDataFilter.onMediaDataLoaded(KEY, null, dataCurrent)
verify(listener)
- .onMediaDataLoaded(eq(KEY), eq(null), eq(dataCurrent), eq(true), eq(0), eq(false))
+ .onMediaDataLoaded(eq(dataCurrent.instanceId), eq(true), eq(0), eq(false))
// AND we get a smartspace signal with extra to trigger resume
runCurrent()
@@ -851,14 +822,7 @@ class MediaDataFilterImplTest : SysuiTestCase() {
// THEN we should tell listeners to treat the media as active instead
val dataCurrentAndActive = dataCurrent.copy(active = true)
verify(listener)
- .onMediaDataLoaded(
- eq(KEY),
- eq(KEY),
- eq(dataCurrentAndActive),
- eq(true),
- eq(100),
- eq(true)
- )
+ .onMediaDataLoaded(eq(dataCurrentAndActive.instanceId), eq(true), eq(100), eq(true))
assertThat(
hasActiveMediaOrRecommendation(
selectedUserEntries,
@@ -868,8 +832,7 @@ class MediaDataFilterImplTest : SysuiTestCase() {
)
.isTrue()
// And send the smartspace data, but not prioritized
- verify(listener)
- .onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(smartspaceData), eq(false))
+ verify(listener).onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(false))
}
@Test
@@ -877,8 +840,7 @@ class MediaDataFilterImplTest : SysuiTestCase() {
// WHEN we have media that was recently played, but not currently active
val dataCurrent = dataMain.copy(active = false, lastActive = clock.elapsedRealtime())
mediaDataFilter.onMediaDataLoaded(KEY, null, dataCurrent)
- verify(listener)
- .onMediaDataLoaded(eq(KEY), eq(null), eq(dataCurrent), eq(true), eq(0), eq(false))
+ verify(listener).onMediaDataLoaded(eq(dataCurrent.instanceId), eq(true), eq(0), eq(false))
// AND we get a smartspace signal with extra to not trigger resume
val extras = Bundle().apply { putBoolean(EXTRA_KEY_TRIGGER_RESUME, false) }
@@ -886,32 +848,30 @@ class MediaDataFilterImplTest : SysuiTestCase() {
mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
// THEN listeners are not updated to show media
- verify(listener, never())
- .onMediaDataLoaded(eq(KEY), eq(KEY), any(), eq(true), eq(100), eq(true))
+ verify(listener, never()).onMediaDataLoaded(any(), eq(true), eq(100), eq(true))
// But the smartspace update is still propagated
- verify(listener)
- .onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(smartspaceData), eq(false))
+ verify(listener).onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(false))
}
private fun hasActiveMediaOrRecommendation(
- entries: Map<String, MediaData>?,
+ entries: Map<InstanceId, MediaData>?,
smartspaceMediaData: SmartspaceMediaData?,
- reactivatedKey: String?
+ reactivatedId: InstanceId?
): Boolean {
if (entries == null || smartspaceMediaData == null) {
return false
}
return entries.any { it.value.active } ||
(smartspaceMediaData.isActive &&
- (smartspaceMediaData.isValid() || reactivatedKey != null))
+ (smartspaceMediaData.isValid() || reactivatedId != null))
}
- private fun hasActiveMedia(entries: Map<String, MediaData>?): Boolean {
+ private fun hasActiveMedia(entries: Map<InstanceId, MediaData>?): Boolean {
return entries?.any { it.value.active } ?: false
}
private fun hasAnyMediaOrRecommendation(
- entries: Map<String, MediaData>?,
+ entries: Map<InstanceId, MediaData>?,
smartspaceMediaData: SmartspaceMediaData?
): Boolean {
if (entries == null || smartspaceMediaData == null) {
@@ -925,7 +885,7 @@ class MediaDataFilterImplTest : SysuiTestCase() {
})
}
- private fun hasAnyMedia(entries: Map<String, MediaData>?): Boolean {
+ private fun hasAnyMedia(entries: Map<InstanceId, MediaData>?): Boolean {
return entries?.isNotEmpty() ?: false
}
}