Add tests for SETTINGS_SHOW_UDFPS_ENROLL_IN_SETTINGS.

Bug: 260617060
Test: atest FingerprintEnrollEnrollingTest
Change-Id: I82fdadfd57c2f7f5adef423250ee6c880b4d6b1b
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
index c9c5b37..644ff82 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
@@ -168,7 +168,9 @@
     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;
diff --git a/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollProgressBarDrawable.java b/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollProgressBarDrawable.java
index 52f30f5..aa3f770 100644
--- a/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollProgressBarDrawable.java
+++ b/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollProgressBarDrawable.java
@@ -38,6 +38,7 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.settings.R;
 
 /**
@@ -77,8 +78,9 @@
     private final Interpolator mCheckmarkInterpolator;
     @NonNull
     private final Paint mBackgroundPaint;
+    @VisibleForTesting
     @NonNull
-    private final Paint mFillPaint;
+    final Paint mFillPaint;
     @NonNull
     private final Vibrator mVibrator;
     @NonNull
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java
index 596f3b2..de22bca 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java
@@ -38,7 +38,10 @@
 
 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.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 @@
 
 @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;
 
@@ -181,6 +191,129 @@
     }
 
     @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 @@
 
         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 @@
 
         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;
+        }
+    }
 }