diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java index 74069050f6d..9ed284cee61 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java @@ -17,6 +17,7 @@ package com.android.settings.biometrics.fingerprint; import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ERROR_USER_CANCELED; +import static android.text.Layout.HYPHENATION_FREQUENCY_NONE; import android.animation.Animator; import android.animation.ObjectAnimator; @@ -278,7 +279,6 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { setDescriptionText(R.string.security_settings_udfps_enroll_start_message); } else if (mCanAssumeSfps) { setContentView(R.layout.sfps_enroll_enrolling); - setDescriptionText(R.string.security_settings_fingerprint_enroll_start_message); setHelpAnimation(); } else { setContentView(R.layout.fingerprint_enroll_enrolling); @@ -544,7 +544,7 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { mIllustrationLottie.setContentDescription( getString(R.string.security_settings_udfps_tip_fingerprint_help) ); - configureEnrollmentStage("", R.raw.udfps_tip_hint_lottie); + configureEnrollmentStage(R.raw.udfps_tip_hint_lottie); } break; @@ -555,7 +555,7 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { mIllustrationLottie.setContentDescription( getString(R.string.security_settings_udfps_side_fingerprint_help) ); - configureEnrollmentStage("", R.raw.udfps_left_edge_hint_lottie); + configureEnrollmentStage(R.raw.udfps_left_edge_hint_lottie); } else if (mIllustrationLottie == null) { if (isStageHalfCompleted()) { setDescriptionText( @@ -572,7 +572,7 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { mIllustrationLottie.setContentDescription( getString(R.string.security_settings_udfps_side_fingerprint_help) ); - configureEnrollmentStage("", R.raw.udfps_right_edge_hint_lottie); + configureEnrollmentStage(R.raw.udfps_right_edge_hint_lottie); } else if (mIllustrationLottie == null) { if (isStageHalfCompleted()) { @@ -624,10 +624,7 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { 0 ) ); - configureEnrollmentStage( - getString(R.string.security_settings_sfps_enroll_start_message), - R.raw.sfps_lottie_no_animation - ); + configureEnrollmentStage(R.raw.sfps_lottie_no_animation); } break; @@ -635,10 +632,7 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { setHeaderText(R.string.security_settings_sfps_enroll_finger_center_title); if (!mHaveShownSfpsCenterLottie && mIllustrationLottie != null) { mHaveShownSfpsCenterLottie = true; - configureEnrollmentStage( - getString(R.string.security_settings_sfps_enroll_start_message), - R.raw.sfps_lottie_pad_center - ); + configureEnrollmentStage(R.raw.sfps_lottie_pad_center); } break; @@ -646,7 +640,7 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { setHeaderText(R.string.security_settings_sfps_enroll_fingertip_title); if (!mHaveShownSfpsTipLottie && mIllustrationLottie != null) { mHaveShownSfpsTipLottie = true; - configureEnrollmentStage("", R.raw.sfps_lottie_tip); + configureEnrollmentStage(R.raw.sfps_lottie_tip); } break; @@ -654,7 +648,7 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { setHeaderText(R.string.security_settings_sfps_enroll_left_edge_title); if (!mHaveShownSfpsLeftEdgeLottie && mIllustrationLottie != null) { mHaveShownSfpsLeftEdgeLottie = true; - configureEnrollmentStage("", R.raw.sfps_lottie_left_edge); + configureEnrollmentStage(R.raw.sfps_lottie_left_edge); } break; @@ -662,7 +656,7 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { setHeaderText(R.string.security_settings_sfps_enroll_right_edge_title); if (!mHaveShownSfpsRightEdgeLottie && mIllustrationLottie != null) { mHaveShownSfpsRightEdgeLottie = true; - configureEnrollmentStage("", R.raw.sfps_lottie_right_edge); + configureEnrollmentStage(R.raw.sfps_lottie_right_edge); } break; @@ -673,7 +667,6 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { // announce a different string for a11y upon entering the page. getLayout().setHeaderText( R.string.security_settings_sfps_enroll_find_sensor_title); - setDescriptionText(R.string.security_settings_sfps_enroll_start_message); final CharSequence description = getString( R.string.security_settings_sfps_enroll_find_sensor_message); getLayout().getHeaderTextView().setContentDescription(description); @@ -683,8 +676,7 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { } } - private void configureEnrollmentStage(CharSequence description, @RawRes int lottie) { - setDescriptionText(description); + private void configureEnrollmentStage(@RawRes int lottie) { LottieCompositionFactory.fromRawRes(this, lottie) .addListener((c) -> { mIllustrationLottie.setComposition(c); @@ -858,16 +850,16 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { } private void showError(CharSequence error) { - if (mCanAssumeUdfps || mCanAssumeSfps) { + if (mCanAssumeSfps) { + setHeaderText(error); + if (!mHelpAnimation.isRunning()) { + mHelpAnimation.start(); + } + applySfpsErrorDynamicColors(getApplicationContext(), true); + } else if (mCanAssumeUdfps) { setHeaderText(error); // Show nothing for subtitle when getting an error message. setDescriptionText(""); - if (mCanAssumeSfps) { - if (!mHelpAnimation.isRunning()) { - mHelpAnimation.start(); - } - applySfpsErrorDynamicColors(getApplicationContext(), true); - } } else { mErrorText.setText(error); if (mErrorText.getVisibility() == View.INVISIBLE) { @@ -1090,17 +1082,16 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { final boolean isLandscape = newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE; if (mCanAssumeSfps) { + // hide the description + descriptionMixin.getTextView().setVisibility(View.GONE); + headerMixin.getTextView().setHyphenationFrequency(HYPHENATION_FREQUENCY_NONE); if (isLandscape) { headerMixin.setAutoTextSizeEnabled(true); headerMixin.getTextView().setMinLines(0); headerMixin.getTextView().setMaxLines(10); - descriptionMixin.getTextView().setMinLines(0); - descriptionMixin.getTextView().setMaxLines(10); } else { headerMixin.setAutoTextSizeEnabled(false); headerMixin.getTextView().setLines(4); - // hide the description - descriptionMixin.getTextView().setLines(0); } } } 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 9052322f8c3..439abc6f61d 100644 --- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java +++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java @@ -51,12 +51,14 @@ import android.os.CancellationSignal; import android.os.Vibrator; import android.view.Display; import android.view.Surface; +import android.view.View; 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; @@ -263,6 +265,28 @@ public class FingerprintEnrollEnrollingTest { assertThat(appliedThemes.contains("SetupWizardPartnerResource")).isTrue(); } + @Test + public void fingerprintSfpsEnroll_descriptionTextVisibility() { + initializeActivityFor(TYPE_POWER_BUTTON); + + mActivity.onEnrollmentProgressChange(1 /* steps */, 1 /* remaining */); + + assertThat(getLayout().getDescriptionTextView().getVisibility()).isEqualTo(View.GONE); + } + + @Test + public void fingerprintUdfpsEnroll_descriptionTextVisibility() { + initializeActivityFor(TYPE_UDFPS_OPTICAL); + + mActivity.onEnrollmentProgressChange(1 /* steps */, 1 /* remaining */); + + assertThat(getLayout().getDescriptionTextView().getVisibility()).isEqualTo(View.VISIBLE); + } + + private GlifLayout getLayout() { + return (GlifLayout) mActivity.findViewById(R.id.setup_wizard_layout); + } + private void initializeActivityFor(int sensorType) { final List componentInfo = new ArrayList<>(); final FingerprintSensorPropertiesInternal prop = @@ -297,6 +321,9 @@ public class FingerprintEnrollEnrollingTest { doReturn(mSfpsStageThresholds[stage]).when(mActivity).getStageThresholdSteps(stage); } doReturn(true).when(mSidecar).isEnrolling(); + ReflectionHelpers.setField(mActivity, "mCanAssumeSfps", true); + } else if (sensorType == TYPE_UDFPS_OPTICAL) { + ReflectionHelpers.setField(mActivity, "mCanAssumeUdfps", true); } ActivityController.of(mActivity).create(savedInstanceState);