summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/widget/AbsListView.java21
-rw-r--r--core/java/android/widget/TextView.java11
2 files changed, 32 insertions, 0 deletions
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index cadf2aba0cec..9737a5a9bc07 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -628,6 +628,9 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
private int mGlowPaddingLeft;
private int mGlowPaddingRight;
+ private int mLastAccessibilityScrollEventFromIndex;
+ private int mLastAccessibilityScrollEventToIndex;
+
/**
* Interface definition for a callback to be invoked when the list or grid
* has been scrolled.
@@ -1265,6 +1268,24 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
}
@Override
+ public void sendAccessibilityEvent(int eventType) {
+ // Since this class calls onScrollChanged even if the mFirstPosition and the
+ // child count have not changed we will avoid sending duplicate accessibility
+ // events.
+ if (eventType == AccessibilityEvent.TYPE_VIEW_SCROLLED) {
+ final int lastPosition = mFirstPosition + getChildCount();
+ if (mLastAccessibilityScrollEventFromIndex == mFirstPosition
+ && mLastAccessibilityScrollEventToIndex == lastPosition) {
+ return;
+ } else {
+ mLastAccessibilityScrollEventFromIndex = mFirstPosition;
+ mLastAccessibilityScrollEventToIndex = lastPosition;
+ }
+ }
+ super.sendAccessibilityEvent(eventType);
+ }
+
+ @Override
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
event.setScrollable(true);
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 968d61215bc7..04cf69b48925 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -8449,6 +8449,17 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
info.setPassword(isPassword);
}
+ @Override
+ public void sendAccessibilityEvent(int eventType) {
+ // Do not send scroll events since first they are not interesting for
+ // accessibility and second such events a generated too frequently.
+ // For details see the implementation of bringTextIntoView().
+ if (eventType == AccessibilityEvent.TYPE_VIEW_SCROLLED) {
+ return;
+ }
+ super.sendAccessibilityEvent(eventType);
+ }
+
void sendAccessibilityEventTypeViewTextChanged(CharSequence beforeText,
int fromIndex, int removedCount, int addedCount) {
AccessibilityEvent event =