diff options
| author | 2019-07-01 13:47:36 -0700 | |
|---|---|---|
| committer | 2019-07-01 13:47:36 -0700 | |
| commit | b064bd5e60d68aa4918cd785f57cf953cc39ce17 (patch) | |
| tree | 3ecd030436140e6a8fc8a3e9fe82de0230684b2f | |
| parent | e513ce078faddc0b94eaf7fc911fb9f0a9b36ce4 (diff) | |
| parent | 75e223f5f6c4f41d569a6a613d824c297c6f5b0b (diff) | |
Merge "Improved the unlock animation when bypassing" into qt-r1-dev am: 16815264dd
am: 75e223f5f6
Change-Id: I88ae49e8b027b6ee66704953f8fe4b1af12b9049
7 files changed, 55 insertions, 13 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java index ea434fc5b344..49afae7415ae 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java @@ -95,6 +95,7 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange private boolean mPulsing; private boolean mDozing; private boolean mDocked; + private boolean mBlockUpdates; private int mIconColor; private float mDozeAmount; private boolean mBouncerShowingScrimmed; @@ -107,8 +108,22 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange new KeyguardMonitor.Callback() { @Override public void onKeyguardShowingChanged() { + boolean force = false; + boolean wasShowing = mKeyguardShowing; mKeyguardShowing = mKeyguardMonitor.isShowing(); - update(); + if (!wasShowing && mKeyguardShowing && mBlockUpdates) { + mBlockUpdates = false; + force = true; + } + update(force); + } + + @Override + public void onKeyguardFadingAwayChanged() { + if (!mKeyguardMonitor.isKeyguardFadingAway() && mBlockUpdates) { + mBlockUpdates = false; + update(true /* force */); + } } }; private final DockManager.DockEventListener mDockEventListener = @@ -261,7 +276,11 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange mIsFaceUnlockState = state == STATE_SCANNING_FACE; mLastState = state; - if (lastState != state || mForceUpdate) { + boolean shouldUpdate = lastState != state || mForceUpdate; + if (mBlockUpdates && canBlockUpdates()) { + shouldUpdate = false; + } + if (shouldUpdate) { mForceUpdate = false; @LockAnimIndex final int lockAnimIndex = getAnimationIndexForTransition(lastState, state, mPulsing, mDozing); @@ -330,6 +349,10 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange return true; } + private boolean canBlockUpdates() { + return mKeyguardShowing || mKeyguardMonitor.isKeyguardFadingAway(); + } + private void updateClickability() { if (mAccessibilityController == null) { return; @@ -536,11 +559,17 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange /** * We need to hide the lock whenever there's a fingerprint unlock, otherwise you'll see the * icon on top of the black front scrim. + * @param wakeAndUnlock are we wake and unlocking + * @param isUnlock are we currently unlocking */ - public void onBiometricAuthModeChanged(boolean wakeAndUnlock) { + public void onBiometricAuthModeChanged(boolean wakeAndUnlock, boolean isUnlock) { if (wakeAndUnlock) { mWakeAndUnlockRunning = true; } + if (isUnlock && mBypassController.getBypassEnabled() && canBlockUpdates()) { + // We don't want the icon to change while we are unlocking + mBlockUpdates = true; + } update(); } 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 e756d3a997f5..55f61fa8a6a0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -3834,7 +3834,8 @@ public class StatusBar extends SystemUI implements DemoMode, public void notifyBiometricAuthModeChanged() { updateDozing(); updateScrimController(); - mStatusBarWindow.onBiometricAuthModeChanged(mBiometricUnlockController.isWakeAndUnlock()); + mStatusBarWindow.onBiometricAuthModeChanged(mBiometricUnlockController.isWakeAndUnlock(), + mBiometricUnlockController.isBiometricUnlock()); } @VisibleForTesting 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 6dc2c8cab055..462b65f37ee0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -814,7 +814,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb */ public boolean shouldSubtleWindowAnimationsForUnlock() { return mStatusBar.mKeyguardBypassController.getBypassEnabled() - && mStatusBar.mState == StatusBarState.KEYGUARD; + && mStatusBar.mState == StatusBarState.KEYGUARD && !mBouncer.isAnimatingAway(); } public boolean isGoingToNotificationShade() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java index 667521bf6588..94054188d769 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java @@ -272,10 +272,11 @@ public class StatusBarWindowView extends FrameLayout { /** * Called when the biometric authentication mode changes. * @param wakeAndUnlock If the type is {@link BiometricUnlockController#isWakeAndUnlock()} + * @param isUnlock If the type is {@link BiometricUnlockController#isBiometricUnlock()} () */ - public void onBiometricAuthModeChanged(boolean wakeAndUnlock) { + public void onBiometricAuthModeChanged(boolean wakeAndUnlock, boolean isUnlock) { if (mLockIcon != null) { - mLockIcon.onBiometricAuthModeChanged(wakeAndUnlock); + mLockIcon.onBiometricAuthModeChanged(wakeAndUnlock, isUnlock); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitor.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitor.java index 01498e6bd54d..f61b556e22ab 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitor.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitor.java @@ -50,5 +50,6 @@ public interface KeyguardMonitor extends CallbackController<Callback> { interface Callback { void onKeyguardShowingChanged(); + default void onKeyguardFadingAwayChanged() {} } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitorImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitorImpl.java index b53ff0e45cea..68d00708b0d3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitorImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitorImpl.java @@ -141,14 +141,24 @@ public class KeyguardMonitorImpl extends KeyguardUpdateMonitorCallback } public void notifyKeyguardFadingAway(long delay, long fadeoutDuration) { - mKeyguardFadingAway = true; + setKeyguardFadingAway(true); mKeyguardFadingAwayDelay = delay; mKeyguardFadingAwayDuration = fadeoutDuration; } + private void setKeyguardFadingAway(boolean keyguardFadingAway) { + if (mKeyguardFadingAway != keyguardFadingAway) { + mKeyguardFadingAway = keyguardFadingAway; + ArrayList<Callback> callbacks = new ArrayList<>(mCallbacks); + for (int i = 0; i < callbacks.size(); i++) { + callbacks.get(i).onKeyguardFadingAwayChanged(); + } + } + } + public void notifyKeyguardDoneFading() { - mKeyguardFadingAway = false; mKeyguardGoingAway = false; + setKeyguardFadingAway(false); } @Override diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 602cc553f870..ab531899b496 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -2524,11 +2524,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { } final int resource; - if (onWallpaper) { - resource = R.anim.lock_screen_behind_enter_wallpaper; - } else if (subtleAnimation) { + if (subtleAnimation) { resource = R.anim.lock_screen_behind_enter_subtle; - } else { + } else if (onWallpaper) { + resource = R.anim.lock_screen_behind_enter_wallpaper; + } else { resource = R.anim.lock_screen_behind_enter; } |