Loading packages/SystemUI/src/com/android/systemui/media/KeyguardMediaController.kt +1 −4 Original line number Diff line number Diff line Loading @@ -24,7 +24,6 @@ import androidx.annotation.VisibleForTesting import com.android.systemui.dagger.SysUISingleton import com.android.systemui.media.dagger.MediaModule.KEYGUARD import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.statusbar.NotificationLockscreenUserManager import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.notification.stack.MediaContainerView Loading @@ -43,7 +42,6 @@ class KeyguardMediaController @Inject constructor( @param:Named(KEYGUARD) private val mediaHost: MediaHost, private val bypassController: KeyguardBypassController, private val statusBarStateController: SysuiStatusBarStateController, private val notifLockscreenUserManager: NotificationLockscreenUserManager, private val context: Context, configurationController: ConfigurationController ) { Loading Loading @@ -163,8 +161,7 @@ class KeyguardMediaController @Inject constructor( // mediaHost.visible required for proper animations handling visible = mediaHost.visible && !bypassController.bypassEnabled && keyguardOrUserSwitcher && notifLockscreenUserManager.shouldShowLockscreenNotifications() keyguardOrUserSwitcher if (visible) { showMediaPlayer() } else { Loading packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt +1 −0 Original line number Diff line number Diff line Loading @@ -176,6 +176,7 @@ class MediaCarouselController @Inject constructor( * It will be called when the container is out of view. */ lateinit var updateUserVisibility: () -> Unit lateinit var updateHostVisibility: () -> Unit private val isReorderingAllowed: Boolean get() = visualStabilityProvider.isReorderingAllowed Loading packages/SystemUI/src/com/android/systemui/media/MediaHierarchyManager.kt +13 −0 Original line number Diff line number Diff line Loading @@ -451,6 +451,7 @@ class MediaHierarchyManager @Inject constructor( mediaCarouselController.logSmartspaceImpression(qsExpanded) } mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser() mediaCarouselController.updateHostVisibility() } override fun onDozeAmountChanged(linear: Float, eased: Float) { Loading Loading @@ -510,6 +511,11 @@ class MediaHierarchyManager @Inject constructor( mediaCarouselController.updateUserVisibility = { mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser() } mediaCarouselController.updateHostVisibility = { mediaHosts.forEach { it?.updateViewVisibility() } } } private fun updateConfiguration() { Loading Loading @@ -555,6 +561,13 @@ class MediaHierarchyManager @Inject constructor( mediaCarouselController.closeGuts() } /** Return true if the carousel should be hidden because lockscreen is currently visible */ fun isLockedAndHidden(): Boolean { return !notifLockscreenUserManager.shouldShowLockscreenNotifications() && (statusbarState == StatusBarState.SHADE_LOCKED || statusbarState == StatusBarState.KEYGUARD) } private fun createUniqueObjectHost(): UniqueObjectHostView { val viewHost = UniqueObjectHostView(context) viewHost.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener { Loading packages/SystemUI/src/com/android/systemui/media/MediaHost.kt +8 −2 Original line number Diff line number Diff line Loading @@ -167,8 +167,14 @@ class MediaHost constructor( } } private fun updateViewVisibility() { state.visible = if (showsOnlyActiveMedia) { /** * Updates this host's state based on the current media data's status, and invokes listeners if * the visibility has changed */ fun updateViewVisibility() { state.visible = if (mediaHierarchyManager.isLockedAndHidden()) { false } else if (showsOnlyActiveMedia) { mediaDataManager.hasActiveMediaOrRecommendation() } else { mediaDataManager.hasAnyMediaOrRecommendation() Loading packages/SystemUI/tests/src/com/android/systemui/media/KeyguardMediaControllerTest.kt +0 −16 Original line number Diff line number Diff line Loading @@ -22,7 +22,6 @@ import android.view.View.GONE import android.view.View.VISIBLE import android.widget.FrameLayout import com.android.systemui.SysuiTestCase import com.android.systemui.statusbar.NotificationLockscreenUserManager import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.notification.stack.MediaContainerView Loading Loading @@ -53,8 +52,6 @@ class KeyguardMediaControllerTest : SysuiTestCase() { @Mock private lateinit var configurationController: ConfigurationController @Mock private lateinit var notificationLockscreenUserManager: NotificationLockscreenUserManager @JvmField @Rule val mockito = MockitoJUnit.rule() Loading @@ -67,15 +64,12 @@ class KeyguardMediaControllerTest : SysuiTestCase() { // default state is positive, media should show up whenever(mediaHost.visible).thenReturn(true) whenever(statusBarStateController.state).thenReturn(StatusBarState.KEYGUARD) whenever(notificationLockscreenUserManager.shouldShowLockscreenNotifications()) .thenReturn(true) whenever(mediaHost.hostView).thenReturn(hostView) hostView.layoutParams = FrameLayout.LayoutParams(100, 100) keyguardMediaController = KeyguardMediaController( mediaHost, bypassController, statusBarStateController, notificationLockscreenUserManager, context, configurationController ) Loading Loading @@ -105,16 +99,6 @@ class KeyguardMediaControllerTest : SysuiTestCase() { assertThat(mediaContainerView.visibility).isEqualTo(visibility) } @Test fun testHiddenOnKeyguard_whenNotificationsAreHidden() { whenever(notificationLockscreenUserManager.shouldShowLockscreenNotifications()) .thenReturn(false) keyguardMediaController.refreshMediaPosition() assertThat(mediaContainerView.visibility).isEqualTo(GONE) } @Test fun testActivatesSplitShadeContainerInSplitShadeMode() { val splitShadeContainer = FrameLayout(context) Loading Loading
packages/SystemUI/src/com/android/systemui/media/KeyguardMediaController.kt +1 −4 Original line number Diff line number Diff line Loading @@ -24,7 +24,6 @@ import androidx.annotation.VisibleForTesting import com.android.systemui.dagger.SysUISingleton import com.android.systemui.media.dagger.MediaModule.KEYGUARD import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.statusbar.NotificationLockscreenUserManager import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.notification.stack.MediaContainerView Loading @@ -43,7 +42,6 @@ class KeyguardMediaController @Inject constructor( @param:Named(KEYGUARD) private val mediaHost: MediaHost, private val bypassController: KeyguardBypassController, private val statusBarStateController: SysuiStatusBarStateController, private val notifLockscreenUserManager: NotificationLockscreenUserManager, private val context: Context, configurationController: ConfigurationController ) { Loading Loading @@ -163,8 +161,7 @@ class KeyguardMediaController @Inject constructor( // mediaHost.visible required for proper animations handling visible = mediaHost.visible && !bypassController.bypassEnabled && keyguardOrUserSwitcher && notifLockscreenUserManager.shouldShowLockscreenNotifications() keyguardOrUserSwitcher if (visible) { showMediaPlayer() } else { Loading
packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt +1 −0 Original line number Diff line number Diff line Loading @@ -176,6 +176,7 @@ class MediaCarouselController @Inject constructor( * It will be called when the container is out of view. */ lateinit var updateUserVisibility: () -> Unit lateinit var updateHostVisibility: () -> Unit private val isReorderingAllowed: Boolean get() = visualStabilityProvider.isReorderingAllowed Loading
packages/SystemUI/src/com/android/systemui/media/MediaHierarchyManager.kt +13 −0 Original line number Diff line number Diff line Loading @@ -451,6 +451,7 @@ class MediaHierarchyManager @Inject constructor( mediaCarouselController.logSmartspaceImpression(qsExpanded) } mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser() mediaCarouselController.updateHostVisibility() } override fun onDozeAmountChanged(linear: Float, eased: Float) { Loading Loading @@ -510,6 +511,11 @@ class MediaHierarchyManager @Inject constructor( mediaCarouselController.updateUserVisibility = { mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser() } mediaCarouselController.updateHostVisibility = { mediaHosts.forEach { it?.updateViewVisibility() } } } private fun updateConfiguration() { Loading Loading @@ -555,6 +561,13 @@ class MediaHierarchyManager @Inject constructor( mediaCarouselController.closeGuts() } /** Return true if the carousel should be hidden because lockscreen is currently visible */ fun isLockedAndHidden(): Boolean { return !notifLockscreenUserManager.shouldShowLockscreenNotifications() && (statusbarState == StatusBarState.SHADE_LOCKED || statusbarState == StatusBarState.KEYGUARD) } private fun createUniqueObjectHost(): UniqueObjectHostView { val viewHost = UniqueObjectHostView(context) viewHost.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener { Loading
packages/SystemUI/src/com/android/systemui/media/MediaHost.kt +8 −2 Original line number Diff line number Diff line Loading @@ -167,8 +167,14 @@ class MediaHost constructor( } } private fun updateViewVisibility() { state.visible = if (showsOnlyActiveMedia) { /** * Updates this host's state based on the current media data's status, and invokes listeners if * the visibility has changed */ fun updateViewVisibility() { state.visible = if (mediaHierarchyManager.isLockedAndHidden()) { false } else if (showsOnlyActiveMedia) { mediaDataManager.hasActiveMediaOrRecommendation() } else { mediaDataManager.hasAnyMediaOrRecommendation() Loading
packages/SystemUI/tests/src/com/android/systemui/media/KeyguardMediaControllerTest.kt +0 −16 Original line number Diff line number Diff line Loading @@ -22,7 +22,6 @@ import android.view.View.GONE import android.view.View.VISIBLE import android.widget.FrameLayout import com.android.systemui.SysuiTestCase import com.android.systemui.statusbar.NotificationLockscreenUserManager import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.notification.stack.MediaContainerView Loading Loading @@ -53,8 +52,6 @@ class KeyguardMediaControllerTest : SysuiTestCase() { @Mock private lateinit var configurationController: ConfigurationController @Mock private lateinit var notificationLockscreenUserManager: NotificationLockscreenUserManager @JvmField @Rule val mockito = MockitoJUnit.rule() Loading @@ -67,15 +64,12 @@ class KeyguardMediaControllerTest : SysuiTestCase() { // default state is positive, media should show up whenever(mediaHost.visible).thenReturn(true) whenever(statusBarStateController.state).thenReturn(StatusBarState.KEYGUARD) whenever(notificationLockscreenUserManager.shouldShowLockscreenNotifications()) .thenReturn(true) whenever(mediaHost.hostView).thenReturn(hostView) hostView.layoutParams = FrameLayout.LayoutParams(100, 100) keyguardMediaController = KeyguardMediaController( mediaHost, bypassController, statusBarStateController, notificationLockscreenUserManager, context, configurationController ) Loading Loading @@ -105,16 +99,6 @@ class KeyguardMediaControllerTest : SysuiTestCase() { assertThat(mediaContainerView.visibility).isEqualTo(visibility) } @Test fun testHiddenOnKeyguard_whenNotificationsAreHidden() { whenever(notificationLockscreenUserManager.shouldShowLockscreenNotifications()) .thenReturn(false) keyguardMediaController.refreshMediaPosition() assertThat(mediaContainerView.visibility).isEqualTo(GONE) } @Test fun testActivatesSplitShadeContainerInSplitShadeMode() { val splitShadeContainer = FrameLayout(context) Loading