Loading packages/SystemUI/src/com/android/systemui/media/controls/data/repository/MediaFilterRepository.kt +42 −1 Original line number Diff line number Diff line Loading @@ -16,24 +16,64 @@ package com.android.systemui.media.controls.data.repository import android.content.Context import com.android.internal.logging.InstanceId import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.media.controls.data.model.MediaSortKeyModel import com.android.systemui.media.controls.shared.model.MediaCommonModel import com.android.systemui.media.controls.shared.model.MediaData import com.android.systemui.media.controls.shared.model.MediaDataLoadingModel import com.android.systemui.media.controls.shared.model.SmartspaceMediaData import com.android.systemui.media.controls.shared.model.SmartspaceMediaLoadingModel import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.util.time.SystemClock import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow import java.util.Locale import java.util.TreeMap import javax.inject.Inject import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow /** A repository that holds the state of filtered media data on the device. */ @SysUISingleton class MediaFilterRepository @Inject constructor(private val systemClock: SystemClock) { class MediaFilterRepository @Inject constructor( @Application applicationContext: Context, private val systemClock: SystemClock, private val configurationController: ConfigurationController, ) { val onAnyMediaConfigurationChange: Flow<Unit> = conflatedCallbackFlow { val callback = object : ConfigurationController.ConfigurationListener { override fun onDensityOrFontScaleChanged() { trySend(Unit) } override fun onThemeChanged() { trySend(Unit) } override fun onUiModeChanged() { trySend(Unit) } override fun onLocaleListChanged() { if (locale != applicationContext.resources.configuration.locales.get(0)) { locale = applicationContext.resources.configuration.locales.get(0) trySend(Unit) } } } configurationController.addCallback(callback) trySend(Unit) awaitClose { configurationController.removeCallback(callback) } } /** Instance id of media control that recommendations card reactivated. */ private val _reactivatedId: MutableStateFlow<InstanceId?> = MutableStateFlow(null) Loading Loading @@ -76,6 +116,7 @@ class MediaFilterRepository @Inject constructor(private val systemClock: SystemC val isMediaFromRec: StateFlow<Boolean> = _isMediaFromRec.asStateFlow() private var mediaFromRecPackageName: String? = null private var locale: Locale = applicationContext.resources.configuration.locales.get(0) fun addMediaEntry(key: String, data: MediaData) { val entries = LinkedHashMap<String, MediaData>(_allUserEntries.value) Loading packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaCarouselInteractor.kt +1 −1 Original line number Diff line number Diff line Loading @@ -157,7 +157,7 @@ constructor( // Set up links back into the pipeline for listeners that need to send events upstream. mediaTimeoutListener.timeoutCallback = { key: String, timedOut: Boolean -> setInactive(key, timedOut) mediaDataProcessor.setInactive(key, timedOut) } mediaTimeoutListener.stateCallback = { key: String, state: PlaybackState -> mediaDataProcessor.updateState(key, state) Loading packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaControlInteractor.kt +2 −0 Original line number Diff line number Diff line Loading @@ -83,6 +83,8 @@ constructor( .pairwiseBy(initialValue = false) { wasPlaying, isPlaying -> !wasPlaying && isPlaying } .distinctUntilChanged() val onAnyMediaConfigurationChange: Flow<Unit> = repository.onAnyMediaConfigurationChange fun removeMediaControl( token: MediaSession.Token?, instanceId: InstanceId, Loading packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaRecommendationsInteractor.kt +2 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,8 @@ constructor( .distinctUntilChanged() .stateIn(applicationScope, SharingStarted.WhileSubscribed(), false) val onAnyMediaConfigurationChange: Flow<Unit> = repository.onAnyMediaConfigurationChange fun removeMediaRecommendations(key: String, dismissIntent: Intent?, delayMs: Long) { mediaDataProcessor.dismissSmartspaceRecommendation(key, delayMs) if (dismissIntent == null) { Loading packages/SystemUI/src/com/android/systemui/media/controls/ui/binder/MediaControlViewBinder.kt +3 −2 Original line number Diff line number Diff line Loading @@ -100,7 +100,7 @@ object MediaControlViewBinder { } } private suspend fun bindMediaCard( suspend fun bindMediaCard( viewHolder: MediaViewHolder, viewController: MediaViewController, viewModel: MediaPlayerViewModel, Loading Loading @@ -333,7 +333,7 @@ object MediaControlViewBinder { } } } updateSeekBarVisibility(viewController.expandedLayout, isSeekBarEnabled = false) updateSeekBarVisibility(viewController.expandedLayout, viewController.isSeekBarEnabled) } private fun bindButtonCommon( Loading Loading @@ -472,6 +472,7 @@ object MediaControlViewBinder { if (viewModel.shouldAddGradient) 333 else 80 ) } ?: albumView.setImageDrawable(artwork) } viewController.isArtworkBound = viewModel.shouldAddGradient viewController.prevArtwork = artwork Loading Loading
packages/SystemUI/src/com/android/systemui/media/controls/data/repository/MediaFilterRepository.kt +42 −1 Original line number Diff line number Diff line Loading @@ -16,24 +16,64 @@ package com.android.systemui.media.controls.data.repository import android.content.Context import com.android.internal.logging.InstanceId import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.media.controls.data.model.MediaSortKeyModel import com.android.systemui.media.controls.shared.model.MediaCommonModel import com.android.systemui.media.controls.shared.model.MediaData import com.android.systemui.media.controls.shared.model.MediaDataLoadingModel import com.android.systemui.media.controls.shared.model.SmartspaceMediaData import com.android.systemui.media.controls.shared.model.SmartspaceMediaLoadingModel import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.util.time.SystemClock import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow import java.util.Locale import java.util.TreeMap import javax.inject.Inject import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow /** A repository that holds the state of filtered media data on the device. */ @SysUISingleton class MediaFilterRepository @Inject constructor(private val systemClock: SystemClock) { class MediaFilterRepository @Inject constructor( @Application applicationContext: Context, private val systemClock: SystemClock, private val configurationController: ConfigurationController, ) { val onAnyMediaConfigurationChange: Flow<Unit> = conflatedCallbackFlow { val callback = object : ConfigurationController.ConfigurationListener { override fun onDensityOrFontScaleChanged() { trySend(Unit) } override fun onThemeChanged() { trySend(Unit) } override fun onUiModeChanged() { trySend(Unit) } override fun onLocaleListChanged() { if (locale != applicationContext.resources.configuration.locales.get(0)) { locale = applicationContext.resources.configuration.locales.get(0) trySend(Unit) } } } configurationController.addCallback(callback) trySend(Unit) awaitClose { configurationController.removeCallback(callback) } } /** Instance id of media control that recommendations card reactivated. */ private val _reactivatedId: MutableStateFlow<InstanceId?> = MutableStateFlow(null) Loading Loading @@ -76,6 +116,7 @@ class MediaFilterRepository @Inject constructor(private val systemClock: SystemC val isMediaFromRec: StateFlow<Boolean> = _isMediaFromRec.asStateFlow() private var mediaFromRecPackageName: String? = null private var locale: Locale = applicationContext.resources.configuration.locales.get(0) fun addMediaEntry(key: String, data: MediaData) { val entries = LinkedHashMap<String, MediaData>(_allUserEntries.value) Loading
packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaCarouselInteractor.kt +1 −1 Original line number Diff line number Diff line Loading @@ -157,7 +157,7 @@ constructor( // Set up links back into the pipeline for listeners that need to send events upstream. mediaTimeoutListener.timeoutCallback = { key: String, timedOut: Boolean -> setInactive(key, timedOut) mediaDataProcessor.setInactive(key, timedOut) } mediaTimeoutListener.stateCallback = { key: String, state: PlaybackState -> mediaDataProcessor.updateState(key, state) Loading
packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaControlInteractor.kt +2 −0 Original line number Diff line number Diff line Loading @@ -83,6 +83,8 @@ constructor( .pairwiseBy(initialValue = false) { wasPlaying, isPlaying -> !wasPlaying && isPlaying } .distinctUntilChanged() val onAnyMediaConfigurationChange: Flow<Unit> = repository.onAnyMediaConfigurationChange fun removeMediaControl( token: MediaSession.Token?, instanceId: InstanceId, Loading
packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaRecommendationsInteractor.kt +2 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,8 @@ constructor( .distinctUntilChanged() .stateIn(applicationScope, SharingStarted.WhileSubscribed(), false) val onAnyMediaConfigurationChange: Flow<Unit> = repository.onAnyMediaConfigurationChange fun removeMediaRecommendations(key: String, dismissIntent: Intent?, delayMs: Long) { mediaDataProcessor.dismissSmartspaceRecommendation(key, delayMs) if (dismissIntent == null) { Loading
packages/SystemUI/src/com/android/systemui/media/controls/ui/binder/MediaControlViewBinder.kt +3 −2 Original line number Diff line number Diff line Loading @@ -100,7 +100,7 @@ object MediaControlViewBinder { } } private suspend fun bindMediaCard( suspend fun bindMediaCard( viewHolder: MediaViewHolder, viewController: MediaViewController, viewModel: MediaPlayerViewModel, Loading Loading @@ -333,7 +333,7 @@ object MediaControlViewBinder { } } } updateSeekBarVisibility(viewController.expandedLayout, isSeekBarEnabled = false) updateSeekBarVisibility(viewController.expandedLayout, viewController.isSeekBarEnabled) } private fun bindButtonCommon( Loading Loading @@ -472,6 +472,7 @@ object MediaControlViewBinder { if (viewModel.shouldAddGradient) 333 else 80 ) } ?: albumView.setImageDrawable(artwork) } viewController.isArtworkBound = viewModel.shouldAddGradient viewController.prevArtwork = artwork Loading