Merge "Animate launches from lockscreen" into sc-dev

This commit is contained in:
TreeHugger Robot
2021-06-14 11:42:51 +00:00
committed by Android (Google) Code Review
6 changed files with 39 additions and 24 deletions

View File

@@ -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();
}

View File

@@ -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 */);

View File

@@ -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,

View File

@@ -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,

View File

@@ -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

View File

@@ -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();
}