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;
+ }
+ }
}