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

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

Merge "Attach v2 EnrollingSfpsFragment to activity" into udc-dev

parents 1acdb145 20c73a9b
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -16,8 +16,12 @@

package com.android.settings.biometrics2.data.repository;

import android.view.View;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;

import androidx.annotation.NonNull;

/**
 * This repository is used to call all APIs in {@link AccessibilityManager}
 */
@@ -44,4 +48,21 @@ public class AccessibilityRepository {
    public boolean isEnabled() {
        return mAccessibilityManager.isEnabled();
    }

    /**
     * Sends an {@link AccessibilityEvent}.
     *
     * @param event The event to send.
     *
     * @throws IllegalStateException if accessibility is not enabled.
     *
     * <strong>Note:</strong> The preferred mechanism for sending custom accessibility
     * events is through calling
     * {@link android.view.ViewParent#requestSendAccessibilityEvent(View, AccessibilityEvent)}
     * instead of this method to allow predecessors to augment/filter events sent by
     * their descendants.
     */
    public void sendAccessibilityEvent(@NonNull AccessibilityEvent event) {
        mAccessibilityManager.sendAccessibilityEvent(event);
    }
}
+0 −6
Original line number Diff line number Diff line
@@ -410,12 +410,6 @@ public class FingerprintEnrollEnrollingRfpsFragment extends Fragment {
        }
    }

    @Override
    public void onDestroy() {
        // TODO stopListenOrientationEvent();
        super.onDestroy();
    }

    private void animateProgress(int progress) {
        if (mProgressAnim != null) {
            mProgressAnim.cancel();
+239 −245

File changed.

Preview size limit exceeded, changes collapsed.

+48 −10
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Surface;
import android.view.View;
import android.view.ViewGroup;

@@ -32,6 +33,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;

@@ -39,6 +41,7 @@ import com.android.settings.R;
import com.android.settings.biometrics.fingerprint.FingerprintFindSensorAnimation;
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.FingerprintEnrollFindSensorViewModel;
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollProgressViewModel;

@@ -67,12 +70,23 @@ public class FingerprintEnrollFindRfpsFragment extends Fragment {

    private FingerprintEnrollFindSensorViewModel mViewModel;
    private FingerprintEnrollProgressViewModel mProgressViewModel;
    private DeviceRotationViewModel mRotationViewModel;

    private View mView;
    private GlifLayout mGlifLayout;
    private FooterBarMixin mFooterBarMixin;
    private final OnClickListener mOnSkipClickListener = (v) -> mViewModel.onSkipButtonClick();
    @Nullable private FingerprintFindSensorAnimation mAnimation;
    @Surface.Rotation private int mLastRotation = -1;

    private final Observer<Integer> mRotationObserver = rotation -> {
        if (DEBUG) {
            Log.d(TAG, "rotationObserver " + rotation);
        }
        if (rotation != null) {
            onRotationChanged(rotation);
        }
    };

    private final Observer<EnrollmentProgress> mProgressObserver = progress -> {
        if (DEBUG) {
@@ -85,15 +99,10 @@ public class FingerprintEnrollFindRfpsFragment extends Fragment {

    private final Observer<EnrollmentStatusMessage> mLastCancelMessageObserver = errorMessage -> {
        if (DEBUG) {
            Log.d(TAG, "mErrorMessageObserver(" + errorMessage + ")");
            Log.d(TAG, "mLastCancelMessageObserver(" + errorMessage + ")");
        }
        if (errorMessage != null) {
            if (errorMessage.getMsgId() == FingerprintManager.FINGERPRINT_ERROR_CANCELED) {
                mProgressViewModel.clearProgressLiveData();
                mViewModel.onStartButtonClick();
            } else {
                Log.e(TAG, "mErrorMessageObserver(" + errorMessage + ")");
            }
            onLastCancelMessage(errorMessage);
        }
    };

@@ -144,6 +153,10 @@ public class FingerprintEnrollFindRfpsFragment extends Fragment {

    @Override
    public void onResume() {
        final LiveData<Integer> rotationLiveData = mRotationViewModel.getLiveData();
        mLastRotation = rotationLiveData.getValue();
        rotationLiveData.observe(this, mRotationObserver);

        if (mAnimation != null) {
            if (DEBUG) {
                Log.d(TAG, "onResume(), start animation");
@@ -198,15 +211,39 @@ public class FingerprintEnrollFindRfpsFragment extends Fragment {
            return;
        }

        if (waitForLastCancelErrMsg) {
            mProgressViewModel.clearErrorMessageLiveData(); // Prevent got previous error message
            mProgressViewModel.getErrorMessageLiveData().observe(this,
                    mLastCancelMessageObserver);
        }

        mProgressViewModel.getProgressLiveData().removeObserver(mProgressObserver);
        final boolean cancelResult = mProgressViewModel.cancelEnrollment();
        if (!cancelResult) {
            Log.e(TAG, "stopLookingForFingerprint(), failed to cancel enrollment");
        }
    }

        if (waitForLastCancelErrMsg) {
            mProgressViewModel.getErrorMessageLiveData().observe(this,
                    mLastCancelMessageObserver);
    private void onRotationChanged(@Surface.Rotation int newRotation) {
        if (DEBUG) {
            Log.d(TAG, "onRotationChanged() from " + mLastRotation + " to " + newRotation);
        }
        if (newRotation % 2 != mLastRotation % 2) {
            // Fragment is going to be recreated, just stopLookingForFingerprint() here.
            stopLookingForFingerprint(true);
        }
    }

    private void onLastCancelMessage(@NonNull EnrollmentStatusMessage errorMessage) {
        if (errorMessage.getMsgId() == FingerprintManager.FINGERPRINT_ERROR_CANCELED) {
            final EnrollmentProgress progress = mProgressViewModel.getProgressLiveData().getValue();
            mProgressViewModel.clearProgressLiveData();
            mProgressViewModel.getErrorMessageLiveData().removeObserver(mLastCancelMessageObserver);
            if (progress != null && !progress.isInitialStep()) {
                mViewModel.onStartButtonClick();
            }
        } else {
            Log.e(TAG, "mErrorMessageObserver(" + errorMessage + ")");
        }
    }

@@ -227,6 +264,7 @@ public class FingerprintEnrollFindRfpsFragment extends Fragment {
        final ViewModelProvider provider = new ViewModelProvider(activity);
        mViewModel = provider.get(FingerprintEnrollFindSensorViewModel.class);
        mProgressViewModel = provider.get(FingerprintEnrollProgressViewModel.class);
        mRotationViewModel = provider.get(DeviceRotationViewModel.class);
        super.onAttach(context);
    }
}
+58 −23
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static android.hardware.fingerprint.FingerprintManager.ENROLL_FIND_SENSOR

import android.app.Activity;
import android.content.Context;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
@@ -39,6 +40,7 @@ import androidx.lifecycle.ViewModelProvider;

import com.android.settings.R;
import com.android.settings.biometrics2.ui.model.EnrollmentProgress;
import com.android.settings.biometrics2.ui.model.EnrollmentStatusMessage;
import com.android.settings.biometrics2.ui.viewmodel.DeviceFoldedViewModel;
import com.android.settings.biometrics2.ui.viewmodel.DeviceRotationViewModel;
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollFindSensorViewModel;
@@ -75,30 +77,36 @@ public class FingerprintEnrollFindSfpsFragment extends Fragment {
    private DeviceRotationViewModel mRotationViewModel;
    private DeviceFoldedViewModel mFoldedViewModel;

    private GlifLayout mView;
    private FooterBarMixin mFooterBarMixin;
    private final OnClickListener mOnSkipClickListener = (v) -> mViewModel.onSkipButtonClick();
    private LottieAnimationView mIllustrationLottie;
    @Surface.Rotation private int mAnimationRotation = -1;

    private final Observer<Integer> mRotationObserver = rotation -> {
        if (DEBUG) {
            Log.d(TAG, "rotationObserver " + rotation);
        }
        if (rotation == null) {
            return;
        }
        if (rotation != null) {
            onRotationChanged(rotation);
        }
    };

    @Surface.Rotation private int mAnimationRotation = -1;

    private View mView;
    private GlifLayout mGlifLayout;
    private FooterBarMixin mFooterBarMixin;
    private final OnClickListener mOnSkipClickListener = (v) -> mViewModel.onSkipButtonClick();
    private LottieAnimationView mIllustrationLottie;

    private final Observer<EnrollmentProgress> mProgressObserver = progress -> {
        if (DEBUG) {
            Log.d(TAG, "mProgressObserver(" + progress + ")");
        }
        if (progress != null && !progress.isInitialStep()) {
            mViewModel.onStartButtonClick();
            stopLookingForFingerprint(true);
        }
    };

    private final Observer<EnrollmentStatusMessage> mLastCancelMessageObserver = errorMessage -> {
        if (DEBUG) {
            Log.d(TAG, "mLastCancelMessageObserver(" + errorMessage + ")");
        }
        if (errorMessage != null) {
            onLastCancelMessage(errorMessage);
        }
    };

@@ -107,10 +115,10 @@ public class FingerprintEnrollFindSfpsFragment extends Fragment {
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
            @Nullable Bundle savedInstanceState) {
        final Context context = inflater.getContext();
        mView = inflater.inflate(R.layout.sfps_enroll_find_sensor_layout, container, false);
        mGlifLayout = mView.findViewById(R.id.setup_wizard_layout);
        mView = (GlifLayout) inflater.inflate(R.layout.sfps_enroll_find_sensor_layout, container,
                false);
        mIllustrationLottie = mView.findViewById(R.id.illustration_lottie);
        mFooterBarMixin = mGlifLayout.getMixin(FooterBarMixin.class);
        mFooterBarMixin = mView.getMixin(FooterBarMixin.class);
        mFooterBarMixin.setSecondaryButton(
                new FooterButton.Builder(context)
                        .setText(R.string.security_settings_fingerprint_enroll_enrolling_skip)
@@ -125,7 +133,7 @@ public class FingerprintEnrollFindSfpsFragment extends Fragment {
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        final Activity activity = getActivity();
        final GlifLayoutHelper glifLayoutHelper = new GlifLayoutHelper(activity, mGlifLayout);
        final GlifLayoutHelper glifLayoutHelper = new GlifLayoutHelper(activity, mView);
        glifLayoutHelper.setHeaderText(R.string.security_settings_sfps_enroll_find_sensor_title);
        glifLayoutHelper.setDescriptionText(
                getText(R.string.security_settings_sfps_enroll_find_sensor_message));
@@ -136,11 +144,14 @@ public class FingerprintEnrollFindSfpsFragment extends Fragment {
    public void onStart() {
        super.onStart();

        final boolean isEnrolling = mProgressViewModel.isEnrolling();
        if (DEBUG) {
            Log.d(TAG, "onStart(), start looking for fingerprint");
            Log.d(TAG, "onStart(), isEnrolling:" + isEnrolling);
        }
        if (!isEnrolling) {
            startLookingForFingerprint();
        }
    }

    @Override
    public void onResume() {
@@ -159,10 +170,13 @@ public class FingerprintEnrollFindSfpsFragment extends Fragment {
    @Override
    public void onStop() {
        super.onStop();
        final boolean isEnrolling = mProgressViewModel.isEnrolling();
        if (DEBUG) {
            Log.d(TAG, "onStop(), stop looking for fingerprint");
            Log.d(TAG, "onStop(), isEnrolling:" + isEnrolling);
        }
        if (isEnrolling) {
            stopLookingForFingerprint(false);
        }
        stopLookingForFingerprint();
    }

    private void startLookingForFingerprint() {
@@ -180,13 +194,19 @@ public class FingerprintEnrollFindSfpsFragment extends Fragment {
        }
    }

    private void stopLookingForFingerprint() {
    private void stopLookingForFingerprint(boolean waitForLastCancelErrMsg) {
        if (!mProgressViewModel.isEnrolling()) {
            Log.d(TAG, "stopLookingForFingerprint(), failed because isEnrolling is false before"
                    + " stopping");
            return;
        }

        if (waitForLastCancelErrMsg) {
            mProgressViewModel.clearErrorMessageLiveData(); // Prevent got previous error message
            mProgressViewModel.getErrorMessageLiveData().observe(this,
                    mLastCancelMessageObserver);
        }

        mProgressViewModel.getProgressLiveData().removeObserver(mProgressObserver);
        final boolean cancelResult = mProgressViewModel.cancelEnrollment();
        if (!cancelResult) {
@@ -199,10 +219,25 @@ public class FingerprintEnrollFindSfpsFragment extends Fragment {
            Log.d(TAG, "onRotationChanged() from " + mAnimationRotation + " to " + newRotation);
        }
        if ((newRotation + 2) % 4 == mAnimationRotation) {
            // Fragment not changed, we just need to play correct rotation animation
            playLottieAnimation(newRotation);
        } else if (newRotation % 2 != mAnimationRotation % 2) {
            // Fragment is going to be recreated, just stopLookingForFingerprint() here.
            stopLookingForFingerprint(true);
        }
    }

    private void onLastCancelMessage(@NonNull EnrollmentStatusMessage errorMessage) {
        if (errorMessage.getMsgId() == FingerprintManager.FINGERPRINT_ERROR_CANCELED) {
            final EnrollmentProgress progress = mProgressViewModel.getProgressLiveData().getValue();
            mProgressViewModel.clearProgressLiveData();
            mProgressViewModel.getErrorMessageLiveData().removeObserver(mLastCancelMessageObserver);
            if (progress != null && !progress.isInitialStep()) {
                mViewModel.onStartButtonClick();
            }
        } else {
            Log.e(TAG, "mErrorMessageObserver(" + errorMessage + ")");
        }
        // Fragment will be re-created if it's changed between landscape and portrait, so no need to
        // handle other cases.
    }

    private void playLottieAnimation(@Surface.Rotation int rotation) {
Loading