Loading packages/SystemUI/src/com/android/systemui/media/KeyguardMediaController.kt +1 −4 Original line number Original line Diff line number Diff line Loading @@ -25,7 +25,6 @@ import com.android.systemui.dagger.SysUISingleton import com.android.systemui.media.dagger.MediaModule.KEYGUARD import com.android.systemui.media.dagger.MediaModule.KEYGUARD import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.statusbar.FeatureFlags import com.android.systemui.statusbar.FeatureFlags import com.android.systemui.statusbar.NotificationLockscreenUserManager import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.notification.stack.MediaHeaderView import com.android.systemui.statusbar.notification.stack.MediaHeaderView Loading @@ -44,7 +43,6 @@ class KeyguardMediaController @Inject constructor( @param:Named(KEYGUARD) private val mediaHost: MediaHost, @param:Named(KEYGUARD) private val mediaHost: MediaHost, private val bypassController: KeyguardBypassController, private val bypassController: KeyguardBypassController, private val statusBarStateController: SysuiStatusBarStateController, private val statusBarStateController: SysuiStatusBarStateController, private val notifLockscreenUserManager: NotificationLockscreenUserManager, private val featureFlags: FeatureFlags, private val featureFlags: FeatureFlags, private val context: Context, private val context: Context, configurationController: ConfigurationController configurationController: ConfigurationController Loading Loading @@ -166,8 +164,7 @@ class KeyguardMediaController @Inject constructor( // mediaHost.visible required for proper animations handling // mediaHost.visible required for proper animations handling visible = mediaHost.visible && visible = mediaHost.visible && !bypassController.bypassEnabled && !bypassController.bypassEnabled && keyguardOrUserSwitcher && keyguardOrUserSwitcher notifLockscreenUserManager.shouldShowLockscreenNotifications() if (visible) { if (visible) { showMediaPlayer() showMediaPlayer() } else { } else { Loading packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt +1 −0 Original line number Original line 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. * It will be called when the container is out of view. */ */ lateinit var updateUserVisibility: () -> Unit lateinit var updateUserVisibility: () -> Unit lateinit var updateHostVisibility: () -> Unit init { init { dumpManager.registerDumpable(TAG, this) dumpManager.registerDumpable(TAG, this) Loading packages/SystemUI/src/com/android/systemui/media/MediaHierarchyManager.kt +13 −0 Original line number Original line Diff line number Diff line Loading @@ -409,6 +409,7 @@ class MediaHierarchyManager @Inject constructor( mediaCarouselController.logSmartspaceImpression(qsExpanded) mediaCarouselController.logSmartspaceImpression(qsExpanded) } } mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser() mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser() mediaCarouselController.updateHostVisibility() } } override fun onDozeAmountChanged(linear: Float, eased: Float) { override fun onDozeAmountChanged(linear: Float, eased: Float) { Loading Loading @@ -462,6 +463,11 @@ class MediaHierarchyManager @Inject constructor( mediaCarouselController.updateUserVisibility = { mediaCarouselController.updateUserVisibility = { mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser() mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser() } } mediaCarouselController.updateHostVisibility = { mediaHosts.forEach { it?.updateViewVisibility() } } } } private fun updateConfiguration() { private fun updateConfiguration() { Loading Loading @@ -506,6 +512,13 @@ class MediaHierarchyManager @Inject constructor( mediaCarouselController.closeGuts() 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 { private fun createUniqueObjectHost(): UniqueObjectHostView { val viewHost = UniqueObjectHostView(context) val viewHost = UniqueObjectHostView(context) viewHost.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener { viewHost.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener { Loading packages/SystemUI/src/com/android/systemui/media/MediaHost.kt +8 −2 Original line number Original line Diff line number Diff line Loading @@ -159,8 +159,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.hasActiveMedia() mediaDataManager.hasActiveMedia() } else { } else { mediaDataManager.hasAnyMedia() mediaDataManager.hasAnyMedia() Loading packages/SystemUI/tests/src/com/android/systemui/media/KeyguardMediaControllerTest.kt +0 −16 Original line number Original line Diff line number Diff line Loading @@ -23,7 +23,6 @@ import android.widget.FrameLayout import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.SysuiTestCase import com.android.systemui.statusbar.FeatureFlags import com.android.systemui.statusbar.FeatureFlags import com.android.systemui.statusbar.NotificationLockscreenUserManager import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.notification.stack.MediaHeaderView import com.android.systemui.statusbar.notification.stack.MediaHeaderView Loading Loading @@ -54,8 +53,6 @@ class KeyguardMediaControllerTest : SysuiTestCase() { private lateinit var configurationController: ConfigurationController private lateinit var configurationController: ConfigurationController @Mock @Mock private lateinit var featureFlags: FeatureFlags private lateinit var featureFlags: FeatureFlags @Mock private lateinit var notificationLockscreenUserManager: NotificationLockscreenUserManager @JvmField @Rule @JvmField @Rule val mockito = MockitoJUnit.rule() val mockito = MockitoJUnit.rule() Loading @@ -68,15 +65,12 @@ class KeyguardMediaControllerTest : SysuiTestCase() { // default state is positive, media should show up // default state is positive, media should show up whenever(mediaHost.visible).thenReturn(true) whenever(mediaHost.visible).thenReturn(true) whenever(statusBarStateController.state).thenReturn(StatusBarState.KEYGUARD) whenever(statusBarStateController.state).thenReturn(StatusBarState.KEYGUARD) whenever(notificationLockscreenUserManager.shouldShowLockscreenNotifications()) .thenReturn(true) whenever(mediaHost.hostView).thenReturn(hostView) whenever(mediaHost.hostView).thenReturn(hostView) keyguardMediaController = KeyguardMediaController( keyguardMediaController = KeyguardMediaController( mediaHost, mediaHost, bypassController, bypassController, statusBarStateController, statusBarStateController, notificationLockscreenUserManager, featureFlags, featureFlags, context, context, configurationController configurationController Loading Loading @@ -107,16 +101,6 @@ class KeyguardMediaControllerTest : SysuiTestCase() { assertThat(mediaHeaderView.visibility).isEqualTo(visibility) assertThat(mediaHeaderView.visibility).isEqualTo(visibility) } } @Test fun testHiddenOnKeyguard_whenNotificationsAreHidden() { whenever(notificationLockscreenUserManager.shouldShowLockscreenNotifications()) .thenReturn(false) keyguardMediaController.refreshMediaPosition() assertThat(mediaHeaderView.visibility).isEqualTo(GONE) } @Test @Test fun testActivatesSplitShadeContainerInSplitShadeMode() { fun testActivatesSplitShadeContainerInSplitShadeMode() { val splitShadeContainer = FrameLayout(context) val splitShadeContainer = FrameLayout(context) Loading Loading
packages/SystemUI/src/com/android/systemui/media/KeyguardMediaController.kt +1 −4 Original line number Original line Diff line number Diff line Loading @@ -25,7 +25,6 @@ import com.android.systemui.dagger.SysUISingleton import com.android.systemui.media.dagger.MediaModule.KEYGUARD import com.android.systemui.media.dagger.MediaModule.KEYGUARD import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.statusbar.FeatureFlags import com.android.systemui.statusbar.FeatureFlags import com.android.systemui.statusbar.NotificationLockscreenUserManager import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.notification.stack.MediaHeaderView import com.android.systemui.statusbar.notification.stack.MediaHeaderView Loading @@ -44,7 +43,6 @@ class KeyguardMediaController @Inject constructor( @param:Named(KEYGUARD) private val mediaHost: MediaHost, @param:Named(KEYGUARD) private val mediaHost: MediaHost, private val bypassController: KeyguardBypassController, private val bypassController: KeyguardBypassController, private val statusBarStateController: SysuiStatusBarStateController, private val statusBarStateController: SysuiStatusBarStateController, private val notifLockscreenUserManager: NotificationLockscreenUserManager, private val featureFlags: FeatureFlags, private val featureFlags: FeatureFlags, private val context: Context, private val context: Context, configurationController: ConfigurationController configurationController: ConfigurationController Loading Loading @@ -166,8 +164,7 @@ class KeyguardMediaController @Inject constructor( // mediaHost.visible required for proper animations handling // mediaHost.visible required for proper animations handling visible = mediaHost.visible && visible = mediaHost.visible && !bypassController.bypassEnabled && !bypassController.bypassEnabled && keyguardOrUserSwitcher && keyguardOrUserSwitcher notifLockscreenUserManager.shouldShowLockscreenNotifications() if (visible) { if (visible) { showMediaPlayer() showMediaPlayer() } else { } else { Loading
packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt +1 −0 Original line number Original line 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. * It will be called when the container is out of view. */ */ lateinit var updateUserVisibility: () -> Unit lateinit var updateUserVisibility: () -> Unit lateinit var updateHostVisibility: () -> Unit init { init { dumpManager.registerDumpable(TAG, this) dumpManager.registerDumpable(TAG, this) Loading
packages/SystemUI/src/com/android/systemui/media/MediaHierarchyManager.kt +13 −0 Original line number Original line Diff line number Diff line Loading @@ -409,6 +409,7 @@ class MediaHierarchyManager @Inject constructor( mediaCarouselController.logSmartspaceImpression(qsExpanded) mediaCarouselController.logSmartspaceImpression(qsExpanded) } } mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser() mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser() mediaCarouselController.updateHostVisibility() } } override fun onDozeAmountChanged(linear: Float, eased: Float) { override fun onDozeAmountChanged(linear: Float, eased: Float) { Loading Loading @@ -462,6 +463,11 @@ class MediaHierarchyManager @Inject constructor( mediaCarouselController.updateUserVisibility = { mediaCarouselController.updateUserVisibility = { mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser() mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser() } } mediaCarouselController.updateHostVisibility = { mediaHosts.forEach { it?.updateViewVisibility() } } } } private fun updateConfiguration() { private fun updateConfiguration() { Loading Loading @@ -506,6 +512,13 @@ class MediaHierarchyManager @Inject constructor( mediaCarouselController.closeGuts() 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 { private fun createUniqueObjectHost(): UniqueObjectHostView { val viewHost = UniqueObjectHostView(context) val viewHost = UniqueObjectHostView(context) viewHost.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener { viewHost.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener { Loading
packages/SystemUI/src/com/android/systemui/media/MediaHost.kt +8 −2 Original line number Original line Diff line number Diff line Loading @@ -159,8 +159,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.hasActiveMedia() mediaDataManager.hasActiveMedia() } else { } else { mediaDataManager.hasAnyMedia() mediaDataManager.hasAnyMedia() Loading
packages/SystemUI/tests/src/com/android/systemui/media/KeyguardMediaControllerTest.kt +0 −16 Original line number Original line Diff line number Diff line Loading @@ -23,7 +23,6 @@ import android.widget.FrameLayout import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.SysuiTestCase import com.android.systemui.statusbar.FeatureFlags import com.android.systemui.statusbar.FeatureFlags import com.android.systemui.statusbar.NotificationLockscreenUserManager import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.notification.stack.MediaHeaderView import com.android.systemui.statusbar.notification.stack.MediaHeaderView Loading Loading @@ -54,8 +53,6 @@ class KeyguardMediaControllerTest : SysuiTestCase() { private lateinit var configurationController: ConfigurationController private lateinit var configurationController: ConfigurationController @Mock @Mock private lateinit var featureFlags: FeatureFlags private lateinit var featureFlags: FeatureFlags @Mock private lateinit var notificationLockscreenUserManager: NotificationLockscreenUserManager @JvmField @Rule @JvmField @Rule val mockito = MockitoJUnit.rule() val mockito = MockitoJUnit.rule() Loading @@ -68,15 +65,12 @@ class KeyguardMediaControllerTest : SysuiTestCase() { // default state is positive, media should show up // default state is positive, media should show up whenever(mediaHost.visible).thenReturn(true) whenever(mediaHost.visible).thenReturn(true) whenever(statusBarStateController.state).thenReturn(StatusBarState.KEYGUARD) whenever(statusBarStateController.state).thenReturn(StatusBarState.KEYGUARD) whenever(notificationLockscreenUserManager.shouldShowLockscreenNotifications()) .thenReturn(true) whenever(mediaHost.hostView).thenReturn(hostView) whenever(mediaHost.hostView).thenReturn(hostView) keyguardMediaController = KeyguardMediaController( keyguardMediaController = KeyguardMediaController( mediaHost, mediaHost, bypassController, bypassController, statusBarStateController, statusBarStateController, notificationLockscreenUserManager, featureFlags, featureFlags, context, context, configurationController configurationController Loading Loading @@ -107,16 +101,6 @@ class KeyguardMediaControllerTest : SysuiTestCase() { assertThat(mediaHeaderView.visibility).isEqualTo(visibility) assertThat(mediaHeaderView.visibility).isEqualTo(visibility) } } @Test fun testHiddenOnKeyguard_whenNotificationsAreHidden() { whenever(notificationLockscreenUserManager.shouldShowLockscreenNotifications()) .thenReturn(false) keyguardMediaController.refreshMediaPosition() assertThat(mediaHeaderView.visibility).isEqualTo(GONE) } @Test @Test fun testActivatesSplitShadeContainerInSplitShadeMode() { fun testActivatesSplitShadeContainerInSplitShadeMode() { val splitShadeContainer = FrameLayout(context) val splitShadeContainer = FrameLayout(context) Loading