Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6f4f66e5 authored by Shawn Lin's avatar Shawn Lin
Browse files

Support customization for biometrics SafeSourceIssue

Notify issue action launch when enrollment process is canceled

Bug: 370940762
Test: atest FaceEnrollTest FingerprintEnrollTest
Flag: com.android.settings.flags.biometrics_onboarding_education
Change-Id: I91e2dcf44ee8cfd3e7c74d05f51a1ef30ea6f8b2
parent fb4be969
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -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;
+7 −0
Original line number Diff line number Diff line
@@ -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
+19 −2
Original line number Diff line number Diff line
@@ -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()
    }
}
 No newline at end of file
+20 −2
Original line number Diff line number Diff line
@@ -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()
    }
}
 No newline at end of file
+0 −1
Original line number Diff line number Diff line
@@ -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)
Loading