Loading packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java +30 −0 Original line number Diff line number Diff line Loading @@ -142,6 +142,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { private static final int MSG_SIM_SUBSCRIPTION_INFO_CHANGED = 328; private static final int MSG_AIRPLANE_MODE_CHANGED = 329; private static final int MSG_SERVICE_STATE_CHANGE = 330; private static final int MSG_SCREEN_TURNED_ON = 331; private static final int MSG_SCREEN_TURNED_OFF = 332; private static KeyguardUpdateMonitor sInstance; Loading Loading @@ -248,6 +250,12 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { case MSG_SERVICE_STATE_CHANGE: handleServiceStateChange(msg.arg1, (ServiceState) msg.obj); break; case MSG_SCREEN_TURNED_ON: handleScreenTurnedOn(); break; case MSG_SCREEN_TURNED_OFF: handleScreenTurnedOff(); break; } } }; Loading Loading @@ -806,6 +814,26 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { updateFingerprintListeningState(); } private void handleScreenTurnedOn() { final int count = mCallbacks.size(); for (int i = 0; i < count; i++) { KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get(); if (cb != null) { cb.onScreenTurnedOn(); } } } private void handleScreenTurnedOff() { final int count = mCallbacks.size(); for (int i = 0; i < count; i++) { KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get(); if (cb != null) { cb.onScreenTurnedOff(); } } } /** * IMPORTANT: Must be called from UI thread. */ Loading Loading @@ -1486,12 +1514,14 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { synchronized (this) { mScreenOn = true; } mHandler.sendEmptyMessage(MSG_SCREEN_TURNED_ON); } public void dispatchScreenTurnedOff() { synchronized(this) { mScreenOn = false; } mHandler.sendEmptyMessage(MSG_SCREEN_TURNED_OFF); } public boolean isDeviceInteractive() { Loading packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java +10 −0 Original line number Diff line number Diff line Loading @@ -160,6 +160,16 @@ public class KeyguardUpdateMonitorCallback { */ public void onFinishedGoingToSleep(int why) { } /** * Called when the screen has been turned on. */ public void onScreenTurnedOn() { } /** * Called when the screen has been turned off. */ public void onScreenTurnedOff() { } /** * Called when trust changes for a user. */ Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java +10 −0 Original line number Diff line number Diff line Loading @@ -643,6 +643,16 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL mLockIcon.setDeviceInteractive(false); } @Override public void onScreenTurnedOn() { mLockIcon.setScreenOn(true); } @Override public void onScreenTurnedOff() { mLockIcon.setScreenOn(false); } @Override public void onKeyguardVisibilityChanged(boolean showing) { mLockIcon.update(); Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java +27 −31 Original line number Diff line number Diff line Loading @@ -34,12 +34,6 @@ import com.android.systemui.statusbar.policy.AccessibilityController; */ public class LockIcon extends KeyguardAffordanceView { /** * Delay animations a bit when the screen just turned on as a heuristic to start them after * the screen has actually turned on. */ private static final long ANIM_DELAY_AFTER_SCREEN_ON = 250; private static final int STATE_LOCKED = 0; private static final int STATE_LOCK_OPEN = 1; private static final int STATE_FACE_UNLOCK = 2; Loading @@ -50,6 +44,8 @@ public class LockIcon extends KeyguardAffordanceView { private boolean mLastDeviceInteractive; private boolean mTransientFpError; private boolean mDeviceInteractive; private boolean mScreenOn; private boolean mLastScreenOn; private final TrustDrawable mTrustDrawable; private final UnlockMethodCache mUnlockMethodCache; private AccessibilityController mAccessibilityController; Loading Loading @@ -88,6 +84,11 @@ public class LockIcon extends KeyguardAffordanceView { update(); } public void setScreenOn(boolean screenOn) { mScreenOn = screenOn; update(); } public void update() { boolean visible = isShown() && KeyguardUpdateMonitor.getInstance(mContext).isDeviceInteractive(); Loading @@ -96,20 +97,20 @@ public class LockIcon extends KeyguardAffordanceView { } else { mTrustDrawable.stop(); } if (!visible) { return; } // TODO: Real icon for facelock. int state = getState(); boolean anyFingerprintIcon = state == STATE_FINGERPRINT || state == STATE_FINGERPRINT_ERROR; if (state != mLastState || mDeviceInteractive != mLastDeviceInteractive) { if (state != mLastState || mDeviceInteractive != mLastDeviceInteractive || mScreenOn != mLastScreenOn) { boolean isAnim = true; int iconRes = getAnimationResForTransition(mLastState, state, mLastDeviceInteractive, mDeviceInteractive); mDeviceInteractive, mLastScreenOn, mScreenOn); if (iconRes == R.drawable.lockscreen_fingerprint_draw_off_animation) { anyFingerprintIcon = true; } if (iconRes == -1) { iconRes = getIconForState(state); iconRes = getIconForState(state, mScreenOn, mDeviceInteractive); isAnim = false; } Drawable icon = mContext.getDrawable(iconRes); final AnimatedVectorDrawable animation = icon instanceof AnimatedVectorDrawable Loading @@ -135,23 +136,12 @@ public class LockIcon extends KeyguardAffordanceView { : R.string.accessibility_unlock_button); setContentDescription(contentDescription); mHasFingerPrintIcon = anyFingerprintIcon; if (animation != null) { // If we play the draw on animation, delay it by one frame when the screen is // actually turned on. if (iconRes == R.drawable.lockscreen_fingerprint_draw_on_animation) { postOnAnimationDelayed(new Runnable() { @Override public void run() { if (animation != null && isAnim) { animation.start(); } }, ANIM_DELAY_AFTER_SCREEN_ON); } else { animation.start(); } } mLastState = state; mLastDeviceInteractive = mDeviceInteractive; mLastScreenOn = mScreenOn; } // Hide trust circle when fingerprint is running. Loading Loading @@ -192,7 +182,7 @@ public class LockIcon extends KeyguardAffordanceView { mAccessibilityController = accessibilityController; } private int getIconForState(int state) { private int getIconForState(int state, boolean screenOn, boolean deviceInteractive) { switch (state) { case STATE_LOCKED: return R.drawable.ic_lock_24dp; Loading @@ -201,7 +191,11 @@ public class LockIcon extends KeyguardAffordanceView { case STATE_FACE_UNLOCK: return com.android.internal.R.drawable.ic_account_circle; case STATE_FINGERPRINT: return R.drawable.ic_fingerprint; // If screen is off and device asleep, use the draw on animation so the first frame // gets drawn. return screenOn && deviceInteractive ? R.drawable.ic_fingerprint : R.drawable.lockscreen_fingerprint_draw_on_animation; case STATE_FINGERPRINT_ERROR: return R.drawable.ic_fingerprint_error; default: Loading @@ -209,8 +203,9 @@ public class LockIcon extends KeyguardAffordanceView { } } private int getAnimationResForTransition(int oldState, int newState, boolean oldScreenOn, boolean screenOn) { private int getAnimationResForTransition(int oldState, int newState, boolean oldDeviceInteractive, boolean deviceInteractive, boolean oldScreenOn, boolean screenOn) { if (oldState == STATE_FINGERPRINT && newState == STATE_FINGERPRINT_ERROR) { return R.drawable.lockscreen_fingerprint_fp_to_error_state_animation; } else if (oldState == STATE_FINGERPRINT_ERROR && newState == STATE_FINGERPRINT) { Loading @@ -218,7 +213,8 @@ public class LockIcon extends KeyguardAffordanceView { } else if (oldState == STATE_FINGERPRINT && newState == STATE_LOCK_OPEN && !mUnlockMethodCache.isTrusted()) { return R.drawable.lockscreen_fingerprint_draw_off_animation; } else if (newState == STATE_FINGERPRINT && !oldScreenOn && screenOn) { } else if (newState == STATE_FINGERPRINT && (!oldScreenOn && screenOn && deviceInteractive || screenOn && !oldDeviceInteractive && deviceInteractive)) { return R.drawable.lockscreen_fingerprint_draw_on_animation; } else { return -1; Loading Loading
packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java +30 −0 Original line number Diff line number Diff line Loading @@ -142,6 +142,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { private static final int MSG_SIM_SUBSCRIPTION_INFO_CHANGED = 328; private static final int MSG_AIRPLANE_MODE_CHANGED = 329; private static final int MSG_SERVICE_STATE_CHANGE = 330; private static final int MSG_SCREEN_TURNED_ON = 331; private static final int MSG_SCREEN_TURNED_OFF = 332; private static KeyguardUpdateMonitor sInstance; Loading Loading @@ -248,6 +250,12 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { case MSG_SERVICE_STATE_CHANGE: handleServiceStateChange(msg.arg1, (ServiceState) msg.obj); break; case MSG_SCREEN_TURNED_ON: handleScreenTurnedOn(); break; case MSG_SCREEN_TURNED_OFF: handleScreenTurnedOff(); break; } } }; Loading Loading @@ -806,6 +814,26 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { updateFingerprintListeningState(); } private void handleScreenTurnedOn() { final int count = mCallbacks.size(); for (int i = 0; i < count; i++) { KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get(); if (cb != null) { cb.onScreenTurnedOn(); } } } private void handleScreenTurnedOff() { final int count = mCallbacks.size(); for (int i = 0; i < count; i++) { KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get(); if (cb != null) { cb.onScreenTurnedOff(); } } } /** * IMPORTANT: Must be called from UI thread. */ Loading Loading @@ -1486,12 +1514,14 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { synchronized (this) { mScreenOn = true; } mHandler.sendEmptyMessage(MSG_SCREEN_TURNED_ON); } public void dispatchScreenTurnedOff() { synchronized(this) { mScreenOn = false; } mHandler.sendEmptyMessage(MSG_SCREEN_TURNED_OFF); } public boolean isDeviceInteractive() { Loading
packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java +10 −0 Original line number Diff line number Diff line Loading @@ -160,6 +160,16 @@ public class KeyguardUpdateMonitorCallback { */ public void onFinishedGoingToSleep(int why) { } /** * Called when the screen has been turned on. */ public void onScreenTurnedOn() { } /** * Called when the screen has been turned off. */ public void onScreenTurnedOff() { } /** * Called when trust changes for a user. */ Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java +10 −0 Original line number Diff line number Diff line Loading @@ -643,6 +643,16 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL mLockIcon.setDeviceInteractive(false); } @Override public void onScreenTurnedOn() { mLockIcon.setScreenOn(true); } @Override public void onScreenTurnedOff() { mLockIcon.setScreenOn(false); } @Override public void onKeyguardVisibilityChanged(boolean showing) { mLockIcon.update(); Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java +27 −31 Original line number Diff line number Diff line Loading @@ -34,12 +34,6 @@ import com.android.systemui.statusbar.policy.AccessibilityController; */ public class LockIcon extends KeyguardAffordanceView { /** * Delay animations a bit when the screen just turned on as a heuristic to start them after * the screen has actually turned on. */ private static final long ANIM_DELAY_AFTER_SCREEN_ON = 250; private static final int STATE_LOCKED = 0; private static final int STATE_LOCK_OPEN = 1; private static final int STATE_FACE_UNLOCK = 2; Loading @@ -50,6 +44,8 @@ public class LockIcon extends KeyguardAffordanceView { private boolean mLastDeviceInteractive; private boolean mTransientFpError; private boolean mDeviceInteractive; private boolean mScreenOn; private boolean mLastScreenOn; private final TrustDrawable mTrustDrawable; private final UnlockMethodCache mUnlockMethodCache; private AccessibilityController mAccessibilityController; Loading Loading @@ -88,6 +84,11 @@ public class LockIcon extends KeyguardAffordanceView { update(); } public void setScreenOn(boolean screenOn) { mScreenOn = screenOn; update(); } public void update() { boolean visible = isShown() && KeyguardUpdateMonitor.getInstance(mContext).isDeviceInteractive(); Loading @@ -96,20 +97,20 @@ public class LockIcon extends KeyguardAffordanceView { } else { mTrustDrawable.stop(); } if (!visible) { return; } // TODO: Real icon for facelock. int state = getState(); boolean anyFingerprintIcon = state == STATE_FINGERPRINT || state == STATE_FINGERPRINT_ERROR; if (state != mLastState || mDeviceInteractive != mLastDeviceInteractive) { if (state != mLastState || mDeviceInteractive != mLastDeviceInteractive || mScreenOn != mLastScreenOn) { boolean isAnim = true; int iconRes = getAnimationResForTransition(mLastState, state, mLastDeviceInteractive, mDeviceInteractive); mDeviceInteractive, mLastScreenOn, mScreenOn); if (iconRes == R.drawable.lockscreen_fingerprint_draw_off_animation) { anyFingerprintIcon = true; } if (iconRes == -1) { iconRes = getIconForState(state); iconRes = getIconForState(state, mScreenOn, mDeviceInteractive); isAnim = false; } Drawable icon = mContext.getDrawable(iconRes); final AnimatedVectorDrawable animation = icon instanceof AnimatedVectorDrawable Loading @@ -135,23 +136,12 @@ public class LockIcon extends KeyguardAffordanceView { : R.string.accessibility_unlock_button); setContentDescription(contentDescription); mHasFingerPrintIcon = anyFingerprintIcon; if (animation != null) { // If we play the draw on animation, delay it by one frame when the screen is // actually turned on. if (iconRes == R.drawable.lockscreen_fingerprint_draw_on_animation) { postOnAnimationDelayed(new Runnable() { @Override public void run() { if (animation != null && isAnim) { animation.start(); } }, ANIM_DELAY_AFTER_SCREEN_ON); } else { animation.start(); } } mLastState = state; mLastDeviceInteractive = mDeviceInteractive; mLastScreenOn = mScreenOn; } // Hide trust circle when fingerprint is running. Loading Loading @@ -192,7 +182,7 @@ public class LockIcon extends KeyguardAffordanceView { mAccessibilityController = accessibilityController; } private int getIconForState(int state) { private int getIconForState(int state, boolean screenOn, boolean deviceInteractive) { switch (state) { case STATE_LOCKED: return R.drawable.ic_lock_24dp; Loading @@ -201,7 +191,11 @@ public class LockIcon extends KeyguardAffordanceView { case STATE_FACE_UNLOCK: return com.android.internal.R.drawable.ic_account_circle; case STATE_FINGERPRINT: return R.drawable.ic_fingerprint; // If screen is off and device asleep, use the draw on animation so the first frame // gets drawn. return screenOn && deviceInteractive ? R.drawable.ic_fingerprint : R.drawable.lockscreen_fingerprint_draw_on_animation; case STATE_FINGERPRINT_ERROR: return R.drawable.ic_fingerprint_error; default: Loading @@ -209,8 +203,9 @@ public class LockIcon extends KeyguardAffordanceView { } } private int getAnimationResForTransition(int oldState, int newState, boolean oldScreenOn, boolean screenOn) { private int getAnimationResForTransition(int oldState, int newState, boolean oldDeviceInteractive, boolean deviceInteractive, boolean oldScreenOn, boolean screenOn) { if (oldState == STATE_FINGERPRINT && newState == STATE_FINGERPRINT_ERROR) { return R.drawable.lockscreen_fingerprint_fp_to_error_state_animation; } else if (oldState == STATE_FINGERPRINT_ERROR && newState == STATE_FINGERPRINT) { Loading @@ -218,7 +213,8 @@ public class LockIcon extends KeyguardAffordanceView { } else if (oldState == STATE_FINGERPRINT && newState == STATE_LOCK_OPEN && !mUnlockMethodCache.isTrusted()) { return R.drawable.lockscreen_fingerprint_draw_off_animation; } else if (newState == STATE_FINGERPRINT && !oldScreenOn && screenOn) { } else if (newState == STATE_FINGERPRINT && (!oldScreenOn && screenOn && deviceInteractive || screenOn && !oldDeviceInteractive && deviceInteractive)) { return R.drawable.lockscreen_fingerprint_draw_on_animation; } else { return -1; Loading