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

Commit 88c0769e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Biometrics v2 RFPS enrolling refine"

parents 9e3cf71e f7845d82
Loading
Loading
Loading
Loading
+44 −34
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.graphics.drawable.Animatable2;
import android.graphics.drawable.AnimatedVectorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
@@ -40,7 +41,7 @@ import android.view.animation.Interpolator;
import android.widget.ProgressBar;
import android.widget.TextView;

import androidx.annotation.IdRes;
import androidx.activity.OnBackPressedCallback;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
@@ -52,7 +53,6 @@ import com.android.settings.R;
import com.android.settings.biometrics.fingerprint.FingerprintErrorDialog;
import com.android.settings.biometrics2.ui.model.EnrollmentProgress;
import com.android.settings.biometrics2.ui.model.EnrollmentStatusMessage;
import com.android.settings.biometrics2.ui.viewmodel.DeviceRotationViewModel;
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel;
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollProgressViewModel;

@@ -80,7 +80,6 @@ public class FingerprintEnrollEnrollingRfpsFragment extends Fragment {
    private static final int HINT_TIMEOUT_DURATION = 2500;

    private FingerprintEnrollEnrollingViewModel mEnrollingViewModel;
    private DeviceRotationViewModel mRotationViewModel;
    private FingerprintEnrollProgressViewModel mProgressViewModel;

    private Interpolator mFastOutSlowInInterpolator;
@@ -92,13 +91,13 @@ public class FingerprintEnrollEnrollingRfpsFragment extends Fragment {
    private ProgressBar mProgressBar;
    private ObjectAnimator mProgressAnim;
    private TextView mErrorText;
    private FooterBarMixin mFooterBarMixin;
    private AnimatedVectorDrawable mIconAnimationDrawable;
    private AnimatedVectorDrawable mIconBackgroundBlinksDrawable;
    private int mIconTouchCount;

    private final View.OnClickListener mOnSkipClickListener = v -> {
        mProgressViewModel.cancelEnrollment();
        mEnrollingViewModel.onSkipButtonClick();
        mEnrollingViewModel.setOnSkipPressed();
        cancelEnrollment();
    };

    private final Observer<EnrollmentProgress> mProgressObserver = progress -> {
@@ -128,16 +127,21 @@ public class FingerprintEnrollEnrollingRfpsFragment extends Fragment {
        }
    };

    private int mIconTouchCount;

    @Override
    public void onAttach(@NonNull Context context) {
        final FragmentActivity activity = getActivity();
        final ViewModelProvider provider = new ViewModelProvider(activity);
        mEnrollingViewModel = provider.get(FingerprintEnrollEnrollingViewModel.class);
        mRotationViewModel = provider.get(DeviceRotationViewModel.class);
        mProgressViewModel = provider.get(FingerprintEnrollProgressViewModel.class);
        super.onAttach(context);
        requireActivity().getOnBackPressedDispatcher().addCallback(new OnBackPressedCallback(true) {
            @Override
            public void handleOnBackPressed() {
                setEnabled(false);
                mEnrollingViewModel.setOnBackPressed();
                cancelEnrollment();
            }
        });
    }

    @Nullable
@@ -198,8 +202,7 @@ public class FingerprintEnrollEnrollingRfpsFragment extends Fragment {

        mErrorText = containView.findViewById(R.id.error_text);
        mProgressBar = containView.findViewById(R.id.fingerprint_progress_bar);
        mFooterBarMixin = containView.getMixin(FooterBarMixin.class);
        mFooterBarMixin.setSecondaryButton(
        containView.getMixin(FooterBarMixin.class).setSecondaryButton(
                new FooterButton.Builder(activity)
                        .setText(R.string.security_settings_fingerprint_enroll_enrolling_skip)
                        .setListener(mOnSkipClickListener)
@@ -263,39 +266,28 @@ 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;
// TODO       mIsOrientationChanged = false;
        mEnrollingViewModel.showErrorDialog(new FingerprintEnrollEnrollingViewModel.ErrorDialogData(
                mView.getContext().getString(FingerprintErrorDialog.getErrorMessage(errorMsgId)),
                mView.getContext().getString(FingerprintErrorDialog.getErrorTitle(errorMsgId)),
                errorMsgId
        ));
        cancelEnrollment();
        stopIconAnimation();
    }

    @Override
    public void onStop() {
        stopIconAnimation();
        removeEnrollmentObserver();
        if (!getActivity().isChangingConfigurations()) {
        removeEnrollmentObservers();
        if (!getActivity().isChangingConfigurations() && mProgressViewModel.isEnrolling()) {
            mProgressViewModel.cancelEnrollment();
        }
        super.onStop();
    }

    private void removeEnrollmentObserver() {
    private void removeEnrollmentObservers() {
        preRemoveEnrollmentObservers();
        mProgressViewModel.getErrorMessageLiveData().removeObserver(mErrorMessageObserver);
    }

    private void preRemoveEnrollmentObservers() {
        mProgressViewModel.getProgressLiveData().removeObserver(mProgressObserver);
        mProgressViewModel.getHelpMessageLiveData().removeObserver(mHelpMessageObserver);
        mProgressViewModel.getErrorMessageLiveData().removeObserver(mErrorMessageObserver);
    }

    private void cancelEnrollment() {
        removeEnrollmentObserver();
        preRemoveEnrollmentObservers();
        mProgressViewModel.cancelEnrollment();
    }

@@ -318,7 +310,27 @@ public class FingerprintEnrollEnrollingRfpsFragment extends Fragment {
    }

    private void onEnrollmentError(@NonNull EnrollmentStatusMessage errorMessage) {
        onCancelEnrollment(errorMessage.getMsgId());
        stopIconAnimation();
        removeEnrollmentObservers();

        if (mEnrollingViewModel.getOnBackPressed()
                && errorMessage.getMsgId() == FingerprintManager.FINGERPRINT_ERROR_CANCELED) {
            mEnrollingViewModel.onCancelledDueToOnBackPressed();
        } else if (mEnrollingViewModel.getOnSkipPressed()
                && errorMessage.getMsgId() == FingerprintManager.FINGERPRINT_ERROR_CANCELED) {
            mEnrollingViewModel.onCancelledDueToOnSkipPressed();
        } else {
            final int errMsgId = errorMessage.getMsgId();
            mEnrollingViewModel.showErrorDialog(
                    new FingerprintEnrollEnrollingViewModel.ErrorDialogData(
                            mView.getContext().getString(
                                    FingerprintErrorDialog.getErrorMessage(errMsgId)),
                            mView.getContext().getString(
                                    FingerprintErrorDialog.getErrorTitle(errMsgId)),
                            errMsgId
                    ));
            mProgressViewModel.cancelEnrollment();
        }
    }

    private void onEnrollmentProgressChange(@NonNull EnrollmentProgress progress) {
@@ -398,7 +410,6 @@ public class FingerprintEnrollEnrollingRfpsFragment extends Fragment {
        }
    }


    @Override
    public void onDestroy() {
        // TODO stopListenOrientationEvent();
@@ -444,7 +455,6 @@ public class FingerprintEnrollEnrollingRfpsFragment extends Fragment {

    private void showIconTouchDialog() {
        mIconTouchCount = 0;
        //TODO EnrollingActivity should observe live data and add dialog fragment
        mEnrollingViewModel.onIconTouchDialogShow();
    }

+1 −1
Original line number Diff line number Diff line
@@ -113,7 +113,7 @@ public class FingerprintEnrollEnrollingSfpsFragment extends Fragment {
    private boolean mHaveShownSfpsRightEdgeLottie;

    private final View.OnClickListener mOnSkipClickListener =
            (v) -> mEnrollingViewModel.onSkipButtonClick();
            (v) -> mEnrollingViewModel.onCancelledDueToOnSkipPressed();
    private final Observer<EnrollmentProgress> mProgressObserver = progress -> {
        // TODO
    };
+1 −1
Original line number Diff line number Diff line
@@ -107,7 +107,7 @@ public class FingerprintEnrollEnrollingUdfpsFragment extends Fragment {
    private boolean mIsAccessibilityEnabled;

    private final View.OnClickListener mOnSkipClickListener =
            (v) -> mEnrollingViewModel.onSkipButtonClick();
            (v) -> mEnrollingViewModel.onCancelledDueToOnSkipPressed();
    private final Observer<EnrollmentProgress> mProgressObserver = progress -> {
        // TODO
    };
+6 −2
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnr
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_ENROLL_ENROLLING_CANCELED_BECAUSE_BACK_PRESSED;
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;
@@ -453,8 +454,7 @@ public class FingerprintEnrollmentActivity extends FragmentActivity {
    private void onFindSensorAction(@FingerprintEnrollFindSensorAction int action) {
        switch (action) {
            case FINGERPRINT_ENROLL_FIND_SENSOR_ACTION_SKIP: {
                onSetActivityResult(
                        new ActivityResult(BiometricEnrollBase.RESULT_SKIP, null));
                onSetActivityResult(new ActivityResult(BiometricEnrollBase.RESULT_SKIP, null));
                return;
            }
            case FINGERPRINT_ENROLL_FIND_SENSOR_ACTION_DIALOG: {
@@ -487,6 +487,10 @@ public class FingerprintEnrollmentActivity extends FragmentActivity {
                onSetActivityResult(new ActivityResult(BiometricEnrollBase.RESULT_TIMEOUT, null));
                break;
            }
            case FINGERPRINT_ENROLL_ENROLLING_CANCELED_BECAUSE_BACK_PRESSED: {
                getSupportFragmentManager().popBackStack();
                break;
            }
        }
    }

+45 −3
Original line number Diff line number Diff line
@@ -71,11 +71,17 @@ public class FingerprintEnrollEnrollingViewModel extends AndroidViewModel {
     */
    public static final int FINGERPRINT_ENROLL_ENROLLING_ACTION_DISMISS_ICON_TOUCH_DIALOG = 3;

    /**
     * Has got latest cancelled event due to back key
     */
    public static final int FINGERPRINT_ENROLL_ENROLLING_CANCELED_BECAUSE_BACK_PRESSED = 4;

    @IntDef(prefix = { "FINGERPRINT_ENROLL_ENROLLING_ACTION_" }, value = {
            FINGERPRINT_ENROLL_ENROLLING_ACTION_SKIP,
            FINGERPRINT_ENROLL_ENROLLING_ACTION_DONE,
            FINGERPRINT_ENROLL_ENROLLING_ACTION_SHOW_ICON_TOUCH_DIALOG,
            FINGERPRINT_ENROLL_ENROLLING_ACTION_DISMISS_ICON_TOUCH_DIALOG
            FINGERPRINT_ENROLL_ENROLLING_ACTION_DISMISS_ICON_TOUCH_DIALOG,
            FINGERPRINT_ENROLL_ENROLLING_CANCELED_BECAUSE_BACK_PRESSED
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface FingerprintEnrollEnrollingAction {}
@@ -103,8 +109,9 @@ public class FingerprintEnrollEnrollingViewModel extends AndroidViewModel {
    @Retention(RetentionPolicy.SOURCE)
    public @interface FingerprintErrorDialogAction {}


    private final int mUserId;
    private boolean mOnBackPressed;
    private boolean mOnSkipPressed;
    private final FingerprintRepository mFingerprintRepository;
    private final AccessibilityRepository mAccessibilityRepository;
    private final VibratorRepository mVibratorRepository;
@@ -162,14 +169,26 @@ public class FingerprintEnrollEnrollingViewModel extends AndroidViewModel {
        mErrorDialogActionLiveData.postValue(action);
    }

    public boolean getOnSkipPressed() {
        return mOnSkipPressed;
    }

    /**
     * User clicks skip button
     */
    public void onSkipButtonClick() {
    public void setOnSkipPressed() {
        mOnSkipPressed = true;
    }

    /**
     * Enrolling is cacelled because user clicks skip
     */
    public void onCancelledDueToOnSkipPressed() {
        final int action = FINGERPRINT_ENROLL_ENROLLING_ACTION_SKIP;
        if (DEBUG) {
            Log.d(TAG, "onSkipButtonClick, post action " + action);
        }
        mOnSkipPressed = false;
        mActionLiveData.postValue(action);
    }

@@ -184,6 +203,29 @@ public class FingerprintEnrollEnrollingViewModel extends AndroidViewModel {
        mActionLiveData.postValue(action);
    }

    public boolean getOnBackPressed() {
        return mOnBackPressed;
    }

    /**
     * Back key is pressed.
     */
    public void setOnBackPressed() {
        mOnBackPressed = true;
    }

    /**
     * Enrollment is cancelled because back key is pressed.
     */
    public void onCancelledDueToOnBackPressed() {
        final int action = FINGERPRINT_ENROLL_ENROLLING_CANCELED_BECAUSE_BACK_PRESSED;
        if (DEBUG) {
            Log.d(TAG, "onCancelledEventReceivedAfterOnBackPressed, post action " + action);
        }
        mOnBackPressed = false;
        mActionLiveData.postValue(action);
    }

    /**
     * Icon touch dialog show
     */