Add userId parameter to all uses of challenge in settings.

Bug: 184915229

Test: manually on device (as normal, extra user, & work profile)
Change-Id: Id509b5866d53525b38a5bb95bbbcc723d6651745
This commit is contained in:
Joe Bolinger
2021-05-07 19:18:16 -07:00
parent e19d238d18
commit 971f0f3c5a
8 changed files with 22 additions and 19 deletions

View File

@@ -126,7 +126,7 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
public abstract void onClick(LinkSpan span); public abstract void onClick(LinkSpan span);
protected interface GenerateChallengeCallback { protected interface GenerateChallengeCallback {
void onChallengeGenerated(int sensorId, long challenge); void onChallengeGenerated(int sensorId, int userId, long challenge);
} }
@Override @Override
@@ -261,7 +261,7 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
updatePasswordQuality(); updatePasswordQuality();
overridePendingTransition(R.anim.sud_slide_next_in, R.anim.sud_slide_next_out); overridePendingTransition(R.anim.sud_slide_next_in, R.anim.sud_slide_next_out);
getNextButton().setEnabled(false); getNextButton().setEnabled(false);
getChallenge(((sensorId, challenge) -> { getChallenge(((sensorId, userId, challenge) -> {
mSensorId = sensorId; mSensorId = sensorId;
mChallenge = challenge; mChallenge = challenge;
mToken = BiometricUtils.requestGatekeeperHat(this, data, mUserId, challenge); mToken = BiometricUtils.requestGatekeeperHat(this, data, mUserId, challenge);
@@ -277,7 +277,7 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
if (resultCode == RESULT_OK && data != null) { if (resultCode == RESULT_OK && data != null) {
overridePendingTransition(R.anim.sud_slide_next_in, R.anim.sud_slide_next_out); overridePendingTransition(R.anim.sud_slide_next_in, R.anim.sud_slide_next_out);
getNextButton().setEnabled(false); getNextButton().setEnabled(false);
getChallenge(((sensorId, challenge) -> { getChallenge(((sensorId, userId, challenge) -> {
mSensorId = sensorId; mSensorId = sensorId;
mChallenge = challenge; mChallenge = challenge;
mToken = BiometricUtils.requestGatekeeperHat(this, data, mUserId, challenge); mToken = BiometricUtils.requestGatekeeperHat(this, data, mUserId, challenge);

View File

@@ -67,7 +67,7 @@ public class MultiBiometricEnrollHelper {
private void launchFaceEnroll() { private void launchFaceEnroll() {
final FaceManager faceManager = mActivity.getSystemService(FaceManager.class); final FaceManager faceManager = mActivity.getSystemService(FaceManager.class);
faceManager.generateChallenge((sensorId, challenge) -> { faceManager.generateChallenge(mUserId, (sensorId, userId, challenge) -> {
final byte[] hardwareAuthToken = BiometricUtils.requestGatekeeperHat(mActivity, final byte[] hardwareAuthToken = BiometricUtils.requestGatekeeperHat(mActivity,
mGkPwHandle, mUserId, challenge); mGkPwHandle, mUserId, challenge);
final Intent faceIntent = BiometricUtils.getFaceIntroIntent(mActivity, final Intent faceIntent = BiometricUtils.getFaceIntroIntent(mActivity,
@@ -96,7 +96,7 @@ public class MultiBiometricEnrollHelper {
private void launchFingerprintEnroll() { private void launchFingerprintEnroll() {
final FingerprintManager fingerprintManager = mActivity final FingerprintManager fingerprintManager = mActivity
.getSystemService(FingerprintManager.class); .getSystemService(FingerprintManager.class);
fingerprintManager.generateChallenge(mUserId, ((sensorId, challenge) -> { fingerprintManager.generateChallenge(mUserId, ((sensorId, userId, challenge) -> {
final byte[] hardwareAuthToken = BiometricUtils.requestGatekeeperHat(mActivity, final byte[] hardwareAuthToken = BiometricUtils.requestGatekeeperHat(mActivity,
mGkPwHandle, mUserId, challenge); mGkPwHandle, mUserId, challenge);
final Intent intent = BiometricUtils.getFingerprintIntroIntent(mActivity, final Intent intent = BiometricUtils.getFingerprintIntroIntent(mActivity,

View File

@@ -115,7 +115,7 @@ public abstract class BiometricsSettingsBase extends DashboardFragment {
// since FingerprintSettings and FaceSettings revoke the challenge when finishing. // since FingerprintSettings and FaceSettings revoke the challenge when finishing.
if (getFacePreferenceKey().equals(key)) { if (getFacePreferenceKey().equals(key)) {
mDoNotFinishActivity = true; mDoNotFinishActivity = true;
mFaceManager.generateChallenge((sensorId, challenge) -> { mFaceManager.generateChallenge(mUserId, (sensorId, userId, challenge) -> {
final byte[] token = BiometricUtils.requestGatekeeperHat(getActivity(), mGkPwHandle, final byte[] token = BiometricUtils.requestGatekeeperHat(getActivity(), mGkPwHandle,
mUserId, challenge); mUserId, challenge);
final Bundle extras = preference.getExtras(); final Bundle extras = preference.getExtras();
@@ -125,7 +125,7 @@ public abstract class BiometricsSettingsBase extends DashboardFragment {
}); });
} else if (getFingerprintPreferenceKey().equals(key)) { } else if (getFingerprintPreferenceKey().equals(key)) {
mDoNotFinishActivity = true; mDoNotFinishActivity = true;
mFingerprintManager.generateChallenge(mUserId, (sensorId, challenge) -> { mFingerprintManager.generateChallenge(mUserId, (sensorId, userId, challenge) -> {
final byte[] token = BiometricUtils.requestGatekeeperHat(getActivity(), mGkPwHandle, final byte[] token = BiometricUtils.requestGatekeeperHat(getActivity(), mGkPwHandle,
mUserId, challenge); mUserId, challenge);
final Bundle extras = preference.getExtras(); final Bundle extras = preference.getExtras();

View File

@@ -110,7 +110,7 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction {
mFooterBarMixin.getPrimaryButton().setEnabled(false); mFooterBarMixin.getPrimaryButton().setEnabled(false);
// We either block on generateChallenge, or need to gray out the "next" button until // We either block on generateChallenge, or need to gray out the "next" button until
// the challenge is ready. Let's just do this for now. // the challenge is ready. Let's just do this for now.
mFaceManager.generateChallenge((sensorId, challenge) -> { mFaceManager.generateChallenge(mUserId, (sensorId, userId, challenge) -> {
mToken = BiometricUtils.requestGatekeeperHat(this, getIntent(), mUserId, challenge); mToken = BiometricUtils.requestGatekeeperHat(this, getIntent(), mUserId, challenge);
mSensorId = sensorId; mSensorId = sensorId;
mChallenge = challenge; mChallenge = challenge;
@@ -196,10 +196,10 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction {
protected void getChallenge(GenerateChallengeCallback callback) { protected void getChallenge(GenerateChallengeCallback callback) {
mFaceManager = Utils.getFaceManagerOrNull(this); mFaceManager = Utils.getFaceManagerOrNull(this);
if (mFaceManager == null) { if (mFaceManager == null) {
callback.onChallengeGenerated(0, 0L); callback.onChallengeGenerated(0, 0, 0L);
return; return;
} }
mFaceManager.generateChallenge(callback::onChallengeGenerated); mFaceManager.generateChallenge(mUserId, callback::onChallengeGenerated);
} }
@Override @Override

View File

@@ -249,7 +249,7 @@ public class FaceSettings extends DashboardFragment {
if (requestCode == CONFIRM_REQUEST) { if (requestCode == CONFIRM_REQUEST) {
if (resultCode == RESULT_FINISHED || resultCode == RESULT_OK) { if (resultCode == RESULT_FINISHED || resultCode == RESULT_OK) {
// The pin/pattern/password was set. // The pin/pattern/password was set.
mFaceManager.generateChallenge((sensorId, challenge) -> { mFaceManager.generateChallenge(mUserId, (sensorId, userId, challenge) -> {
mToken = BiometricUtils.requestGatekeeperHat(getPrefContext(), data, mUserId, mToken = BiometricUtils.requestGatekeeperHat(getPrefContext(), data, mUserId,
challenge); challenge);
mSensorId = sensorId; mSensorId = sensorId;

View File

@@ -81,7 +81,7 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements
// adb shell am start -a android.app.action.SET_NEW_PASSWORD // adb shell am start -a android.app.action.SET_NEW_PASSWORD
if (mToken == null && BiometricUtils.containsGatekeeperPasswordHandle(getIntent())) { if (mToken == null && BiometricUtils.containsGatekeeperPasswordHandle(getIntent())) {
final FingerprintManager fpm = getSystemService(FingerprintManager.class); final FingerprintManager fpm = getSystemService(FingerprintManager.class);
fpm.generateChallenge(mUserId, (sensorId, challenge) -> { fpm.generateChallenge(mUserId, (sensorId, userId, challenge) -> {
mChallenge = challenge; mChallenge = challenge;
mSensorId = sensorId; mSensorId = sensorId;
mToken = BiometricUtils.requestGatekeeperHat(this, getIntent(), mUserId, challenge); mToken = BiometricUtils.requestGatekeeperHat(this, getIntent(), mUserId, challenge);

View File

@@ -157,7 +157,7 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction {
protected void getChallenge(GenerateChallengeCallback callback) { protected void getChallenge(GenerateChallengeCallback callback) {
mFingerprintManager = Utils.getFingerprintManagerOrNull(this); mFingerprintManager = Utils.getFingerprintManagerOrNull(this);
if (mFingerprintManager == null) { if (mFingerprintManager == null) {
callback.onChallengeGenerated(0, 0L); callback.onChallengeGenerated(0, 0, 0L);
return; return;
} }
mFingerprintManager.generateChallenge(mUserId, callback::onChallengeGenerated); mFingerprintManager.generateChallenge(mUserId, callback::onChallengeGenerated);

View File

@@ -601,12 +601,15 @@ public class FingerprintSettings extends SubSettings {
mLaunchedConfirm = false; mLaunchedConfirm = false;
if (resultCode == RESULT_FINISHED || resultCode == RESULT_OK) { if (resultCode == RESULT_FINISHED || resultCode == RESULT_OK) {
if (data != null && BiometricUtils.containsGatekeeperPasswordHandle(data)) { if (data != null && BiometricUtils.containsGatekeeperPasswordHandle(data)) {
mFingerprintManager.generateChallenge(mUserId, (sensorId, challenge) -> { mFingerprintManager.generateChallenge(mUserId,
mToken = BiometricUtils.requestGatekeeperHat(getActivity(), data, (sensorId, userId, challenge) -> {
mUserId, challenge); mToken = BiometricUtils.requestGatekeeperHat(getActivity(),
mChallenge = challenge; data,
BiometricUtils.removeGatekeeperPasswordHandle(getActivity(), data); mUserId, challenge);
updateAddPreference(); mChallenge = challenge;
BiometricUtils.removeGatekeeperPasswordHandle(getActivity(),
data);
updateAddPreference();
}); });
} else { } else {
Log.d(TAG, "Data null or GK PW missing"); Log.d(TAG, "Data null or GK PW missing");