Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d3725c1e authored by Michael Mikhail's avatar Michael Mikhail Committed by Android (Google) Code Review
Browse files

Merge changes I5678f4f9,Iff63792d into main

* changes:
  Roll back to use bacground executor
  Connect carousel UI to pipeline
parents 51749341 d19b0e07
Loading
Loading
Loading
Loading
+42 −1
Original line number Diff line number Diff line
@@ -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)
@@ -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)
+1 −1
Original line number Diff line number Diff line
@@ -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)
+2 −0
Original line number Diff line number Diff line
@@ -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,
+2 −0
Original line number Diff line number Diff line
@@ -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) {
+3 −2
Original line number Diff line number Diff line
@@ -100,7 +100,7 @@ object MediaControlViewBinder {
        }
    }

    private suspend fun bindMediaCard(
    suspend fun bindMediaCard(
        viewHolder: MediaViewHolder,
        viewController: MediaViewController,
        viewModel: MediaPlayerViewModel,
@@ -333,7 +333,7 @@ object MediaControlViewBinder {
                }
            }
        }
        updateSeekBarVisibility(viewController.expandedLayout, isSeekBarEnabled = false)
        updateSeekBarVisibility(viewController.expandedLayout, viewController.isSeekBarEnabled)
    }

    private fun bindButtonCommon(
@@ -472,6 +472,7 @@ object MediaControlViewBinder {
                            if (viewModel.shouldAddGradient) 333 else 80
                        )
                    }
                        ?: albumView.setImageDrawable(artwork)
                }
                viewController.isArtworkBound = viewModel.shouldAddGradient
                viewController.prevArtwork = artwork
Loading