Log new auth-related framework atoms for Android 12
Adds logging to Settings for new authentication and biometric atoms introduced as part of ag/13856328. Test: Manually trigger each case and verify log statements are called. Bug: 185136248 Change-Id: Ic41a89da4f148dc94864f140e85b55f63643681b
This commit is contained in:
@@ -16,6 +16,9 @@
|
|||||||
|
|
||||||
package com.android.settings.biometrics;
|
package com.android.settings.biometrics;
|
||||||
|
|
||||||
|
import static android.provider.Settings.ACTION_BIOMETRIC_ENROLL;
|
||||||
|
import static android.provider.Settings.EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED;
|
||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
@@ -24,6 +27,7 @@ import android.content.pm.PackageManager;
|
|||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.hardware.biometrics.BiometricManager;
|
import android.hardware.biometrics.BiometricManager;
|
||||||
import android.hardware.biometrics.BiometricManager.Authenticators;
|
import android.hardware.biometrics.BiometricManager.Authenticators;
|
||||||
|
import android.hardware.biometrics.BiometricManager.BiometricError;
|
||||||
import android.hardware.face.FaceManager;
|
import android.hardware.face.FaceManager;
|
||||||
import android.hardware.face.FaceSensorPropertiesInternal;
|
import android.hardware.face.FaceSensorPropertiesInternal;
|
||||||
import android.hardware.fingerprint.FingerprintManager;
|
import android.hardware.fingerprint.FingerprintManager;
|
||||||
@@ -31,11 +35,11 @@ import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
import android.provider.Settings;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import com.android.internal.util.FrameworkStatsLog;
|
||||||
import com.android.internal.widget.LockPatternUtils;
|
import com.android.internal.widget.LockPatternUtils;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.SetupWizardUtils;
|
import com.android.settings.SetupWizardUtils;
|
||||||
@@ -68,12 +72,14 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
|
|||||||
public static final String EXTRA_SKIP_INTRO = "skip_intro";
|
public static final String EXTRA_SKIP_INTRO = "skip_intro";
|
||||||
|
|
||||||
private static final String SAVED_STATE_CONFIRMING_CREDENTIALS = "confirming_credentials";
|
private static final String SAVED_STATE_CONFIRMING_CREDENTIALS = "confirming_credentials";
|
||||||
|
private static final String SAVED_STATE_ENROLL_ACTION_LOGGED = "enroll_action_logged";
|
||||||
private static final String SAVED_STATE_GK_PW_HANDLE = "gk_pw_handle";
|
private static final String SAVED_STATE_GK_PW_HANDLE = "gk_pw_handle";
|
||||||
|
|
||||||
public static final class InternalActivity extends BiometricEnrollActivity {}
|
public static final class InternalActivity extends BiometricEnrollActivity {}
|
||||||
|
|
||||||
private int mUserId = UserHandle.myUserId();
|
private int mUserId = UserHandle.myUserId();
|
||||||
private boolean mConfirmingCredentials;
|
private boolean mConfirmingCredentials;
|
||||||
|
private boolean mIsEnrollActionLogged;
|
||||||
private boolean mIsFaceEnrollable;
|
private boolean mIsFaceEnrollable;
|
||||||
private boolean mIsFingerprintEnrollable;
|
private boolean mIsFingerprintEnrollable;
|
||||||
@Nullable private Long mGkPwHandle;
|
@Nullable private Long mGkPwHandle;
|
||||||
@@ -91,15 +97,44 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
mConfirmingCredentials = savedInstanceState
|
mConfirmingCredentials = savedInstanceState.getBoolean(
|
||||||
.getBoolean(SAVED_STATE_CONFIRMING_CREDENTIALS, false);
|
SAVED_STATE_CONFIRMING_CREDENTIALS, false);
|
||||||
|
mIsEnrollActionLogged = savedInstanceState.getBoolean(
|
||||||
|
SAVED_STATE_ENROLL_ACTION_LOGGED, false);
|
||||||
if (savedInstanceState.containsKey(SAVED_STATE_GK_PW_HANDLE)) {
|
if (savedInstanceState.containsKey(SAVED_STATE_GK_PW_HANDLE)) {
|
||||||
mGkPwHandle = savedInstanceState.getLong(SAVED_STATE_GK_PW_HANDLE);
|
mGkPwHandle = savedInstanceState.getLong(SAVED_STATE_GK_PW_HANDLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Put the theme in the intent so it gets propagated to other activities in the flow
|
// Log a framework stats event if this activity was launched via intent action.
|
||||||
final Intent intent = getIntent();
|
final Intent intent = getIntent();
|
||||||
|
if (!mIsEnrollActionLogged && ACTION_BIOMETRIC_ENROLL.equals(intent.getAction())) {
|
||||||
|
mIsEnrollActionLogged = true;
|
||||||
|
|
||||||
|
// Get the current status for each authenticator type.
|
||||||
|
@BiometricError final int strongBiometricStatus;
|
||||||
|
@BiometricError final int weakBiometricStatus;
|
||||||
|
@BiometricError final int deviceCredentialStatus;
|
||||||
|
final BiometricManager bm = getSystemService(BiometricManager.class);
|
||||||
|
if (bm != null) {
|
||||||
|
strongBiometricStatus = bm.canAuthenticate(Authenticators.BIOMETRIC_STRONG);
|
||||||
|
weakBiometricStatus = bm.canAuthenticate(Authenticators.BIOMETRIC_WEAK);
|
||||||
|
deviceCredentialStatus = bm.canAuthenticate(Authenticators.DEVICE_CREDENTIAL);
|
||||||
|
} else {
|
||||||
|
strongBiometricStatus = BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE;
|
||||||
|
weakBiometricStatus = BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE;
|
||||||
|
deviceCredentialStatus = BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE;
|
||||||
|
}
|
||||||
|
|
||||||
|
FrameworkStatsLog.write(FrameworkStatsLog.AUTH_ENROLL_ACTION_INVOKED,
|
||||||
|
strongBiometricStatus == BiometricManager.BIOMETRIC_SUCCESS,
|
||||||
|
weakBiometricStatus == BiometricManager.BIOMETRIC_SUCCESS,
|
||||||
|
deviceCredentialStatus == BiometricManager.BIOMETRIC_SUCCESS,
|
||||||
|
intent.hasExtra(EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED),
|
||||||
|
intent.getIntExtra(EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Put the theme in the intent so it gets propagated to other activities in the flow
|
||||||
if (intent.getStringExtra(WizardManagerHelper.EXTRA_THEME) == null) {
|
if (intent.getStringExtra(WizardManagerHelper.EXTRA_THEME) == null) {
|
||||||
intent.putExtra(
|
intent.putExtra(
|
||||||
WizardManagerHelper.EXTRA_THEME,
|
WizardManagerHelper.EXTRA_THEME,
|
||||||
@@ -108,7 +143,7 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
|
|||||||
|
|
||||||
// Default behavior is to enroll BIOMETRIC_WEAK or above. See ACTION_BIOMETRIC_ENROLL.
|
// Default behavior is to enroll BIOMETRIC_WEAK or above. See ACTION_BIOMETRIC_ENROLL.
|
||||||
final int authenticators = intent.getIntExtra(
|
final int authenticators = intent.getIntExtra(
|
||||||
Settings.EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED, Authenticators.BIOMETRIC_WEAK);
|
EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED, Authenticators.BIOMETRIC_WEAK);
|
||||||
|
|
||||||
Log.d(TAG, "Authenticators: " + authenticators);
|
Log.d(TAG, "Authenticators: " + authenticators);
|
||||||
|
|
||||||
@@ -132,7 +167,7 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
|
|||||||
} else {
|
} else {
|
||||||
// If the caller is not setup wizard, and the user has something enrolled, finish.
|
// If the caller is not setup wizard, and the user has something enrolled, finish.
|
||||||
final BiometricManager bm = getSystemService(BiometricManager.class);
|
final BiometricManager bm = getSystemService(BiometricManager.class);
|
||||||
final @BiometricManager.BiometricError int result = bm.canAuthenticate(authenticators);
|
final @BiometricError int result = bm.canAuthenticate(authenticators);
|
||||||
if (result != BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED) {
|
if (result != BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED) {
|
||||||
Log.e(TAG, "Unexpected result: " + result);
|
Log.e(TAG, "Unexpected result: " + result);
|
||||||
finish();
|
finish();
|
||||||
@@ -159,6 +194,7 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
|
|||||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
outState.putBoolean(SAVED_STATE_CONFIRMING_CREDENTIALS, mConfirmingCredentials);
|
outState.putBoolean(SAVED_STATE_CONFIRMING_CREDENTIALS, mConfirmingCredentials);
|
||||||
|
outState.putBoolean(SAVED_STATE_ENROLL_ACTION_LOGGED, mIsEnrollActionLogged);
|
||||||
if (mGkPwHandle != null) {
|
if (mGkPwHandle != null) {
|
||||||
outState.putLong(SAVED_STATE_GK_PW_HANDLE, mGkPwHandle);
|
outState.putLong(SAVED_STATE_GK_PW_HANDLE, mGkPwHandle);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user