Show a dialog preventing fingerprint enrollment in split mode.

Test: atest CombinedBiometricProfileSettingsTest
Test: atest FingerprintSettingsFragmentTest
Test: manaul test- go to split screen mode and try to enroll
fingerprint
Bug: 246247132

Change-Id: I12357d197f2ceda8c1f1f582cdecb20fd18e30f7
This commit is contained in:
Hao Dong
2023-03-24 21:15:16 +00:00
parent 509f94a8c3
commit ee8252b56b
5 changed files with 382 additions and 6 deletions

View File

@@ -41,6 +41,7 @@ import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.biometrics.BiometricEnrollBase;
import com.android.settings.biometrics.BiometricUtils;
import com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment;
import com.android.settings.core.SettingsBaseActivity;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.password.ChooseLockGeneric;
@@ -166,6 +167,14 @@ public abstract class BiometricsSettingsBase extends DashboardFragment {
return true;
} else if (getFingerprintPreferenceKey().equals(key)) {
mDoNotFinishActivity = true;
if (shouldSkipForUdfpsInMultiWindowMode()) {
new FingerprintSettingsFragment.FingerprintSplitScreenDialog().show(
getActivity().getSupportFragmentManager(),
FingerprintSettingsFragment.FingerprintSplitScreenDialog.class.getName());
return true;
}
mFingerprintManager.generateChallenge(mUserId, (sensorId, userId, challenge) -> {
try {
final byte[] token = requestGatekeeperHat(context, mGkPwHandle, mUserId,
@@ -377,4 +386,27 @@ public abstract class BiometricsSettingsBase extends DashboardFragment {
return 0;
}
}
/**
* Returns whether the click should be skipped.
* True if the following conditions are all met:
* 1. It's split mode.
* 2. It's udfps.
* 3. There is no enrolled fingerprint. (If there is enrolled fingerprint, FingerprintSettings
* will handle the adding fingerprint.
*/
private boolean shouldSkipForUdfpsInMultiWindowMode() {
if (!getActivity().isInMultiWindowMode() || mFingerprintManager.hasEnrolledFingerprints(
mUserId)) {
return false;
}
for (FingerprintSensorPropertiesInternal prop :
mFingerprintManager.getSensorPropertiesInternal()) {
if (prop.isAnyUdfpsType()) {
return true;
}
}
return false;
}
}