Add pad animation for STAGE_CENTER & STAGE_GUIDED

1. STAGE_CENTER reference
   - String : security_settings_sfps_enroll_finger_center_title
   - raw : udfps_center_hint_lottie

2. STAGE_GUIDED
   - String : security_settings_fingerprint_enroll_repeat_message
   - raw : udfps_center_hint_lottie (Same with STAGE_CENTER)

Bug: 228100413

Test: manually verified on Settings > Security > Face & Fingerprint
Unlock > Fingerprint Unlock > Touch & Hold fingerprint sensor page

Test: make RunSettingsRoboTests ROBOTEST_FILTER=
"com.android.settings.biometrics.fingerprint
.FingerprintEnrollEnrollingTest"

Change-Id: Ic308b9bffee32b36f7280cf263c67adc3ca31c66
This commit is contained in:
Jason Chang
2022-11-07 10:50:16 +00:00
parent a9575edf2f
commit 966ffa1b2a
3 changed files with 55 additions and 9 deletions

File diff suppressed because one or more lines are too long

View File

@@ -176,6 +176,8 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
private boolean mHaveShownUdfpsTipLottie; private boolean mHaveShownUdfpsTipLottie;
private boolean mHaveShownUdfpsLeftEdgeLottie; private boolean mHaveShownUdfpsLeftEdgeLottie;
private boolean mHaveShownUdfpsRightEdgeLottie; private boolean mHaveShownUdfpsRightEdgeLottie;
private boolean mHaveShownUdfpsCenterLottie;
private boolean mHaveShownUdfpsGuideLottie;
private boolean mHaveShownSfpsNoAnimationLottie; private boolean mHaveShownSfpsNoAnimationLottie;
private boolean mHaveShownSfpsCenterLottie; private boolean mHaveShownSfpsCenterLottie;
private boolean mHaveShownSfpsTipLottie; private boolean mHaveShownSfpsTipLottie;
@@ -503,18 +505,31 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
switch (getCurrentStage()) { switch (getCurrentStage()) {
case STAGE_CENTER: case STAGE_CENTER:
setHeaderText(R.string.security_settings_fingerprint_enroll_repeat_title); setHeaderText(R.string.security_settings_fingerprint_enroll_repeat_title);
setDescriptionText(R.string.security_settings_udfps_enroll_start_message); if (mIsAccessibilityEnabled || mIllustrationLottie == null) {
setDescriptionText(R.string.security_settings_udfps_enroll_start_message);
} else if (!mHaveShownUdfpsCenterLottie && mIllustrationLottie != null) {
mHaveShownUdfpsCenterLottie = true;
// Note: Update string reference when differentiate in between udfps & sfps
mIllustrationLottie.setContentDescription(
getString(R.string.security_settings_sfps_enroll_finger_center_title)
);
configureEnrollmentStage("", R.raw.udfps_center_hint_lottie);
}
break; break;
case STAGE_GUIDED: case STAGE_GUIDED:
setHeaderText(R.string.security_settings_fingerprint_enroll_repeat_title); setHeaderText(R.string.security_settings_fingerprint_enroll_repeat_title);
if (mIsAccessibilityEnabled) { if (mIsAccessibilityEnabled || mIllustrationLottie == null) {
setDescriptionText(R.string.security_settings_udfps_enroll_repeat_a11y_message); setDescriptionText(R.string.security_settings_udfps_enroll_repeat_a11y_message);
} else { } else if (!mHaveShownUdfpsGuideLottie && mIllustrationLottie != null) {
setDescriptionText(R.string.security_settings_udfps_enroll_repeat_message); mHaveShownUdfpsGuideLottie = true;
mIllustrationLottie.setContentDescription(
getString(R.string.security_settings_fingerprint_enroll_repeat_message)
);
// TODO(b/228100413) Could customize guided lottie animation
configureEnrollmentStage("", R.raw.udfps_center_hint_lottie);
} }
break; break;
case STAGE_FINGERTIP: case STAGE_FINGERTIP:
setHeaderText(R.string.security_settings_udfps_enroll_fingertip_title); setHeaderText(R.string.security_settings_udfps_enroll_fingertip_title);
if (!mHaveShownUdfpsTipLottie && mIllustrationLottie != null) { if (!mHaveShownUdfpsTipLottie && mIllustrationLottie != null) {
@@ -525,7 +540,6 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
configureEnrollmentStage("", R.raw.udfps_tip_hint_lottie); configureEnrollmentStage("", R.raw.udfps_tip_hint_lottie);
} }
break; break;
case STAGE_LEFT_EDGE: case STAGE_LEFT_EDGE:
setHeaderText(R.string.security_settings_udfps_enroll_left_edge_title); setHeaderText(R.string.security_settings_udfps_enroll_left_edge_title);
if (!mHaveShownUdfpsLeftEdgeLottie && mIllustrationLottie != null) { if (!mHaveShownUdfpsLeftEdgeLottie && mIllustrationLottie != null) {

View File

@@ -31,13 +31,12 @@ import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.anyString; import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.eq; import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never; import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import static org.mockito.Mockito.mock;
import android.content.Context; import android.content.Context;
import android.content.res.ColorStateList; import android.content.res.ColorStateList;
@@ -187,6 +186,38 @@ public class FingerprintEnrollEnrollingTest {
verify(mActivity, never()).onCancelEnrollment(anyInt()); verify(mActivity, never()).onCancelEnrollment(anyInt());
} }
@Test
public void fingerprintUdfpsOverlayEnrollment_PlaysAllAnimationsAssetsCorrectly() {
initializeActivityFor(TYPE_UDFPS_OPTICAL);
int totalEnrollSteps = 25;
int initStageSteps = -1, initStageRemaining = 0;
when(mSidecar.getEnrollmentSteps()).thenReturn(initStageSteps);
when(mSidecar.getEnrollmentRemaining()).thenReturn(initStageRemaining);
mActivity.onEnrollmentProgressChange(initStageSteps, initStageRemaining);
when(mSidecar.getEnrollmentSteps()).thenReturn(totalEnrollSteps);
for (int remaining = totalEnrollSteps; remaining > 0; remaining--) {
when(mSidecar.getEnrollmentRemaining()).thenReturn(remaining);
mActivity.onEnrollmentProgressChange(totalEnrollSteps, remaining);
}
List<Integer> expectedLottieAssetOrder = List.of(
R.raw.udfps_center_hint_lottie,
R.raw.udfps_tip_hint_lottie,
R.raw.udfps_left_edge_hint_lottie,
R.raw.udfps_right_edge_hint_lottie
);
ArgumentCaptor<Integer> lottieAssetCaptor = ArgumentCaptor.forClass(Integer.class);
verify(mIllustrationLottie, times(4)).setAnimation(lottieAssetCaptor.capture());
List<Integer> observedLottieAssetOrder = lottieAssetCaptor.getAllValues();
assertThat(observedLottieAssetOrder).isEqualTo(expectedLottieAssetOrder);
}
@Test @Test
public void fingerprintSfpsEnroll_PlaysAllAnimationsAssetsCorrectly() { public void fingerprintSfpsEnroll_PlaysAllAnimationsAssetsCorrectly() {
initializeActivityFor(TYPE_POWER_BUTTON); initializeActivityFor(TYPE_POWER_BUTTON);
@@ -354,4 +385,4 @@ public class FingerprintEnrollEnrollingTest {
return mContext; return mContext;
} }
} }
} }