AnnounceForAccessibility is broken for any view that has a ContentDescription.
1. The purpose of the View#announceForAccessibility method is to
give a message to the user that is not related to a predefined
view state change. The current implementation is grabbing the
source view's content description which in general overrides
the event text which defeats the purpose of the announcement.
bug:6721440
Change-Id: I8814914bea38c5f4c04f57391a64cf2bb06cb975
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index b6f0aa2..56eb628 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -4496,11 +4496,13 @@
* @param text The announcement text.
*/
public void announceForAccessibility(CharSequence text) {
- if (AccessibilityManager.getInstance(mContext).isEnabled()) {
+ if (AccessibilityManager.getInstance(mContext).isEnabled() && mParent != null) {
AccessibilityEvent event = AccessibilityEvent.obtain(
AccessibilityEvent.TYPE_ANNOUNCEMENT);
+ onInitializeAccessibilityEvent(event);
event.getText().add(text);
- sendAccessibilityEventUnchecked(event);
+ event.setContentDescription(null);
+ mParent.requestSendAccessibilityEvent(this, event);
}
}