summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jordan Demeulenaere <jdemeulenaere@google.com> 2021-06-10 15:05:04 +0200
committer Jordan Demeulenaere <jdemeulenaere@google.com> 2021-06-14 12:00:01 +0200
commitd5c5517416c9e7aee7412cf2b9dda4f1992f9a0c (patch)
tree517679f1e1321e2c2e686bb637f15aff63f071ca
parente55a9d90364890850d71d14582274f392ba1e544 (diff)
Animate launches from lockscreen
Bug: 172048407 Test: Tap notification, media, QS, etc from lockscreen Change-Id: I361aadc18b24375173f3bcea9dc1de0c13c803df
-rw-r--r--packages/SystemUI/plugin/src/com/android/systemui/plugins/ActivityStarter.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java15
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java11
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java15
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java13
6 files changed, 39 insertions, 24 deletions
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/ActivityStarter.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/ActivityStarter.java
index 47a373ebf429..298b7c38066b 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/ActivityStarter.java
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/ActivityStarter.java
@@ -87,7 +87,9 @@ public interface ActivityStarter {
interface OnDismissAction {
/**
- * @return {@code true} if the dismiss should be deferred
+ * @return {@code true} if the dismiss should be deferred. When returning true, make sure to
+ * call {@link com.android.keyguard.ViewMediatorCallback#readyForKeyguardDone()}
+ * *after* returning to start hiding the keyguard.
*/
boolean onDismiss();
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index f0d7d833a9fb..327698392ac7 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -1655,7 +1655,8 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
* Hide the keyguard and let {@code runner} handle the animation.
*
* This method should typically be called after {@link ViewMediatorCallback#keyguardDonePending}
- * was called, when we are ready to hide the keyguard.
+ * was called, when we are ready to hide the keyguard. It will do nothing if we were not
+ * expecting the keyguard to go away when called.
*/
public void hideWithAnimation(IRemoteAnimationRunner runner) {
if (!mKeyguardDonePending) {
@@ -2022,6 +2023,7 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
}
mHiding = false;
+ mKeyguardExitAnimationRunner = null;
mWakeAndUnlocking = false;
mPendingLock = false;
setShowingLocked(true);
@@ -2157,6 +2159,8 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
return;
}
mHiding = false;
+ IRemoteAnimationRunner runner = mKeyguardExitAnimationRunner;
+ mKeyguardExitAnimationRunner = null;
if (mWakeAndUnlocking && mDrawnCallback != null) {
@@ -2177,9 +2181,6 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
LatencyTracker.getInstance(mContext)
.onActionEnd(LatencyTracker.ACTION_LOCKSCREEN_UNLOCK);
- IRemoteAnimationRunner runner = mKeyguardExitAnimationRunner;
- mKeyguardExitAnimationRunner = null;
-
if (KeyguardService.sEnableRemoteKeyguardGoingAwayAnimation && runner != null
&& finishedCallback != null) {
// Wrap finishedCallback to clean up the keyguard state once the animation is done.
@@ -2187,7 +2188,11 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
new IRemoteAnimationFinishedCallback() {
@Override
public void onAnimationFinished() throws RemoteException {
- finishedCallback.onAnimationFinished();
+ try {
+ finishedCallback.onAnimationFinished();
+ } catch (RemoteException e) {
+ Slog.w(TAG, "Failed to call onAnimationFinished", e);
+ }
onKeyguardExitFinished();
mKeyguardViewControllerLazy.get().hide(0 /* startTime */,
0 /* fadeoutDuration */);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
index da37aa5ac943..b5e550a47022 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
@@ -288,10 +288,19 @@ public class KeyguardBouncer {
public void showWithDismissAction(OnDismissAction r, Runnable cancelAction) {
ensureView();
- mKeyguardViewController.setOnDismissAction(r, cancelAction);
+ setDismissAction(r, cancelAction);
show(false /* resetSecuritySelection */);
}
+ /**
+ * Set the actions to run when the keyguard is dismissed or when the dismiss is cancelled. Those
+ * actions will still be run even if this bouncer is not shown, for instance when authenticating
+ * with an alternate authenticator like the UDFPS.
+ */
+ public void setDismissAction(OnDismissAction r, Runnable cancelAction) {
+ mKeyguardViewController.setOnDismissAction(r, cancelAction);
+ }
+
public void hide(boolean destroyView) {
if (isShowing()) {
SysUiStatsLog.write(SysUiStatsLog.KEYGUARD_BOUNCER_STATE_CHANGED,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
index 32e3eb0d2bbd..c5ef7b9bc472 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
@@ -3586,11 +3586,6 @@ public class NotificationPanelViewController extends PanelViewController {
* security view of the bouncer.
*/
public void onBouncerPreHideAnimation() {
- mKeyguardStatusViewController.setKeyguardStatusViewVisibility(
- mBarState,
- true /* keyguardFadingAway */,
- false /* goingToFullShade */,
- mBarState);
if (mKeyguardQsUserSwitchController != null) {
mKeyguardQsUserSwitchController.setKeyguardQsUserSwitchVisibility(
mBarState,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index c03aa1f5bdbc..4e77bf702ffb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -2096,13 +2096,10 @@ public class StatusBar extends SystemUI implements DemoMode,
return true;
}
- // If we are locked, only animate if remote unlock animations are enabled and we can dismiss
- // the lock screen without challenging the user. We also don't animate non-activity
- // launches as they can break the animation.
+ // If we are locked, only animate if remote unlock animations are enabled. We also don't
+ // animate non-activity launches as they can break the animation.
// TODO(b/184121838): Support non activity launches on the lockscreen.
- return isActivityIntent
- && KeyguardService.sEnableRemoteKeyguardGoingAwayAnimation
- && mKeyguardStateController.canDismissLockScreen();
+ return isActivityIntent && KeyguardService.sEnableRemoteKeyguardGoingAwayAnimation;
}
@Override
@@ -2112,12 +2109,6 @@ public class StatusBar extends SystemUI implements DemoMode,
@Override
public void hideKeyguardWithAnimation(IRemoteAnimationRunner runner) {
- if (!mKeyguardStateController.canDismissLockScreen()) {
- Log.wtf(TAG,
- "Unable to hide keyguard with animation as the keyguard can't be dismissed");
- return;
- }
-
// We post to the main thread for 2 reasons:
// 1. KeyguardViewMediator is not thread-safe.
// 2. To ensure that ViewMediatorCallback#keyguardDonePending is called before
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
index 29bb1f4ac7c6..c7efcb2923e7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
@@ -447,7 +447,16 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
mAfterKeyguardGoneAction = r;
mKeyguardGoneCancelAction = cancelAction;
+
+ // If there is an an alternate auth interceptor (like the UDFPS), show that one instead
+ // of the bouncer.
if (mAlternateAuthInterceptor != null) {
+ if (!afterKeyguardGone) {
+ mBouncer.setDismissAction(mAfterKeyguardGoneAction, mKeyguardGoneCancelAction);
+ mAfterKeyguardGoneAction = null;
+ mKeyguardGoneCancelAction = null;
+ }
+
if (mAlternateAuthInterceptor.showAlternateAuthBouncer()) {
mStatusBar.updateScrimController();
}
@@ -615,6 +624,10 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
if (mBouncer.isShowing()) {
mBouncer.startPreHideAnimation(finishRunnable);
mStatusBar.onBouncerPreHideAnimation();
+
+ // startPreHideAnimation() will change the visibility of the bouncer, so we have to
+ // make sure to update its state.
+ updateStates();
} else if (finishRunnable != null) {
finishRunnable.run();
}