diff options
author | Christoph Studer <chstuder@google.com> | 2014-12-19 12:40:13 +0100 |
---|---|---|
committer | Christoph Studer <chstuder@google.com> | 2014-12-19 17:59:00 +0100 |
commit | 2231c6e1adefdb7636d9fe38a388f1b0660d30ea (patch) | |
tree | c3167b5ea10799e70f5088b5e45430d11d6035a1 /packages | |
parent | 0de823704d94d9e9e5cceccf4573afed4fd66b28 (diff) | |
download | frameworks_base-2231c6e1adefdb7636d9fe38a388f1b0660d30ea.zip frameworks_base-2231c6e1adefdb7636d9fe38a388f1b0660d30ea.tar.gz frameworks_base-2231c6e1adefdb7636d9fe38a388f1b0660d30ea.tar.bz2 |
SysUI: Log lockscreen state to eventlog
Logs the following keyguard and status bar states to
eventlog:
* statusBarState
* keyguardShowing
* keyguardOccluded
* bouncerShowing
* secure
* currentlyInsecure
Bug: 18767135
Change-Id: If27a9340dd1b5ec609f9940d9e0f32bd7aed1ed2
Diffstat (limited to 'packages')
7 files changed, 122 insertions, 42 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/EventLogTags.logtags b/packages/SystemUI/src/com/android/systemui/EventLogTags.logtags index 191cba5..ec3a0cb 100644 --- a/packages/SystemUI/src/com/android/systemui/EventLogTags.logtags +++ b/packages/SystemUI/src/com/android/systemui/EventLogTags.logtags @@ -9,7 +9,14 @@ option java_package com.android.systemui; 36001 sysui_heads_up_status (key|3),(visible|1) 36002 sysui_fullscreen_notification (key|3) 36003 sysui_heads_up_escalation (key|3) -36004 sysui_status_bar_state (state|1) +# sysui_status_bar_state: Logged whenever the status bar / keyguard state changes +## state: 0: SHADE, 1: KEYGUARD, 2: SHADE_LOCKED +## keyguardShowing: 1: Keyguard shown to the user (or keyguardOccluded) +## keyguardOccluded: 1: Keyguard active, but another activity is occluding it +## bouncerShowing: 1: Bouncer currently shown to the user +## secure: 1: The user has set up a secure unlock method (PIN, password, etc.) +## currentlyInsecure: 1: No secure unlock method set up (!secure), or trusted environment (TrustManager) +36004 sysui_status_bar_state (state|1),(keyguardShowing|1),(keyguardOccluded|1),(bouncerShowing|1),(secure|1),(currentlyInsecure|1) # --------------------------- # PhoneStatusBarView.java diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java index 503f588..227fc79 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java @@ -388,7 +388,7 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL // TODO: Real icon for facelock. int iconRes = mUnlockMethodCache.isFaceUnlockRunning() ? com.android.internal.R.drawable.ic_account_circle - : mUnlockMethodCache.isMethodInsecure() ? R.drawable.ic_lock_open_24dp + : mUnlockMethodCache.isCurrentlyInsecure() ? R.drawable.ic_lock_open_24dp : R.drawable.ic_lock_24dp; if (mLastUnlockIconRes != iconRes) { Drawable icon = mContext.getDrawable(iconRes); @@ -438,7 +438,7 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL } @Override - public void onMethodSecureChanged(boolean methodSecure) { + public void onUnlockMethodStateChanged() { updateLockIcon(); updateCameraVisibility(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java index 3292f9b..5bc1321 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java @@ -212,6 +212,9 @@ public class KeyguardBouncer { return false; } + /** + * WARNING: This method might cause Binder calls. + */ public boolean isSecure() { return mKeyguardView == null || mKeyguardView.getSecurityMode() != SecurityMode.None; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 8b328aa..d8ac1c2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -145,6 +145,7 @@ import com.android.systemui.statusbar.SignalClusterView; import com.android.systemui.statusbar.SpeedBumpView; import com.android.systemui.statusbar.StatusBarIconView; import com.android.systemui.statusbar.StatusBarState; +import com.android.systemui.statusbar.phone.UnlockMethodCache.OnUnlockMethodChangedListener; import com.android.systemui.statusbar.policy.AccessibilityController; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback; @@ -181,7 +182,7 @@ import java.util.List; import java.util.Map; public class PhoneStatusBar extends BaseStatusBar implements DemoMode, - DragDownHelper.DragDownCallback, ActivityStarter { + DragDownHelper.DragDownCallback, ActivityStarter, OnUnlockMethodChangedListener { static final String TAG = "PhoneStatusBar"; public static final boolean DEBUG = BaseStatusBar.DEBUG; public static final boolean SPEW = false; @@ -490,6 +491,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, private boolean mLaunchTransitionFadingAway; private ExpandableNotificationRow mDraggedDownRow; + // Fingerprint (as computed by getLoggingFingerprint() of the last logged state. + private int mLastLoggedStateFingerprint; + private static final int VISIBLE_LOCATIONS = ViewState.LOCATION_FIRST_CARD | ViewState.LOCATION_TOP_STACK_PEEKING | ViewState.LOCATION_MAIN_AREA @@ -600,6 +604,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, mHeadsUpObserver); } mUnlockMethodCache = UnlockMethodCache.getInstance(mContext); + mUnlockMethodCache.addListener(this); startKeyguard(); mDozeServiceHost = new DozeServiceHost(); @@ -2152,8 +2157,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, public boolean isFalsingThresholdNeeded() { boolean onKeyguard = getBarState() == StatusBarState.KEYGUARD; - boolean isMethodInsecure = mUnlockMethodCache.isMethodInsecure(); - return onKeyguard && (isMethodInsecure || mDozing || mScreenOnComingFromTouch); + boolean isCurrentlyInsecure = mUnlockMethodCache.isCurrentlyInsecure(); + return onKeyguard && (isCurrentlyInsecure || mDozing || mScreenOnComingFromTouch); } public boolean isDozing() { @@ -2170,6 +2175,18 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, } /** + * To be called when there's a state change in StatusBarKeyguardViewManager. + */ + public void onKeyguardViewManagerStatesUpdated() { + logStateToEventlog(); + } + + @Override // UnlockMethodCache.OnUnlockMethodChangedListener + public void onUnlockMethodStateChanged() { + logStateToEventlog(); + } + + /** * All changes to the status bar and notifications funnel through here and are batched. */ private class H extends BaseStatusBar.H { @@ -3341,6 +3358,47 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, } } + // State logging + + private void logStateToEventlog() { + boolean isShowing = mStatusBarKeyguardViewManager.isShowing(); + boolean isOccluded = mStatusBarKeyguardViewManager.isOccluded(); + boolean isBouncerShowing = mStatusBarKeyguardViewManager.isBouncerShowing(); + boolean isSecure = mUnlockMethodCache.isMethodSecure(); + boolean isCurrentlyInsecure = mUnlockMethodCache.isCurrentlyInsecure(); + int stateFingerprint = getLoggingFingerprint(mState, + isShowing, + isOccluded, + isBouncerShowing, + isSecure, + isCurrentlyInsecure); + if (stateFingerprint != mLastLoggedStateFingerprint) { + EventLogTags.writeSysuiStatusBarState(mState, + isShowing ? 1 : 0, + isOccluded ? 1 : 0, + isBouncerShowing ? 1 : 0, + isSecure ? 1 : 0, + isCurrentlyInsecure ? 1 : 0); + mLastLoggedStateFingerprint = stateFingerprint; + } + } + + /** + * Returns a fingerprint of fields logged to eventlog + */ + private static int getLoggingFingerprint(int statusBarState, boolean keyguardShowing, + boolean keyguardOccluded, boolean bouncerShowing, boolean secure, + boolean currentlyInsecure) { + // Reserve 8 bits for statusBarState. We'll never go higher than + // that, right? Riiiight. + return (statusBarState & 0xFF) + | ((keyguardShowing ? 1 : 0) << 8) + | ((keyguardOccluded ? 1 : 0) << 9) + | ((bouncerShowing ? 1 : 0) << 10) + | ((secure ? 1 : 0) << 11) + | ((currentlyInsecure ? 1 : 0) << 12); + } + // // tracing // @@ -3825,19 +3883,15 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, * @param state The {@link StatusBarState} to set. */ public void setBarState(int state) { - if (state != mState) { - EventLogTags.writeSysuiStatusBarState(state); - - // If we're visible and switched to SHADE_LOCKED (the user dragged - // down on the lockscreen), clear notification LED, vibration, - // ringing. - // Other transitions are covered in handleVisibleToUserChanged(). - if (mVisible && state == StatusBarState.SHADE_LOCKED) { - try { - mBarService.clearNotificationEffects(); - } catch (RemoteException e) { - // Ignore. - } + // If we're visible and switched to SHADE_LOCKED (the user dragged + // down on the lockscreen), clear notification LED, vibration, + // ringing. + // Other transitions are covered in handleVisibleToUserChanged(). + if (state != mState && mVisible && state == StatusBarState.SHADE_LOCKED) { + try { + mBarService.clearNotificationEffects(); + } catch (RemoteException e) { + // Ignore. } } mState = state; @@ -3879,7 +3933,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, public void onTrackingStopped(boolean expand) { if (mState == StatusBarState.KEYGUARD || mState == StatusBarState.SHADE_LOCKED) { - if (!expand && !mUnlockMethodCache.isMethodInsecure()) { + if (!expand && !mUnlockMethodCache.isCurrentlyInsecure()) { showBouncer(); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java index d6bd94b..0e8a794 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -88,7 +88,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener { public void onTrackingStarted() { mExpanding = true; - mDarkenWhileDragging = !mUnlockMethodCache.isMethodInsecure(); + mDarkenWhileDragging = !mUnlockMethodCache.isCurrentlyInsecure(); } public void onExpandingFinished() { 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 f4edab5..1724e70 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -303,6 +303,9 @@ public class StatusBarKeyguardViewManager { } } + /** + * WARNING: This method might cause Binder calls. + */ public boolean isSecure() { return mBouncer.isSecure(); } @@ -396,6 +399,8 @@ public class StatusBarKeyguardViewManager { mLastOccluded = occluded; mLastBouncerShowing = bouncerShowing; mLastBouncerDismissible = bouncerDismissible; + + mPhoneStatusBar.onKeyguardViewManagerStatesUpdated(); } public boolean onMenuPressed() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockMethodCache.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockMethodCache.java index e5eef9d..5ef345b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockMethodCache.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockMethodCache.java @@ -36,7 +36,10 @@ public class UnlockMethodCache { private final LockPatternUtils mLockPatternUtils; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; private final ArrayList<OnUnlockMethodChangedListener> mListeners = new ArrayList<>(); - private boolean mMethodInsecure; + /** Whether the user configured a secure unlock method (PIN, password, etc.) */ + private boolean mSecure; + /** Whether the unlock method is currently insecure (insecure method or trusted environment) */ + private boolean mCurrentlyInsecure; private boolean mTrustManaged; private boolean mFaceUnlockRunning; @@ -44,7 +47,7 @@ public class UnlockMethodCache { mLockPatternUtils = new LockPatternUtils(ctx); mKeyguardUpdateMonitor = KeyguardUpdateMonitor.getInstance(ctx); KeyguardUpdateMonitor.getInstance(ctx).registerCallback(mCallback); - updateMethodSecure(true /* updateAlways */); + update(true /* updateAlways */); } public static UnlockMethodCache getInstance(Context context) { @@ -55,10 +58,17 @@ public class UnlockMethodCache { } /** - * @return whether the current security method is secure, i. e. the bouncer will be shown + * @return whether the user configured a secure unlock method like PIN, password, etc. */ - public boolean isMethodInsecure() { - return mMethodInsecure; + public boolean isMethodSecure() { + return mSecure; + } + + /** + * @return whether the lockscreen is currently insecure, i. e. the bouncer won't be shown + */ + public boolean isCurrentlyInsecure() { + return mCurrentlyInsecure; } public void addListener(OnUnlockMethodChangedListener listener) { @@ -69,58 +79,59 @@ public class UnlockMethodCache { mListeners.remove(listener); } - private void updateMethodSecure(boolean updateAlways) { + private void update(boolean updateAlways) { int user = mLockPatternUtils.getCurrentUser(); - boolean methodInsecure = !mLockPatternUtils.isSecure() || - mKeyguardUpdateMonitor.getUserHasTrust(user); + boolean secure = mLockPatternUtils.isSecure(); + boolean currentlyInsecure = !secure || mKeyguardUpdateMonitor.getUserHasTrust(user); boolean trustManaged = mKeyguardUpdateMonitor.getUserTrustIsManaged(user); boolean faceUnlockRunning = mKeyguardUpdateMonitor.isFaceUnlockRunning(user) && trustManaged; - boolean changed = methodInsecure != mMethodInsecure || trustManaged != mTrustManaged - || faceUnlockRunning != mFaceUnlockRunning; + boolean changed = secure != mSecure || currentlyInsecure != mCurrentlyInsecure || + trustManaged != mTrustManaged || faceUnlockRunning != mFaceUnlockRunning; if (changed || updateAlways) { - mMethodInsecure = methodInsecure; + mSecure = secure; + mCurrentlyInsecure = currentlyInsecure; mTrustManaged = trustManaged; mFaceUnlockRunning = faceUnlockRunning; - notifyListeners(mMethodInsecure); + notifyListeners(); } } - private void notifyListeners(boolean secure) { + private void notifyListeners() { for (OnUnlockMethodChangedListener listener : mListeners) { - listener.onMethodSecureChanged(secure); + listener.onUnlockMethodStateChanged(); } } private final KeyguardUpdateMonitorCallback mCallback = new KeyguardUpdateMonitorCallback() { @Override public void onUserSwitchComplete(int userId) { - updateMethodSecure(false /* updateAlways */); + update(false /* updateAlways */); } @Override public void onTrustChanged(int userId) { - updateMethodSecure(false /* updateAlways */); + update(false /* updateAlways */); } @Override public void onTrustManagedChanged(int userId) { - updateMethodSecure(false /* updateAlways */); + update(false /* updateAlways */); } @Override public void onScreenTurnedOn() { - updateMethodSecure(false /* updateAlways */); + update(false /* updateAlways */); } @Override public void onFingerprintRecognized(int userId) { - updateMethodSecure(false /* updateAlways */); + update(false /* updateAlways */); } @Override public void onFaceUnlockStateChanged(boolean running, int userId) { - updateMethodSecure(false /* updateAlways */); + update(false /* updateAlways */); } }; @@ -133,6 +144,6 @@ public class UnlockMethodCache { } public static interface OnUnlockMethodChangedListener { - void onMethodSecureChanged(boolean methodSecure); + void onUnlockMethodStateChanged(); } } |