diff options
3 files changed, 35 insertions, 2 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardIndication.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardIndication.java index ee3706a3ba62..a0b25b930d15 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardIndication.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardIndication.java @@ -32,6 +32,8 @@ import android.view.View; public class KeyguardIndication { @Nullable private final CharSequence mMessage; + @Nullable + private final boolean mForceAccessibilityLiveRegionAssertive; @NonNull private final ColorStateList mTextColor; @Nullable @@ -49,13 +51,15 @@ public class KeyguardIndication { Drawable icon, View.OnClickListener onClickListener, Drawable background, - Long minVisibilityMillis) { + Long minVisibilityMillis, + Boolean foceAssertive) { mMessage = message; mTextColor = textColor; mIcon = icon; mOnClickListener = onClickListener; mBackground = background; mMinVisibilityMillis = minVisibilityMillis; + mForceAccessibilityLiveRegionAssertive = foceAssertive; } /** @@ -101,6 +105,15 @@ public class KeyguardIndication { return mMinVisibilityMillis; } + + /** + * Whether to force the accessibility live region to be assertive. + */ + public boolean getForceAssertiveAccessibilityLiveRegion() { + return mForceAccessibilityLiveRegionAssertive; + } + + @Override public String toString() { String str = "KeyguardIndication{"; @@ -109,6 +122,7 @@ public class KeyguardIndication { if (mOnClickListener != null) str += " mOnClickListener=" + mOnClickListener; if (mBackground != null) str += " mBackground=" + mBackground; if (mMinVisibilityMillis != null) str += " mMinVisibilityMillis=" + mMinVisibilityMillis; + if (mForceAccessibilityLiveRegionAssertive) str += "mForceAccessibilityLiveRegionAssertive"; str += "}"; return str; } @@ -123,6 +137,7 @@ public class KeyguardIndication { private ColorStateList mTextColor; private Drawable mBackground; private Long mMinVisibilityMillis; + private boolean mForceAccessibilityLiveRegionAssertive; public Builder() { } @@ -178,6 +193,14 @@ public class KeyguardIndication { } /** + * Optional. Can force the accessibility live region to be assertive for this message. + */ + public Builder setForceAccessibilityLiveRegionAssertive() { + this.mForceAccessibilityLiveRegionAssertive = true; + return this; + } + + /** * Build the KeyguardIndication. */ public KeyguardIndication build() { @@ -190,7 +213,7 @@ public class KeyguardIndication { return new KeyguardIndication( mMessage, mTextColor, mIcon, mOnClickListener, mBackground, - mMinVisibilityMillis); + mMinVisibilityMillis, mForceAccessibilityLiveRegionAssertive); } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java index 2446473c3b31..3d4b421fcc50 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java @@ -633,6 +633,7 @@ public class KeyguardIndicationController { INDICATION_TYPE_BIOMETRIC_MESSAGE, new KeyguardIndication.Builder() .setMessage(mBiometricMessage) + .setForceAccessibilityLiveRegionAssertive() .setMinVisibilityMillis(IMPORTANT_MSG_MIN_DURATION) .setTextColor(mInitialTextColorState) .build(), diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardIndicationTextView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardIndicationTextView.java index c4e0f31c9c74..16e9c717935c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardIndicationTextView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardIndicationTextView.java @@ -219,6 +219,7 @@ public class KeyguardIndicationTextView extends TextView { } private void setNextIndication() { + boolean forceAssertiveAccessibilityLiveRegion = false; if (mKeyguardIndicationInfo != null) { // First, update the style. // If a background is set on the text, we don't want shadow on the text @@ -239,8 +240,16 @@ public class KeyguardIndicationTextView extends TextView { } } setCompoundDrawablesRelativeWithIntrinsicBounds(icon, null, null, null); + forceAssertiveAccessibilityLiveRegion = + mKeyguardIndicationInfo.getForceAssertiveAccessibilityLiveRegion(); + } + if (!forceAssertiveAccessibilityLiveRegion) { + setAccessibilityLiveRegion(ACCESSIBILITY_LIVE_REGION_NONE); } setText(mMessage); + if (forceAssertiveAccessibilityLiveRegion) { + setAccessibilityLiveRegion(ACCESSIBILITY_LIVE_REGION_ASSERTIVE); + } if (mAlwaysAnnounceText) { announceForAccessibility(mMessage); } |