From b4300151280b31188c64766d12b651d199bad680 Mon Sep 17 00:00:00 2001 From: Dave Mankoff Date: Fri, 1 May 2020 16:26:40 -0400 Subject: [PATCH] Prevent double animation of lockicon when waking. If the phone went from pulsing -> awake, it could cause the lock icon to briefly disappear then reappear. Specifically, this caused it to appear to animate twice. This all resulted from the internals of the Doze system briefly being told that it was neither dozing nor pusling, meaning that it thought it should hide the lock icon. The rest of the system then caught up, and it shows the lock icon again, animating it into place. Fixes: 155411884 Test: manual Change-Id: I79e1bbde2c5cb5fe588a29111294fab68c546c7c --- .../plugins/statusbar/StatusBarStateController.java | 6 ++++++ .../systemui/statusbar/StatusBarStateControllerImpl.java | 5 +++++ .../android/systemui/statusbar/phone/DozeServiceHost.java | 1 - .../statusbar/phone/LockscreenLockIconController.java | 7 +++---- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/StatusBarStateController.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/StatusBarStateController.java index 6c4cbdf27fa52..0d960f0c21be3 100644 --- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/StatusBarStateController.java +++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/StatusBarStateController.java @@ -39,6 +39,12 @@ public interface StatusBarStateController { */ boolean isDozing(); + + /** + * Is device pulsing. + */ + boolean isPulsing(); + /** * Adds a state listener */ diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java index 229aa6d98e0a9..2bef355d59f31 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java @@ -177,6 +177,11 @@ public class StatusBarStateControllerImpl implements SysuiStatusBarStateControll return mIsDozing; } + @Override + public boolean isPulsing() { + return mPulsing; + } + @Override public float getDozeAmount() { return mDozeAmount; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java index efec4c8116b04..4afeba8de211e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java @@ -214,7 +214,6 @@ public final class DozeServiceHost implements DozeHost { dozing = false; } - mStatusBarStateController.setIsDozing(dozing); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenLockIconController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenLockIconController.java index 310d41add6ca0..838051f431bed 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenLockIconController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenLockIconController.java @@ -76,7 +76,6 @@ public class LockscreenLockIconController { private boolean mKeyguardShowing; private boolean mKeyguardJustShown; private boolean mBlockUpdates; - private boolean mDozing; private boolean mSimLocked; private boolean mTransientBiometricsError; private boolean mDocked; @@ -452,7 +451,8 @@ public class LockscreenLockIconController { shouldUpdate = false; } if (shouldUpdate && mLockIcon != null) { - mLockIcon.update(state, mDozing, mKeyguardJustShown); + mLockIcon.update(state, + mStatusBarStateController.isDozing(), mKeyguardJustShown); } mLastState = state; mKeyguardJustShown = false; @@ -480,7 +480,6 @@ public class LockscreenLockIconController { } private void setDozing(boolean isDozing) { - mDozing = isDozing; update(); } @@ -495,7 +494,7 @@ public class LockscreenLockIconController { * @return true if the visibility changed */ private boolean updateIconVisibility() { - boolean onAodOrDocked = mDozing || mDocked; + boolean onAodOrDocked = mStatusBarStateController.isDozing() && mDocked; boolean invisible = onAodOrDocked || mWakeAndUnlockRunning || mShowingLaunchAffordance; if (mKeyguardBypassController.getBypassEnabled() && !mBouncerShowingScrimmed) { if ((mHeadsUpManagerPhone.isHeadsUpGoingAway()