Merge "Animate launches from lockscreen" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
33fae67fae
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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 */);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user