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

Commit cdf34b66 authored by Hao Dong's avatar Hao Dong Committed by Android (Google) Code Review
Browse files

Merge "Show split screen dialog on the introduction and enrolling page." into main

parents d8d977d4 c9aaa73b
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ 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.settingslib.activityembedding.ActivityEmbeddingUtils;
import com.android.systemui.unfold.compat.ScreenSizeFoldProvider;
import com.android.systemui.unfold.updates.FoldProvider;

@@ -173,6 +174,14 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity {
        mUserId = getIntent().getIntExtra(Intent.EXTRA_USER_ID, UserHandle.myUserId());
        mPostureGuidanceIntent = FeatureFactory.getFeatureFactory()
                .getFaceFeatureProvider().getPostureGuidanceIntent(getApplicationContext());

        // Remove the existing split screen dialog.
        BiometricsSplitScreenDialog dialog =
                (BiometricsSplitScreenDialog) getSupportFragmentManager()
                        .findFragmentByTag(BiometricsSplitScreenDialog.class.getName());
        if (dialog != null) {
            getSupportFragmentManager().beginTransaction().remove(dialog).commit();
        }
    }

    @Override
@@ -338,4 +347,8 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity {
        final ColorStateList stateList = Utils.getColorAttr(this, android.R.attr.windowBackground);
        return stateList != null ? stateList.getDefaultColor() : Color.TRANSPARENT;
    }

    protected boolean shouldShowSplitScreenDialog() {
        return isInMultiWindowMode() && !ActivityEmbeddingUtils.isActivityEmbedded(this);
    }
}
+13 −0
Original line number Diff line number Diff line
@@ -154,6 +154,12 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (shouldShowSplitScreenDialog()) {
            BiometricsSplitScreenDialog
                    .newInstance(getModality(), !WizardManagerHelper.isAnySetupWizard(getIntent()))
                    .show(getSupportFragmentManager(), BiometricsSplitScreenDialog.class.getName());
        }

        if (savedInstanceState != null) {
            mConfirmingCredentials = savedInstanceState.getBoolean(KEY_CONFIRMING_CREDENTIALS);
            mHasScrolledToBottom = savedInstanceState.getBoolean(KEY_SCROLLED_TO_BOTTOM);
@@ -293,6 +299,13 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase

    @Override
    protected void onNextButtonClick(View view) {
        // If it's not on suw, this method shouldn't be accessed.
        if (shouldShowSplitScreenDialog() && WizardManagerHelper.isAnySetupWizard(getIntent())) {
            BiometricsSplitScreenDialog.newInstance(getModality(), false /*destroyActivity*/)
                    .show(getSupportFragmentManager(), BiometricsSplitScreenDialog.class.getName());
            return;
        }

        mNextClicked = true;
        if (checkMaxEnrolled() == 0) {
            // Lock thingy is already set up, launch directly to the next page
+8 −0
Original line number Diff line number Diff line
@@ -97,6 +97,14 @@ public abstract class BiometricsEnrollEnrolling extends BiometricEnrollBase
    }

    public void startEnrollment() {
        // If it's in multi window mode, dialog is shown, do not start enrollment.
        if (shouldShowSplitScreenDialog()) {
            return;
        }
        startEnrollmentInternal();
    }

    protected void startEnrollmentInternal() {
        mSidecar = (BiometricEnrollSidecar) getSupportFragmentManager()
                .findFragmentByTag(TAG_SIDECAR);
        if (mSidecar == null) {
+22 −3
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ package com.android.settings.biometrics;

import static android.hardware.biometrics.BiometricAuthenticator.TYPE_FACE;

import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_SKIP;

import android.app.Dialog;
import android.app.settings.SettingsEnums;
import android.content.DialogInterface;
@@ -34,23 +36,33 @@ import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 */
public class BiometricsSplitScreenDialog extends InstrumentedDialogFragment {
    private static final String KEY_BIOMETRICS_MODALITY = "biometrics_modality";
    private static final String KEU_DESTROY_ACTIVITY = "destroy_activity";

    @BiometricAuthenticator.Modality
    private int mBiometricsModality;
    private boolean mDestroyActivity;

    /** Returns the new instance of the class */
    /**
     * Returns the new instance of the class
     * @param biometricsModality Biometric modality.
     * @param destroyActivity Whether to destroy the activity
     * @return the current {@link BiometricsSplitScreenDialog}
     */
    public static BiometricsSplitScreenDialog newInstance(
            @BiometricAuthenticator.Modality int biometricsModality) {
            @BiometricAuthenticator.Modality int biometricsModality, boolean destroyActivity) {
        final BiometricsSplitScreenDialog dialog = new BiometricsSplitScreenDialog();
        final Bundle args = new Bundle();
        args.putInt(KEY_BIOMETRICS_MODALITY, biometricsModality);
        args.putBoolean(KEU_DESTROY_ACTIVITY, destroyActivity);
        dialog.setArguments(args);
        dialog.setCancelable(false);
        return dialog;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        mBiometricsModality = getArguments().getInt(KEY_BIOMETRICS_MODALITY);
        mDestroyActivity = getArguments().getBoolean(KEU_DESTROY_ACTIVITY);
        int titleId;
        int messageId;
        switch (mBiometricsModality) {
@@ -65,9 +77,16 @@ public class BiometricsSplitScreenDialog extends InstrumentedDialogFragment {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle(titleId)
                .setMessage(messageId)
                .setCancelable(false)
                .setPositiveButton(
                        R.string.biometric_settings_add_biometrics_in_split_mode_ok,
                        (DialogInterface.OnClickListener) (dialog, which) -> dialog.dismiss());
                        (DialogInterface.OnClickListener) (dialog, which) -> {
                            dialog.dismiss();
                            if (mDestroyActivity) {
                                getActivity().setResult(RESULT_SKIP);
                                getActivity().finish();
                            }
                        });
        return builder.create();
    }

+0 −28
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@
package com.android.settings.biometrics.combination;

import static android.app.Activity.RESULT_OK;
import static android.hardware.biometrics.BiometricAuthenticator.TYPE_FACE;
import static android.hardware.biometrics.BiometricAuthenticator.TYPE_FINGERPRINT;

import static com.android.settings.password.ChooseLockPattern.RESULT_FINISHED;

@@ -48,12 +46,10 @@ import com.android.settings.Utils;
import com.android.settings.biometrics.BiometricEnrollBase;
import com.android.settings.biometrics.BiometricStatusPreferenceController;
import com.android.settings.biometrics.BiometricUtils;
import com.android.settings.biometrics.BiometricsSplitScreenDialog;
import com.android.settings.core.SettingsBaseActivity;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.password.ChooseLockGeneric;
import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settingslib.activityembedding.ActivityEmbeddingUtils;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.transition.SettingsTransitionHelper;

@@ -167,18 +163,6 @@ public abstract class BiometricsSettingsBase extends DashboardFragment {
        // since FingerprintSettings and FaceSettings revoke the challenge when finishing.
        if (getFacePreferenceKey().equals(key)) {
            mDoNotFinishActivity = true;

            //  If it's split mode and there is no enrolled face, show the dialog. (if there is
            //  enrolled face, FaceSettingsEnrollButtonPreferenceController#onClick will handle
            //  the dialog)
            if (getActivity().isInMultiWindowMode() && !ActivityEmbeddingUtils.isActivityEmbedded(
                    getActivity()) && !mFaceManager.hasEnrolledTemplates(mUserId)) {
                BiometricsSplitScreenDialog.newInstance(TYPE_FACE).show(
                        getActivity().getSupportFragmentManager(),
                        BiometricsSplitScreenDialog.class.getName());
                return true;
            }

            mFaceManager.generateChallenge(mUserId, (sensorId, userId, challenge) -> {
                final Activity activity = getActivity();
                if (activity == null || activity.isFinishing()) {
@@ -209,18 +193,6 @@ public abstract class BiometricsSettingsBase extends DashboardFragment {
            return true;
        } else if (getFingerprintPreferenceKey().equals(key)) {
            mDoNotFinishActivity = true;

            //  If it's split mode and there is no enrolled fingerprint, show the dialog. (if
            //  there is enrolled fingerprint, FingerprintSettingsFragment#onPreferenceTreeClick
            //  will handle the dialog)
            if (getActivity().isInMultiWindowMode() && !ActivityEmbeddingUtils.isActivityEmbedded(
                    getActivity()) && !mFingerprintManager.hasEnrolledFingerprints(mUserId)) {
                BiometricsSplitScreenDialog.newInstance(TYPE_FINGERPRINT).show(
                        getActivity().getSupportFragmentManager(),
                        BiometricsSplitScreenDialog.class.getName());
                return true;
            }

            mFingerprintManager.generateChallenge(mUserId, (sensorId, userId, challenge) -> {
                final Activity activity = getActivity();
                if (activity == null || activity.isFinishing()) {
Loading