summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Svetoslav Ganov <svetoslavganov@google.com> 2011-09-22 19:26:56 -0700
committer Svetoslav Ganov <svetoslavganov@google.com> 2011-09-22 19:55:47 -0700
commitb84b94e1a04cd1f396dd6fef98d65ca1a2729c92 (patch)
tree868cc12ef3355e3520e7e1c2f77c39085afe8807
parent04ef5b8dd7262ee90b56df9c992f103695d0a21c (diff)
Scroll accessibility events should not populate text.
Scroll events are used to report position change and should not contain the text content of the view that fires them because it is usiually a containter for many other views and the text will be long and not informative for accessibility purposes. Also such evens are fired relatively frequently. If a client wants to fetch some textual content for a scroll event he can use the interrogation APIs. bug:5352059 Change-Id: I43e02aca895c8ab16ba82ebe1cee3aea8ce7711a
-rw-r--r--core/java/android/view/View.java6
-rw-r--r--core/java/android/view/ViewGroup.java8
-rw-r--r--core/java/android/widget/AbsListView.java10
-rw-r--r--core/java/android/widget/AdapterView.java31
4 files changed, 26 insertions, 29 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index ca06b9cf118a..0b9da11db77d 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -3900,6 +3900,12 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* Note: Called from the default {@link AccessibilityDelegate}.
*/
boolean dispatchPopulateAccessibilityEventInternal(AccessibilityEvent event) {
+ // Do not populate text to scroll events. They describe position change
+ // and usually come from container with a lot of text which is not very
+ // informative for accessibility purposes. Also they are fired frequently.
+ if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_SCROLLED) {
+ return true;
+ }
onPopulateAccessibilityEvent(event);
return false;
}
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index b678c7dab894..a29cf13f4ef8 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -2176,13 +2176,15 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
@Override
boolean dispatchPopulateAccessibilityEventInternal(AccessibilityEvent event) {
- // We first get a chance to populate the event.
- super.dispatchPopulateAccessibilityEventInternal(event);
+ boolean handled = super.dispatchPopulateAccessibilityEventInternal(event);
+ if (handled) {
+ return handled;
+ }
// Let our children have a shot in populating the event.
for (int i = 0, count = getChildCount(); i < count; i++) {
View child = getChildAt(i);
if ((child.mViewFlags & VISIBILITY_MASK) == VISIBLE) {
- boolean handled = getChildAt(i).dispatchPopulateAccessibilityEvent(event);
+ handled = getChildAt(i).dispatchPopulateAccessibilityEvent(event);
if (handled) {
return handled;
}
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index ba89ef3e6cbd..7b8c7f218ddc 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -1304,16 +1304,6 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
}
}
- @Override
- public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
- // Do not append text content to scroll events they are fired frequently
- // and the client has already received another event type with the text.
- if (event.getEventType() != AccessibilityEvent.TYPE_VIEW_SCROLLED) {
- super.dispatchPopulateAccessibilityEvent(event);
- }
- return false;
- }
-
/**
* Indicates whether the children's drawing cache is used during a scroll.
* By default, the drawing cache is enabled but this will consume more memory.
diff --git a/core/java/android/widget/AdapterView.java b/core/java/android/widget/AdapterView.java
index 5392c2e5f5ad..a4b4e783def9 100644
--- a/core/java/android/widget/AdapterView.java
+++ b/core/java/android/widget/AdapterView.java
@@ -881,31 +881,30 @@ public abstract class AdapterView<T extends Adapter> extends ViewGroup {
@Override
public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
- // This is an exceptional case which occurs when a window gets the
- // focus and sends a focus event via its focused child to announce
- // current focus/selection. AdapterView fires selection but not focus
- // events so we change the event type here.
- if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_FOCUSED) {
- event.setEventType(AccessibilityEvent.TYPE_VIEW_SELECTED);
+ final int eventType = event.getEventType();
+ switch (eventType) {
+ case AccessibilityEvent.TYPE_VIEW_SCROLLED:
+ // Do not populate the text of scroll events.
+ return true;
+ case AccessibilityEvent.TYPE_VIEW_FOCUSED:
+ // This is an exceptional case which occurs when a window gets the
+ // focus and sends a focus event via its focused child to announce
+ // current focus/selection. AdapterView fires selection but not focus
+ // events so we change the event type here.
+ if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_FOCUSED) {
+ event.setEventType(AccessibilityEvent.TYPE_VIEW_SELECTED);
+ }
+ break;
}
View selectedView = getSelectedView();
if (selectedView != null && selectedView.getVisibility() == VISIBLE) {
- // We first get a chance to populate the event.
- onPopulateAccessibilityEvent(event);
+ getSelectedView().dispatchPopulateAccessibilityEvent(event);
}
return false;
}
@Override
- public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
- super.onPopulateAccessibilityEvent(event);
- // We send selection events only from AdapterView to avoid
- // generation of such event for each child.
- getSelectedView().dispatchPopulateAccessibilityEvent(event);
- }
-
- @Override
public boolean onRequestSendAccessibilityEvent(View child, AccessibilityEvent event) {
if (super.onRequestSendAccessibilityEvent(child, event)) {
// Add a record for ourselves as well.