Add tests for SETTINGS_SHOW_UDFPS_ENROLL_IN_SETTINGS.

Bug: 260617060
Test: atest FingerprintEnrollEnrollingTest
Change-Id: I82fdadfd57c2f7f5adef423250ee6c880b4d6b1b
This commit is contained in:
Hao Dong
2023-02-02 07:37:27 +08:00
parent 1d45f7f6ed
commit 2e72b749ee
3 changed files with 186 additions and 2 deletions

View File

@@ -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;

View File

@@ -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

View File

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