From e91e39b6043e728e76a6d16b31e623da65369056 Mon Sep 17 00:00:00 2001 From: Kevin Chyn Date: Tue, 9 Mar 2021 13:16:58 -0800 Subject: [PATCH 1/2] Update revokeChallenge together with frameworks/base Bug: 181977689 Test: Inspect logs Change-Id: I588ec46896d57d89489f78505a6f2c932462b2d2 --- .../settings/biometrics/BiometricEnrollBase.java | 10 ++++++++++ .../biometrics/BiometricEnrollIntroduction.java | 6 ++++++ .../biometrics/MultiBiometricEnrollHelper.java | 2 ++ .../settings/biometrics/face/FaceEnrollEducation.java | 2 ++ .../biometrics/face/FaceEnrollIntroduction.java | 2 ++ .../android/settings/biometrics/face/FaceSettings.java | 9 ++++++++- 6 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/biometrics/BiometricEnrollBase.java b/src/com/android/settings/biometrics/BiometricEnrollBase.java index 3fb89411190..74ed66c1755 100644 --- a/src/com/android/settings/biometrics/BiometricEnrollBase.java +++ b/src/com/android/settings/biometrics/BiometricEnrollBase.java @@ -48,6 +48,8 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity { public static final String EXTRA_KEY_LAUNCHED_CONFIRM = "launched_confirm_lock"; public static final String EXTRA_KEY_REQUIRE_VISION = "accessibility_vision"; public static final String EXTRA_KEY_REQUIRE_DIVERSITY = "accessibility_diversity"; + public static final String EXTRA_KEY_SENSOR_ID = "sensor_id"; + public static final String EXTRA_KEY_CHALLENGE = "challenge"; /** * Used by the choose fingerprint wizard to indicate the wizard is @@ -90,6 +92,8 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity { protected boolean mLaunchedConfirmLock; protected byte[] mToken; protected int mUserId; + protected int mSensorId; + protected long mChallenge; protected boolean mFromSettingsSummary; protected FooterBarMixin mFooterBarMixin; @@ -102,6 +106,8 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity { if (mToken == null) { mToken = getIntent().getByteArrayExtra( ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN); + mChallenge = getIntent().getLongExtra(EXTRA_KEY_CHALLENGE, 0L); + mSensorId = getIntent().getIntExtra(EXTRA_KEY_SENSOR_ID, -1); } mFromSettingsSummary = getIntent().getBooleanExtra(EXTRA_FROM_SETTINGS_SUMMARY, false); if (savedInstanceState != null && mToken == null) { @@ -110,6 +116,8 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity { ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN); mFromSettingsSummary = savedInstanceState.getBoolean(EXTRA_FROM_SETTINGS_SUMMARY, false); + mChallenge = savedInstanceState.getLong(EXTRA_KEY_CHALLENGE); + mSensorId = savedInstanceState.getInt(EXTRA_KEY_SENSOR_ID); } mUserId = getIntent().getIntExtra(Intent.EXTRA_USER_ID, UserHandle.myUserId()); } @@ -127,6 +135,8 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity { outState.putBoolean(EXTRA_KEY_LAUNCHED_CONFIRM, mLaunchedConfirmLock); outState.putByteArray(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, mToken); outState.putBoolean(EXTRA_FROM_SETTINGS_SUMMARY, mFromSettingsSummary); + outState.putLong(EXTRA_KEY_CHALLENGE, mChallenge); + outState.putInt(EXTRA_KEY_SENSOR_ID, mSensorId); } @Override diff --git a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java index 09344b0d0dd..b44c2c9da1a 100644 --- a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java +++ b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java @@ -243,6 +243,8 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase } BiometricUtils.copyMultiBiometricExtras(getIntent(), intent); intent.putExtra(EXTRA_FROM_SETTINGS_SUMMARY, mFromSettingsSummary); + intent.putExtra(EXTRA_KEY_CHALLENGE, mChallenge); + intent.putExtra(EXTRA_KEY_SENSOR_ID, mSensorId); startActivityForResult(intent, BIOMETRIC_FIND_SENSOR_REQUEST); } @@ -262,6 +264,8 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase overridePendingTransition(R.anim.sud_slide_next_in, R.anim.sud_slide_next_out); getNextButton().setEnabled(false); getChallenge(((sensorId, challenge) -> { + mSensorId = sensorId; + mChallenge = challenge; mToken = BiometricUtils.requestGatekeeperHat(this, data, mUserId, challenge); BiometricUtils.removeGatekeeperPasswordHandle(this, data); getNextButton().setEnabled(true); @@ -276,6 +280,8 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase overridePendingTransition(R.anim.sud_slide_next_in, R.anim.sud_slide_next_out); getNextButton().setEnabled(false); getChallenge(((sensorId, challenge) -> { + mSensorId = sensorId; + mChallenge = challenge; mToken = BiometricUtils.requestGatekeeperHat(this, data, mUserId, challenge); BiometricUtils.removeGatekeeperPasswordHandle(this, data); getNextButton().setEnabled(true); diff --git a/src/com/android/settings/biometrics/MultiBiometricEnrollHelper.java b/src/com/android/settings/biometrics/MultiBiometricEnrollHelper.java index 1ea6b08ac20..d32dc8b0a6e 100644 --- a/src/com/android/settings/biometrics/MultiBiometricEnrollHelper.java +++ b/src/com/android/settings/biometrics/MultiBiometricEnrollHelper.java @@ -72,6 +72,8 @@ public class MultiBiometricEnrollHelper { mGkPwHandle, mUserId, challenge); final Intent faceIntent = BiometricUtils.getFaceIntroIntent(mActivity, mActivity.getIntent()); + faceIntent.putExtra(BiometricEnrollBase.EXTRA_KEY_SENSOR_ID, sensorId); + faceIntent.putExtra(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, challenge); if (mRequestEnrollFingerprint) { // Give FaceEnroll a pendingIntent pointing to fingerprint enrollment, so that it diff --git a/src/com/android/settings/biometrics/face/FaceEnrollEducation.java b/src/com/android/settings/biometrics/face/FaceEnrollEducation.java index 3e9fba281a9..6c5a4b473ed 100644 --- a/src/com/android/settings/biometrics/face/FaceEnrollEducation.java +++ b/src/com/android/settings/biometrics/face/FaceEnrollEducation.java @@ -183,6 +183,8 @@ public class FaceEnrollEducation extends BiometricEnrollBase { if (mUserId != UserHandle.USER_NULL) { intent.putExtra(Intent.EXTRA_USER_ID, mUserId); } + intent.putExtra(EXTRA_KEY_CHALLENGE, mChallenge); + intent.putExtra(EXTRA_KEY_SENSOR_ID, mSensorId); intent.putExtra(EXTRA_FROM_SETTINGS_SUMMARY, mFromSettingsSummary); BiometricUtils.copyMultiBiometricExtras(getIntent(), intent); final String flattenedString = getString(R.string.config_face_enroll); diff --git a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java index 3bffbbf9cbf..9110292b2b3 100644 --- a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java +++ b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java @@ -112,6 +112,8 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction { // the challenge is ready. Let's just do this for now. mFaceManager.generateChallenge((sensorId, challenge) -> { mToken = BiometricUtils.requestGatekeeperHat(this, getIntent(), mUserId, challenge); + mSensorId = sensorId; + mChallenge = challenge; if (BiometricUtils.isMultiBiometricEnrollmentFlow(this)) { BiometricUtils.removeGatekeeperPasswordHandle(this, getIntent()); } diff --git a/src/com/android/settings/biometrics/face/FaceSettings.java b/src/com/android/settings/biometrics/face/FaceSettings.java index 775148532f2..038d448bfda 100644 --- a/src/com/android/settings/biometrics/face/FaceSettings.java +++ b/src/com/android/settings/biometrics/face/FaceSettings.java @@ -37,6 +37,7 @@ import androidx.preference.Preference; import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.Utils; +import com.android.settings.biometrics.BiometricEnrollBase; import com.android.settings.biometrics.BiometricUtils; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.overlay.FeatureFactory; @@ -67,6 +68,8 @@ public class FaceSettings extends DashboardFragment { private UserManager mUserManager; private FaceManager mFaceManager; private int mUserId; + private int mSensorId; + private long mChallenge; private byte[] mToken; private FaceSettingsAttentionPreferenceController mAttentionController; private FaceSettingsRemoveButtonPreferenceController mRemoveController; @@ -147,6 +150,8 @@ public class FaceSettings extends DashboardFragment { mUserManager = context.getSystemService(UserManager.class); mFaceManager = context.getSystemService(FaceManager.class); mToken = getIntent().getByteArrayExtra(KEY_TOKEN); + mSensorId = getIntent().getIntExtra(BiometricEnrollBase.EXTRA_KEY_SENSOR_ID, -1); + mChallenge = getIntent().getLongExtra(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, 0L); mUserId = getActivity().getIntent().getIntExtra( Intent.EXTRA_USER_ID, UserHandle.myUserId()); @@ -247,6 +252,8 @@ public class FaceSettings extends DashboardFragment { mFaceManager.generateChallenge((sensorId, challenge) -> { mToken = BiometricUtils.requestGatekeeperHat(getPrefContext(), data, mUserId, challenge); + mSensorId = sensorId; + mChallenge = challenge; BiometricUtils.removeGatekeeperPasswordHandle(getPrefContext(), data); mAttentionController.setToken(mToken); mEnrollController.setToken(mToken); @@ -269,7 +276,7 @@ public class FaceSettings extends DashboardFragment { && !mConfirmingPassword) { // Revoke challenge and finish if (mToken != null) { - mFaceManager.revokeChallenge(); + mFaceManager.revokeChallenge(mSensorId, mUserId, mChallenge); mToken = null; } finish(); From 39b2fe8bd5940ec8d3014bcc0f8011de7aba7d96 Mon Sep 17 00:00:00 2001 From: Kevin Chyn Date: Tue, 9 Mar 2021 17:22:39 -0800 Subject: [PATCH 2/2] Update fingerprint revokeChallenge with frameworks/base Bug: 181977689 Test: manual Change-Id: I92e6dae58d67f1355c6d0ba3bbf95ff2ad5247ed --- .../android/settings/biometrics/BiometricEnrollBase.java | 6 ++++-- .../settings/biometrics/BiometricsEnrollEnrolling.java | 2 ++ .../settings/biometrics/MultiBiometricEnrollHelper.java | 2 ++ .../fingerprint/FingerprintEnrollFindSensor.java | 2 ++ .../biometrics/fingerprint/FingerprintEnrollFinish.java | 3 ++- .../biometrics/fingerprint/FingerprintSettings.java | 7 ++++++- .../fingerprint/SetupFingerprintEnrollFindSensor.java | 2 ++ 7 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/biometrics/BiometricEnrollBase.java b/src/com/android/settings/biometrics/BiometricEnrollBase.java index 74ed66c1755..0bdf27d3abb 100644 --- a/src/com/android/settings/biometrics/BiometricEnrollBase.java +++ b/src/com/android/settings/biometrics/BiometricEnrollBase.java @@ -100,14 +100,14 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + mChallenge = getIntent().getLongExtra(EXTRA_KEY_CHALLENGE, -1L); + mSensorId = getIntent().getIntExtra(EXTRA_KEY_SENSOR_ID, -1); // Don't need to retrieve the HAT if it already exists. In some cases, the extras do not // contain EXTRA_KEY_CHALLENGE_TOKEN but contain EXTRA_KEY_GK_PW, in which case enrollment // classes may request a HAT to be created (as opposed to being passed in) if (mToken == null) { mToken = getIntent().getByteArrayExtra( ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN); - mChallenge = getIntent().getLongExtra(EXTRA_KEY_CHALLENGE, 0L); - mSensorId = getIntent().getIntExtra(EXTRA_KEY_SENSOR_ID, -1); } mFromSettingsSummary = getIntent().getBooleanExtra(EXTRA_FROM_SETTINGS_SUMMARY, false); if (savedInstanceState != null && mToken == null) { @@ -202,6 +202,8 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity { intent.setClassName(SETTINGS_PACKAGE_NAME, FingerprintEnrollEnrolling.class.getName()); intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, mToken); intent.putExtra(EXTRA_FROM_SETTINGS_SUMMARY, mFromSettingsSummary); + intent.putExtra(EXTRA_KEY_CHALLENGE, mChallenge); + intent.putExtra(EXTRA_KEY_SENSOR_ID, mSensorId); if (mUserId != UserHandle.USER_NULL) { intent.putExtra(Intent.EXTRA_USER_ID, mUserId); } diff --git a/src/com/android/settings/biometrics/BiometricsEnrollEnrolling.java b/src/com/android/settings/biometrics/BiometricsEnrollEnrolling.java index 9b86e78eff9..0bfe56e36a1 100644 --- a/src/com/android/settings/biometrics/BiometricsEnrollEnrolling.java +++ b/src/com/android/settings/biometrics/BiometricsEnrollEnrolling.java @@ -121,6 +121,8 @@ public abstract class BiometricsEnrollEnrolling extends BiometricEnrollBase | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token); + intent.putExtra(BiometricEnrollBase.EXTRA_KEY_SENSOR_ID, mSensorId); + intent.putExtra(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, mChallenge); intent.putExtra(EXTRA_FROM_SETTINGS_SUMMARY, mFromSettingsSummary); if (mUserId != UserHandle.USER_NULL) { intent.putExtra(Intent.EXTRA_USER_ID, mUserId); diff --git a/src/com/android/settings/biometrics/MultiBiometricEnrollHelper.java b/src/com/android/settings/biometrics/MultiBiometricEnrollHelper.java index d32dc8b0a6e..84128e23e7b 100644 --- a/src/com/android/settings/biometrics/MultiBiometricEnrollHelper.java +++ b/src/com/android/settings/biometrics/MultiBiometricEnrollHelper.java @@ -99,6 +99,8 @@ public class MultiBiometricEnrollHelper { mGkPwHandle, mUserId, challenge); final Intent intent = BiometricUtils.getFingerprintIntroIntent(mActivity, mActivity.getIntent()); + intent.putExtra(BiometricEnrollBase.EXTRA_KEY_SENSOR_ID, sensorId); + intent.putExtra(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, challenge); BiometricUtils.launchEnrollForResult(mActivity, intent, REQUEST_FINGERPRINT_ENROLL, hardwareAuthToken, mGkPwHandle, mUserId); })); diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java index 094336a5c84..94eb2780bee 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java @@ -81,6 +81,8 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase { if (mToken == null && BiometricUtils.containsGatekeeperPasswordHandle(getIntent())) { final FingerprintManager fpm = getSystemService(FingerprintManager.class); fpm.generateChallenge(mUserId, (sensorId, challenge) -> { + mChallenge = challenge; + mSensorId = sensorId; mToken = BiometricUtils.requestGatekeeperHat(this, getIntent(), mUserId, challenge); BiometricUtils.removeGatekeeperPasswordHandle(this, getIntent()); diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java index 3adbd0d25d5..25d3f475aa4 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java @@ -140,7 +140,7 @@ public class FingerprintEnrollFinish extends BiometricEnrollBase { private void postEnroll() { final FingerprintManager fpm = Utils.getFingerprintManagerOrNull(this); if (fpm != null) { - fpm.revokeChallenge(mUserId); + fpm.revokeChallenge(mUserId, mChallenge); } } @@ -150,6 +150,7 @@ public class FingerprintEnrollFinish extends BiometricEnrollBase { intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, mToken); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); intent.putExtra(Intent.EXTRA_USER_ID, mUserId); + intent.putExtra(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, mChallenge); startActivity(intent); } diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java index 88920ad4a6e..738efdbb841 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java @@ -138,6 +138,8 @@ public class FingerprintSettings extends SubSettings { private CharSequence mFooterTitle; private boolean mEnrollClicked; + private long mChallenge; + private static final String TAG_AUTHENTICATE_SIDECAR = "authenticate_sidecar"; private static final String TAG_REMOVAL_SIDECAR = "removal_sidecar"; private FingerprintAuthenticateSidecar mAuthenticateSidecar; @@ -284,6 +286,8 @@ public class FingerprintSettings extends SubSettings { mToken = getIntent().getByteArrayExtra( ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN); + mChallenge = activity.getIntent() + .getLongExtra(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, -1L); mAuthenticateSidecar = (FingerprintAuthenticateSidecar) getFragmentManager().findFragmentByTag(TAG_AUTHENTICATE_SIDECAR); @@ -574,6 +578,7 @@ public class FingerprintSettings extends SubSettings { mFingerprintManager.generateChallenge(mUserId, (sensorId, challenge) -> { mToken = BiometricUtils.requestGatekeeperHat(getActivity(), data, mUserId, challenge); + mChallenge = challenge; BiometricUtils.removeGatekeeperPasswordHandle(getActivity(), data); updateAddPreference(); }); @@ -599,7 +604,7 @@ public class FingerprintSettings extends SubSettings { public void onDestroy() { super.onDestroy(); if (getActivity().isFinishing()) { - mFingerprintManager.revokeChallenge(mUserId); + mFingerprintManager.revokeChallenge(mUserId, mChallenge); } } diff --git a/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFindSensor.java b/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFindSensor.java index 394b6733786..5f2fbb553db 100644 --- a/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFindSensor.java +++ b/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFindSensor.java @@ -40,6 +40,8 @@ public class SetupFingerprintEnrollFindSensor extends FingerprintEnrollFindSenso protected Intent getFingerprintEnrollingIntent() { Intent intent = new Intent(this, SetupFingerprintEnrollEnrolling.class); intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, mToken); + intent.putExtra(EXTRA_KEY_CHALLENGE, mChallenge); + intent.putExtra(EXTRA_KEY_SENSOR_ID, mSensorId); if (mUserId != UserHandle.USER_NULL) { intent.putExtra(Intent.EXTRA_USER_ID, mUserId); }