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.MediaHeaderView 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 @@ -164,8 +162,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 @@ -169,6 +169,7 @@ class MediaCarouselController @Inject constructor( * It will be called when the container is out of view. */ lateinit var updateUserVisibility: () -> Unit lateinit var updateHostVisibility: () -> Unit init { dumpManager.registerDumpable(TAG, this) Loading packages/SystemUI/src/com/android/systemui/media/MediaHierarchyManager.kt +13 −0 Original line number Diff line number Diff line Loading @@ -414,6 +414,7 @@ class MediaHierarchyManager @Inject constructor( mediaCarouselController.logSmartspaceImpression(qsExpanded) } mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser() mediaCarouselController.updateHostVisibility() } override fun onDozeAmountChanged(linear: Float, eased: Float) { Loading Loading @@ -467,6 +468,11 @@ class MediaHierarchyManager @Inject constructor( mediaCarouselController.updateUserVisibility = { mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser() } mediaCarouselController.updateHostVisibility = { mediaHosts.forEach { it?.updateViewVisibility() } } } private fun updateConfiguration() { Loading Loading @@ -512,6 +518,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 @@ -160,8 +160,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.MediaHeaderView Loading Loading @@ -52,8 +51,6 @@ class KeyguardMediaControllerTest : SysuiTestCase() { @Mock private lateinit var configurationController: ConfigurationController @Mock private lateinit var notificationLockscreenUserManager: NotificationLockscreenUserManager @JvmField @Rule val mockito = MockitoJUnit.rule() Loading @@ -66,15 +63,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(mediaHeaderView.visibility).isEqualTo(visibility) } @Test fun testHiddenOnKeyguard_whenNotificationsAreHidden() { whenever(notificationLockscreenUserManager.shouldShowLockscreenNotifications()) .thenReturn(false) keyguardMediaController.refreshMediaPosition() assertThat(mediaHeaderView.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.MediaHeaderView 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 @@ -164,8 +162,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 @@ -169,6 +169,7 @@ class MediaCarouselController @Inject constructor( * It will be called when the container is out of view. */ lateinit var updateUserVisibility: () -> Unit lateinit var updateHostVisibility: () -> Unit init { dumpManager.registerDumpable(TAG, this) Loading
packages/SystemUI/src/com/android/systemui/media/MediaHierarchyManager.kt +13 −0 Original line number Diff line number Diff line Loading @@ -414,6 +414,7 @@ class MediaHierarchyManager @Inject constructor( mediaCarouselController.logSmartspaceImpression(qsExpanded) } mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser() mediaCarouselController.updateHostVisibility() } override fun onDozeAmountChanged(linear: Float, eased: Float) { Loading Loading @@ -467,6 +468,11 @@ class MediaHierarchyManager @Inject constructor( mediaCarouselController.updateUserVisibility = { mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser() } mediaCarouselController.updateHostVisibility = { mediaHosts.forEach { it?.updateViewVisibility() } } } private fun updateConfiguration() { Loading Loading @@ -512,6 +518,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 @@ -160,8 +160,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.MediaHeaderView Loading Loading @@ -52,8 +51,6 @@ class KeyguardMediaControllerTest : SysuiTestCase() { @Mock private lateinit var configurationController: ConfigurationController @Mock private lateinit var notificationLockscreenUserManager: NotificationLockscreenUserManager @JvmField @Rule val mockito = MockitoJUnit.rule() Loading @@ -66,15 +63,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(mediaHeaderView.visibility).isEqualTo(visibility) } @Test fun testHiddenOnKeyguard_whenNotificationsAreHidden() { whenever(notificationLockscreenUserManager.shouldShowLockscreenNotifications()) .thenReturn(false) keyguardMediaController.refreshMediaPosition() assertThat(mediaHeaderView.visibility).isEqualTo(GONE) } @Test fun testActivatesSplitShadeContainerInSplitShadeMode() { val splitShadeContainer = FrameLayout(context) Loading