summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Josh Tsuji <tsuji@google.com> 2023-03-16 21:59:47 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-03-16 21:59:47 +0000
commitb33fcbb84b43dc4e00285794b9b0136ccd76ac2f (patch)
tree7ecf45ec2c3ef31a7860c81d249c32221a9bb0cb
parent30279b8ceb459d4107d872974de7c9dda4330f09 (diff)
parent88885b0e68fc1327ebf20ce70d36df82112b36c7 (diff)
Merge "Keep keyguard visible if we're launching an occluding activity over a going-away keyguard." into tm-qpr-dev
-rw-r--r--packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java15
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java10
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java12
5 files changed, 45 insertions, 3 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
index 36be44256fcc..b71c14bcc5a2 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
@@ -2732,6 +2732,7 @@ public final class NotificationPanelViewController implements Dumpable {
public void setIsLaunchAnimationRunning(boolean running) {
boolean wasRunning = mIsLaunchAnimationRunning;
mIsLaunchAnimationRunning = running;
+ mCentralSurfaces.updateIsKeyguard();
if (wasRunning != mIsLaunchAnimationRunning) {
mShadeExpansionStateManager.notifyLaunchingActivityChanged(running);
}
@@ -3789,6 +3790,10 @@ public final class NotificationPanelViewController implements Dumpable {
return mClosing || mIsLaunchAnimationRunning;
}
+ public boolean isLaunchAnimationRunning() {
+ return mIsLaunchAnimationRunning;
+ }
+
public boolean isTracking() {
return mTracking;
}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java
index 156e4fd1889f..e7759df6e81b 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java
@@ -301,9 +301,11 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
}
private void applyKeyguardFlags(NotificationShadeWindowState state) {
- final boolean keyguardOrAod = state.keyguardShowing
+ // Keyguard is visible if it's showing or if it's fading away (in which case we're animating
+ // it out, but the wallpaper should remain visible as a backdrop for the animation);
+ final boolean keyguardOrAodVisible = (state.keyguardShowing || state.keyguardFadingAway)
|| (state.dozing && mDozeParameters.getAlwaysOn());
- if ((keyguardOrAod && !state.mediaBackdropShowing && !state.lightRevealScrimOpaque)
+ if ((keyguardOrAodVisible && !state.mediaBackdropShowing && !state.lightRevealScrimOpaque)
|| mKeyguardViewMediator.isAnimatingBetweenKeyguardAndSurfaceBehind()) {
// Show the wallpaper if we're on keyguard/AOD and the wallpaper is not occluded by a
// solid backdrop. Also, show it if we are currently animating between the
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
index 5131772e34a0..191302547458 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
@@ -1007,6 +1007,8 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
// The light reveal scrim should always be fully revealed by the time the keyguard
// is done going away. Double check that this is true.
if (!mKeyguardStateController.isKeyguardGoingAway()) {
+ updateIsKeyguard();
+
if (mLightRevealScrim.getRevealAmount() != 1f) {
Log.e(TAG, "Keyguard is done going away, but someone left the light reveal "
+ "scrim at reveal amount: " + mLightRevealScrim.getRevealAmount());
@@ -2893,6 +2895,10 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
showKeyguardImpl();
}
} else {
+ final boolean isLaunchingOrGoingAway =
+ mNotificationPanelViewController.isLaunchAnimationRunning()
+ || mKeyguardStateController.isKeyguardGoingAway();
+
// During folding a foldable device this might be called as a result of
// 'onScreenTurnedOff' call for the inner display.
// In this case:
@@ -2904,7 +2910,14 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
if (!mScreenOffAnimationController.isKeyguardHideDelayed()
// If we're animating occluded, there's an activity launching over the keyguard
// UI. Wait to hide it until after the animation concludes.
- && !mKeyguardViewMediator.isOccludeAnimationPlaying()) {
+ && !mKeyguardViewMediator.isOccludeAnimationPlaying()
+ // If we're occluded, but playing an animation (launch or going away animations)
+ // the keyguard is visible behind the animation.
+ && !(mKeyguardStateController.isOccluded() && isLaunchingOrGoingAway)) {
+ // If we're going away and occluded, it means we are launching over the
+ // unsecured keyguard, which will subsequently go away. Wait to hide it until
+ // after the animation concludes to avoid the lockscreen UI changing into the
+ // shade UI behind the launch animation.
return hideKeyguardImpl(forceStateChange);
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java
index 526dc8d150fe..dd7929771bb2 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java
@@ -223,6 +223,16 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase {
}
@Test
+ public void attach_fadingAway_wallpaperVisible() {
+ clearInvocations(mWindowManager);
+ mNotificationShadeWindowController.attach();
+ mNotificationShadeWindowController.setKeyguardFadingAway(true);
+
+ verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
+ assertThat((mLayoutParameters.getValue().flags & FLAG_SHOW_WALLPAPER) != 0).isTrue();
+ }
+
+ @Test
public void setBackgroundBlurRadius_expandedWithBlurs() {
mNotificationShadeWindowController.setBackgroundBlurRadius(10);
verify(mNotificationShadeWindowView).setVisibility(eq(View.VISIBLE));
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java
index 33a813f5b0ea..bf05d4e43224 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java
@@ -1287,6 +1287,18 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
}
@Test
+ public void keyguard_notHidden_ifGoingAwayAndOccluded() {
+ setKeyguardShowingAndOccluded(true /* showing */, false /* occluded */);
+
+ when(mKeyguardStateController.isKeyguardGoingAway()).thenReturn(true);
+ when(mKeyguardStateController.isOccluded()).thenReturn(true);
+
+ mCentralSurfaces.updateIsKeyguard(false);
+
+ verify(mStatusBarStateController, never()).setState(eq(SHADE), anyBoolean());
+ }
+
+ @Test
public void frpLockedDevice_shadeDisabled() {
when(mDeviceProvisionedController.isFrpActive()).thenReturn(true);
when(mDozeServiceHost.isPulsing()).thenReturn(true);