Add mandatory biometric for exported enroll intents
Flag: android.hardware.biometrics.flags.mandatory_biometrics Fixes: 358173662 Test: N/A Change-Id: Ic67d42ba84220f4c18cf445ae75d4f7f8dfd1f39
This commit is contained in:
@@ -1543,19 +1543,42 @@ public final class Utils extends com.android.settingslib.Utils {
|
|||||||
*/
|
*/
|
||||||
public static void launchBiometricPromptForMandatoryBiometrics(@NonNull Fragment fragment,
|
public static void launchBiometricPromptForMandatoryBiometrics(@NonNull Fragment fragment,
|
||||||
int requestCode, int userId, boolean hideBackground) {
|
int requestCode, int userId, boolean hideBackground) {
|
||||||
|
fragment.startActivityForResult(getIntentForBiometricAuthentication(fragment.getResources(),
|
||||||
|
userId, hideBackground), requestCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Launch biometric prompt for mandatory biometrics. Call
|
||||||
|
* {@link #requestBiometricAuthenticationForMandatoryBiometrics(Context, boolean, int)}
|
||||||
|
* to check if all requirements for mandatory biometrics is satisfied
|
||||||
|
* before launching biometric prompt.
|
||||||
|
*
|
||||||
|
* @param activity corresponding activity of the surface
|
||||||
|
* @param requestCode for starting the new activity
|
||||||
|
* @param userId user id for the authentication request
|
||||||
|
* @param hideBackground if the background activity screen needs to be hidden
|
||||||
|
*/
|
||||||
|
public static void launchBiometricPromptForMandatoryBiometrics(@NonNull Activity activity,
|
||||||
|
int requestCode, int userId, boolean hideBackground) {
|
||||||
|
activity.startActivityForResult(getIntentForBiometricAuthentication(
|
||||||
|
activity.getResources(), userId, hideBackground), requestCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Intent getIntentForBiometricAuthentication(Resources resources, int userId,
|
||||||
|
boolean hideBackground) {
|
||||||
final Intent intent = new Intent();
|
final Intent intent = new Intent();
|
||||||
intent.putExtra(BIOMETRIC_PROMPT_AUTHENTICATORS,
|
intent.putExtra(BIOMETRIC_PROMPT_AUTHENTICATORS,
|
||||||
BiometricManager.Authenticators.MANDATORY_BIOMETRICS);
|
BiometricManager.Authenticators.MANDATORY_BIOMETRICS);
|
||||||
intent.putExtra(BIOMETRIC_PROMPT_NEGATIVE_BUTTON_TEXT,
|
intent.putExtra(BIOMETRIC_PROMPT_NEGATIVE_BUTTON_TEXT,
|
||||||
fragment.getString(R.string.cancel));
|
resources.getString(R.string.cancel));
|
||||||
intent.putExtra(KeyguardManager.EXTRA_DESCRIPTION,
|
intent.putExtra(KeyguardManager.EXTRA_DESCRIPTION,
|
||||||
fragment.getString(R.string.mandatory_biometrics_prompt_description));
|
resources.getString(R.string.mandatory_biometrics_prompt_description));
|
||||||
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_ALLOW_ANY_USER, true);
|
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_ALLOW_ANY_USER, true);
|
||||||
intent.putExtra(EXTRA_USER_ID, userId);
|
intent.putExtra(EXTRA_USER_ID, userId);
|
||||||
intent.putExtra(BIOMETRIC_PROMPT_HIDE_BACKGROUND, hideBackground);
|
intent.putExtra(BIOMETRIC_PROMPT_HIDE_BACKGROUND, hideBackground);
|
||||||
intent.setClassName(SETTINGS_PACKAGE_NAME,
|
intent.setClassName(SETTINGS_PACKAGE_NAME,
|
||||||
ConfirmDeviceCredentialActivity.InternalActivity.class.getName());
|
ConfirmDeviceCredentialActivity.InternalActivity.class.getName());
|
||||||
fragment.startActivityForResult(intent, requestCode);
|
return intent;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void disableComponent(PackageManager pm, ComponentName componentName) {
|
private static void disableComponent(PackageManager pm, ComponentName componentName) {
|
||||||
|
@@ -19,6 +19,7 @@ package com.android.settings.biometrics;
|
|||||||
import static android.provider.Settings.ACTION_BIOMETRIC_ENROLL;
|
import static android.provider.Settings.ACTION_BIOMETRIC_ENROLL;
|
||||||
import static android.provider.Settings.EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED;
|
import static android.provider.Settings.EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED;
|
||||||
|
|
||||||
|
import static com.android.settings.biometrics.BiometricEnrollBase.BIOMETRIC_AUTH_REQUEST;
|
||||||
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_CONSENT_DENIED;
|
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_CONSENT_DENIED;
|
||||||
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_CONSENT_GRANTED;
|
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_CONSENT_GRANTED;
|
||||||
|
|
||||||
@@ -51,6 +52,7 @@ import com.android.internal.util.FrameworkStatsLog;
|
|||||||
import com.android.internal.widget.LockPatternUtils;
|
import com.android.internal.widget.LockPatternUtils;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.SetupWizardUtils;
|
import com.android.settings.SetupWizardUtils;
|
||||||
|
import com.android.settings.Utils;
|
||||||
import com.android.settings.core.InstrumentedActivity;
|
import com.android.settings.core.InstrumentedActivity;
|
||||||
import com.android.settings.overlay.FeatureFactory;
|
import com.android.settings.overlay.FeatureFactory;
|
||||||
import com.android.settings.password.ChooseLockGeneric;
|
import com.android.settings.password.ChooseLockGeneric;
|
||||||
@@ -442,6 +444,16 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
|
|||||||
if (!mParentalConsentHelper.launchNext(this, REQUEST_CHOOSE_OPTIONS)) {
|
if (!mParentalConsentHelper.launchNext(this, REQUEST_CHOOSE_OPTIONS)) {
|
||||||
Log.e(TAG, "Nothing to prompt for consent (no modalities enabled)!");
|
Log.e(TAG, "Nothing to prompt for consent (no modalities enabled)!");
|
||||||
finish();
|
finish();
|
||||||
|
} else {
|
||||||
|
final Utils.BiometricStatus biometricStatus =
|
||||||
|
Utils.requestBiometricAuthenticationForMandatoryBiometrics(this,
|
||||||
|
false /* biometricsAuthenticationRequested */, mUserId);
|
||||||
|
if (biometricStatus == Utils.BiometricStatus.OK) {
|
||||||
|
Utils.launchBiometricPromptForMandatoryBiometrics(this,
|
||||||
|
BIOMETRIC_AUTH_REQUEST, mUserId, true /* hideBackground */);
|
||||||
|
} else if (biometricStatus != Utils.BiometricStatus.NOT_ACTIVE) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Log.d(TAG, "Unknown result for set/choose lock: " + resultCode);
|
Log.d(TAG, "Unknown result for set/choose lock: " + resultCode);
|
||||||
@@ -473,6 +485,10 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
|
|||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case BIOMETRIC_AUTH_REQUEST:
|
||||||
|
if (resultCode != RESULT_OK) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
Log.w(TAG, "Unknown consenting requestCode: " + requestCode + ", finishing");
|
Log.w(TAG, "Unknown consenting requestCode: " + requestCode + ", finishing");
|
||||||
finish();
|
finish();
|
||||||
|
@@ -117,7 +117,6 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity {
|
|||||||
public static final int LEARN_MORE_REQUEST = 3;
|
public static final int LEARN_MORE_REQUEST = 3;
|
||||||
public static final int CONFIRM_REQUEST = 4;
|
public static final int CONFIRM_REQUEST = 4;
|
||||||
public static final int ENROLL_REQUEST = 5;
|
public static final int ENROLL_REQUEST = 5;
|
||||||
public static final int BIOMETRIC_AUTH_REQUEST = 6;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Request code when starting another biometric enrollment from within a biometric flow. For
|
* Request code when starting another biometric enrollment from within a biometric flow. For
|
||||||
@@ -125,6 +124,7 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity {
|
|||||||
*/
|
*/
|
||||||
public static final int ENROLL_NEXT_BIOMETRIC_REQUEST = 6;
|
public static final int ENROLL_NEXT_BIOMETRIC_REQUEST = 6;
|
||||||
public static final int REQUEST_POSTURE_GUIDANCE = 7;
|
public static final int REQUEST_POSTURE_GUIDANCE = 7;
|
||||||
|
public static final int BIOMETRIC_AUTH_REQUEST = 8;
|
||||||
|
|
||||||
protected boolean mLaunchedConfirmLock;
|
protected boolean mLaunchedConfirmLock;
|
||||||
protected boolean mLaunchedPostureGuidance;
|
protected boolean mLaunchedPostureGuidance;
|
||||||
|
@@ -36,6 +36,7 @@ import androidx.annotation.VisibleForTesting;
|
|||||||
import com.android.internal.widget.LockPatternUtils;
|
import com.android.internal.widget.LockPatternUtils;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.SetupWizardUtils;
|
import com.android.settings.SetupWizardUtils;
|
||||||
|
import com.android.settings.Utils;
|
||||||
import com.android.settings.password.ChooseLockGeneric;
|
import com.android.settings.password.ChooseLockGeneric;
|
||||||
import com.android.settings.password.ChooseLockSettingsHelper;
|
import com.android.settings.password.ChooseLockSettingsHelper;
|
||||||
import com.android.settings.password.SetupSkipDialog;
|
import com.android.settings.password.SetupSkipDialog;
|
||||||
@@ -417,6 +418,15 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
|
|||||||
getNextButton().setEnabled(true);
|
getNextButton().setEnabled(true);
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
final Utils.BiometricStatus biometricStatus =
|
||||||
|
Utils.requestBiometricAuthenticationForMandatoryBiometrics(this,
|
||||||
|
false /* biometricsAuthenticationRequested */, mUserId);
|
||||||
|
if (biometricStatus == Utils.BiometricStatus.OK) {
|
||||||
|
Utils.launchBiometricPromptForMandatoryBiometrics(this,
|
||||||
|
BIOMETRIC_AUTH_REQUEST, mUserId, true /* hideBackground */);
|
||||||
|
} else if (biometricStatus != Utils.BiometricStatus.NOT_ACTIVE) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
setResult(resultCode, data);
|
setResult(resultCode, data);
|
||||||
finish();
|
finish();
|
||||||
@@ -445,6 +455,10 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
|
|||||||
setResult(resultCode, data);
|
setResult(resultCode, data);
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
} else if (requestCode == BIOMETRIC_AUTH_REQUEST) {
|
||||||
|
if (resultCode != RESULT_OK) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user