Launch settings for clicking fingerprint unlock
Launch FingerprintSettings directly when user clicks "Fingerprint Unlock". Let Fingerprint settings peform confirmLock() or chooseLock(). And to have smoothly animation, instead of generating challenge in FingerprintSettings::onActivityResult(), challenge is generated in next visible activity, and pass it back through next activity result. Bug: 197717071 Test: atest GatekeeperPasswordProviderTest CredentialModelTest Test: atest AutoCredentialViewModelTest FingerprintStatusUtilsTest Test: RunSettingsRoboTests2 FingerprintEnrollIntroductionTest Test: Manually test fingerprint enroll in settings or suw Change-Id: Ie27c3c493ea475f6b53cb6bb3f2d45d555f47cb3
This commit is contained in:
@@ -31,6 +31,7 @@ import android.widget.TextView;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
|
||||
import com.android.internal.widget.LockPatternUtils;
|
||||
import com.android.settings.R;
|
||||
@@ -58,6 +59,7 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
|
||||
private static final String KEY_CONFIRMING_CREDENTIALS = "confirming_credentials";
|
||||
private static final String KEY_SCROLLED_TO_BOTTOM = "scrolled";
|
||||
|
||||
private GatekeeperPasswordProvider mGatekeeperPasswordProvider;
|
||||
private UserManager mUserManager;
|
||||
private boolean mHasPassword;
|
||||
private boolean mBiometricUnlockDisabledByAdmin;
|
||||
@@ -178,7 +180,7 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
|
||||
|
||||
mErrorText = getErrorTextView();
|
||||
|
||||
mUserManager = UserManager.get(this);
|
||||
mUserManager = getUserManager();
|
||||
updatePasswordQuality();
|
||||
|
||||
if (!mConfirmingCredentials) {
|
||||
@@ -253,8 +255,28 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
|
||||
return super.shouldFinishWhenBackgrounded() && !mConfirmingCredentials && !mNextClicked;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
@NonNull
|
||||
protected GatekeeperPasswordProvider getGatekeeperPasswordProvider() {
|
||||
if (mGatekeeperPasswordProvider == null) {
|
||||
mGatekeeperPasswordProvider = new GatekeeperPasswordProvider(getLockPatternUtils());
|
||||
}
|
||||
return mGatekeeperPasswordProvider;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
protected UserManager getUserManager() {
|
||||
return UserManager.get(this);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
@NonNull
|
||||
protected LockPatternUtils getLockPatternUtils() {
|
||||
return new LockPatternUtils(this);
|
||||
}
|
||||
|
||||
private void updatePasswordQuality() {
|
||||
final int passwordQuality = new LockPatternUtils(this)
|
||||
final int passwordQuality = getLockPatternUtils()
|
||||
.getActivePasswordQuality(mUserManager.getCredentialOwnerProfile(mUserId));
|
||||
mHasPassword = passwordQuality != DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
|
||||
}
|
||||
@@ -301,6 +323,14 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
|
||||
startActivityForResult(intent, BIOMETRIC_FIND_SENSOR_REQUEST);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the intent extra data for setResult(), null means nothing need to been sent back
|
||||
*/
|
||||
@Nullable
|
||||
protected Intent getSetResultIntentExtra(@Nullable Intent activityResultIntent) {
|
||||
return activityResultIntent;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
Log.d(TAG,
|
||||
@@ -310,7 +340,7 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
|
||||
&& BiometricUtils.isMultiBiometricFingerprintEnrollmentFlow(this);
|
||||
if (requestCode == BIOMETRIC_FIND_SENSOR_REQUEST) {
|
||||
if (isResultFinished(resultCode)) {
|
||||
handleBiometricResultSkipOrFinished(resultCode, data);
|
||||
handleBiometricResultSkipOrFinished(resultCode, getSetResultIntentExtra(data));
|
||||
} else if (isResultSkipped(resultCode)) {
|
||||
if (!BiometricUtils.tryStartingNextBiometricEnroll(this,
|
||||
ENROLL_NEXT_BIOMETRIC_REQUEST, "BIOMETRIC_FIND_SENSOR_SKIPPED")) {
|
||||
|
Reference in New Issue
Block a user