Fix a11y of BiometricPrompt icon and help text
Makes sure the BiometricPrompt fingerprint icon has an appropriate content description, isn't overridden by UdfpsController, and doesn't announce "Selected" before reading help text. Test: Manually tested with biometric integration test app Fixes: 191221458 Change-Id: I4818ed89c226f3f7e5aa235317db0752450fd590
This commit is contained in:
@@ -52,6 +52,7 @@
|
||||
android:layout_width="@dimen/biometric_dialog_biometric_icon_size"
|
||||
android:layout_height="@dimen/biometric_dialog_biometric_icon_size"
|
||||
android:layout_gravity="center"
|
||||
android:contentDescription="@null"
|
||||
android:scaleType="fitXY" />
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
@@ -23,6 +23,8 @@ import android.graphics.drawable.Drawable;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.systemui.R;
|
||||
|
||||
public class AuthBiometricFingerprintView extends AuthBiometricView {
|
||||
@@ -94,12 +96,37 @@ public class AuthBiometricFingerprintView extends AuthBiometricView {
|
||||
|
||||
mIconView.setImageDrawable(icon);
|
||||
|
||||
final CharSequence iconContentDescription = getIconContentDescription(newState);
|
||||
if (iconContentDescription != null) {
|
||||
mIconView.setContentDescription(iconContentDescription);
|
||||
}
|
||||
|
||||
if (animation != null && shouldAnimateForTransition(lastState, newState)) {
|
||||
animation.forceAnimationOnUI();
|
||||
animation.start();
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private CharSequence getIconContentDescription(int newState) {
|
||||
switch (newState) {
|
||||
case STATE_IDLE:
|
||||
case STATE_AUTHENTICATING_ANIMATING_IN:
|
||||
case STATE_AUTHENTICATING:
|
||||
case STATE_PENDING_CONFIRMATION:
|
||||
case STATE_AUTHENTICATED:
|
||||
return mContext.getString(
|
||||
R.string.accessibility_fingerprint_dialog_fingerprint_icon);
|
||||
|
||||
case STATE_ERROR:
|
||||
case STATE_HELP:
|
||||
return mContext.getString(R.string.biometric_dialog_try_again);
|
||||
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean shouldAnimateForTransition(int oldState, int newState) {
|
||||
switch (newState) {
|
||||
case STATE_HELP:
|
||||
|
||||
@@ -636,7 +636,6 @@ public abstract class AuthBiometricView extends LinearLayout {
|
||||
mIndicatorView.setText(message);
|
||||
mIndicatorView.setTextColor(mTextColorError);
|
||||
mIndicatorView.setVisibility(View.VISIBLE);
|
||||
mIndicatorView.setSelected(true);
|
||||
mHandler.postDelayed(resetMessageRunnable, mInjector.getDelayAfterError());
|
||||
|
||||
Utils.notifyAccessibilityContentChanged(mAccessibilityManager, this);
|
||||
|
||||
@@ -698,7 +698,8 @@ public class UdfpsController implements DozeReceiver {
|
||||
// This view overlaps the sensor area, so prevent it from being selectable
|
||||
// during a11y.
|
||||
if (reason == IUdfpsOverlayController.REASON_ENROLL_FIND_SENSOR
|
||||
|| reason == IUdfpsOverlayController.REASON_ENROLL_ENROLLING) {
|
||||
|| reason == IUdfpsOverlayController.REASON_ENROLL_ENROLLING
|
||||
|| reason == IUdfpsOverlayController.REASON_AUTH_BP) {
|
||||
mView.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user