Skip to content
Snippets Groups Projects
Commit 1ed25c6c authored by Beth Thibodeau's avatar Beth Thibodeau Committed by Android (Google) Code Review
Browse files

Merge "Update media visibility on lock screen" into sc-dev

parents d4ed5549 0d533a9c
No related branches found
No related tags found
No related merge requests found
......@@ -25,7 +25,6 @@ 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.FeatureFlags
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
......@@ -44,7 +43,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 featureFlags: FeatureFlags,
private val context: Context,
configurationController: ConfigurationController
......@@ -166,8 +164,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 {
......
......@@ -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)
......
......@@ -409,6 +409,7 @@ class MediaHierarchyManager @Inject constructor(
mediaCarouselController.logSmartspaceImpression(qsExpanded)
}
mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser()
mediaCarouselController.updateHostVisibility()
}
override fun onDozeAmountChanged(linear: Float, eased: Float) {
......@@ -462,6 +463,11 @@ class MediaHierarchyManager @Inject constructor(
mediaCarouselController.updateUserVisibility = {
mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser()
}
mediaCarouselController.updateHostVisibility = {
mediaHosts.forEach {
it?.updateViewVisibility()
}
}
}
private fun updateConfiguration() {
......@@ -506,6 +512,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 {
......
......@@ -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()
} else {
mediaDataManager.hasAnyMedia()
......
......@@ -23,7 +23,6 @@ import android.widget.FrameLayout
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.statusbar.FeatureFlags
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
......@@ -54,8 +53,6 @@ class KeyguardMediaControllerTest : SysuiTestCase() {
private lateinit var configurationController: ConfigurationController
@Mock
private lateinit var featureFlags: FeatureFlags
@Mock
private lateinit var notificationLockscreenUserManager: NotificationLockscreenUserManager
@JvmField @Rule
val mockito = MockitoJUnit.rule()
......@@ -68,15 +65,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)
keyguardMediaController = KeyguardMediaController(
mediaHost,
bypassController,
statusBarStateController,
notificationLockscreenUserManager,
featureFlags,
context,
configurationController
......@@ -107,16 +101,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)
......
......@@ -35,6 +35,7 @@ import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.util.animation.UniqueObjectHostView
import junit.framework.Assert
import com.google.common.truth.Truth.assertThat
import org.junit.Assert.assertNotNull
import org.junit.Before
import org.junit.Rule
......@@ -108,6 +109,7 @@ class MediaHierarchyManagerTest : SysuiTestCase() {
statusBarKeyguardViewManager)
verify(wakefulnessLifecycle).addObserver(wakefullnessObserver.capture())
verify(statusBarStateController).addCallback(statusBarCallback.capture())
`when`(mediaCarouselController.updateHostVisibility).thenReturn({})
setupHost(lockHost, MediaHierarchyManager.LOCATION_LOCKSCREEN)
setupHost(qsHost, MediaHierarchyManager.LOCATION_QS)
setupHost(qqsHost, MediaHierarchyManager.LOCATION_QQS)
......@@ -245,4 +247,40 @@ class MediaHierarchyManagerTest : SysuiTestCase() {
verify(mediaCarouselController).closeGuts()
}
}
\ No newline at end of file
@Test
fun keyguardState_allowedOnLockscreen_updateVisibility() {
`when`(notificationLockscreenUserManager.shouldShowLockscreenNotifications())
.thenReturn(true)
statusBarCallback.value.onStatePreChange(StatusBarState.SHADE, StatusBarState.KEYGUARD)
statusBarCallback.value.onStateChanged(StatusBarState.KEYGUARD)
verify(mediaCarouselController).updateHostVisibility
assertThat(mediaHiearchyManager.isLockedAndHidden()).isFalse()
}
@Test
fun keyguardState_notAllowedOnLockscreen_updateVisibility() {
`when`(notificationLockscreenUserManager.shouldShowLockscreenNotifications())
.thenReturn(false)
statusBarCallback.value.onStatePreChange(StatusBarState.SHADE, StatusBarState.KEYGUARD)
statusBarCallback.value.onStateChanged(StatusBarState.KEYGUARD)
verify(mediaCarouselController).updateHostVisibility
assertThat(mediaHiearchyManager.isLockedAndHidden()).isTrue()
}
@Test
fun keyguardGone_updateVisibility() {
`when`(notificationLockscreenUserManager.shouldShowLockscreenNotifications())
.thenReturn(false)
statusBarCallback.value.onStatePreChange(StatusBarState.KEYGUARD, StatusBarState.SHADE)
statusBarCallback.value.onStateChanged(StatusBarState.SHADE)
verify(mediaCarouselController).updateHostVisibility
assertThat(mediaHiearchyManager.isLockedAndHidden()).isFalse()
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment