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

Commit 2e72b749 authored by Hao Dong's avatar Hao Dong
Browse files

Add tests for SETTINGS_SHOW_UDFPS_ENROLL_IN_SETTINGS.

Bug: 260617060
Test: atest FingerprintEnrollEnrollingTest
Change-Id: I82fdadfd57c2f7f5adef423250ee6c880b4d6b1b
parent 1d45f7f6
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -168,7 +168,9 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
    private boolean mCanAssumeUdfps;
    private boolean mCanAssumeSfps;
    @Nullable private ProgressBar mProgressBar;
    @Nullable private UdfpsEnrollHelper mUdfpsEnrollHelper;
    @VisibleForTesting
    @Nullable
    UdfpsEnrollHelper mUdfpsEnrollHelper;
    // TODO(b/260617060): Do not hard-code mScaleFactor, referring to AuthController.
    private float mScaleFactor = 1.0f;
    private ObjectAnimator mProgressAnim;
+3 −1
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R;

/**
@@ -77,8 +78,9 @@ public class UdfpsEnrollProgressBarDrawable extends Drawable {
    private final Interpolator mCheckmarkInterpolator;
    @NonNull
    private final Paint mBackgroundPaint;
    @VisibleForTesting
    @NonNull
    private final Paint mFillPaint;
    final Paint mFillPaint;
    @NonNull
    private final Vibrator mVibrator;
    @NonNull
+180 −0
Original line number Diff line number Diff line
@@ -38,7 +38,10 @@ import static org.mockito.Mockito.when;

import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.hardware.biometrics.ComponentInfoInternal;
import android.hardware.biometrics.SensorProperties;
import android.hardware.fingerprint.FingerprintManager;
@@ -48,14 +51,18 @@ import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.Vibrator;
import android.util.FeatureFlagUtils;
import android.view.Display;
import android.view.Surface;
import android.widget.FrameLayout;
import android.widget.ImageView;

import com.android.settings.R;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.widget.RingProgressBar;

import com.airbnb.lottie.LottieAnimationView;
import com.google.android.setupdesign.GlifLayout;

import org.junit.Before;
import org.junit.Test;
@@ -73,6 +80,9 @@ import java.util.List;

@RunWith(RobolectricTestRunner.class)
public class FingerprintEnrollEnrollingTest {
    private static final String ENROLL_PROGRESS_COLOR_LIGHT = "#699FF3";
    private static final String ENROLL_PROGRESS_COLOR_DARK = "#7DA7F1";


    @Mock private FingerprintManager mFingerprintManager;

@@ -180,6 +190,129 @@ public class FingerprintEnrollEnrollingTest {
        assertThat(observedLottieAssetOrder).isEqualTo(expectedLottieAssetOrder);
    }

    @Test
    public void fingerprintUdfpsOverlayEnrollment_showOverlayPortrait() {
        FeatureFlagUtils.setEnabled(mContext,
                FeatureFlagUtils.SETTINGS_SHOW_UDFPS_ENROLL_IN_SETTINGS, true);
        initializeActivityFor(TYPE_UDFPS_OPTICAL);
        when(mMockDisplay.getRotation()).thenReturn(Surface.ROTATION_0);

        final FrameLayout portraitLayoutContainer = mActivity.findViewById(R.id.layout_container);
        final UdfpsEnrollView udfpsEnrollView =
                portraitLayoutContainer.findViewById(R.id.udfps_animation_view);
        assertThat(udfpsEnrollView).isNotNull();
    }

    @Test
    public void fingerprintUdfpsOverlayEnrollment_showOverlayLandscape() {
        FeatureFlagUtils.setEnabled(mContext,
                FeatureFlagUtils.SETTINGS_SHOW_UDFPS_ENROLL_IN_SETTINGS, true);
        initializeActivityFor(TYPE_UDFPS_OPTICAL);
        when(mMockDisplay.getRotation()).thenReturn(Surface.ROTATION_90);

        final GlifLayout defaultLayout = mActivity.findViewById(R.id.setup_wizard_layout);
        final UdfpsEnrollView udfpsEnrollView =
                defaultLayout.findViewById(R.id.udfps_animation_view);
        assertThat(udfpsEnrollView).isNotNull();
    }

    @Test
    public void fingerprintUdfpsOverlayEnrollment_usesCorrectProgressBarFillColor() {
        FeatureFlagUtils.setEnabled(mContext,
                FeatureFlagUtils.SETTINGS_SHOW_UDFPS_ENROLL_IN_SETTINGS, true);
        initializeActivityFor(TYPE_UDFPS_OPTICAL);
        final TypedArray ta = mActivity.obtainStyledAttributes(null,
                R.styleable.BiometricsEnrollView, R.attr.biometricsEnrollStyle,
                R.style.BiometricsEnrollStyle);
        final int progressColor = ta.getColor(
                R.styleable.BiometricsEnrollView_biometricsEnrollProgress, 0);
        final ImageView progressBar = mActivity.findViewById(
                R.id.udfps_enroll_animation_fp_progress_view);

        configureSfpsStageColorTest();

        assertThat(
                ((UdfpsEnrollProgressBarDrawable) (progressBar.getDrawable()))
                        .mFillPaint.getColor())
                .isEqualTo(progressColor);
    }

    @Test
    public void forwardEnrollProgressEvents() {
        FeatureFlagUtils.setEnabled(mContext,
                FeatureFlagUtils.SETTINGS_SHOW_UDFPS_ENROLL_IN_SETTINGS, true);
        initializeActivityFor(TYPE_UDFPS_OPTICAL);

        EnrollListener listener = new EnrollListener(mActivity);
        mActivity.onEnrollmentProgressChange(20, 10);
        assertThat(listener.mProgress).isTrue();
        assertThat(listener.mHelp).isFalse();
        assertThat(listener.mAcquired).isFalse();
        assertThat(listener.mPointerUp).isFalse();
        assertThat(listener.mPointerDown).isFalse();
    }

    @Test
    public void forwardEnrollHelpEvents() {
        FeatureFlagUtils.setEnabled(mContext,
                FeatureFlagUtils.SETTINGS_SHOW_UDFPS_ENROLL_IN_SETTINGS, true);
        initializeActivityFor(TYPE_UDFPS_OPTICAL);

        EnrollListener listener = new EnrollListener(mActivity);
        mActivity.onEnrollmentHelp(20, "test enrollment help");
        assertThat(listener.mProgress).isFalse();
        assertThat(listener.mHelp).isTrue();
        assertThat(listener.mAcquired).isFalse();
        assertThat(listener.mPointerUp).isFalse();
        assertThat(listener.mPointerDown).isFalse();
    }

    @Test
    public void forwardEnrollAcquiredEvents() {
        FeatureFlagUtils.setEnabled(mContext,
                FeatureFlagUtils.SETTINGS_SHOW_UDFPS_ENROLL_IN_SETTINGS, true);
        initializeActivityFor(TYPE_UDFPS_OPTICAL);

        EnrollListener listener = new EnrollListener(mActivity);
        mActivity.onEnrollmentProgressChange(20, 10);
        mActivity.onAcquired(false);
        assertThat(listener.mProgress).isTrue();
        assertThat(listener.mHelp).isFalse();
        assertThat(listener.mAcquired).isTrue();
        assertThat(listener.mPointerUp).isFalse();
        assertThat(listener.mPointerDown).isFalse();
    }

    @Test
    public void forwardEnrollPointerDownEvents() {
        FeatureFlagUtils.setEnabled(mContext,
                FeatureFlagUtils.SETTINGS_SHOW_UDFPS_ENROLL_IN_SETTINGS, true);
        initializeActivityFor(TYPE_UDFPS_OPTICAL);

        EnrollListener listener = new EnrollListener(mActivity);
        mActivity.onPointerDown(0);
        assertThat(listener.mProgress).isFalse();
        assertThat(listener.mHelp).isFalse();
        assertThat(listener.mAcquired).isFalse();
        assertThat(listener.mPointerUp).isFalse();
        assertThat(listener.mPointerDown).isTrue();
    }

    @Test
    public void forwardEnrollPointerUpEvents() {
        FeatureFlagUtils.setEnabled(mContext,
                FeatureFlagUtils.SETTINGS_SHOW_UDFPS_ENROLL_IN_SETTINGS, true);
        initializeActivityFor(TYPE_UDFPS_OPTICAL);

        EnrollListener listener = new EnrollListener(mActivity);
        mActivity.onPointerUp(0);
        assertThat(listener.mProgress).isFalse();
        assertThat(listener.mHelp).isFalse();
        assertThat(listener.mAcquired).isFalse();
        assertThat(listener.mPointerUp).isTrue();
        assertThat(listener.mPointerDown).isFalse();
    }

    @Test
    public void fingerprintSfpsEnroll_PlaysAllAnimationsAssetsCorrectly() {
        initializeActivityFor(TYPE_POWER_BUTTON);
@@ -273,6 +406,14 @@ public class FingerprintEnrollEnrollingTest {

        final String appliedThemes = mTheme.toString();
        assertThat(appliedThemes.contains("SetupWizardPartnerResource")).isTrue();

        final Configuration config = mContext.getResources().getConfiguration();
        final boolean isDarkThemeOn = (config.uiMode & Configuration.UI_MODE_NIGHT_MASK)
                == Configuration.UI_MODE_NIGHT_YES;
        final int currentColor = mContext.getColor(R.color.udfps_enroll_progress);
        assertThat(currentColor).isEqualTo(Color.parseColor(isDarkThemeOn
                ? ENROLL_PROGRESS_COLOR_DARK : ENROLL_PROGRESS_COLOR_LIGHT));

    }

    @Test
@@ -348,4 +489,43 @@ public class FingerprintEnrollEnrollingTest {

        return callbackCaptor.getValue();
    }

    private static class EnrollListener implements  UdfpsEnrollHelper.Listener {
        private final FingerprintEnrollEnrolling mActivity;
        private boolean mProgress = false;
        private boolean mHelp = false;
        private boolean mAcquired = false;
        private boolean mPointerDown = false;
        private boolean mPointerUp = false;

        EnrollListener(FingerprintEnrollEnrolling activity) {
            mActivity = activity;
            mActivity.mUdfpsEnrollHelper.setListener(this);
        }

        @Override
        public void onEnrollmentProgress(int remaining, int totalSteps) {
            mProgress = true;
        }

        @Override
        public void onEnrollmentHelp(int remaining, int totalSteps) {
            mHelp = true;
        }

        @Override
        public void onAcquired(boolean animateIfLastStepGood) {
            mAcquired = true;
        }

        @Override
        public void onPointerDown(int sensorId) {
            mPointerDown = true;
        }

        @Override
        public void onPointerUp(int sensorId) {
            mPointerUp = true;
        }
    }
}