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

Commit 34d14426 authored by Bill Lin's avatar Bill Lin Committed by Android (Google) Code Review
Browse files

Merge changes from topics "disable_face_enroll_inSUW", "tuscany_FaceEnrollFoldPage" into tm-qpr-dev

* changes:
  3-1/ Impl FoldProvider.FoldCallback for Face enroll activities
  2-1/ Add config_suw_support_face_enroll to customize SUW face enroll flow
  Fix face enroll introduction crash after 10mins
parents dc071e94 b54ca639
Loading
Loading
Loading
Loading
+0 −0

Empty file added.

+16 −0
Original line number Diff line number Diff line
@@ -283,6 +283,19 @@
    <!-- ComponentName to launch a vendor-specific enrollment activity if available -->
    <string name="config_face_enroll" translatable="false"></string>

    <!-- ComponentName to launch a vendor-specific posture guidance activity if available -->
    <string name="config_face_enroll_guidance_page" translatable="false"></string>

    <!-- Whether to support posture listening for face auth, default is 0(DEVICE_POSTURE_UNKNOWN)
     means setting will try listening on device posture changes.
     0 : DEVICE_POSTURE_UNKNOWN
     1 : DEVICE_POSTURE_CLOSED
     2 : DEVICE_POSTURE_HALF_OPENED
     3 : DEVICE_POSTURE_OPENED
     4 : DEVICE_POSTURE_FLIPPED
     -->
    <integer name="config_face_enroll_supported_posture">0</integer>

    <!-- Whether to show the "less secure" info section on the face enroll intro screen -->
    <bool name="config_face_intro_show_less_secure">false</bool>

@@ -292,6 +305,9 @@
    <!-- Whether to use the Lottie animation for the face education enrollment screen -->
    <bool name="config_face_education_use_lottie">false</bool>

    <!-- Whether to support enrollment during setup wizard flow -->
    <bool name="config_suw_support_face_enroll">true</bool>

    <!-- App intent -->
    <string name="config_account_intent_uri" translatable="false"></string>

+3 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import androidx.window.embedding.SplitRule;
import com.android.settings.Settings;
import com.android.settings.SettingsActivity;
import com.android.settings.SubSettings;
import com.android.settings.biometrics.face.FaceEnrollIntroductionInternal;
import com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling;
import com.android.settings.biometrics.fingerprint.FingerprintEnrollIntroduction;
import com.android.settings.biometrics.fingerprint.FingerprintEnrollIntroductionInternal;
@@ -228,6 +229,8 @@ public class ActivityEmbeddingRulesController {
        addActivityFilter(activityFilters, FingerprintEnrollIntroduction.class);
        addActivityFilter(activityFilters, FingerprintEnrollIntroductionInternal.class);
        addActivityFilter(activityFilters, FingerprintEnrollEnrolling.class);
        addActivityFilter(activityFilters, FaceEnrollIntroductionInternal.class);
        addActivityFilter(activityFilters, Settings.FaceSettingsInternalActivity.class);
        addActivityFilter(activityFilters, AvatarPickerActivity.class);
        mSplitController.registerRule(new ActivityRule(activityFilters, true /* alwaysExpand */));
    }
+10 −4
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ import com.android.internal.widget.LockPatternUtils;
import com.android.settings.R;
import com.android.settings.SetupWizardUtils;
import com.android.settings.core.InstrumentedActivity;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.password.ChooseLockGeneric;
import com.android.settings.password.ChooseLockPattern;
import com.android.settings.password.ChooseLockSettingsHelper;
@@ -215,11 +216,16 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
                mIsFaceEnrollable =
                        faceManager.getEnrolledFaces(mUserId).size() < maxEnrolls;

                // exclude face enrollment from setup wizard if configured as a convenience
                // isSetupWizard is always false for unicorn enrollment, so if consent is
                // required check if setup has completed instead.
                final boolean isSettingUp = isSetupWizard || (mParentalOptionsRequired
                final boolean parentalConsent = isSetupWizard || (mParentalOptionsRequired
                        && !WizardManagerHelper.isUserSetupComplete(this));
                if (parentalConsent && isMultiSensor && mIsFaceEnrollable) {
                    // Exclude face enrollment from setup wizard if feature config not supported
                    // in setup wizard flow, we still allow user enroll faces through settings.
                    mIsFaceEnrollable = FeatureFactory.getFactory(getApplicationContext())
                            .getFaceFeatureProvider()
                            .isSetupWizardSupported(getApplicationContext());
                    Log.d(TAG, "config_suw_support_face_enroll: " + mIsFaceEnrollable);
                }
            }
        }
        if (mHasFeatureFingerprint) {
+50 −8
Original line number Diff line number Diff line
@@ -38,7 +38,10 @@ import com.android.settings.SetupWizardUtils;
import com.android.settings.Utils;
import com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling;
import com.android.settings.core.InstrumentedActivity;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.systemui.unfold.compat.ScreenSizeFoldProvider;
import com.android.systemui.unfold.updates.FoldProvider;

import com.google.android.setupcompat.template.FooterBarMixin;
import com.google.android.setupcompat.template.FooterButton;
@@ -60,8 +63,10 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity {
    public static final String EXTRA_KEY_SENSOR_ID = "sensor_id";
    public static final String EXTRA_KEY_CHALLENGE = "challenge";
    public static final String EXTRA_KEY_MODALITY = "sensor_modality";
    public static final String EXTRA_KEY_NEXT_LAUNCHED = "next_launched";
    public static final String EXTRA_FINISHED_ENROLL_FACE = "finished_enrolling_face";
    public static final String EXTRA_FINISHED_ENROLL_FINGERPRINT = "finished_enrolling_fingerprint";
    public static final String EXTRA_LAUNCHED_POSTURE_GUIDANCE = "launched_posture_guidance";

    /**
     * Used by the choose fingerprint wizard to indicate the wizard is
@@ -115,14 +120,25 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity {
     * example, when starting fingerprint enroll after face enroll.
     */
    public static final int ENROLL_NEXT_BIOMETRIC_REQUEST = 6;
    public static final int REQUEST_POSTURE_GUIDANCE = 7;

    protected boolean mLaunchedConfirmLock;
    protected boolean mLaunchedPostureGuidance;
    protected boolean mNextLaunched;
    protected byte[] mToken;
    protected int mUserId;
    protected int mSensorId;
    @BiometricUtils.DevicePostureInt
    protected int mDevicePostureState;
    protected long mChallenge;
    protected boolean mFromSettingsSummary;
    protected FooterBarMixin mFooterBarMixin;
    @Nullable
    protected ScreenSizeFoldProvider mScreenSizeFoldProvider;
    @Nullable
    protected Intent mPostureGuidanceIntent = null;
    @Nullable
    protected FoldProvider.FoldCallback mFoldCallback = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
@@ -139,7 +155,8 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity {
                    ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN);
        }
        mFromSettingsSummary = getIntent().getBooleanExtra(EXTRA_FROM_SETTINGS_SUMMARY, false);
        if (savedInstanceState != null && mToken == null) {
        if (savedInstanceState != null) {
            if (mToken == null) {
                mLaunchedConfirmLock = savedInstanceState.getBoolean(EXTRA_KEY_LAUNCHED_CONFIRM);
                mToken = savedInstanceState.getByteArray(
                        ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN);
@@ -148,7 +165,13 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity {
                mChallenge = savedInstanceState.getLong(EXTRA_KEY_CHALLENGE);
                mSensorId = savedInstanceState.getInt(EXTRA_KEY_SENSOR_ID);
            }
            mLaunchedPostureGuidance = savedInstanceState.getBoolean(
                    EXTRA_LAUNCHED_POSTURE_GUIDANCE);
            mNextLaunched = savedInstanceState.getBoolean(EXTRA_KEY_NEXT_LAUNCHED);
        }
        mUserId = getIntent().getIntExtra(Intent.EXTRA_USER_ID, UserHandle.myUserId());
        mPostureGuidanceIntent = FeatureFactory.getFactory(getApplicationContext())
                .getFaceFeatureProvider().getPostureGuidanceIntent(getApplicationContext());
    }

    @Override
@@ -159,6 +182,8 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity {
        outState.putBoolean(EXTRA_FROM_SETTINGS_SUMMARY, mFromSettingsSummary);
        outState.putLong(EXTRA_KEY_CHALLENGE, mChallenge);
        outState.putInt(EXTRA_KEY_SENSOR_ID, mSensorId);
        outState.putBoolean(EXTRA_LAUNCHED_POSTURE_GUIDANCE, mLaunchedPostureGuidance);
        outState.putBoolean(EXTRA_KEY_NEXT_LAUNCHED, mNextLaunched);
    }

    @Override
@@ -184,6 +209,12 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity {
    @Override
    protected void onStop() {
        super.onStop();
        if (mScreenSizeFoldProvider != null && mFoldCallback != null) {
            mScreenSizeFoldProvider.unregisterCallback(mFoldCallback);
        }
        mScreenSizeFoldProvider = null;
        mFoldCallback = null;

        if (!isChangingConfigurations() && shouldFinishWhenBackgrounded()
                && !BiometricUtils.isAnyMultiBiometricFlow(this)) {
            setResult(RESULT_TIMEOUT);
@@ -191,6 +222,17 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity {
        }
    }

    protected boolean launchPostureGuidance() {
        if (mPostureGuidanceIntent == null || mLaunchedPostureGuidance) {
            return false;
        }
        BiometricUtils.copyMultiBiometricExtras(getIntent(), mPostureGuidanceIntent);
        startActivityForResult(mPostureGuidanceIntent, REQUEST_POSTURE_GUIDANCE);
        mLaunchedPostureGuidance = true;
        overridePendingTransition(0 /* no enter anim */, 0 /* no exit anim */);
        return mLaunchedPostureGuidance;
    }

    protected boolean shouldFinishWhenBackgrounded() {
        return !WizardManagerHelper.isAnySetupWizard(getIntent());
    }
Loading