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); }