Request enroll or verify lock before FP enroll
Also pipe through challenge token Change-Id: I9d6afdbadf3832aeeb18a0b5a9620277e2070872
This commit is contained in:
@@ -170,15 +170,7 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
|
||||
|
||||
@Override
|
||||
protected void authenticationSucceeded(@Nullable String password) {
|
||||
Intent intent = new Intent();
|
||||
if (getActivity() instanceof ConfirmLockPassword.InternalActivity) {
|
||||
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_TYPE,
|
||||
mIsAlpha ? StorageManager.CRYPT_TYPE_PASSWORD
|
||||
: StorageManager.CRYPT_TYPE_PIN);
|
||||
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD, password);
|
||||
}
|
||||
getActivity().setResult(RESULT_OK, intent);
|
||||
getActivity().finish();
|
||||
// TODO: make this play nice with challenge
|
||||
}
|
||||
|
||||
private void handleNext() {
|
||||
@@ -208,7 +200,6 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
|
||||
}
|
||||
|
||||
if (matched) {
|
||||
authenticationSucceeded(pin);
|
||||
getActivity().setResult(RESULT_OK, intent);
|
||||
getActivity().finish();
|
||||
} else {
|
||||
|
@@ -233,14 +233,7 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity {
|
||||
|
||||
@Override
|
||||
protected void authenticationSucceeded(@Nullable String password) {
|
||||
Intent intent = new Intent();
|
||||
if (getActivity() instanceof ConfirmLockPattern.InternalActivity) {
|
||||
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_TYPE,
|
||||
StorageManager.CRYPT_TYPE_PATTERN);
|
||||
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD, password);
|
||||
}
|
||||
getActivity().setResult(Activity.RESULT_OK, intent);
|
||||
getActivity().finish();
|
||||
// TODO: make this play nice with challenge
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -299,7 +292,6 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity {
|
||||
}
|
||||
|
||||
if (matched) {
|
||||
authenticationSucceeded(LockPatternUtils.patternToString(pattern));
|
||||
getActivity().setResult(Activity.RESULT_OK, intent);
|
||||
getActivity().finish();
|
||||
} else {
|
||||
|
@@ -105,6 +105,7 @@ public class FingerprintEnroll extends SettingsActivity {
|
||||
private ProgressBar mProgressBar;
|
||||
private ImageView mFingerprintAnimator;
|
||||
private ObjectAnimator mProgressAnim;
|
||||
private byte[] mToken;
|
||||
|
||||
// Give the user a chance to see progress completed before jumping to the next stage.
|
||||
Runnable mDelayedFinishRunnable = new Runnable() {
|
||||
@@ -253,8 +254,8 @@ public class FingerprintEnroll extends SettingsActivity {
|
||||
|
||||
case EnrollingStart:
|
||||
mEnrollmentSteps = -1;
|
||||
long challenge = 0x12345; // TODO: get from keyguard confirmation
|
||||
mFingerprintManager.enroll(challenge, mEnrollmentCancel, mEnrollmentCallback, 0);
|
||||
// TODO: pass in mToken
|
||||
mFingerprintManager.enroll(0, mEnrollmentCancel, mEnrollmentCallback, 0);
|
||||
mProgressBar.setProgress(0);
|
||||
mEnrolling = true;
|
||||
startFingerprintAnimator(); // XXX hack - this should follow fingerprint detection
|
||||
@@ -350,9 +351,12 @@ public class FingerprintEnroll extends SettingsActivity {
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
|
||||
if (requestCode == CHOOSE_LOCK_GENERIC_REQUEST) {
|
||||
if (resultCode == RESULT_FINISHED) {
|
||||
if (requestCode == CHOOSE_LOCK_GENERIC_REQUEST
|
||||
|| requestCode == CONFIRM_REQUEST) {
|
||||
if (resultCode == RESULT_FINISHED || resultCode == RESULT_OK) {
|
||||
// The lock pin/pattern/password was set. Start enrolling!
|
||||
mToken = data.getByteArrayExtra(
|
||||
ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN);
|
||||
updateStage(Stage.EnrollingFindSensor);
|
||||
}
|
||||
}
|
||||
@@ -381,8 +385,8 @@ public class FingerprintEnroll extends SettingsActivity {
|
||||
}
|
||||
|
||||
LockPatternUtils utils = new LockPatternUtils(activity);
|
||||
if (!utils.isSecure()) {
|
||||
// Device doesn't have any security. Set that up first.
|
||||
if (mToken == null) {
|
||||
// need to choose or confirm lock
|
||||
updateStage(Stage.EnrollingOnboard);
|
||||
} else if (ALWAYS_SHOW_FIND_SCREEN
|
||||
|| mFingerprintManager.getEnrolledFingerprints().size() == 0) {
|
||||
@@ -397,6 +401,8 @@ public class FingerprintEnroll extends SettingsActivity {
|
||||
public void onSaveInstanceState(final Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
outState.putString(EXTRA_STAGE, mStage.toString());
|
||||
outState.putByteArray(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN,
|
||||
mToken);
|
||||
if (mStage == Stage.EnrollingRepeat) {
|
||||
outState.putInt(EXTRA_PROGRESS, mProgressBar.getProgress());
|
||||
}
|
||||
@@ -406,6 +412,8 @@ public class FingerprintEnroll extends SettingsActivity {
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
if (savedInstanceState != null) {
|
||||
mToken = savedInstanceState.getByteArray(
|
||||
ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN);
|
||||
//probably orientation change
|
||||
String stageSaved = savedInstanceState.getString(EXTRA_STAGE, null);
|
||||
if (stageSaved != null) {
|
||||
@@ -426,7 +434,7 @@ public class FingerprintEnroll extends SettingsActivity {
|
||||
break;
|
||||
case R.id.fingerprint_enroll_button_next:
|
||||
if (mStage == Stage.EnrollingOnboard) {
|
||||
launchChooseLock();
|
||||
launchChooseOrConfirmLock();
|
||||
} else if (mStage == Stage.EnrollingFindSensor) {
|
||||
updateStage(Stage.EnrollingStart);
|
||||
} else if (mStage == Stage.EnrollingFinish) {
|
||||
@@ -438,13 +446,20 @@ public class FingerprintEnroll extends SettingsActivity {
|
||||
}
|
||||
}
|
||||
|
||||
private void launchChooseLock() {
|
||||
private void launchChooseOrConfirmLock() {
|
||||
Intent intent = new Intent();
|
||||
long challenge = mFingerprintManager.preEnroll();
|
||||
ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(getActivity(), this);
|
||||
if (!helper.launchConfirmationActivity(CONFIRM_REQUEST, null,
|
||||
null, null, challenge)) {
|
||||
intent.setClassName("com.android.settings", ChooseLockGeneric.class.getName());
|
||||
intent.putExtra(ChooseLockGeneric.ChooseLockGenericFragment.MINIMUM_QUALITY_KEY,
|
||||
DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
|
||||
intent.putExtra(ChooseLockGeneric.ChooseLockGenericFragment.HIDE_DISABLED_PREFS, true);
|
||||
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, true);
|
||||
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, challenge);
|
||||
startActivityForResult(intent, CHOOSE_LOCK_GENERIC_REQUEST);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -19,6 +19,7 @@ package com.android.settings;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
@@ -50,6 +51,16 @@ import java.util.List;
|
||||
* Settings screen for fingerprints
|
||||
*/
|
||||
public class FingerprintSettings extends SettingsActivity {
|
||||
/**
|
||||
* Used by the FP settings wizard to indicate the wizard is
|
||||
* finished, and each activity in the wizard should finish.
|
||||
* <p>
|
||||
* Previously, each activity in the wizard would finish itself after
|
||||
* starting the next activity. However, this leads to broken 'Back'
|
||||
* behavior. So, now an activity does not finish itself until it gets this
|
||||
* result.
|
||||
*/
|
||||
static final int RESULT_FINISHED = RESULT_FIRST_USER;
|
||||
|
||||
@Override
|
||||
public Intent getIntent() {
|
||||
@@ -85,6 +96,9 @@ public class FingerprintSettings extends SettingsActivity {
|
||||
private static final int MSG_REFRESH_FINGERPRINT_TEMPLATES = 1000;
|
||||
private static final int MSG_HIGHLIGHT_FINGERPRINT_ITEM = 1001;
|
||||
|
||||
private static final int CONFIRM_REQUEST = 101;
|
||||
private static final int CHOOSE_LOCK_GENERIC_REQUEST = 102;
|
||||
|
||||
private static final int ADD_FINGERPRINT_REQUEST = 10;
|
||||
|
||||
private static final boolean ENABLE_USAGE_CATEGORY = false;
|
||||
@@ -95,6 +109,7 @@ public class FingerprintSettings extends SettingsActivity {
|
||||
private PreferenceGroup mManageCategory;
|
||||
private CancellationSignal mFingerprintCancel;
|
||||
private int mMaxFingerprintAttempts;
|
||||
private byte[] mToken;
|
||||
|
||||
private AuthenticationCallback mAuthCallback = new AuthenticationCallback() {
|
||||
@Override
|
||||
@@ -173,8 +188,18 @@ public class FingerprintSettings extends SettingsActivity {
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
if (savedInstanceState != null) {
|
||||
mToken = savedInstanceState.getByteArray(
|
||||
ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN);
|
||||
}
|
||||
|
||||
mFingerprintManager = (FingerprintManager) getActivity().getSystemService(
|
||||
Context.FINGERPRINT_SERVICE);
|
||||
|
||||
// Need to authenticate a session token if none
|
||||
if (mToken == null) {
|
||||
launchChooseOrConfirmLock();
|
||||
}
|
||||
}
|
||||
|
||||
protected void removeFingerprintPreference(int fingerprintId) {
|
||||
@@ -268,6 +293,7 @@ public class FingerprintSettings extends SettingsActivity {
|
||||
// Make sure we reload the preference hierarchy since fingerprints may be added,
|
||||
// deleted or renamed.
|
||||
createPreferenceHierarchy();
|
||||
|
||||
retryFingerprint(true);
|
||||
}
|
||||
|
||||
@@ -277,6 +303,12 @@ public class FingerprintSettings extends SettingsActivity {
|
||||
stopFingerprint();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(final Bundle outState) {
|
||||
outState.putByteArray(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN,
|
||||
mToken);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference pref) {
|
||||
final String key = pref.getKey();
|
||||
@@ -343,6 +375,43 @@ public class FingerprintSettings extends SettingsActivity {
|
||||
protected int getHelpResource() {
|
||||
return R.string.help_url_security;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (requestCode == CHOOSE_LOCK_GENERIC_REQUEST
|
||||
|| requestCode == CONFIRM_REQUEST) {
|
||||
if (resultCode == RESULT_FINISHED || resultCode == RESULT_OK) {
|
||||
// The lock pin/pattern/password was set. Start enrolling!
|
||||
if (data != null) {
|
||||
mToken = data.getByteArrayExtra(
|
||||
ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (mToken == null) {
|
||||
// Didn't get an authentication, finishing
|
||||
getActivity().finish();
|
||||
}
|
||||
}
|
||||
|
||||
private void launchChooseOrConfirmLock() {
|
||||
Intent intent = new Intent();
|
||||
long challenge = mFingerprintManager.preEnroll();
|
||||
ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(getActivity(), this);
|
||||
// TODO: update text or remove params from method
|
||||
if (!helper.launchConfirmationActivity(CONFIRM_REQUEST, null,
|
||||
null, null, challenge)) {
|
||||
intent.setClassName("com.android.settings", ChooseLockGeneric.class.getName());
|
||||
intent.putExtra(ChooseLockGeneric.ChooseLockGenericFragment.MINIMUM_QUALITY_KEY,
|
||||
DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
|
||||
intent.putExtra(ChooseLockGeneric.ChooseLockGenericFragment.HIDE_DISABLED_PREFS, true);
|
||||
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, true);
|
||||
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, challenge);
|
||||
startActivityForResult(intent, CHOOSE_LOCK_GENERIC_REQUEST);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class FingerprintPreference extends Preference {
|
||||
|
Reference in New Issue
Block a user