Snap for 8837442 from d0695e781f
to tm-qpr1-release
Change-Id: I8043a440e50921c09675434ed88050f5b9a34f9e
This commit is contained in:
@@ -93,6 +93,8 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
|
|||||||
public static final String EXTRA_PARENTAL_CONSENT_STATUS = "consent_status";
|
public static final String EXTRA_PARENTAL_CONSENT_STATUS = "consent_status";
|
||||||
|
|
||||||
private static final String SAVED_STATE_CONFIRMING_CREDENTIALS = "confirming_credentials";
|
private static final String SAVED_STATE_CONFIRMING_CREDENTIALS = "confirming_credentials";
|
||||||
|
private static final String SAVED_STATE_FINGERPRINT_ONLY_ENROLLING =
|
||||||
|
"fingerprint_only_enrolling";
|
||||||
private static final String SAVED_STATE_ENROLL_ACTION_LOGGED = "enroll_action_logged";
|
private static final String SAVED_STATE_ENROLL_ACTION_LOGGED = "enroll_action_logged";
|
||||||
private static final String SAVED_STATE_PARENTAL_OPTIONS = "enroll_preferences";
|
private static final String SAVED_STATE_PARENTAL_OPTIONS = "enroll_preferences";
|
||||||
private static final String SAVED_STATE_GK_PW_HANDLE = "gk_pw_handle";
|
private static final String SAVED_STATE_GK_PW_HANDLE = "gk_pw_handle";
|
||||||
@@ -101,6 +103,7 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
|
|||||||
|
|
||||||
private int mUserId = UserHandle.myUserId();
|
private int mUserId = UserHandle.myUserId();
|
||||||
private boolean mConfirmingCredentials;
|
private boolean mConfirmingCredentials;
|
||||||
|
private boolean mFingerprintOnlyEnrolling;
|
||||||
private boolean mIsEnrollActionLogged;
|
private boolean mIsEnrollActionLogged;
|
||||||
private boolean mHasFeatureFace = false;
|
private boolean mHasFeatureFace = false;
|
||||||
private boolean mHasFeatureFingerprint = false;
|
private boolean mHasFeatureFingerprint = false;
|
||||||
@@ -129,6 +132,8 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
|
|||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
mConfirmingCredentials = savedInstanceState.getBoolean(
|
mConfirmingCredentials = savedInstanceState.getBoolean(
|
||||||
SAVED_STATE_CONFIRMING_CREDENTIALS, false);
|
SAVED_STATE_CONFIRMING_CREDENTIALS, false);
|
||||||
|
mFingerprintOnlyEnrolling = savedInstanceState.getBoolean(
|
||||||
|
SAVED_STATE_FINGERPRINT_ONLY_ENROLLING, false);
|
||||||
mIsEnrollActionLogged = savedInstanceState.getBoolean(
|
mIsEnrollActionLogged = savedInstanceState.getBoolean(
|
||||||
SAVED_STATE_ENROLL_ACTION_LOGGED, false);
|
SAVED_STATE_ENROLL_ACTION_LOGGED, false);
|
||||||
mParentalOptions = savedInstanceState.getBundle(SAVED_STATE_PARENTAL_OPTIONS);
|
mParentalOptions = savedInstanceState.getBundle(SAVED_STATE_PARENTAL_OPTIONS);
|
||||||
@@ -302,7 +307,11 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
|
|||||||
setOrConfirmCredentialsNow();
|
setOrConfirmCredentialsNow();
|
||||||
}
|
}
|
||||||
} else if (canUseFingerprint) {
|
} else if (canUseFingerprint) {
|
||||||
|
if (mGkPwHandle != null) {
|
||||||
launchFingerprintOnlyEnroll();
|
launchFingerprintOnlyEnroll();
|
||||||
|
} else {
|
||||||
|
setOrConfirmCredentialsNow();
|
||||||
|
}
|
||||||
} else if (canUseFace) {
|
} else if (canUseFace) {
|
||||||
launchFaceOnlyEnroll();
|
launchFaceOnlyEnroll();
|
||||||
} else { // no modalities available
|
} else { // no modalities available
|
||||||
@@ -320,6 +329,7 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
|
|||||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
outState.putBoolean(SAVED_STATE_CONFIRMING_CREDENTIALS, mConfirmingCredentials);
|
outState.putBoolean(SAVED_STATE_CONFIRMING_CREDENTIALS, mConfirmingCredentials);
|
||||||
|
outState.putBoolean(SAVED_STATE_FINGERPRINT_ONLY_ENROLLING, mFingerprintOnlyEnrolling);
|
||||||
outState.putBoolean(SAVED_STATE_ENROLL_ACTION_LOGGED, mIsEnrollActionLogged);
|
outState.putBoolean(SAVED_STATE_ENROLL_ACTION_LOGGED, mIsEnrollActionLogged);
|
||||||
if (mParentalOptions != null) {
|
if (mParentalOptions != null) {
|
||||||
outState.putBundle(SAVED_STATE_PARENTAL_OPTIONS, mParentalOptions);
|
outState.putBundle(SAVED_STATE_PARENTAL_OPTIONS, mParentalOptions);
|
||||||
@@ -432,11 +442,14 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
|
|||||||
mConfirmingCredentials = false;
|
mConfirmingCredentials = false;
|
||||||
final boolean isOk =
|
final boolean isOk =
|
||||||
isSuccessfulConfirmOrChooseCredential(requestCode, resultCode);
|
isSuccessfulConfirmOrChooseCredential(requestCode, resultCode);
|
||||||
// single modality enrollment requests confirmation directly
|
// single face enrollment requests confirmation directly
|
||||||
// via BiometricEnrollBase#onCreate and should never get here
|
// via BiometricEnrollBase#onCreate and should never get here
|
||||||
if (isOk && mHasFeatureFace && mHasFeatureFingerprint) {
|
if (isOk && mHasFeatureFace && mHasFeatureFingerprint) {
|
||||||
updateGatekeeperPasswordHandle(data);
|
updateGatekeeperPasswordHandle(data);
|
||||||
launchFaceAndFingerprintEnroll();
|
launchFaceAndFingerprintEnroll();
|
||||||
|
} else if (isOk && mHasFeatureFingerprint) {
|
||||||
|
updateGatekeeperPasswordHandle(data);
|
||||||
|
launchFingerprintOnlyEnroll();
|
||||||
} else {
|
} else {
|
||||||
Log.d(TAG, "Unknown result for set/choose lock: " + resultCode);
|
Log.d(TAG, "Unknown result for set/choose lock: " + resultCode);
|
||||||
setResult(resultCode);
|
setResult(resultCode);
|
||||||
@@ -444,6 +457,7 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case REQUEST_SINGLE_ENROLL:
|
case REQUEST_SINGLE_ENROLL:
|
||||||
|
mFingerprintOnlyEnrolling = false;
|
||||||
finishOrLaunchHandToParent(resultCode);
|
finishOrLaunchHandToParent(resultCode);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -572,6 +586,8 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void launchFingerprintOnlyEnroll() {
|
private void launchFingerprintOnlyEnroll() {
|
||||||
|
if (!mFingerprintOnlyEnrolling) {
|
||||||
|
mFingerprintOnlyEnrolling = true;
|
||||||
final Intent intent;
|
final Intent intent;
|
||||||
// ChooseLockGeneric can request to start fingerprint enroll bypassing the intro screen.
|
// ChooseLockGeneric can request to start fingerprint enroll bypassing the intro screen.
|
||||||
if (getIntent().getBooleanExtra(EXTRA_SKIP_INTRO, false)
|
if (getIntent().getBooleanExtra(EXTRA_SKIP_INTRO, false)
|
||||||
@@ -582,6 +598,7 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
|
|||||||
}
|
}
|
||||||
launchSingleSensorEnrollActivity(intent, REQUEST_SINGLE_ENROLL);
|
launchSingleSensorEnrollActivity(intent, REQUEST_SINGLE_ENROLL);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void launchFaceOnlyEnroll() {
|
private void launchFaceOnlyEnroll() {
|
||||||
final Intent intent = BiometricUtils.getFaceIntroIntent(this, getIntent());
|
final Intent intent = BiometricUtils.getFaceIntroIntent(this, getIntent());
|
||||||
|
@@ -76,6 +76,7 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
|
|||||||
|
|
||||||
private static final String TAG = "FingerprintEnrollEnrolling";
|
private static final String TAG = "FingerprintEnrollEnrolling";
|
||||||
static final String TAG_SIDECAR = "sidecar";
|
static final String TAG_SIDECAR = "sidecar";
|
||||||
|
static final String KEY_STATE_CANCELED = "is_canceled";
|
||||||
|
|
||||||
private static final int PROGRESS_BAR_MAX = 10000;
|
private static final int PROGRESS_BAR_MAX = 10000;
|
||||||
|
|
||||||
@@ -130,6 +131,7 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
|
|||||||
private boolean mRestoring;
|
private boolean mRestoring;
|
||||||
private Vibrator mVibrator;
|
private Vibrator mVibrator;
|
||||||
private boolean mIsSetupWizard;
|
private boolean mIsSetupWizard;
|
||||||
|
private boolean mIsCanceled;
|
||||||
private AccessibilityManager mAccessibilityManager;
|
private AccessibilityManager mAccessibilityManager;
|
||||||
private boolean mIsAccessibilityEnabled;
|
private boolean mIsAccessibilityEnabled;
|
||||||
private LottieAnimationView mIllustrationLottie;
|
private LottieAnimationView mIllustrationLottie;
|
||||||
@@ -154,6 +156,9 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
|
|||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
if (savedInstanceState != null) {
|
||||||
|
restoreSavedState(savedInstanceState);
|
||||||
|
}
|
||||||
mFingerprintManager = getSystemService(FingerprintManager.class);
|
mFingerprintManager = getSystemService(FingerprintManager.class);
|
||||||
final List<FingerprintSensorPropertiesInternal> props =
|
final List<FingerprintSensorPropertiesInternal> props =
|
||||||
mFingerprintManager.getSensorPropertiesInternal();
|
mFingerprintManager.getSensorPropertiesInternal();
|
||||||
@@ -240,7 +245,6 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
|
|||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
mRestoring = savedInstanceState != null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -255,11 +259,22 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
|
|||||||
if (mCanAssumeUdfps) {
|
if (mCanAssumeUdfps) {
|
||||||
// Continue enrollment if restoring (e.g. configuration changed). Otherwise, wait
|
// Continue enrollment if restoring (e.g. configuration changed). Otherwise, wait
|
||||||
// for the entry animation to complete before starting.
|
// for the entry animation to complete before starting.
|
||||||
return mRestoring;
|
return mRestoring && !mIsCanceled;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onSaveInstanceState(Bundle outState) {
|
||||||
|
super.onSaveInstanceState(outState);
|
||||||
|
outState.putBoolean(KEY_STATE_CANCELED, mIsCanceled);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void restoreSavedState(Bundle savedInstanceState) {
|
||||||
|
mRestoring = true;
|
||||||
|
mIsCanceled = savedInstanceState.getBoolean(KEY_STATE_CANCELED, false);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onStart() {
|
protected void onStart() {
|
||||||
super.onStart();
|
super.onStart();
|
||||||
@@ -500,7 +515,10 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
|
|||||||
@Override
|
@Override
|
||||||
public void onEnrollmentError(int errMsgId, CharSequence errString) {
|
public void onEnrollmentError(int errMsgId, CharSequence errString) {
|
||||||
FingerprintErrorDialog.showErrorDialog(this, errMsgId);
|
FingerprintErrorDialog.showErrorDialog(this, errMsgId);
|
||||||
|
mIsCanceled = true;
|
||||||
|
cancelEnrollment();
|
||||||
stopIconAnimation();
|
stopIconAnimation();
|
||||||
|
stopListenOrientationEvent();
|
||||||
if (!mCanAssumeUdfps) {
|
if (!mCanAssumeUdfps) {
|
||||||
mErrorText.removeCallbacks(mTouchAgainRunnable);
|
mErrorText.removeCallbacks(mTouchAgainRunnable);
|
||||||
}
|
}
|
||||||
|
@@ -241,6 +241,8 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction {
|
|||||||
final boolean isSetupWizard = WizardManagerHelper.isAnySetupWizard(getIntent());
|
final boolean isSetupWizard = WizardManagerHelper.isAnySetupWizard(getIntent());
|
||||||
final boolean isDeferredSetupWizard =
|
final boolean isDeferredSetupWizard =
|
||||||
WizardManagerHelper.isDeferredSetupWizard(getIntent());
|
WizardManagerHelper.isDeferredSetupWizard(getIntent());
|
||||||
|
final boolean isPortalSetupWizard =
|
||||||
|
WizardManagerHelper.isPortalSetupWizard(getIntent());
|
||||||
if (mFingerprintManager != null) {
|
if (mFingerprintManager != null) {
|
||||||
final List<FingerprintSensorPropertiesInternal> props =
|
final List<FingerprintSensorPropertiesInternal> props =
|
||||||
mFingerprintManager.getSensorPropertiesInternal();
|
mFingerprintManager.getSensorPropertiesInternal();
|
||||||
@@ -252,7 +254,7 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction {
|
|||||||
getApplicationContext()
|
getApplicationContext()
|
||||||
.getResources()
|
.getResources()
|
||||||
.getInteger(R.integer.suw_max_fingerprints_enrollable);
|
.getInteger(R.integer.suw_max_fingerprints_enrollable);
|
||||||
if (isSetupWizard && !isDeferredSetupWizard) {
|
if (isSetupWizard && !isDeferredSetupWizard && !isPortalSetupWizard) {
|
||||||
if (numEnrolledFingerprints >= maxFingerprintsEnrollableIfSUW) {
|
if (numEnrolledFingerprints >= maxFingerprintsEnrollableIfSUW) {
|
||||||
return R.string.fingerprint_intro_error_max;
|
return R.string.fingerprint_intro_error_max;
|
||||||
} else {
|
} else {
|
||||||
|
@@ -18,11 +18,13 @@ package com.android.settings.biometrics.fingerprint;
|
|||||||
|
|
||||||
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_FINISHED;
|
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_FINISHED;
|
||||||
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_TIMEOUT;
|
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_TIMEOUT;
|
||||||
|
import static com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling.KEY_STATE_CANCELED;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
|
import android.content.Intent;
|
||||||
import android.hardware.biometrics.BiometricConstants;
|
import android.hardware.biometrics.BiometricConstants;
|
||||||
import android.hardware.fingerprint.FingerprintManager;
|
import android.hardware.fingerprint.FingerprintManager;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@@ -68,7 +70,11 @@ public class FingerprintErrorDialog extends InstrumentedDialogFragment {
|
|||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
dialog.dismiss();
|
dialog.dismiss();
|
||||||
getActivity().recreate();
|
Activity activity = getActivity();
|
||||||
|
Intent intent = activity.getIntent();
|
||||||
|
intent.putExtra(KEY_STATE_CANCELED, false);
|
||||||
|
activity.startActivity(intent);
|
||||||
|
activity.finish();
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.setNegativeButton(
|
.setNegativeButton(
|
||||||
|
@@ -173,4 +173,24 @@ public class FingerprintEnrollIntroductionTest {
|
|||||||
|
|
||||||
assertThat(result).isEqualTo(R.string.fingerprint_intro_error_max);
|
assertThat(result).isEqualTo(R.string.fingerprint_intro_error_max);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void intro_CheckCanEnrollDuringPortal() {
|
||||||
|
setupFingerprintEnrollIntroWith(
|
||||||
|
new Intent().putExtra(WizardManagerHelper.EXTRA_IS_PORTAL_SETUP, true));
|
||||||
|
setFingerprintManagerToHave(2 /* numEnrollments */);
|
||||||
|
int result = mFingerprintEnrollIntroduction.checkMaxEnrolled();
|
||||||
|
|
||||||
|
assertThat(result).isEqualTo(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void intro_CheckMaxEnrolledDuringPortal() {
|
||||||
|
setupFingerprintEnrollIntroWith(
|
||||||
|
new Intent().putExtra(WizardManagerHelper.EXTRA_IS_PORTAL_SETUP, true));
|
||||||
|
setFingerprintManagerToHave(6 /* numEnrollments */);
|
||||||
|
int result = mFingerprintEnrollIntroduction.checkMaxEnrolled();
|
||||||
|
|
||||||
|
assertThat(result).isEqualTo(R.string.fingerprint_intro_error_max);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user