Fix media being stretched during the wake-up/unlock animation
This happened only on large screens/split shade, and when there was an
explicit delay to play the doze wake up animation.
During this delay, the device will not be in the "dozing" state anymore,
therefore media was showing up, but the rest of the keyguard was still
positioned as if it was in the "dozing" state, centered, and using the
full width of the screen. Since media is a child view of keyguard on
large screens, it was also using the full width of the screen.
The fix is to keep media hidden during this delay.
Fixes: 283479104
Test: KeyguardMediaControllerTest.kt
Test: NotificationPanelViewControllerTest.java
Change-Id: Id004a74d95e66e7f33ef52aca0dc655db767b893
(cherry picked from commit 574367ed81)
This commit is contained in:
committed by
Chris Göllner
parent
3620213c62
commit
f7cf732670
@@ -128,6 +128,15 @@ constructor(
|
||||
|
||||
var visibilityChangedListener: ((Boolean) -> Unit)? = null
|
||||
|
||||
/**
|
||||
* Whether the doze wake up animation is delayed and we are currently waiting for it to start.
|
||||
*/
|
||||
var isDozeWakeUpAnimationWaiting: Boolean = false
|
||||
set(value) {
|
||||
field = value
|
||||
refreshMediaPosition()
|
||||
}
|
||||
|
||||
/** single pane media container placed at the top of the notifications list */
|
||||
var singlePaneContainer: MediaContainerView? = null
|
||||
private set
|
||||
@@ -221,7 +230,13 @@ constructor(
|
||||
// by the clock. This is not the case for single-line clock though.
|
||||
// For single shade, we don't need to do it, because media is a child of NSSL, which already
|
||||
// gets hidden on AOD.
|
||||
return !statusBarStateController.isDozing
|
||||
// Media also has to be hidden when waking up from dozing, and the doze wake up animation is
|
||||
// delayed and waiting to be started.
|
||||
// This is to stay in sync with the delaying of the horizontal alignment of the rest of the
|
||||
// keyguard container, that is also delayed until the "wait" is over.
|
||||
// If we show media during this waiting period, the shade will still be centered, and using
|
||||
// the entire width of the screen, and making media show fully stretched.
|
||||
return !statusBarStateController.isDozing && !isDozeWakeUpAnimationWaiting
|
||||
}
|
||||
|
||||
private fun showMediaPlayer() {
|
||||
|
||||
@@ -1621,6 +1621,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
|
||||
|
||||
mWillPlayDelayedDozeAmountAnimation = willPlay;
|
||||
mWakeUpCoordinator.logDelayingClockWakeUpAnimation(willPlay);
|
||||
mKeyguardMediaController.setDozeWakeUpAnimationWaiting(willPlay);
|
||||
|
||||
// Once changing this value, see if we should move the clock.
|
||||
positionClockAndNotifications();
|
||||
|
||||
@@ -192,6 +192,17 @@ class KeyguardMediaControllerTest : SysuiTestCase() {
|
||||
assertThat(splitShadeContainer.visibility).isEqualTo(GONE)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun dozeWakeUpAnimationWaiting_inSplitShade_mediaIsHidden() {
|
||||
val splitShadeContainer = FrameLayout(context)
|
||||
keyguardMediaController.attachSplitShadeContainer(splitShadeContainer)
|
||||
keyguardMediaController.useSplitShade = true
|
||||
|
||||
keyguardMediaController.isDozeWakeUpAnimationWaiting = true
|
||||
|
||||
assertThat(splitShadeContainer.visibility).isEqualTo(GONE)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun dozing_inSingleShade_mediaIsVisible() {
|
||||
val splitShadeContainer = FrameLayout(context)
|
||||
@@ -203,6 +214,17 @@ class KeyguardMediaControllerTest : SysuiTestCase() {
|
||||
assertThat(mediaContainerView.visibility).isEqualTo(VISIBLE)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun dozeWakeUpAnimationWaiting_inSingleShade_mediaIsVisible() {
|
||||
val splitShadeContainer = FrameLayout(context)
|
||||
keyguardMediaController.attachSplitShadeContainer(splitShadeContainer)
|
||||
keyguardMediaController.useSplitShade = false
|
||||
|
||||
keyguardMediaController.isDozeWakeUpAnimationWaiting = true
|
||||
|
||||
assertThat(mediaContainerView.visibility).isEqualTo(VISIBLE)
|
||||
}
|
||||
|
||||
private fun setDozing() {
|
||||
whenever(statusBarStateController.isDozing).thenReturn(true)
|
||||
statusBarStateListener.onDozingChanged(true)
|
||||
|
||||
@@ -509,6 +509,17 @@ public class NotificationPanelViewControllerTest extends NotificationPanelViewCo
|
||||
assertKeyguardStatusViewNotCentered();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void keyguardStatusView_willPlayDelayedDoze_notifiesKeyguardMediaController() {
|
||||
when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(2);
|
||||
mStatusBarStateController.setState(KEYGUARD);
|
||||
enableSplitShade(/* enabled= */ true);
|
||||
|
||||
mNotificationPanelViewController.setWillPlayDelayedDozeAmountAnimation(true);
|
||||
|
||||
verify(mKeyguardMediaController).setDozeWakeUpAnimationWaiting(true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void keyguardStatusView_willPlayDelayedDoze_isCentered_thenStillCenteredIfNoNotifs() {
|
||||
when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(0);
|
||||
|
||||
Reference in New Issue
Block a user