Files
app_Settings/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroduction.java
Milton Wu 68247caafc Send metric intent back to SUW
Add metric intent if ChooseLockGeneric is triggered in SUW.
1. Save the result bundle data from ChooseLockGeneric to cache inside
   BiometricEnrollActivity and pass back to SUW after all finished.
2. Since fingerprint enrollment trigger points in SUW for
   fingerprint-only or fingerprint + faceAuth devices are all moved
   from SetupFingerprintEnrollIntroduction to BiometricEnrollActivity,
   remove deprecated code from SetupFingerprintEnrollIntroduction.

Bug: 235458700
Test: Manually test fingerprint enroll with SUW or w/o SUW
Test: Manually test fingerprint enroll with unicorn SUW
Test: atest BiometricEnrollActivityTest
Test: robo tests FingerprintEnrollIntroductionTest
Change-Id: I34b2884ab4c2c65d464d91eaef0f58c72dad438b
2022-07-22 08:53:48 +00:00

146 lines
5.7 KiB
Java

/*
* Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License
*/
package com.android.settings.biometrics.fingerprint;
import android.app.KeyguardManager;
import android.app.settings.SettingsEnums;
import android.content.Intent;
import android.hardware.fingerprint.FingerprintManager;
import android.view.View;
import com.android.settings.SetupWizardUtils;
import com.android.settings.Utils;
import com.android.settings.biometrics.BiometricUtils;
import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settings.password.SetupSkipDialog;
public class SetupFingerprintEnrollIntroduction extends FingerprintEnrollIntroduction {
/**
* Returns the number of fingerprint enrolled.
*/
private static final String EXTRA_FINGERPRINT_ENROLLED_COUNT = "fingerprint_enrolled_count";
private static final String KEY_LOCK_SCREEN_PRESENT = "wasLockScreenPresent";
@Override
protected Intent getEnrollingIntent() {
final Intent intent = new Intent(this, SetupFingerprintEnrollFindSensor.class);
BiometricUtils.copyMultiBiometricExtras(getIntent(), intent);
if (BiometricUtils.containsGatekeeperPasswordHandle(getIntent())) {
intent.putExtra(
ChooseLockSettingsHelper.EXTRA_KEY_GK_PW_HANDLE,
BiometricUtils.getGatekeeperPasswordHandle(getIntent()));
}
SetupWizardUtils.copySetupExtras(getIntent(), intent);
return intent;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
boolean hasEnrolledFace = false;
boolean hasEnrolledFingerprint = false;
if (data != null) {
hasEnrolledFace = data.getBooleanExtra(EXTRA_FINISHED_ENROLL_FACE, false);
hasEnrolledFingerprint = data.getBooleanExtra(EXTRA_FINISHED_ENROLL_FINGERPRINT, false);
// If we've enrolled a face, we can remove the pending intent to launch FaceEnrollIntro.
if (hasEnrolledFace) {
removeEnrollNextBiometric();
}
}
if (requestCode == BIOMETRIC_FIND_SENSOR_REQUEST && isKeyguardSecure()) {
// Report fingerprint count if user adding a new fingerprint
if (resultCode == RESULT_FINISHED) {
data = setFingerprintCount(data);
}
if (resultCode == RESULT_CANCELED && hasEnrolledFingerprint) {
// If we are coming from a back press from an already enrolled fingerprint,
// we can finish this activity.
setResult(resultCode, data);
finish();
return;
}
} else if (requestCode == ENROLL_NEXT_BIOMETRIC_REQUEST) {
// See if we can still enroll a fingerprint
boolean canEnrollFinger = checkMaxEnrolled() == 0;
// If we came from the next biometric flow and a user has either
// finished or skipped, we will also finish.
if (resultCode == RESULT_SKIP || resultCode == RESULT_FINISHED) {
// If user skips the enroll next biometric, we will also finish
setResult(RESULT_FINISHED, data);
finish();
} else if (resultCode == RESULT_CANCELED) {
// Note that result_canceled comes from onBackPressed.
// If we can enroll a finger, Stay on this page, else we cannot,
// and finish entirely.
if (!canEnrollFinger) {
finish();
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
return;
}
super.onActivityResult(requestCode, resultCode, data);
}
private Intent setFingerprintCount(Intent data) {
if (data == null) {
data = new Intent();
}
final FingerprintManager fpm = Utils.getFingerprintManagerOrNull(this);
if (fpm != null) {
int enrolled = fpm.getEnrolledFingerprints(mUserId).size();
data.putExtra(EXTRA_FINGERPRINT_ENROLLED_COUNT, enrolled);
}
return data;
}
@Override
protected void onCancelButtonClick(View view) {
final int resultCode;
Intent data;
if (isKeyguardSecure()) {
// If the keyguard is already set up securely (maybe the user added a backup screen
// lock and skipped fingerprint), return RESULT_SKIP directly.
if (!BiometricUtils.tryStartingNextBiometricEnroll(
this, ENROLL_NEXT_BIOMETRIC_REQUEST, "cancel")) {
resultCode = RESULT_SKIP;
setResult(resultCode);
finish();
return;
}
} else {
resultCode = SetupSkipDialog.RESULT_SKIP;
data = setSkipPendingEnroll(null);
setResult(resultCode, data);
finish();
}
// User has explicitly canceled enroll. Don't restart it automatically.
}
private boolean isKeyguardSecure() {
return getSystemService(KeyguardManager.class).isKeyguardSecure();
}
@Override
public int getMetricsCategory() {
return SettingsEnums.FINGERPRINT_ENROLL_INTRO_SETUP;
}
}