Loading packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselController.kt +8 −5 Original line number Original line Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading @@ -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, Loading Loading @@ -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 { Loading Loading @@ -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() Loading Loading @@ -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. Loading packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/controller/MediaCarouselControllerTest.kt +14 −6 Original line number Original line Diff line number Diff line Loading @@ -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 Loading Loading @@ -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, Loading Loading @@ -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) Loading @@ -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) Loading Loading
packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselController.kt +8 −5 Original line number Original line Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading @@ -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, Loading Loading @@ -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 { Loading Loading @@ -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() Loading Loading @@ -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. Loading
packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/controller/MediaCarouselControllerTest.kt +14 −6 Original line number Original line Diff line number Diff line Loading @@ -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 Loading Loading @@ -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, Loading Loading @@ -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) Loading @@ -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) Loading