Merge "Support customization for biometrics SafeSourceIssue" into main

This commit is contained in:
Treehugger Robot
2025-02-07 16:05:30 -08:00
committed by Android (Google) Code Review
6 changed files with 64 additions and 6 deletions

View File

@@ -22,6 +22,7 @@ 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_GRANTED;
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_FINISHED;
import static com.google.android.setupdesign.transition.TransitionHelper.TRANSITION_FADE_THROUGH;
@@ -53,6 +54,7 @@ import com.android.internal.widget.LockPatternUtils;
import com.android.settings.R;
import com.android.settings.SetupWizardUtils;
import com.android.settings.Utils;
import com.android.settings.biometrics.combination.CombinedBiometricStatusUtils;
import com.android.settings.core.InstrumentedActivity;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.password.ChooseLockGeneric;
@@ -131,6 +133,7 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
private Bundle mParentalOptions;
@Nullable private Long mGkPwHandle;
@Nullable private ParentalConsentHelper mParentalConsentHelper;
private boolean mIsPreviousEnrollmentCanceled = false;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
@@ -531,6 +534,7 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
} else {
Log.d(TAG, "Unknown result for set/choose lock: " + resultCode);
setResult(resultCode, newResultIntent());
notifySafetyIssueActionLaunchedIfNeeded(resultCode);
finish();
}
break;
@@ -549,16 +553,21 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
// SetupFingerprintEnroll*/FingerprintEnrollmentActivity to
// SetupFaceEnrollIntroduction
TransitionHelper.applyForwardTransition(this, TRANSITION_FADE_THROUGH);
mIsPreviousEnrollmentCanceled =
resultCode != BiometricEnrollBase.RESULT_FINISHED;
launchFaceOnlyEnroll();
} else {
notifySafetyIssueActionLaunchedIfNeeded(resultCode);
finishOrLaunchHandToParent(resultCode);
}
break;
case REQUEST_SINGLE_ENROLL_FACE:
mIsSingleEnrolling = false;
if (resultCode == Activity.RESULT_CANCELED && mIsFingerprintEnrollable) {
mIsPreviousEnrollmentCanceled = true;
launchFingerprintOnlyEnroll();
} else {
notifySafetyIssueActionLaunchedIfNeeded(resultCode);
finishOrLaunchHandToParent(resultCode);
}
break;
@@ -742,6 +751,15 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
startActivityForResult(intent, REQUEST_HANDOFF_PARENT);
}
private void notifySafetyIssueActionLaunchedIfNeeded(int resultCode) {
if (getIntent().getBooleanExtra(
CombinedBiometricStatusUtils.EXTRA_LAUNCH_FROM_SAFETY_SOURCE_ISSUE, false)
&& (resultCode != RESULT_FINISHED || mIsPreviousEnrollmentCanceled)) {
FeatureFactory.getFeatureFactory().getBiometricsFeatureProvider()
.notifySafetyIssueActionLaunched();
}
}
@Override
public int getMetricsCategory() {
return SettingsEnums.BIOMETRIC_ENROLL_ACTIVITY;

View File

@@ -36,6 +36,13 @@ import com.android.settingslib.utils.StringUtil;
*/
public class CombinedBiometricStatusUtils {
/**
* An intent extra indicates that the enrollment process is launched from biometric
* SafetySourceIssue action.
*/
public static final String EXTRA_LAUNCH_FROM_SAFETY_SOURCE_ISSUE =
"launch_from_safety_source_issue";
private final int mUserId;
private final Context mContext;
@Nullable

View File

@@ -16,10 +16,13 @@
package com.android.settings.biometrics.face
import android.app.ComponentCaller
import android.content.Intent
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.android.settings.biometrics.BiometricEnrollBase.RESULT_FINISHED
import com.android.settings.biometrics.combination.CombinedBiometricStatusUtils
import com.android.settings.overlay.FeatureFactory.Companion.featureFactory
@@ -46,9 +49,23 @@ class FaceEnroll: AppCompatActivity() {
*/
Log.d("FaceEnroll", "forward to $nextActivityClass")
val nextIntent = Intent(this, nextActivityClass)
nextIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT)
nextIntent.putExtras(intent)
startActivity(nextIntent)
startActivityForResult(nextIntent, 0)
}
override fun onActivityResult(
requestCode: Int,
resultCode: Int,
data: Intent?,
caller: ComponentCaller
) {
super.onActivityResult(requestCode, resultCode, data, caller)
if (intent.getBooleanExtra(
CombinedBiometricStatusUtils.EXTRA_LAUNCH_FROM_SAFETY_SOURCE_ISSUE, false)
&& resultCode != RESULT_FINISHED) {
featureFactory.biometricsFeatureProvider.notifySafetyIssueActionLaunched()
}
setResult(resultCode, data)
finish()
}
}

View File

@@ -16,10 +16,13 @@
package com.android.settings.biometrics.fingerprint
import android.app.ComponentCaller
import android.content.Intent
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.android.settings.biometrics.BiometricEnrollBase
import com.android.settings.biometrics.combination.CombinedBiometricStatusUtils
import com.android.settings.overlay.FeatureFactory.Companion.featureFactory
/**
@@ -69,9 +72,24 @@ open class FingerprintEnroll: AppCompatActivity() {
*/
Log.d("FingerprintEnroll", "forward to $nextActivityClass")
val nextIntent = Intent(this, nextActivityClass)
nextIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT)
nextIntent.putExtras(intent)
startActivity(nextIntent)
startActivityForResult(nextIntent, 0)
}
override fun onActivityResult(
requestCode: Int,
resultCode: Int,
data: Intent?,
caller: ComponentCaller
) {
super.onActivityResult(requestCode, resultCode, data, caller)
if (intent.getBooleanExtra(
CombinedBiometricStatusUtils.EXTRA_LAUNCH_FROM_SAFETY_SOURCE_ISSUE, false)
&& resultCode != BiometricEnrollBase.RESULT_FINISHED
) {
featureFactory.biometricsFeatureProvider.notifySafetyIssueActionLaunched()
}
setResult(resultCode, data)
finish()
}
}

View File

@@ -68,7 +68,6 @@ class FaceEnrollTest {
currentActivityInstance : FaceEnroll,
nextActivityClass: Class<out Activity>
) {
Truth.assertThat(currentActivityInstance.isFinishing).isTrue()
val nextActivityIntent = Shadows.shadowOf(currentActivityInstance).nextStartedActivity
assertThat(nextActivityIntent.component!!.className).isEqualTo(nextActivityClass.name)
assertThat(nextActivityIntent.extras!!.size()).isEqualTo(1)

View File

@@ -95,7 +95,6 @@ class FingerprintEnrollTest {
currentActivityInstance : FingerprintEnroll,
nextActivityClass: Class<out Activity>
) {
assertThat(currentActivityInstance.isFinishing).isTrue()
val nextActivityIntent = Shadows.shadowOf(currentActivityInstance).nextStartedActivity
assertThat(nextActivityIntent.component!!.className).isEqualTo(nextActivityClass.name)
assertThat(nextActivityIntent.extras!!.size()).isEqualTo(1)