From a738eba09ff2f61f21fbf4142b90f677f6ffc7ab Mon Sep 17 00:00:00 2001 From: Grace Cheng Date: Mon, 19 Sep 2022 19:20:49 +0000 Subject: [PATCH] Adds null-check on finger animation in enrollment Adds a null-check before setting the finger animation during SFPS enrollment Test: Change display size to highest setting (sets mShouldShowLottie to false), and verify that user can enroll finger successfully Fixes: 247044864 Change-Id: I3d7f0bd3078e3a4516f656a8ee897387b0ca15c6 --- .../FingerprintEnrollEnrolling.java | 52 ++++++++++--------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java index 64a08d3c996..90aad8c0473 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java @@ -757,11 +757,13 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { public void onEnrollmentProgressChange(int steps, int remaining) { updateProgress(true /* animate */); final int percent = (int) (((float) (steps - remaining) / (float) steps) * 100); - if (mCanAssumeSfps) { - if (mIsAccessibilityEnabled) { - CharSequence announcement = getString( - R.string.security_settings_sfps_enroll_progress_a11y_message, percent); - announceEnrollmentProgress(announcement); + if (mCanAssumeSfps && mIsAccessibilityEnabled) { + CharSequence announcement = getString( + R.string.security_settings_sfps_enroll_progress_a11y_message, percent); + announceEnrollmentProgress(announcement); + // mIllustrationLottie is only shown when current display density = default density, + // to prevent overlap with the settings header text. + if (mIllustrationLottie != null) { mIllustrationLottie.setContentDescription( getString( R.string.security_settings_sfps_animation_a11y_label, @@ -827,7 +829,7 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { // Show nothing for subtitle when getting an error message. setDescriptionText(""); if (mCanAssumeSfps) { - applySfpsErrorDynamicColors(getApplicationContext(), mIllustrationLottie, true); + applySfpsErrorDynamicColors(getApplicationContext(), true); } } else { mErrorText.setText(error); @@ -857,7 +859,7 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { private void clearError() { if (mCanAssumeSfps) { - applySfpsErrorDynamicColors(getApplicationContext(), mIllustrationLottie, false); + applySfpsErrorDynamicColors(getApplicationContext(), false); } if ((!(mCanAssumeUdfps || mCanAssumeSfps)) && mErrorText.getVisibility() == View.VISIBLE) { mErrorText.animate() @@ -875,10 +877,11 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { * Applies dynamic colors corresponding to showing or clearing errors on the progress bar * and finger lottie for SFPS */ - private void applySfpsErrorDynamicColors(Context context, LottieAnimationView composition, - boolean isError) { + private void applySfpsErrorDynamicColors(Context context, boolean isError) { applyProgressBarDynamicColor(context, isError); - applyLottieDynamicColor(context, composition, isError); + if (mIllustrationLottie != null) { + applyLottieDynamicColor(context, isError); + } } private void applyProgressBarDynamicColor(Context context, boolean isError) { @@ -894,19 +897,16 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { } } - private void applyLottieDynamicColor(Context context, LottieAnimationView composition, - boolean isError) { - if (composition != null) { - int error_color = context.getColor(R.color.sfps_enrollment_fp_error_color); - int fp_captured_color = context.getColor(R.color.sfps_enrollment_fp_captured_color); - int color = isError ? error_color : fp_captured_color; - composition.addValueCallback( - new KeyPath(".blue100", "**"), - LottieProperty.COLOR_FILTER, - frameInfo -> new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_ATOP) - ); - composition.invalidate(); - } + private void applyLottieDynamicColor(Context context, boolean isError) { + int error_color = context.getColor(R.color.sfps_enrollment_fp_error_color); + int fp_captured_color = context.getColor(R.color.sfps_enrollment_fp_captured_color); + int color = isError ? error_color : fp_captured_color; + mIllustrationLottie.addValueCallback( + new KeyPath(".blue100", "**"), + LottieProperty.COLOR_FILTER, + frameInfo -> new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_ATOP) + ); + mIllustrationLottie.invalidate(); } private void listenOrientationEvent() { @@ -1008,8 +1008,10 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { } private void updateOrientation(int orientation) { - if (mCanAssumeSfps && mShouldShowLottie) { - mIllustrationLottie = findViewById(R.id.illustration_lottie); + if (mCanAssumeSfps) { + if (mShouldShowLottie) { + mIllustrationLottie = findViewById(R.id.illustration_lottie); + } } else { switch(orientation) { case Configuration.ORIENTATION_LANDSCAPE: {