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

Commit fa496047 authored by Milton Wu's avatar Milton Wu
Browse files

Refine RFPS enrolling v2

1. Fix skip button doesn't work case
2. Support rotation during enrollment
3. Show error dialog page
4. Show icon touched dialog page

Bug: 260957939
Test: atest FingerprintEnrollFindSensorViewModelTest
      FingerprintEnrollProgressViewModelTest
      FingerprintEnrollmentViewModelTest
      FingerprintEnrollmentActivityTest
Change-Id: I617e3e64a130682002b07551d11aff2864fd4538
parent 1be63ef9
Loading
Loading
Loading
Loading
+17 −16
Original line number Diff line number Diff line
@@ -18,27 +18,29 @@ package com.android.settings.biometrics2.ui.view;

import android.app.Dialog;
import android.app.settings.SettingsEnums;
import android.content.DialogInterface;
import android.content.Context;
import android.os.Bundle;

import androidx.appcompat.app.AlertDialog;
import androidx.lifecycle.ViewModelProvider;

import com.android.settings.R;
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;

/**
 * Icon Touch dialog
 */
public class IconTouchDialog extends InstrumentedDialogFragment {
public class FingerprintEnrollEnrollingIconTouchDialog extends InstrumentedDialogFragment {

//    private FingerprintEnrollEnrollingViewModel mViewModel;
//
//    @Override
//    public void onAttach(Context context) {
//        mViewModel = new ViewModelProvider(getActivity()).get(
//                FingerprintEnrollEnrollingViewModel.class);
//        super.onAttach(context);
//    }
    private FingerprintEnrollEnrollingViewModel mViewModel;

    @Override
    public void onAttach(Context context) {
        mViewModel = new ViewModelProvider(getActivity()).get(
                FingerprintEnrollEnrollingViewModel.class);
        super.onAttach(context);
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
@@ -46,12 +48,11 @@ public class IconTouchDialog extends InstrumentedDialogFragment {
                R.style.Theme_AlertDialog);
        builder.setTitle(R.string.security_settings_fingerprint_enroll_touch_dialog_title)
                .setMessage(R.string.security_settings_fingerprint_enroll_touch_dialog_message)
                .setPositiveButton(R.string.security_settings_fingerprint_enroll_dialog_ok,
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                .setPositiveButton(
                        R.string.security_settings_fingerprint_enroll_dialog_ok,
                        (dialog, which) -> {
                            dialog.dismiss();
                            }
                            mViewModel.onIconTouchDialogDismiss();
                        });
        return builder.create();
    }
+37 −97
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator;
import android.widget.ProgressBar;
@@ -41,12 +42,11 @@ import android.widget.TextView;

import androidx.annotation.IdRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import androidx.transition.Transition;
import androidx.transition.TransitionSet;

import com.android.settings.R;
import com.android.settings.biometrics.fingerprint.FingerprintErrorDialog;
@@ -56,7 +56,6 @@ import com.android.settings.biometrics2.ui.viewmodel.DeviceRotationViewModel;
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel;
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollProgressViewModel;

import com.airbnb.lottie.LottieAnimationView;
import com.google.android.setupcompat.template.FooterBarMixin;
import com.google.android.setupcompat.template.FooterButton;
import com.google.android.setupdesign.GlifLayout;
@@ -70,6 +69,7 @@ public class FingerprintEnrollEnrollingRfpsFragment extends Fragment {
    private static final boolean DEBUG = false;

    private static final int PROGRESS_BAR_MAX = 10000;
    private static final long ANIMATION_DURATION = 250L;
    private static final long ICON_TOUCH_DURATION_UNTIL_DIALOG_SHOWN = 500;
    private static final int ICON_TOUCH_COUNT_SHOW_UNTIL_DIALOG_SHOWN = 3;

@@ -96,16 +96,6 @@ public class FingerprintEnrollEnrollingRfpsFragment extends Fragment {
    private AnimatedVectorDrawable mIconAnimationDrawable;
    private AnimatedVectorDrawable mIconBackgroundBlinksDrawable;

    private LottieAnimationView mIllustrationLottie;
    private boolean mShouldShowLottie;
    private boolean mIsAccessibilityEnabled;

    private boolean mHaveShownSfpsNoAnimationLottie;
    private boolean mHaveShownSfpsCenterLottie;
    private boolean mHaveShownSfpsTipLottie;
    private boolean mHaveShownSfpsLeftEdgeLottie;
    private boolean mHaveShownSfpsRightEdgeLottie;

    private final View.OnClickListener mOnSkipClickListener = v -> {
        mProgressViewModel.cancelEnrollment();
        mEnrollingViewModel.onSkipButtonClick();
@@ -115,7 +105,7 @@ public class FingerprintEnrollEnrollingRfpsFragment extends Fragment {
        if (DEBUG) {
            Log.d(TAG, "mProgressObserver(" + progress + ")");
        }
        if (progress != null) {
        if (progress != null && progress.getSteps() >= 0) {
            onEnrollmentProgressChange(progress);
        }
    };
@@ -128,6 +118,7 @@ public class FingerprintEnrollEnrollingRfpsFragment extends Fragment {
            onEnrollmentHelp(helpMessage);
        }
    };

    private final Observer<EnrollmentStatusMessage> mErrorMessageObserver = errorMessage -> {
        if (DEBUG) {
            Log.d(TAG, "mErrorMessageObserver(" + errorMessage + ")");
@@ -136,15 +127,6 @@ public class FingerprintEnrollEnrollingRfpsFragment extends Fragment {
            onEnrollmentError(errorMessage);
        }
    };
    private final Observer<Boolean> mAcquireObserver = isAcquiredGood -> {
        // TODO
    };
    private final Observer<Integer> mPointerDownObserver = sensorId -> {
        // TODO
    };
    private final Observer<Integer> mPointerUpObserver = sensorId -> {
        // TODO
    };

    private int mIconTouchCount;

@@ -156,40 +138,39 @@ public class FingerprintEnrollEnrollingRfpsFragment extends Fragment {
        mRotationViewModel = provider.get(DeviceRotationViewModel.class);
        mProgressViewModel = provider.get(FingerprintEnrollProgressViewModel.class);
        super.onAttach(context);
        final TransitionSet transitionSet = (TransitionSet) getSharedElementEnterTransition();
        if (transitionSet != null) {
            transitionSet.addListener(new Transition.TransitionListener() {
                @Override
                public void onTransitionStart(@NonNull Transition transition) {
    }

    @Nullable
    @Override
                public void onTransitionEnd(@NonNull Transition transition) {
                    transition.removeListener(this);
                    mAnimationCancelled = false;
                    startIconAnimation();
                }

    public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
        if (enter && nextAnim == R.anim.sud_slide_next_in) {
            final Animation animation = AnimationUtils.loadAnimation(getActivity(), nextAnim);
            if (animation != null) {
                animation.setAnimationListener(new Animation.AnimationListener() {
                    @Override
                public void onTransitionCancel(@NonNull Transition transition) {
                    public void onAnimationStart(Animation animation) {
                    }

                    @Override
                public void onTransitionPause(@NonNull Transition transition) {
                    public void onAnimationEnd(Animation animation) {
                        mAnimationCancelled = false;
                        startIconAnimation();
                    }

                    @Override
                public void onTransitionResume(@NonNull Transition transition) {
                    public void onAnimationRepeat(Animation animation) {
                    }
                });
                return animation;
            }
        }
        return super.onCreateAnimation(transit, enter, nextAnim);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mEnrollingViewModel.restoreSavedState(savedInstanceState);
        mIsAccessibilityEnabled = mEnrollingViewModel.isAccessibilityEnabled();
    }

    @Override
@@ -215,12 +196,6 @@ public class FingerprintEnrollEnrollingRfpsFragment extends Fragment {
                R.string.security_settings_fingerprint_enroll_start_message));
        glifLayoutHelper.setHeaderText(R.string.security_settings_fingerprint_enroll_repeat_title);

//        mShouldShowLottie = shouldShowLottie(); // TODO move this call into updateOrientation()?
//        boolean isLandscape = BiometricUtils.isReverseLandscape(activity)
//                || BiometricUtils.isLandscape(activity);
//        updateOrientation(containView, (isLandscape
//                ? Configuration.ORIENTATION_LANDSCAPE : Configuration.ORIENTATION_PORTRAIT));

        mErrorText = containView.findViewById(R.id.error_text);
        mProgressBar = containView.findViewById(R.id.fingerprint_progress_bar);
        mFooterBarMixin = containView.getMixin(FooterBarMixin.class);
@@ -273,9 +248,6 @@ public class FingerprintEnrollEnrollingRfpsFragment extends Fragment {
        startEnrollment();
        updateProgress(false /* animate */, mProgressViewModel.getProgressLiveData().getValue());
        updateTitleAndDescription();
        if (true /* TODO check mRestoring */) {
            startIconAnimation();
        }
    }

    private void startIconAnimation() {
@@ -292,6 +264,7 @@ public class FingerprintEnrollEnrollingRfpsFragment extends Fragment {
    }

    private void onCancelEnrollment(@IdRes int errorMsgId) {
        // TODO
        // showErrorDialog() will cause onWindowFocusChanged(false), set mIsCanceled to false
        // before showErrorDialog() to prevent that another error dialog is triggered again.
// TODO       mIsCanceled = true;
@@ -319,9 +292,6 @@ public class FingerprintEnrollEnrollingRfpsFragment extends Fragment {
        mProgressViewModel.getProgressLiveData().removeObserver(mProgressObserver);
        mProgressViewModel.getHelpMessageLiveData().removeObserver(mHelpMessageObserver);
        mProgressViewModel.getErrorMessageLiveData().removeObserver(mErrorMessageObserver);
        mProgressViewModel.getAcquireLiveData().removeObserver(mAcquireObserver);
        mProgressViewModel.getPointerDownLiveData().removeObserver(mPointerDownObserver);
        mProgressViewModel.getPointerUpLiveData().removeObserver(mPointerUpObserver);
    }

    private void cancelEnrollment() {
@@ -330,13 +300,13 @@ public class FingerprintEnrollEnrollingRfpsFragment extends Fragment {
    }

    private void startEnrollment() {
        final boolean startResult = mProgressViewModel.startEnrollment(ENROLL_ENROLL);
        if (!startResult) {
            Log.e(TAG, "startEnrollment(), failed");
        }
        mProgressViewModel.getProgressLiveData().observe(this, mProgressObserver);
        mProgressViewModel.getHelpMessageLiveData().observe(this, mHelpMessageObserver);
        mProgressViewModel.getErrorMessageLiveData().observe(this, mErrorMessageObserver);
        mProgressViewModel.getAcquireLiveData().observe(this, mAcquireObserver);
        mProgressViewModel.getPointerDownLiveData().observe(this, mPointerDownObserver);
        mProgressViewModel.getPointerUpLiveData().observe(this, mPointerUpObserver);
        mProgressViewModel.startEnrollment(ENROLL_ENROLL);
    }

    private void onEnrollmentHelp(@NonNull EnrollmentStatusMessage helpMessage) {
@@ -443,7 +413,7 @@ public class FingerprintEnrollEnrollingRfpsFragment extends Fragment {
                mProgressBar.getProgress(), progress);
        anim.addListener(mProgressAnimationListener);
        anim.setInterpolator(mFastOutSlowInInterpolator);
        anim.setDuration(250);
        anim.setDuration(ANIMATION_DURATION);
        anim.start();
        mProgressAnim = anim;
    }
@@ -457,24 +427,6 @@ public class FingerprintEnrollEnrollingRfpsFragment extends Fragment {
        }
    };

//    private void updateOrientation(@NonNull GlifLayout glifLayout, int orientation) {
//        switch (orientation) {
//            case Configuration.ORIENTATION_LANDSCAPE: {
//                mIllustrationLottie = null;
//                break;
//            }
//            case Configuration.ORIENTATION_PORTRAIT: {
//                if (shouldShowLottie()) {
//                    mIllustrationLottie = glifLayout.findViewById(R.id.illustration_lottie);
//                }
//                break;
//            }
//            default:
//                Log.e(TAG, "Error unhandled configuration change");
//                break;
//        }
//    }

    private void animateFlash() {
        if (mIconBackgroundBlinksDrawable != null) {
            mIconBackgroundBlinksDrawable.start();
@@ -512,9 +464,8 @@ public class FingerprintEnrollEnrollingRfpsFragment extends Fragment {
                @Override
                public void onAnimationEnd(Animator animation) {
                    stopIconAnimation();

                    if (mProgressBar.getProgress() >= PROGRESS_BAR_MAX) {
                        mProgressBar.postDelayed(mDelayedFinishRunnable, 250L);
                        mProgressBar.postDelayed(mDelayedFinishRunnable, ANIMATION_DURATION);
                    }
                }

@@ -523,13 +474,7 @@ public class FingerprintEnrollEnrollingRfpsFragment extends Fragment {
            };

    // Give the user a chance to see progress completed before jumping to the next stage.
    private final Runnable mDelayedFinishRunnable = new Runnable() {
        @Override
        public void run() {
            mEnrollingViewModel.onSkipButtonClick();
            /* TODO launchFinish(); */
        }
    };
    private final Runnable mDelayedFinishRunnable = () -> mEnrollingViewModel.onEnrollingDone();

    private final Animatable2.AnimationCallback mIconAnimationCallback =
            new Animatable2.AnimationCallback() {
@@ -540,12 +485,7 @@ public class FingerprintEnrollEnrollingRfpsFragment extends Fragment {
                    }

                    // Start animation after it has ended.
                    mProgressBar.post(new Runnable() {
                        @Override
                        public void run() {
                            startIconAnimation();
                        }
                    });
                    mProgressBar.post(() -> startIconAnimation());
                }
            };
}
+2 −3
Original line number Diff line number Diff line
@@ -172,7 +172,7 @@ public class FingerprintEnrollFindRfpsFragment extends Fragment {
            Log.d(TAG, "onStop(), current enrolling: " + isEnrolling + ", animation exist:"
                    + (mAnimation != null));
        }
        if (!isEnrolling) {
        if (isEnrolling) {
            stopLookingForFingerprint(false);
        }
    }
@@ -184,12 +184,11 @@ public class FingerprintEnrollFindRfpsFragment extends Fragment {
            return;
        }

        mProgressViewModel.clearProgressLiveData();
        mProgressViewModel.getProgressLiveData().observe(this, mProgressObserver);
        final boolean startResult = mProgressViewModel.startEnrollment(ENROLL_FIND_SENSOR);
        if (!startResult) {
            Log.e(TAG, "startLookingForFingerprint(), failed to start enrollment");
        }
        mProgressViewModel.getProgressLiveData().observe(this, mProgressObserver);
    }

    private void stopLookingForFingerprint(boolean waitForLastCancelErrMsg) {
+0 −1
Original line number Diff line number Diff line
@@ -98,7 +98,6 @@ public class FingerprintEnrollFindSfpsFragment extends Fragment {
            Log.d(TAG, "mProgressObserver(" + progress + ")");
        }
        if (progress != null && !progress.isInitialStep()) {
            mProgressViewModel.clearProgressLiveData();
            mViewModel.onStartButtonClick();
        }
    };
+66 −43
Original line number Diff line number Diff line
@@ -27,6 +27,14 @@ import static com.android.settings.biometrics2.ui.viewmodel.AutoCredentialViewMo
import static com.android.settings.biometrics2.ui.viewmodel.AutoCredentialViewModel.CREDENTIAL_IS_GENERATING_CHALLENGE;
import static com.android.settings.biometrics2.ui.viewmodel.AutoCredentialViewModel.CREDENTIAL_VALID;
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel.ErrorDialogData;
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel.FINGERPRINT_ENROLL_ENROLLING_ACTION_DISMISS_ICON_TOUCH_DIALOG;
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel.FINGERPRINT_ENROLL_ENROLLING_ACTION_DONE;
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel.FINGERPRINT_ENROLL_ENROLLING_ACTION_SHOW_ICON_TOUCH_DIALOG;
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel.FINGERPRINT_ENROLL_ENROLLING_ACTION_SKIP;
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel.FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_FINISH;
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel.FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_TIMEOUT;
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel.FingerprintEnrollEnrollingAction;
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel.FingerprintErrorDialogAction;
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollFindSensorViewModel.FINGERPRINT_ENROLL_FIND_SENSOR_ACTION_DIALOG;
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollFindSensorViewModel.FINGERPRINT_ENROLL_FIND_SENSOR_ACTION_SKIP;
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollFindSensorViewModel.FINGERPRINT_ENROLL_FIND_SENSOR_ACTION_START;
@@ -122,12 +130,12 @@ public class FingerprintEnrollmentActivity extends FragmentActivity {
            onFindSensorAction(action);
        }
    };
    private final Observer<Boolean> mEnrollingDoneObserver = isDone -> {
    private final Observer<Integer> mEnrollingActionObserver = action -> {
        if (DEBUG) {
            Log.d(TAG, "mEnrollingDoneObserver(" + isDone + ")");
            Log.d(TAG, "mEnrollingActionObserver(" + action + ")");
        }
        if (isDone != null) {
            onEnrollingDone(isDone);
        if (action != null) {
            onEnrollingAction(action);
        }
    };
    private final Observer<ErrorDialogData> mEnrollingErrorDialogObserver = data -> {
@@ -135,7 +143,16 @@ public class FingerprintEnrollmentActivity extends FragmentActivity {
            Log.d(TAG, "mEnrollingErrorDialogObserver(" + data + ")");
        }
        if (data != null) {
            startEnrollingErrorDialog();
            new FingerprintEnrollEnrollingErrorDialog().show(getSupportFragmentManager(),
                    ENROLLING_ERROR_DIALOG_TAG);
        }
    };
    private final Observer<Integer> mEnrollingErrorDialogActionObserver = action -> {
        if (DEBUG) {
            Log.d(TAG, "mEnrollingErrorDialogActionObserver(" + action + ")");
        }
        if (action != null) {
            onEnrollingErrorDialogAction(action);
        }
    };
    private final ActivityResultCallback<ActivityResult> mNextActivityResultCallback =
@@ -292,6 +309,7 @@ public class FingerprintEnrollmentActivity extends FragmentActivity {
            tag = ENROLLING_RFPS_TAG;
            fragmentClass = FingerprintEnrollEnrollingRfpsFragment.class;
        }

        getSupportFragmentManager().beginTransaction()
                .setReorderingAllowed(true)
                .setCustomAnimations(R.anim.sud_slide_next_in, R.anim.sud_slide_next_out,
@@ -304,15 +322,18 @@ public class FingerprintEnrollmentActivity extends FragmentActivity {
    private void attachEnrollingViewModel() {
        final FingerprintEnrollEnrollingViewModel enrollingViewModel =
                mViewModelProvider.get(FingerprintEnrollEnrollingViewModel.class);
        enrollingViewModel.clearBackPressedData();
        enrollingViewModel.clearActionLiveData();
        enrollingViewModel.getActionLiveData().observe(this, mEnrollingActionObserver);
        enrollingViewModel.getErrorDialogLiveData().observe(this, mEnrollingErrorDialogObserver);

        final FingerprintEnrollProgressViewModel progressViewModel =
                mViewModelProvider.get(FingerprintEnrollProgressViewModel.class);
        progressViewModel.getDoneLiveData().observe(this, mEnrollingDoneObserver);
        enrollingViewModel.getErrorDialogActionLiveData().observe(this,
                mEnrollingErrorDialogActionObserver);
    }

    private void startFinishActivity() {
        final FingerprintEnrollEnrollingViewModel enrollingViewModel =
                mViewModelProvider.get(FingerprintEnrollEnrollingViewModel.class);
        enrollingViewModel.clearActionLiveData();

        final boolean isSuw = mViewModel.getRequest().isSuw();
        if (!mViewModel.isWaitingActivityResult().compareAndSet(false, true)) {
            Log.w(TAG, "startNext, isSuw:" + isSuw + ", fail to set isWaiting flag");
@@ -325,16 +346,6 @@ public class FingerprintEnrollmentActivity extends FragmentActivity {
        mNextActivityLauncher.launch(intent);
    }

    private void startSkipSetupFindFpsDialog() {
        new SkipSetupFindFpsDialog().show(getSupportFragmentManager(),
                SKIP_SETUP_FIND_FPS_DIALOG_TAG);
    }

    private void startEnrollingErrorDialog() {
        new FingerprintEnrollEnrollingErrorDialog().show(getSupportFragmentManager(),
                ENROLLING_ERROR_DIALOG_TAG);
    }

    private void onGenerateChallengeFailed(@NonNull Boolean ignoredBoolean) {
        onSetActivityResult(new ActivityResult(RESULT_CANCELED, null));
    }
@@ -366,6 +377,10 @@ public class FingerprintEnrollmentActivity extends FragmentActivity {
        final Intent intent = resultCode == BiometricEnrollBase.RESULT_FINISHED
                ? createSetResultIntentWithGeneratingChallengeExtra(result.getData())
                : result.getData();
        if (DEBUG) {
            Log.d(TAG, "onSetActivityResult(" + result + "), call setResult(" + resultCode
                    + ", " + intent + ")");
        }
        setResult(resultCode, intent);
        finish();
    }
@@ -443,7 +458,8 @@ public class FingerprintEnrollmentActivity extends FragmentActivity {
                return;
            }
            case FINGERPRINT_ENROLL_FIND_SENSOR_ACTION_DIALOG: {
                startSkipSetupFindFpsDialog();
                new SkipSetupFindFpsDialog().show(getSupportFragmentManager(),
                        SKIP_SETUP_FIND_FPS_DIALOG_TAG);
                return;
            }
            case FINGERPRINT_ENROLL_FIND_SENSOR_ACTION_START: {
@@ -452,15 +468,37 @@ public class FingerprintEnrollmentActivity extends FragmentActivity {
        }
    }

    private void onEnrollingDone(boolean isDone) {
        if (!isDone) {
            return;
    private void onEnrollingAction(@FingerprintEnrollEnrollingAction int action) {
        switch (action) {
            case FINGERPRINT_ENROLL_ENROLLING_ACTION_DONE: {
                startFinishActivity();
                break;
            }
            case FINGERPRINT_ENROLL_ENROLLING_ACTION_SKIP: {
                onSetActivityResult(new ActivityResult(BiometricEnrollBase.RESULT_SKIP, null));
                break;
            }
            case FINGERPRINT_ENROLL_ENROLLING_ACTION_SHOW_ICON_TOUCH_DIALOG: {
                new FingerprintEnrollEnrollingIconTouchDialog().show(getSupportFragmentManager(),
                        SKIP_SETUP_FIND_FPS_DIALOG_TAG);
                break;
            }
            case FINGERPRINT_ENROLL_ENROLLING_ACTION_DISMISS_ICON_TOUCH_DIALOG: {
                onSetActivityResult(new ActivityResult(BiometricEnrollBase.RESULT_TIMEOUT, null));
                break;
            }
        }
    }
        final FingerprintEnrollProgressViewModel progressViewModel =
                mViewModelProvider.get(FingerprintEnrollProgressViewModel.class);
        progressViewModel.clearProgressLiveData();

        startFinishActivity();
    private void onEnrollingErrorDialogAction(@FingerprintErrorDialogAction int action) {
        switch (action) {
            case FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_FINISH:
                onSetActivityResult(new ActivityResult(BiometricEnrollBase.RESULT_FINISHED, null));
                break;
            case FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_TIMEOUT:
                onSetActivityResult(new ActivityResult(BiometricEnrollBase.RESULT_TIMEOUT, null));
                break;
        }
    }

    @Override
@@ -469,21 +507,6 @@ public class FingerprintEnrollmentActivity extends FragmentActivity {
        mViewModel.checkFinishActivityDuringOnPause(isFinishing(), isChangingConfigurations());
    }

    @Override
    public void onBackPressed() {
        final FragmentManager manager = getSupportFragmentManager();
        final String[] tags = new String[] {ENROLLING_UDFPS_TAG, ENROLLING_SFPS_TAG,
                ENROLLING_RFPS_TAG };
        for (String tag: tags) {
            final Fragment fragment = manager.findFragmentByTag(tag);
            if (fragment != null) {
                mViewModelProvider.get(FingerprintEnrollEnrollingViewModel.class).onBackPressed();
                break;
            }
        }
        super.onBackPressed();
    }

    @Override
    protected void onApplyThemeResource(Resources.Theme theme, @StyleRes int resid, boolean first) {
        theme.applyStyle(R.style.SetupWizardPartnerResource, true);
Loading