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

Commit 890113a7 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Listen for media lockscreen setting in background" into main

parents 1f8ddb15 ab993343
Loading
Loading
Loading
Loading
+8 −5
Original line number Original line Diff line number Diff line
@@ -42,6 +42,7 @@ import com.android.keyguard.KeyguardUpdateMonitor
import com.android.keyguard.KeyguardUpdateMonitorCallback
import com.android.keyguard.KeyguardUpdateMonitorCallback
import com.android.systemui.Dumpable
import com.android.systemui.Dumpable
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.dump.DumpManager
import com.android.systemui.dump.DumpManager
@@ -106,6 +107,7 @@ import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.launch
import kotlinx.coroutines.launch
@@ -123,6 +125,7 @@ private val DEBUG = Log.isLoggable(TAG, Log.DEBUG)
class MediaCarouselController
class MediaCarouselController
@Inject
@Inject
constructor(
constructor(
    @Application applicationScope: CoroutineScope,
    private val context: Context,
    private val context: Context,
    private val mediaControlPanelFactory: Provider<MediaControlPanel>,
    private val mediaControlPanelFactory: Provider<MediaControlPanel>,
    private val visualStabilityProvider: VisualStabilityProvider,
    private val visualStabilityProvider: VisualStabilityProvider,
@@ -387,12 +390,12 @@ constructor(
            repeatOnLifecycle(Lifecycle.State.STARTED) {
            repeatOnLifecycle(Lifecycle.State.STARTED) {
                listenForAnyStateToGoneKeyguardTransition(this)
                listenForAnyStateToGoneKeyguardTransition(this)
                listenForAnyStateToLockscreenTransition(this)
                listenForAnyStateToLockscreenTransition(this)
                listenForLockscreenSettingChanges(this)


                if (!mediaFlags.isSceneContainerEnabled()) return@repeatOnLifecycle
                if (!mediaFlags.isSceneContainerEnabled()) return@repeatOnLifecycle
                listenForMediaItemsChanges(this)
                listenForMediaItemsChanges(this)
            }
            }
        }
        }
        listenForLockscreenSettingChanges(applicationScope)


        // Notifies all active players about animation scale changes.
        // Notifies all active players about animation scale changes.
        bgExecutor.execute {
        bgExecutor.execute {
@@ -696,6 +699,7 @@ constructor(
                .onStart { emit(Unit) }
                .onStart { emit(Unit) }
                .map { getMediaLockScreenSetting() }
                .map { getMediaLockScreenSetting() }
                .distinctUntilChanged()
                .distinctUntilChanged()
                .flowOn(backgroundDispatcher)
                .collectLatest {
                .collectLatest {
                    allowMediaPlayerOnLockScreen = it
                    allowMediaPlayerOnLockScreen = it
                    updateHostVisibility()
                    updateHostVisibility()
@@ -884,8 +888,7 @@ constructor(
                    val previousVisibleIndex =
                    val previousVisibleIndex =
                        MediaPlayerData.playerKeys().indexOfFirst { key -> it == key }
                        MediaPlayerData.playerKeys().indexOfFirst { key -> it == key }
                    mediaCarouselScrollHandler.scrollToPlayer(previousVisibleIndex, mediaIndex)
                    mediaCarouselScrollHandler.scrollToPlayer(previousVisibleIndex, mediaIndex)
                }
                } ?: mediaCarouselScrollHandler.scrollToPlayer(destIndex = mediaIndex)
                    ?: mediaCarouselScrollHandler.scrollToPlayer(destIndex = mediaIndex)
            }
            }
        } else if (isRtl && mediaContent.childCount > 0) {
        } else if (isRtl && mediaContent.childCount > 0) {
            // In RTL, Scroll to the first player as it is the rightmost player in media carousel.
            // In RTL, Scroll to the first player as it is the rightmost player in media carousel.
+14 −6
Original line number Original line Diff line number Diff line
@@ -40,6 +40,7 @@ import com.android.systemui.flags.fakeFeatureFlagsClassic
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.kosmos.testScope
import com.android.systemui.kosmos.testScope
import com.android.systemui.media.controls.MediaTestUtils
import com.android.systemui.media.controls.MediaTestUtils
@@ -158,6 +159,7 @@ class MediaCarouselControllerTest : SysuiTestCase() {
        testDispatcher = UnconfinedTestDispatcher()
        testDispatcher = UnconfinedTestDispatcher()
        mediaCarouselController =
        mediaCarouselController =
            MediaCarouselController(
            MediaCarouselController(
                applicationScope = kosmos.applicationCoroutineScope,
                context = context,
                context = context,
                mediaControlPanelFactory = mediaControlPanelFactory,
                mediaControlPanelFactory = mediaControlPanelFactory,
                visualStabilityProvider = visualStabilityProvider,
                visualStabilityProvider = visualStabilityProvider,
@@ -894,7 +896,10 @@ class MediaCarouselControllerTest : SysuiTestCase() {
            mediaCarouselController.updateHostVisibility = { updatedVisibility = true }
            mediaCarouselController.updateHostVisibility = { updatedVisibility = true }
            mediaCarouselController.mediaCarousel = mediaCarousel
            mediaCarouselController.mediaCarousel = mediaCarousel


            val settingsJob = mediaCarouselController.listenForLockscreenSettingChanges(this)
            val settingsJob =
                mediaCarouselController.listenForLockscreenSettingChanges(
                    kosmos.applicationCoroutineScope
                )
            secureSettings.putBool(Settings.Secure.MEDIA_CONTROLS_LOCK_SCREEN, false)
            secureSettings.putBool(Settings.Secure.MEDIA_CONTROLS_LOCK_SCREEN, false)


            val keyguardJob = mediaCarouselController.listenForAnyStateToLockscreenTransition(this)
            val keyguardJob = mediaCarouselController.listenForAnyStateToLockscreenTransition(this)
@@ -921,7 +926,10 @@ class MediaCarouselControllerTest : SysuiTestCase() {
            mediaCarouselController.updateHostVisibility = { updatedVisibility = true }
            mediaCarouselController.updateHostVisibility = { updatedVisibility = true }
            mediaCarouselController.mediaCarousel = mediaCarousel
            mediaCarouselController.mediaCarousel = mediaCarousel


            val settingsJob = mediaCarouselController.listenForLockscreenSettingChanges(this)
            val settingsJob =
                mediaCarouselController.listenForLockscreenSettingChanges(
                    kosmos.applicationCoroutineScope
                )
            secureSettings.putBool(Settings.Secure.MEDIA_CONTROLS_LOCK_SCREEN, true)
            secureSettings.putBool(Settings.Secure.MEDIA_CONTROLS_LOCK_SCREEN, true)


            val keyguardJob = mediaCarouselController.listenForAnyStateToLockscreenTransition(this)
            val keyguardJob = mediaCarouselController.listenForAnyStateToLockscreenTransition(this)