Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 869e9968 authored by Kevin Chyn's avatar Kevin Chyn
Browse files

Update UDFPS fingerprint enrollment

1) Update UDFPS FindSensor to more of an EDU flow
2) Update UDFPS enrolling page to announce strings properly

Bug: 187460696
Test: manual
Change-Id: I30a77bd6bba911afb82e158d5e9f35b644ec880d
parent dbdaa851
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -1009,13 +1009,15 @@
    <!-- Introduction title shown in fingerprint enrollment dialog to locate the sensor [CHAR LIMIT=29] -->
    <string name="security_settings_fingerprint_enroll_find_sensor_title">Touch the sensor</string>
    <!-- Introduction title shown in fingerprint enrollment dialog to locate the sensor [CHAR LIMIT=60] -->
    <string name="security_settings_udfps_enroll_find_sensor_title">Touch &amp; hold the fingerprint icon</string>
    <string name="security_settings_udfps_enroll_find_sensor_title">How to set up your fingerprint</string>
    <!-- Message shown in fingerprint enrollment dialog to locate the sensor -->
    <string name="security_settings_fingerprint_enroll_find_sensor_message">It\u2019s on the back of your phone. Use your index finger.</string>
    <!-- Message shown in fingerprint enrollment dialog to locate the sensor [CHAR LIMIT=NONE]-->
    <string name="security_settings_udfps_enroll_find_sensor_message">The fingerprint sensor is on your screen</string>
    <string name="security_settings_udfps_enroll_find_sensor_message">The fingerprint sensor is on your screen. You\u2019ll capture your fingerprint on the next screen.</string>
    <!-- Button for starting fingerprint enrollment. [CHAR LIMIT=10]-->
    <string name="security_settings_udfps_enroll_find_sensor_start_button">Start</string>
    <!-- Message announced to a11y users during fingerprint enrollment to help them locate the sensor. [CHAR LIMIT=NONE] -->
    <string name="security_settings_udfps_enroll_find_sensor_a11y">The fingerprint sensor is on your screen. Move your finger across the screen to find the sensor.</string>
    <string name="security_settings_udfps_enroll_a11y">Move your finger across the screen to find the sensor. Touch &amp; hold the fingerprint sensor.</string>
    <!-- Content description of graphic that shows where the fingerprint of the device is [CHAR LIMIT=NONE] -->
    <string name="security_settings_fingerprint_enroll_find_sensor_content_description">Illustration with device and fingerprint sensor location</string>
    <!-- Label text shown in fingerprint dialog for renaming a fingerprint template [CHAR LIMIT=22] -->
@@ -1029,7 +1031,9 @@
    <!-- Message shown in fingerprint enrollment dialog to begin enrollment [CHAR LIMIT=NONE] -->
    <string name="security_settings_fingerprint_enroll_start_message">Put your finger on the sensor and lift after you feel a vibration</string>
    <!-- Message shown in fingerprint enrollment dialog to begin enrollment [CHAR LIMIT=NONE] -->
    <string name="security_settings_udfps_enroll_start_message">Keep your finger on the icon until you feel a vibration</string>
    <string name="security_settings_udfps_enroll_start_message">Keep your finger on the sensor until you feel a vibration</string>
    <!-- Title shown in fingerprint enrollment [CHAR LIMIT=NONE]-->
    <string name="security_settings_fingerprint_enroll_udfps_title">Touch &amp; hold the fingerprint sensor</string>
    <!-- Title shown in fingerprint enrollment dialog to repeat touching the fingerprint sensor [CHAR LIMIT=40] -->
    <string name="security_settings_fingerprint_enroll_repeat_title">Lift, then touch again</string>
    <!-- Title shown in fingerprint enrollment dialog to repeat touching the fingerprint sensor [CHAR LIMIT=40] -->
@@ -1039,7 +1043,9 @@
    <!-- Message shown in fingerprint enrollment dialog to repeat touching the fingerprint sensor [CHAR LIMIT=NONE] -->
    <string name="security_settings_fingerprint_enroll_repeat_message">Keep lifting your finger to add the different parts of your fingerprint</string>
    <!-- Message shown in fingerprint enrollment dialog to repeat touching the fingerprint sensor [CHAR LIMIT=NONE] -->
    <string name="security_settings_udfps_enroll_repeat_message">Touch &amp; hold each time the icon moves. This helps capture your full fingerprint.</string>
    <string name="security_settings_udfps_enroll_repeat_message">Touch &amp; hold each time the fingerprint icon moves. This helps capture your full fingerprint.</string>
    <!-- Message shown in fingerprint enrollment asking users to repeat touching the fingerprint sensor.-->
    <string name="security_settings_udfps_enroll_repeat_a11y_message">This helps capture your full fingerprint</string>
    <!-- Title shown in fingerprint enrollment dialog once enrollment is completed [CHAR LIMIT=29] -->
    <string name="security_settings_fingerprint_enroll_finish_title">Fingerprint added</string>
    <!-- Message shown in fingerprint enrollment dialog once enrollment is completed -->
+9 −1
Original line number Diff line number Diff line
@@ -175,21 +175,29 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity {
                layoutTitle.setAccessibilityLiveRegion(View.ACCESSIBILITY_LIVE_REGION_POLITE);
            }
            getLayout().setHeaderText(title);
            getLayout().getHeaderTextView().setContentDescription(title);
            setTitle(title);
        }
    }

    protected void setHeaderText(int resId) {
        setHeaderText(resId, false /* force */);
        getLayout().getHeaderTextView().setContentDescription(getText(resId));
    }

    protected void setHeaderText(CharSequence title) {
        getLayout().setHeaderText(title);
        getLayout().getHeaderTextView().setContentDescription(title);
    }

    protected void setDescriptionText(int resId) {
        CharSequence previousDescription = getLayout().getDescriptionText();
        CharSequence description = getString(resId);
        // Prevent a11y for re-reading the same string
        if (!TextUtils.equals(previousDescription, description)) {
            getLayout().setDescriptionText(resId);
        }
    }

    protected void setDescriptionText(CharSequence descriptionText) {
        getLayout().setDescriptionText(descriptionText);
+24 −4
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.text.TextUtils;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.accessibility.AccessibilityManager;
import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator;
import android.widget.ProgressBar;
@@ -111,6 +112,7 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
    private boolean mRestoring;
    private Vibrator mVibrator;
    private boolean mIsSetupWizard;
    private boolean mIsAccessibilityEnabled;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
@@ -121,6 +123,9 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
                fingerprintManager.getSensorPropertiesInternal();
        mCanAssumeUdfps = props.size() == 1 && props.get(0).isAnyUdfpsType();

        final AccessibilityManager am = getSystemService(AccessibilityManager.class);
        mIsAccessibilityEnabled = am.isEnabled();

        if (mCanAssumeUdfps) {
            if (BiometricUtils.isReverseLandscape(getApplicationContext())) {
                setContentView(R.layout.udfps_enroll_enrolling_land);
@@ -134,8 +139,8 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
        }

        mIsSetupWizard = WizardManagerHelper.isAnySetupWizard(getIntent());
        if (mCanAssumeUdfps && !mIsSetupWizard) {
            setHeaderText(R.string.security_settings_udfps_enroll_find_sensor_title);
        if (mCanAssumeUdfps) {
            updateTitleAndDescription();
        } else {
            setHeaderText(R.string.security_settings_fingerprint_enroll_repeat_title);
        }
@@ -282,7 +287,18 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
    private void updateTitleAndDescription() {
        if (mSidecar == null || mSidecar.getEnrollmentSteps() == -1) {
            if (mCanAssumeUdfps) {
                // setHeaderText(R.string.security_settings_fingerprint_enroll_udfps_title);
                // Don't use BiometricEnrollBase#setHeaderText, since that invokes setTitle,
                // which gets announced for a11y upon entering the page. For UDFPS, we want to
                // announce a different string for a11y upon entering the page.
                getLayout().setHeaderText(
                        R.string.security_settings_fingerprint_enroll_udfps_title);
                setDescriptionText(R.string.security_settings_udfps_enroll_start_message);

                final CharSequence description = getString(
                        R.string.security_settings_udfps_enroll_a11y);
                getLayout().getHeaderTextView().setContentDescription(description);
                setTitle(description);
            } else {
                setDescriptionText(R.string.security_settings_fingerprint_enroll_start_message);
            }
@@ -295,8 +311,12 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
            setDescriptionText(R.string.security_settings_udfps_enroll_start_message);
        } else {
            if (mCanAssumeUdfps) {
                setHeaderText(R.string.security_settings_udfps_enroll_repeat_title_touch_icon);
                setHeaderText(R.string.security_settings_fingerprint_enroll_repeat_title);
                if (mIsAccessibilityEnabled) {
                    setDescriptionText(R.string.security_settings_udfps_enroll_repeat_a11y_message);
                } else {
                    setDescriptionText(R.string.security_settings_udfps_enroll_repeat_message);
                }
            } else {
                setDescriptionText(R.string.security_settings_fingerprint_enroll_repeat_message);
            }
+18 −3
Original line number Diff line number Diff line
@@ -62,7 +62,7 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements
        mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class);
        mFooterBarMixin.setSecondaryButton(
                new FooterButton.Builder(this)
                        .setText(R.string.skip_label)
                        .setText(R.string.security_settings_fingerprint_enroll_enrolling_skip)
                        .setListener(this::onSkipButtonClick)
                        .setButtonType(FooterButton.ButtonType.SKIP)
                        .setTheme(R.style.SudGlifButton_Secondary)
@@ -72,8 +72,14 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements
        if (mCanAssumeUdfps) {
            setHeaderText(R.string.security_settings_udfps_enroll_find_sensor_title);
            setDescriptionText(R.string.security_settings_udfps_enroll_find_sensor_message);
            final CharSequence description = getString(R.string.security_settings_udfps_enroll_find_sensor_a11y);
            getLayout().getDescriptionTextView().setContentDescription(description);
            mFooterBarMixin.setPrimaryButton(
                    new FooterButton.Builder(this)
                    .setText(R.string.security_settings_udfps_enroll_find_sensor_start_button)
                    .setListener(this::onStartButtonClick)
                    .setButtonType(FooterButton.ButtonType.NEXT)
                    .setTheme(R.style.SudGlifButton_Primary)
                    .build()
            );
        } else {
            setHeaderText(R.string.security_settings_fingerprint_enroll_find_sensor_title);
            setDescriptionText(R.string.security_settings_fingerprint_enroll_find_sensor_message);
@@ -148,6 +154,11 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements
    }

    private void startLookingForFingerprint() {
        if (mCanAssumeUdfps) {
            // UDFPS devices use this screen as an educational screen. Users should tap the
            // "Start" button to move to the next screen to begin enrollment.
            return;
        }
        mSidecar = (FingerprintEnrollSidecar) getSupportFragmentManager().findFragmentByTag(
                FingerprintEnrollEnrolling.TAG_SIDECAR);
        if (mSidecar == null) {
@@ -201,6 +212,10 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements
        }
    }

    private void onStartButtonClick(View view) {
        startActivityForResult(getFingerprintEnrollingIntent(), ENROLL_REQUEST);
    }

    protected void onSkipButtonClick(View view) {
        stopLookingForFingerprint();
        setResult(RESULT_SKIP);