summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java349
-rw-r--r--packages/SystemUI/src/com/android/keyguard/logging/KeyguardUpdateMonitorLogger.kt326
-rw-r--r--packages/SystemUI/src/com/android/systemui/log/dagger/KeyguardUpdateMonitorLog.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java10
-rw-r--r--packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java6
5 files changed, 497 insertions, 198 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
index 4ae2cad4a01f..2b44199ac9ee 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -66,7 +66,6 @@ import android.hardware.fingerprint.FingerprintManager.AuthenticationCallback;
import android.hardware.fingerprint.FingerprintManager.AuthenticationResult;
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
import android.nfc.NfcAdapter;
-import android.os.Build;
import android.os.CancellationSignal;
import android.os.Handler;
import android.os.IRemoteCallback;
@@ -96,6 +95,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.jank.InteractionJankMonitor;
import com.android.internal.util.LatencyTracker;
import com.android.internal.widget.LockPatternUtils;
+import com.android.keyguard.logging.KeyguardUpdateMonitorLogger;
import com.android.settingslib.WirelessUtils;
import com.android.settingslib.fuelgauge.BatteryStatus;
import com.android.systemui.Dumpable;
@@ -141,12 +141,6 @@ import javax.inject.Inject;
public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpable {
private static final String TAG = "KeyguardUpdateMonitor";
- private static final boolean DEBUG = KeyguardConstants.DEBUG;
- private static final boolean DEBUG_SIM_STATES = KeyguardConstants.DEBUG_SIM_STATES;
- private static final boolean DEBUG_FACE = Build.IS_DEBUGGABLE;
- private static final boolean DEBUG_FINGERPRINT = Build.IS_DEBUGGABLE;
- private static final boolean DEBUG_ACTIVE_UNLOCK = Build.IS_DEBUGGABLE;
- private static final boolean DEBUG_SPEW = false;
private static final int BIOMETRIC_LOCKOUT_RESET_DELAY_MS = 600;
// Callback messages
@@ -241,6 +235,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
}
private final Context mContext;
+ private final KeyguardUpdateMonitorLogger mLogger;
private final boolean mIsPrimaryUser;
private final AuthController mAuthController;
private final StatusBarStateController mStatusBarStateController;
@@ -337,17 +332,9 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
private static final int HAL_ERROR_RETRY_TIMEOUT = 500; // ms
private static final int HAL_ERROR_RETRY_MAX = 20;
- private final Runnable mFpCancelNotReceived = () -> {
- Log.e(TAG, "Fp cancellation not received, transitioning to STOPPED");
- mFingerprintRunningState = BIOMETRIC_STATE_STOPPED;
- updateFingerprintListeningState(BIOMETRIC_ACTION_STOP);
- };
+ private final Runnable mFpCancelNotReceived = this::onFingerprintCancelNotReceived;
- private final Runnable mFaceCancelNotReceived = () -> {
- Log.e(TAG, "Face cancellation not received, transitioning to STOPPED");
- mFaceRunningState = BIOMETRIC_STATE_STOPPED;
- updateFaceListeningState(BIOMETRIC_ACTION_STOP);
- };
+ private final Runnable mFaceCancelNotReceived = this::onFaceCancelNotReceived;
private final Handler mHandler;
@@ -470,17 +457,15 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
private void handleSimSubscriptionInfoChanged() {
Assert.isMainThread();
- if (DEBUG_SIM_STATES) {
- Log.v(TAG, "onSubscriptionInfoChanged()");
- List<SubscriptionInfo> sil = mSubscriptionManager
- .getCompleteActiveSubscriptionInfoList();
- if (sil != null) {
- for (SubscriptionInfo subInfo : sil) {
- Log.v(TAG, "SubInfo:" + subInfo);
- }
- } else {
- Log.v(TAG, "onSubscriptionInfoChanged: list is null");
+ mLogger.v("onSubscriptionInfoChanged()");
+ List<SubscriptionInfo> sil = mSubscriptionManager
+ .getCompleteActiveSubscriptionInfoList();
+ if (sil != null) {
+ for (SubscriptionInfo subInfo : sil) {
+ mLogger.logSubInfo(subInfo);
}
+ } else {
+ mLogger.v("onSubscriptionInfoChanged: list is null");
}
List<SubscriptionInfo> subscriptionInfos = getSubscriptionInfo(true /* forceReload */);
@@ -504,8 +489,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
while (iter.hasNext()) {
Map.Entry<Integer, SimData> simData = iter.next();
if (!activeSubIds.contains(simData.getKey())) {
- Log.i(TAG, "Previously active sub id " + simData.getKey() + " is now invalid, "
- + "will remove");
+ mLogger.logInvalidSubId(simData.getKey());
iter.remove();
SimData data = simData.getValue();
@@ -690,7 +674,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
try {
mDreamManager.awaken();
} catch (RemoteException e) {
- Log.e(TAG, "Unable to awaken from dream");
+ mLogger.logException(e, "Unable to awaken from dream");
}
}
}
@@ -774,15 +758,15 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
try {
userId = ActivityManager.getService().getCurrentUser().id;
} catch (RemoteException e) {
- Log.e(TAG, "Failed to get current user id: ", e);
+ mLogger.logException(e, "Failed to get current user id");
return;
}
if (userId != authUserId) {
- Log.d(TAG, "Fingerprint authenticated for wrong user: " + authUserId);
+ mLogger.logFingerprintAuthForWrongUser(authUserId);
return;
}
if (isFingerprintDisabled(userId)) {
- Log.d(TAG, "Fingerprint disabled by DPM for userId: " + userId);
+ mLogger.logFingerprintDisabledForUser(userId);
return;
}
onFingerprintAuthenticated(userId, isStrongBiometric);
@@ -805,8 +789,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
private Runnable mRetryFingerprintAuthentication = new Runnable() {
@Override
public void run() {
- Log.w(TAG,
- "Retrying fingerprint attempt: " + mHardwareFingerprintUnavailableRetryCount);
+ mLogger.logRetryAfterFpHwUnavailable(mHardwareFingerprintUnavailableRetryCount);
if (mFpm.isHardwareDetected()) {
updateFingerprintListeningState(BIOMETRIC_ACTION_UPDATE);
} else if (mHardwareFingerprintUnavailableRetryCount < HAL_ERROR_RETRY_MAX) {
@@ -816,6 +799,12 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
}
};
+ private void onFingerprintCancelNotReceived() {
+ mLogger.e("Fp cancellation not received, transitioning to STOPPED");
+ mFingerprintRunningState = BIOMETRIC_STATE_STOPPED;
+ KeyguardUpdateMonitor.this.updateFingerprintListeningState(BIOMETRIC_ACTION_STOP);
+ }
+
private void handleFingerprintError(int msgId, String errString) {
Assert.isMainThread();
if (mHandler.hasCallbacks(mFpCancelNotReceived)) {
@@ -843,7 +832,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
if (msgId == FingerprintManager.FINGERPRINT_ERROR_LOCKOUT_PERMANENT) {
lockedOutStateChanged |= !mFingerprintLockedOutPermanent;
mFingerprintLockedOutPermanent = true;
- Log.d(TAG, "Fingerprint locked out - requiring strong auth");
+ mLogger.d("Fingerprint locked out - requiring strong auth");
mLockPatternUtils.requireStrongAuth(
STRONG_AUTH_REQUIRED_AFTER_LOCKOUT, getCurrentUser());
}
@@ -871,7 +860,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
}
private void handleFingerprintLockoutReset(@LockoutMode int mode) {
- Log.d(TAG, "handleFingerprintLockoutReset: " + mode);
+ mLogger.logFingerprintLockoutReset(mode);
final boolean wasLockout = mFingerprintLockedOut;
final boolean wasLockoutPermanent = mFingerprintLockedOutPermanent;
mFingerprintLockedOut = (mode == BIOMETRIC_LOCKOUT_TIMED)
@@ -902,7 +891,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
boolean wasRunning = mFingerprintRunningState == BIOMETRIC_STATE_RUNNING;
boolean isRunning = fingerprintRunningState == BIOMETRIC_STATE_RUNNING;
mFingerprintRunningState = fingerprintRunningState;
- Log.d(TAG, "fingerprintRunningState: " + mFingerprintRunningState);
+ mLogger.logFingerprintRunningState(mFingerprintRunningState);
// Clients of KeyguardUpdateMonitor don't care about the internal state about the
// asynchronousness of the cancel cycle. So only notify them if the actually running state
// has changed.
@@ -969,7 +958,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
private void handleFaceAcquired(int acquireInfo) {
Assert.isMainThread();
- if (DEBUG_FACE) Log.d(TAG, "Face acquired acquireInfo=" + acquireInfo);
+ mLogger.logFaceAcquired(acquireInfo);
for (int i = 0; i < mCallbacks.size(); i++) {
KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
if (cb != null) {
@@ -982,25 +971,25 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
Trace.beginSection("KeyGuardUpdateMonitor#handlerFaceAuthenticated");
try {
if (mGoingToSleep) {
- Log.d(TAG, "Aborted successful auth because device is going to sleep.");
+ mLogger.d("Aborted successful auth because device is going to sleep.");
return;
}
final int userId;
try {
userId = ActivityManager.getService().getCurrentUser().id;
} catch (RemoteException e) {
- Log.e(TAG, "Failed to get current user id: ", e);
+ mLogger.logException(e, "Failed to get current user id");
return;
}
if (userId != authUserId) {
- Log.d(TAG, "Face authenticated for wrong user: " + authUserId);
+ mLogger.logFaceAuthForWrongUser(authUserId);
return;
}
if (isFaceDisabled(userId)) {
- Log.d(TAG, "Face authentication disabled by DPM for userId: " + userId);
+ mLogger.logFaceAuthDisabledForUser(userId);
return;
}
- if (DEBUG_FACE) Log.d(TAG, "Face auth succeeded for user " + userId);
+ mLogger.logFaceAuthSuccess(userId);
onFaceAuthenticated(userId, isStrongBiometric);
} finally {
setFaceRunningState(BIOMETRIC_STATE_STOPPED);
@@ -1010,7 +999,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
private void handleFaceHelp(int msgId, String helpString) {
Assert.isMainThread();
- if (DEBUG_FACE) Log.d(TAG, "Face help received: " + helpString);
+ mLogger.logFaceAuthHelpMsg(msgId, helpString);
for (int i = 0; i < mCallbacks.size(); i++) {
KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
if (cb != null) {
@@ -1022,15 +1011,21 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
private Runnable mRetryFaceAuthentication = new Runnable() {
@Override
public void run() {
- Log.w(TAG, "Retrying face after HW unavailable, attempt " +
- mHardwareFaceUnavailableRetryCount);
+ mLogger.logRetryingAfterFaceHwUnavailable(mHardwareFaceUnavailableRetryCount);
updateFaceListeningState(BIOMETRIC_ACTION_UPDATE);
}
};
- private void handleFaceError(int msgId, String errString) {
+ private void onFaceCancelNotReceived() {
+ mLogger.e("Face cancellation not received, transitioning to STOPPED");
+ mFaceRunningState = BIOMETRIC_STATE_STOPPED;
+ KeyguardUpdateMonitor.this.updateFaceListeningState(BIOMETRIC_ACTION_STOP);
+ }
+
+ private void handleFaceError(int msgId, final String originalErrMsg) {
Assert.isMainThread();
- if (DEBUG_FACE) Log.d(TAG, "Face error received: " + errString + " msgId=" + msgId);
+ String errString = originalErrMsg;
+ mLogger.logFaceAuthError(msgId, originalErrMsg);
if (mHandler.hasCallbacks(mFaceCancelNotReceived)) {
mHandler.removeCallbacks(mFaceCancelNotReceived);
}
@@ -1087,7 +1082,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
}
private void handleFaceLockoutReset(@LockoutMode int mode) {
- Log.d(TAG, "handleFaceLockoutReset: " + mode);
+ mLogger.logFaceLockoutReset(mode);
final boolean wasLockoutPermanent = mFaceLockedOutPermanent;
mFaceLockedOutPermanent = (mode == BIOMETRIC_LOCKOUT_PERMANENT);
final boolean changed = (mFaceLockedOutPermanent != wasLockoutPermanent);
@@ -1105,7 +1100,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
boolean wasRunning = mFaceRunningState == BIOMETRIC_STATE_RUNNING;
boolean isRunning = faceRunningState == BIOMETRIC_STATE_RUNNING;
mFaceRunningState = faceRunningState;
- Log.d(TAG, "faceRunningState: " + mFaceRunningState);
+ mLogger.logFaceRunningState(mFaceRunningState);
// Clients of KeyguardUpdateMonitor don't care about the internal state or about the
// asynchronousness of the cancel cycle. So only notify them if the actually running state
// has changed.
@@ -1221,8 +1216,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
mDevicePolicyManager.getProfileOwnerOrDeviceOwnerSupervisionComponent(
UserHandle.of(userId));
if (supervisorComponent == null) {
- Log.e(TAG, "No Profile Owner or Device Owner supervision app found for User "
- + userId);
+ mLogger.logMissingSupervisorAppError(userId);
} else {
Intent intent =
new Intent(DevicePolicyManager.ACTION_BIND_SECONDARY_LOCKSCREEN_SERVICE)
@@ -1354,7 +1348,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
- if (DEBUG) Log.d(TAG, "received broadcast " + action);
+ mLogger.logBroadcastReceived(action);
if (Intent.ACTION_TIME_TICK.equals(action)
|| Intent.ACTION_TIME_CHANGED.equals(action)) {
@@ -1381,12 +1375,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
}
return;
}
- if (DEBUG_SIM_STATES) {
- Log.v(TAG, "action " + action
- + " state: " + intent.getStringExtra(
- Intent.EXTRA_SIM_STATE)
- + " slotId: " + args.slotId + " subid: " + args.subId);
- }
+ mLogger.logSimStateFromIntent(action,
+ intent.getStringExtra(Intent.EXTRA_SIM_STATE),
+ args.slotId,
+ args.subId);
mHandler.obtainMessage(MSG_SIM_STATE_CHANGE, args.subId, args.slotId, args.simState)
.sendToTarget();
} else if (TelephonyManager.ACTION_PHONE_STATE_CHANGED.equals(action)) {
@@ -1398,10 +1390,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
ServiceState serviceState = ServiceState.newFromBundle(intent.getExtras());
int subId = intent.getIntExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX,
SubscriptionManager.INVALID_SUBSCRIPTION_ID);
- if (DEBUG) {
- Log.v(TAG, "action " + action + " serviceState=" + serviceState + " subId="
- + subId);
- }
+ mLogger.logServiceStateIntent(action, serviceState, subId);
mHandler.sendMessage(
mHandler.obtainMessage(MSG_SERVICE_STATE_CHANGE, subId, 0, serviceState));
} else if (TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED.equals(action)) {
@@ -1521,7 +1510,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
*/
@Override
public void onUdfpsPointerDown(int sensorId) {
- Log.d(TAG, "onUdfpsPointerDown, sensorId: " + sensorId);
+ mLogger.logUdfpsPointerDown(sensorId);
requestFaceAuth(true);
}
@@ -1530,7 +1519,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
*/
@Override
public void onUdfpsPointerUp(int sensorId) {
- Log.d(TAG, "onUdfpsPointerUp, sensorId: " + sensorId);
+ mLogger.logUdfpsPointerUp(sensorId);
}
};
@@ -1826,7 +1815,9 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
TelephonyListenerManager telephonyListenerManager,
InteractionJankMonitor interactionJankMonitor,
LatencyTracker latencyTracker,
- ActiveUnlockConfig activeUnlockConfiguration) {
+ ActiveUnlockConfig activeUnlockConfiguration,
+ KeyguardUpdateMonitorLogger logger) {
+ mLogger = logger;
mContext = context;
mSubscriptionManager = SubscriptionManager.from(context);
mTelephonyListenerManager = telephonyListenerManager;
@@ -2170,13 +2161,13 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
|| mFingerprintRunningState == BIOMETRIC_STATE_CANCELLING_RESTARTING;
if (runningOrRestarting && !shouldListenForFingerprint) {
if (action == BIOMETRIC_ACTION_START) {
- Log.v(TAG, "Ignoring stopListeningForFingerprint()");
+ mLogger.v("Ignoring stopListeningForFingerprint()");
return;
}
stopListeningForFingerprint();
} else if (!runningOrRestarting && shouldListenForFingerprint) {
if (action == BIOMETRIC_ACTION_STOP) {
- Log.v(TAG, "Ignoring startListeningForFingerprint()");
+ mLogger.v("Ignoring startListeningForFingerprint()");
return;
}
startListeningForFingerprint();
@@ -2202,7 +2193,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
* @param active If the interrupt started or ended.
*/
public void onAuthInterruptDetected(boolean active) {
- if (DEBUG) Log.d(TAG, "onAuthInterruptDetected(" + active + ")");
+ mLogger.logAuthInterruptDetected(active);
if (mAuthInterruptActive == active) {
return;
}
@@ -2217,7 +2208,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
* @param userInitiatedRequest true if the user explicitly requested face auth
*/
public void requestFaceAuth(boolean userInitiatedRequest) {
- if (DEBUG) Log.d(TAG, "requestFaceAuth() userInitiated=" + userInitiatedRequest);
+ mLogger.logFaceAuthRequested(userInitiatedRequest);
mIsFaceAuthUserRequested |= userInitiatedRequest;
updateFaceListeningState(BIOMETRIC_ACTION_START);
}
@@ -2243,14 +2234,14 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
boolean shouldListenForFace = shouldListenForFace();
if (mFaceRunningState == BIOMETRIC_STATE_RUNNING && !shouldListenForFace) {
if (action == BIOMETRIC_ACTION_START) {
- Log.v(TAG, "Ignoring stopListeningForFace()");
+ mLogger.v("Ignoring stopListeningForFace()");
return;
}
mIsFaceAuthUserRequested = false;
stopListeningForFace();
} else if (mFaceRunningState != BIOMETRIC_STATE_RUNNING && shouldListenForFace) {
if (action == BIOMETRIC_ACTION_STOP) {
- Log.v(TAG, "Ignoring startListeningForFace()");
+ mLogger.v("Ignoring startListeningForFace()");
return;
}
startListeningForFace();
@@ -2267,9 +2258,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
}
if (shouldTriggerActiveUnlock()) {
- if (DEBUG_ACTIVE_UNLOCK) {
- Log.d("ActiveUnlock", "initiate active unlock triggerReason=" + reason);
- }
+ mLogger.logActiveUnlockTriggered(reason);
mTrustManager.reportUserMayRequestUnlock(KeyguardUpdateMonitor.getCurrentUser());
}
}
@@ -2297,12 +2286,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
}
if (allowRequest && shouldTriggerActiveUnlock()) {
- if (DEBUG_ACTIVE_UNLOCK) {
- Log.d("ActiveUnlock", "reportUserRequestedUnlock"
- + " origin=" + requestOrigin.name()
- + " reason=" + reason
- + " dismissKeyguard=" + dismissKeyguard);
- }
+ mLogger.logUserRequestedUnlock(requestOrigin, reason, dismissKeyguard);
mTrustManager.reportUserRequestedUnlock(KeyguardUpdateMonitor.getCurrentUser(),
dismissKeyguard);
}
@@ -2452,32 +2436,30 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
final boolean shouldListen = shouldListenKeyguardState && shouldListenUserState
&& shouldListenBouncerState && shouldListenUdfpsState && !isFingerprintLockedOut();
- if (DEBUG_FINGERPRINT || DEBUG_SPEW) {
- maybeLogListenerModelData(
- new KeyguardFingerprintListenModel(
- System.currentTimeMillis(),
- user,
- shouldListen,
- biometricEnabledForUser,
- mBouncerIsOrWillBeShowing,
- userCanSkipBouncer,
- mCredentialAttempted,
- mDeviceInteractive,
- mIsDreaming,
- isEncryptedOrLockdownForUser,
- fingerprintDisabledForUser,
- mFingerprintLockedOut,
- mGoingToSleep,
- mKeyguardGoingAway,
- mKeyguardIsVisible,
- mKeyguardOccluded,
- mOccludingAppRequestingFp,
- mIsPrimaryUser,
- shouldListenForFingerprintAssistant,
- mSwitchingUser,
- isUdfps,
- userDoesNotHaveTrust));
- }
+ maybeLogListenerModelData(
+ new KeyguardFingerprintListenModel(
+ System.currentTimeMillis(),
+ user,
+ shouldListen,
+ biometricEnabledForUser,
+ mBouncerIsOrWillBeShowing,
+ userCanSkipBouncer,
+ mCredentialAttempted,
+ mDeviceInteractive,
+ mIsDreaming,
+ isEncryptedOrLockdownForUser,
+ fingerprintDisabledForUser,
+ mFingerprintLockedOut,
+ mGoingToSleep,
+ mKeyguardGoingAway,
+ mKeyguardIsVisible,
+ mKeyguardOccluded,
+ mOccludingAppRequestingFp,
+ mIsPrimaryUser,
+ shouldListenForFingerprintAssistant,
+ mSwitchingUser,
+ isUdfps,
+ userDoesNotHaveTrust));
return shouldListen;
}
@@ -2552,59 +2534,49 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
&& !fpLockedout;
// Aggregate relevant fields for debug logging.
- if (DEBUG_FACE || DEBUG_SPEW) {
- maybeLogListenerModelData(
- new KeyguardFaceListenModel(
- System.currentTimeMillis(),
- user,
- shouldListen,
- mAuthInterruptActive,
- becauseCannotSkipBouncer,
- biometricEnabledForUser,
- mBouncerFullyShown,
- faceAuthenticated,
- faceDisabledForUser,
- mGoingToSleep,
- awakeKeyguard,
- mKeyguardGoingAway,
- shouldListenForFaceAssistant,
- mOccludingAppRequestingFace,
- mIsPrimaryUser,
- strongAuthAllowsScanning,
- mSecureCameraLaunched,
- mSwitchingUser,
- mUdfpsBouncerShowing));
- }
+ maybeLogListenerModelData(
+ new KeyguardFaceListenModel(
+ System.currentTimeMillis(),
+ user,
+ shouldListen,
+ mAuthInterruptActive,
+ becauseCannotSkipBouncer,
+ biometricEnabledForUser,
+ mBouncerFullyShown,
+ faceAuthenticated,
+ faceDisabledForUser,
+ mGoingToSleep,
+ awakeKeyguard,
+ mKeyguardGoingAway,
+ shouldListenForFaceAssistant,
+ mOccludingAppRequestingFace,
+ mIsPrimaryUser,
+ strongAuthAllowsScanning,
+ mSecureCameraLaunched,
+ mSwitchingUser,
+ mUdfpsBouncerShowing));
return shouldListen;
}
private void maybeLogListenerModelData(KeyguardListenModel model) {
- // Too chatty, but very useful when debugging issues.
- if (DEBUG_SPEW) {
- Log.v(TAG, model.toString());
- }
+ mLogger.logKeyguardListenerModel(model);
- if (DEBUG_ACTIVE_UNLOCK
- && model instanceof KeyguardActiveUnlockModel) {
+ if (model instanceof KeyguardActiveUnlockModel) {
mListenModels.add(model);
return;
}
// Add model data to the historical buffer.
final boolean notYetRunning =
- (DEBUG_FACE
- && model instanceof KeyguardFaceListenModel
- && mFaceRunningState != BIOMETRIC_STATE_RUNNING)
- || (DEBUG_FINGERPRINT
- && model instanceof KeyguardFingerprintListenModel
- && mFingerprintRunningState != BIOMETRIC_STATE_RUNNING);
+ (model instanceof KeyguardFaceListenModel
+ && mFaceRunningState != BIOMETRIC_STATE_RUNNING)
+ || (model instanceof KeyguardFingerprintListenModel
+ && mFingerprintRunningState != BIOMETRIC_STATE_RUNNING);
final boolean running =
- (DEBUG_FACE
- && model instanceof KeyguardFaceListenModel
+ (model instanceof KeyguardFaceListenModel
&& mFaceRunningState == BIOMETRIC_STATE_RUNNING)
- || (DEBUG_FINGERPRINT
- && model instanceof KeyguardFingerprintListenModel
+ || (model instanceof KeyguardFingerprintListenModel
&& mFingerprintRunningState == BIOMETRIC_STATE_RUNNING);
if (notYetRunning && model.getListening()
|| running && !model.getListening()) {
@@ -2616,9 +2588,9 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
final int userId = getCurrentUser();
final boolean unlockPossible = isUnlockWithFingerprintPossible(userId);
if (mFingerprintCancelSignal != null) {
- Log.e(TAG, "Cancellation signal is not null, high chance of bug in fp auth lifecycle"
- + " management. FP state: " + mFingerprintRunningState
- + ", unlockPossible: " + unlockPossible);
+ mLogger.logUnexpectedFpCancellationSignalState(
+ mFingerprintRunningState,
+ unlockPossible);
}
if (mFingerprintRunningState == BIOMETRIC_STATE_CANCELLING) {
@@ -2629,7 +2601,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
// Waiting for restart via handleFingerprintError().
return;
}
- if (DEBUG) Log.v(TAG, "startListeningForFingerprint()");
+ mLogger.v("startListeningForFingerprint()");
if (unlockPossible) {
mFingerprintCancelSignal = new CancellationSignal();
@@ -2650,9 +2622,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
final int userId = getCurrentUser();
final boolean unlockPossible = isUnlockWithFacePossible(userId);
if (mFaceCancelSignal != null) {
- Log.e(TAG, "Cancellation signal is not null, high chance of bug in face auth lifecycle"
- + " management. Face state: " + mFaceRunningState
- + ", unlockPossible: " + unlockPossible);
+ mLogger.logUnexpectedFaceCancellationSignalState(mFaceRunningState, unlockPossible);
}
if (mFaceRunningState == BIOMETRIC_STATE_CANCELLING) {
@@ -2662,7 +2632,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
// Waiting for ERROR_CANCELED before requesting auth again
return;
}
- if (DEBUG) Log.v(TAG, "startListeningForFace(): " + mFaceRunningState);
+ mLogger.logStartedListeningForFace(mFaceRunningState);
if (unlockPossible) {
mFaceCancelSignal = new CancellationSignal();
@@ -2728,7 +2698,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
}
private void stopListeningForFingerprint() {
- if (DEBUG) Log.v(TAG, "stopListeningForFingerprint()");
+ mLogger.v("stopListeningForFingerprint()");
if (mFingerprintRunningState == BIOMETRIC_STATE_RUNNING) {
if (mFingerprintCancelSignal != null) {
mFingerprintCancelSignal.cancel();
@@ -2744,7 +2714,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
}
private void stopListeningForFace() {
- if (DEBUG) Log.v(TAG, "stopListeningForFace()");
+ mLogger.v("stopListeningForFace()");
if (mFaceRunningState == BIOMETRIC_STATE_RUNNING) {
if (mFaceCancelSignal != null) {
mFaceCancelSignal.cancel();
@@ -2773,7 +2743,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
if (mDeviceProvisioned) {
mHandler.sendEmptyMessage(MSG_DEVICE_PROVISIONED);
}
- if (DEBUG) Log.d(TAG, "DEVICE_PROVISIONED state = " + mDeviceProvisioned);
+ mLogger.logDeviceProvisionedState(mDeviceProvisioned);
}
};
@@ -2878,7 +2848,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
*/
private void handlePhoneStateChanged(String newState) {
Assert.isMainThread();
- if (DEBUG) Log.d(TAG, "handlePhoneStateChanged(" + newState + ")");
+ mLogger.logPhoneStateChanged(newState);
if (TelephonyManager.EXTRA_STATE_IDLE.equals(newState)) {
mPhoneState = TelephonyManager.CALL_STATE_IDLE;
} else if (TelephonyManager.EXTRA_STATE_OFFHOOK.equals(newState)) {
@@ -2899,7 +2869,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
*/
private void handleTimeUpdate() {
Assert.isMainThread();
- if (DEBUG) Log.d(TAG, "handleTimeUpdate");
+ mLogger.d("handleTimeUpdate");
for (int i = 0; i < mCallbacks.size(); i++) {
KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
if (cb != null) {
@@ -2913,7 +2883,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
*/
private void handleTimeZoneUpdate(String timeZone) {
Assert.isMainThread();
- if (DEBUG) Log.d(TAG, "handleTimeZoneUpdate");
+ mLogger.d("handleTimeZoneUpdate");
for (int i = 0; i < mCallbacks.size(); i++) {
KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
if (cb != null) {
@@ -2931,7 +2901,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
*/
private void handleTimeFormatUpdate(String timeFormat) {
Assert.isMainThread();
- if (DEBUG) Log.d(TAG, "handleTimeFormatUpdate timeFormat=" + timeFormat);
+ mLogger.logTimeFormatChanged(timeFormat);
for (int i = 0; i < mCallbacks.size(); i++) {
KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
if (cb != null) {
@@ -2945,7 +2915,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
*/
private void handleBatteryUpdate(BatteryStatus status) {
Assert.isMainThread();
- if (DEBUG) Log.d(TAG, "handleBatteryUpdate");
+ mLogger.d("handleBatteryUpdate");
final boolean batteryUpdateInteresting = isBatteryUpdateInteresting(mBatteryStatus, status);
mBatteryStatus = status;
if (batteryUpdateInteresting) {
@@ -2982,14 +2952,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
@VisibleForTesting
void handleSimStateChange(int subId, int slotId, int state) {
Assert.isMainThread();
- if (DEBUG_SIM_STATES) {
- Log.d(TAG, "handleSimStateChange(subId=" + subId + ", slotId="
- + slotId + ", state=" + state + ")");
- }
+ mLogger.logSimState(subId, slotId, state);
boolean becameAbsent = false;
if (!SubscriptionManager.isValidSubscriptionId(subId)) {
- Log.w(TAG, "invalid subId in handleSimStateChange()");
+ mLogger.w("invalid subId in handleSimStateChange()");
/* Only handle No SIM(ABSENT) and Card Error(CARD_IO_ERROR) due to
* handleServiceStateChange() handle other case */
if (state == TelephonyManager.SIM_STATE_ABSENT) {
@@ -3038,13 +3005,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
*/
@VisibleForTesting
void handleServiceStateChange(int subId, ServiceState serviceState) {
- if (DEBUG) {
- Log.d(TAG,
- "handleServiceStateChange(subId=" + subId + ", serviceState=" + serviceState);
- }
+ mLogger.logServiceStateChange(subId, serviceState);
if (!SubscriptionManager.isValidSubscriptionId(subId)) {
- Log.w(TAG, "invalid subId in handleServiceStateChange()");
+ mLogger.w("invalid subId in handleServiceStateChange()");
return;
} else {
updateTelephonyCapable(true);
@@ -3066,7 +3030,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
*/
public void onKeyguardVisibilityChanged(boolean showing) {
Assert.isMainThread();
- Log.d(TAG, "onKeyguardVisibilityChanged(" + showing + ")");
+ mLogger.logKeyguardVisibilityChanged(showing);
mKeyguardIsVisible = showing;
if (showing) {
@@ -3086,7 +3050,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
* Handle {@link #MSG_KEYGUARD_RESET}
*/
private void handleKeyguardReset() {
- if (DEBUG) Log.d(TAG, "handleKeyguardReset");
+ mLogger.d("handleKeyguardReset");
updateBiometricListeningState(BIOMETRIC_ACTION_UPDATE);
mNeedsSlowUnlockTransition = resolveNeedsSlowUnlockTransition();
}
@@ -3100,8 +3064,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
0 /* flags */, getCurrentUser());
if (resolveInfo == null) {
- Log.w(TAG, "resolveNeedsSlowUnlockTransition: returning false since activity "
- + "could not be resolved.");
+ mLogger.w("resolveNeedsSlowUnlockTransition: returning false since activity could "
+ + "not be resolved.");
return false;
}
@@ -3119,11 +3083,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
final boolean wasBouncerFullyShown = mBouncerFullyShown;
mBouncerIsOrWillBeShowing = bouncerIsOrWillBeShowing == 1;
mBouncerFullyShown = bouncerFullyShown == 1;
- if (DEBUG) {
- Log.d(TAG, "handleKeyguardBouncerChanged"
- + " bouncerIsOrWillBeShowing=" + mBouncerIsOrWillBeShowing
- + " bouncerFullyShowing=" + mBouncerFullyShown);
- }
+ mLogger.logKeyguardBouncerChanged(mBouncerIsOrWillBeShowing, mBouncerFullyShown);
if (mBouncerFullyShown) {
// If the bouncer is shown, always clear this flag. This can happen in the following
@@ -3243,9 +3203,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
*/
public void removeCallback(KeyguardUpdateMonitorCallback callback) {
Assert.isMainThread();
- if (DEBUG) {
- Log.v(TAG, "*** unregister callback for " + callback);
- }
+ mLogger.logUnregisterCallback(callback);
mCallbacks.removeIf(el -> el.get() == callback);
}
@@ -3258,15 +3216,14 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
*/
public void registerCallback(KeyguardUpdateMonitorCallback callback) {
Assert.isMainThread();
- if (DEBUG) Log.v(TAG, "*** register callback for " + callback);
+ mLogger.logRegisterCallback(callback);
// Prevent adding duplicate callbacks
for (int i = 0; i < mCallbacks.size(); i++) {
if (mCallbacks.get(i).get() == callback) {
- if (DEBUG) {
- Log.e(TAG, "Object tried to add another callback",
- new Exception("Called by"));
- }
+ mLogger.logException(
+ new Exception("Called by"),
+ "Object tried to add another callback");
return;
}
}
@@ -3316,11 +3273,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
*/
public void sendKeyguardBouncerChanged(boolean bouncerIsOrWillBeShowing,
boolean bouncerFullyShown) {
- if (DEBUG) {
- Log.d(TAG, "sendKeyguardBouncerChanged"
- + " bouncerIsOrWillBeShowing=" + bouncerIsOrWillBeShowing
- + " bouncerFullyShown=" + bouncerFullyShown);
- }
+ mLogger.logSendKeyguardBouncerChanged(bouncerIsOrWillBeShowing, bouncerFullyShown);
Message message = mHandler.obtainMessage(MSG_KEYGUARD_BOUNCER_CHANGED);
message.arg1 = bouncerIsOrWillBeShowing ? 1 : 0;
message.arg2 = bouncerFullyShown ? 1 : 0;
@@ -3337,7 +3290,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
*/
@MainThread
public void reportSimUnlocked(int subId) {
- if (DEBUG_SIM_STATES) Log.v(TAG, "reportSimUnlocked(subId=" + subId + ")");
+ mLogger.logSimUnlocked(subId);
handleSimStateChange(subId, getSlotId(subId), TelephonyManager.SIM_STATE_READY);
}
@@ -3614,7 +3567,9 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
try {
ActivityManager.getService().unregisterUserSwitchObserver(mUserSwitchObserver);
} catch (RemoteException e) {
- Log.d(TAG, "RemoteException onDestroy. cannot unregister userSwitchObserver");
+ mLogger.logException(
+ e,
+ "RemoteException onDestroy. cannot unregister userSwitchObserver");
}
TaskStackChangeListeners.getInstance().unregisterTaskStackListener(mTaskStackListener);
diff --git a/packages/SystemUI/src/com/android/keyguard/logging/KeyguardUpdateMonitorLogger.kt b/packages/SystemUI/src/com/android/keyguard/logging/KeyguardUpdateMonitorLogger.kt
new file mode 100644
index 000000000000..035b7f07a5f4
--- /dev/null
+++ b/packages/SystemUI/src/com/android/keyguard/logging/KeyguardUpdateMonitorLogger.kt
@@ -0,0 +1,326 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.keyguard.logging
+
+import android.hardware.biometrics.BiometricConstants.LockoutMode
+import android.telephony.ServiceState
+import android.telephony.SubscriptionInfo
+import com.android.keyguard.ActiveUnlockConfig
+import com.android.keyguard.KeyguardListenModel
+import com.android.keyguard.KeyguardUpdateMonitorCallback
+import com.android.systemui.log.LogBuffer
+import com.android.systemui.log.LogLevel
+import com.android.systemui.log.LogLevel.DEBUG
+import com.android.systemui.log.LogLevel.ERROR
+import com.android.systemui.log.LogLevel.INFO
+import com.android.systemui.log.LogLevel.VERBOSE
+import com.android.systemui.log.LogLevel.WARNING
+import com.android.systemui.log.dagger.KeyguardUpdateMonitorLog
+import com.google.errorprone.annotations.CompileTimeConstant
+import javax.inject.Inject
+
+private const val TAG = "KeyguardUpdateMonitorLog"
+
+/**
+ * Helper class for logging for [com.android.keyguard.KeyguardUpdateMonitor]
+ */
+class KeyguardUpdateMonitorLogger @Inject constructor(
+ @KeyguardUpdateMonitorLog private val logBuffer: LogBuffer
+) {
+ fun d(@CompileTimeConstant msg: String) = log(msg, DEBUG)
+
+ fun e(@CompileTimeConstant msg: String) = log(msg, ERROR)
+
+ fun v(@CompileTimeConstant msg: String) = log(msg, ERROR)
+
+ fun w(@CompileTimeConstant msg: String) = log(msg, WARNING)
+
+ fun log(@CompileTimeConstant msg: String, level: LogLevel) = logBuffer.log(TAG, level, msg)
+
+ fun logActiveUnlockTriggered(reason: String) {
+ logBuffer.log("ActiveUnlock", DEBUG,
+ { str1 = reason },
+ { "initiate active unlock triggerReason=$str1" })
+ }
+
+ fun logAuthInterruptDetected(active: Boolean) {
+ logBuffer.log(TAG, DEBUG,
+ { bool1 = active },
+ { "onAuthInterruptDetected($bool1)" })
+ }
+
+ fun logBroadcastReceived(action: String?) {
+ logBuffer.log(TAG, DEBUG, { str1 = action }, { "received broadcast $str1" })
+ }
+
+ fun logDeviceProvisionedState(deviceProvisioned: Boolean) {
+ logBuffer.log(TAG, DEBUG,
+ { bool1 = deviceProvisioned },
+ { "DEVICE_PROVISIONED state = $bool1" })
+ }
+
+ fun logException(ex: Exception, @CompileTimeConstant logMsg: String) {
+ logBuffer.log(TAG, ERROR, {}, { logMsg }, exception = ex)
+ }
+
+ fun logFaceAcquired(acquireInfo: Int) {
+ logBuffer.log(TAG, DEBUG,
+ { int1 = acquireInfo },
+ { "Face acquired acquireInfo=$int1" })
+ }
+
+ fun logFaceAuthDisabledForUser(userId: Int) {
+ logBuffer.log(TAG, DEBUG,
+ { int1 = userId },
+ { "Face authentication disabled by DPM for userId: $int1" })
+ }
+ fun logFaceAuthError(msgId: Int, originalErrMsg: String) {
+ logBuffer.log(TAG, DEBUG, {
+ str1 = originalErrMsg
+ int1 = msgId
+ }, { "Face error received: $str1 msgId= $int1" })
+ }
+
+ fun logFaceAuthForWrongUser(authUserId: Int) {
+ logBuffer.log(TAG, DEBUG,
+ { int1 = authUserId },
+ { "Face authenticated for wrong user: $int1" })
+ }
+
+ fun logFaceAuthHelpMsg(msgId: Int, helpMsg: String) {
+ logBuffer.log(TAG, DEBUG, {
+ int1 = msgId
+ str1 = helpMsg
+ }, { "Face help received, msgId: $int1 msg: $str1" })
+ }
+
+ fun logFaceAuthRequested(userInitiatedRequest: Boolean) {
+ logBuffer.log(TAG, DEBUG,
+ { bool1 = userInitiatedRequest },
+ { "requestFaceAuth() userInitiated=$bool1" })
+ }
+
+ fun logFaceAuthSuccess(userId: Int) {
+ logBuffer.log(TAG, DEBUG,
+ { int1 = userId },
+ { "Face auth succeeded for user $int1" })
+ }
+
+ fun logFaceLockoutReset(@LockoutMode mode: Int) {
+ logBuffer.log(TAG, DEBUG, { int1 = mode }, { "handleFaceLockoutReset: $int1" })
+ }
+
+ fun logFaceRunningState(faceRunningState: Int) {
+ logBuffer.log(TAG, DEBUG, { int1 = faceRunningState }, { "faceRunningState: $int1" })
+ }
+
+ fun logFingerprintAuthForWrongUser(authUserId: Int) {
+ logBuffer.log(TAG, DEBUG,
+ { int1 = authUserId },
+ { "Fingerprint authenticated for wrong user: $int1" })
+ }
+
+ fun logFingerprintDisabledForUser(userId: Int) {
+ logBuffer.log(TAG, DEBUG,
+ { int1 = userId },
+ { "Fingerprint disabled by DPM for userId: $int1" })
+ }
+
+ fun logFingerprintLockoutReset(@LockoutMode mode: Int) {
+ logBuffer.log(TAG, DEBUG, { int1 = mode }, { "handleFingerprintLockoutReset: $int1" })
+ }
+
+ fun logFingerprintRunningState(fingerprintRunningState: Int) {
+ logBuffer.log(TAG, DEBUG,
+ { int1 = fingerprintRunningState },
+ { "fingerprintRunningState: $int1" })
+ }
+
+ fun logInvalidSubId(subId: Int) {
+ logBuffer.log(TAG, INFO,
+ { int1 = subId },
+ { "Previously active sub id $int1 is now invalid, will remove" })
+ }
+
+ fun logKeyguardBouncerChanged(bouncerIsOrWillBeShowing: Boolean, bouncerFullyShown: Boolean) {
+ logBuffer.log(TAG, DEBUG, {
+ bool1 = bouncerIsOrWillBeShowing
+ bool2 = bouncerFullyShown
+ }, {
+ "handleKeyguardBouncerChanged " +
+ "bouncerIsOrWillBeShowing=$bool1 bouncerFullyShowing=$bool2"
+ })
+ }
+
+ fun logKeyguardListenerModel(model: KeyguardListenModel) {
+ logBuffer.log(TAG, VERBOSE, { str1 = "$model" }, { str1!! })
+ }
+
+ fun logKeyguardVisibilityChanged(showing: Boolean) {
+ logBuffer.log(TAG, DEBUG, { bool1 = showing }, { "onKeyguardVisibilityChanged($bool1)" })
+ }
+
+ fun logMissingSupervisorAppError(userId: Int) {
+ logBuffer.log(TAG, ERROR,
+ { int1 = userId },
+ { "No Profile Owner or Device Owner supervision app found for User $int1" })
+ }
+
+ fun logPhoneStateChanged(newState: String) {
+ logBuffer.log(TAG, DEBUG,
+ { str1 = newState },
+ { "handlePhoneStateChanged($str1)" })
+ }
+
+ fun logRegisterCallback(callback: KeyguardUpdateMonitorCallback?) {
+ logBuffer.log(TAG, VERBOSE,
+ { str1 = "$callback" },
+ { "*** register callback for $str1" })
+ }
+
+ fun logRetryingAfterFaceHwUnavailable(retryCount: Int) {
+ logBuffer.log(TAG, WARNING,
+ { int1 = retryCount },
+ { "Retrying face after HW unavailable, attempt $int1" })
+ }
+
+ fun logRetryAfterFpHwUnavailable(retryCount: Int) {
+ logBuffer.log(TAG, WARNING,
+ { int1 = retryCount },
+ { "Retrying fingerprint attempt: $int1" })
+ }
+
+ fun logSendKeyguardBouncerChanged(
+ bouncerIsOrWillBeShowing: Boolean,
+ bouncerFullyShown: Boolean,
+ ) {
+ logBuffer.log(TAG, DEBUG, {
+ bool1 = bouncerIsOrWillBeShowing
+ bool2 = bouncerFullyShown
+ }, {
+ "sendKeyguardBouncerChanged bouncerIsOrWillBeShowing=$bool1 " +
+ "bouncerFullyShown=$bool2"
+ })
+ }
+
+ fun logServiceStateChange(subId: Int, serviceState: ServiceState?) {
+ logBuffer.log(TAG, DEBUG, {
+ int1 = subId
+ str1 = "$serviceState"
+ }, { "handleServiceStateChange(subId=$int1, serviceState=$str1)" })
+ }
+
+ fun logServiceStateIntent(action: String, serviceState: ServiceState?, subId: Int) {
+ logBuffer.log(TAG, VERBOSE, {
+ str1 = action
+ str2 = "$serviceState"
+ int1 = subId
+ }, { "action $str1 serviceState=$str2 subId=$int1" })
+ }
+
+ fun logSimState(subId: Int, slotId: Int, state: Int) {
+ logBuffer.log(TAG, DEBUG, {
+ int1 = subId
+ int2 = slotId
+ long1 = state.toLong()
+ }, { "handleSimStateChange(subId=$int1, slotId=$int2, state=$long1)" })
+ }
+
+ fun logSimStateFromIntent(action: String, extraSimState: String, slotId: Int, subId: Int) {
+ logBuffer.log(TAG, VERBOSE, {
+ str1 = action
+ str2 = extraSimState
+ int1 = slotId
+ int2 = subId
+ }, { "action $str1 state: $str2 slotId: $int1 subid: $int2" })
+ }
+
+ fun logSimUnlocked(subId: Int) {
+ logBuffer.log(TAG, VERBOSE, { int1 = subId }, { "reportSimUnlocked(subId=$int1)" })
+ }
+
+ fun logStartedListeningForFace(faceRunningState: Int) {
+ logBuffer.log(TAG, VERBOSE,
+ { int1 = faceRunningState },
+ { "startListeningForFace(): $int1" })
+ }
+
+ fun logSubInfo(subInfo: SubscriptionInfo?) {
+ logBuffer.log(TAG, VERBOSE,
+ { str1 = "$subInfo" },
+ { "SubInfo:$str1" })
+ }
+
+ fun logTimeFormatChanged(newTimeFormat: String) {
+ logBuffer.log(TAG, DEBUG,
+ { str1 = newTimeFormat },
+ { "handleTimeFormatUpdate timeFormat=$str1" })
+ }
+
+ fun logUdfpsPointerDown(sensorId: Int) {
+ logBuffer.log(TAG, DEBUG,
+ { int1 = sensorId },
+ { "onUdfpsPointerDown, sensorId: $int1" })
+ }
+ fun logUdfpsPointerUp(sensorId: Int) {
+ logBuffer.log(TAG, DEBUG,
+ { int1 = sensorId },
+ { "onUdfpsPointerUp, sensorId: $int1" })
+ }
+
+ fun logUnexpectedFaceCancellationSignalState(faceRunningState: Int, unlockPossible: Boolean) {
+ logBuffer.log(TAG, ERROR, {
+ int1 = faceRunningState
+ bool1 = unlockPossible
+ }, {
+ "Cancellation signal is not null, high chance of bug in " +
+ "face auth lifecycle management. " +
+ "Face state: $int1, unlockPossible: $bool1"
+ })
+ }
+
+ fun logUnexpectedFpCancellationSignalState(
+ fingerprintRunningState: Int,
+ unlockPossible: Boolean
+ ) {
+ logBuffer.log(TAG, ERROR, {
+ int1 = fingerprintRunningState
+ bool1 = unlockPossible
+ }, {
+ "Cancellation signal is not null, high chance of bug in " +
+ "fp auth lifecycle management. FP state: $int1, unlockPossible: $bool1"
+ })
+ }
+
+ fun logUnregisterCallback(callback: KeyguardUpdateMonitorCallback?) {
+ logBuffer.log(TAG, VERBOSE,
+ { str1 = "$callback" },
+ { "*** unregister callback for $str1" })
+ }
+
+ fun logUserRequestedUnlock(
+ requestOrigin: ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN,
+ reason: String,
+ dismissKeyguard: Boolean
+ ) {
+ logBuffer.log("ActiveUnlock", DEBUG, {
+ str1 = requestOrigin.name
+ str2 = reason
+ bool1 = dismissKeyguard
+ }, { "reportUserRequestedUnlock origin=$str1 reason=$str2 dismissKeyguard=$bool1" })
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/log/dagger/KeyguardUpdateMonitorLog.kt b/packages/SystemUI/src/com/android/systemui/log/dagger/KeyguardUpdateMonitorLog.kt
new file mode 100644
index 000000000000..323ee21953ea
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/log/dagger/KeyguardUpdateMonitorLog.kt
@@ -0,0 +1,4 @@
+package com.android.systemui.log.dagger
+
+/** A [com.android.systemui.log.LogBuffer] for KeyguardUpdateMonitor. */
+annotation class KeyguardUpdateMonitorLog
diff --git a/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java b/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java
index d0da18aaba05..c72c93222362 100644
--- a/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java
+++ b/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java
@@ -277,4 +277,14 @@ public class LogModule {
public static LogBuffer provideStatusBarNetworkControllerBuffer(LogBufferFactory factory) {
return factory.create("StatusBarNetworkControllerLog", 20);
}
+
+ /**
+ * Provides a {@link LogBuffer} for use by {@link com.android.keyguard.KeyguardUpdateMonitor}.
+ */
+ @Provides
+ @SysUISingleton
+ @KeyguardUpdateMonitorLog
+ public static LogBuffer provideKeyguardUpdateMonitorLogBuffer(LogBufferFactory factory) {
+ return factory.create("KeyguardUpdateMonitorLog", 200);
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
index 84903d17852f..85ecfd3056ff 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
@@ -86,6 +86,7 @@ import com.android.internal.util.LatencyTracker;
import com.android.internal.widget.ILockSettings;
import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.KeyguardUpdateMonitor.BiometricAuthenticated;
+import com.android.keyguard.logging.KeyguardUpdateMonitorLogger;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.biometrics.AuthController;
import com.android.systemui.broadcast.BroadcastDispatcher;
@@ -179,6 +180,8 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
private KeyguardUpdateMonitorCallback mTestCallback;
@Mock
private ActiveUnlockConfig mActiveUnlockConfig;
+ @Mock
+ private KeyguardUpdateMonitorLogger mKeyguardUpdateMonitorLogger;
// Direct executor
private Executor mBackgroundExecutor = Runnable::run;
private Executor mMainExecutor = Runnable::run;
@@ -1189,7 +1192,8 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
mBackgroundExecutor, mMainExecutor,
mStatusBarStateController, mLockPatternUtils,
mAuthController, mTelephonyListenerManager,
- mInteractionJankMonitor, mLatencyTracker, mActiveUnlockConfig);
+ mInteractionJankMonitor, mLatencyTracker, mActiveUnlockConfig,
+ mKeyguardUpdateMonitorLogger);
setStrongAuthTracker(KeyguardUpdateMonitorTest.this.mStrongAuthTracker);
}