diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 55a8f747b5b26..05c82ae6afa12 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -7024,7 +7024,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * * @hide */ - private void notifySubtreeAccessibilityStateChangedIfNeeded() { + public void notifySubtreeAccessibilityStateChangedIfNeeded() { if (!AccessibilityManager.getInstance(mContext).isEnabled()) { return; } @@ -18867,6 +18867,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, final long minEventIntevalMillis = ViewConfiguration.getSendRecurringAccessibilityEventsInterval(); if (timeSinceLastMillis >= minEventIntevalMillis) { + removeCallbacks(this); run(); } else { postDelayed(this, minEventIntevalMillis - timeSinceLastMillis); diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index caed4a27d4950..29b2e4bea80c9 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -3595,7 +3595,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } if (child.isImportantForAccessibility() && child.getVisibility() != View.GONE) { - childAccessibilityStateChanged(child); + notifySubtreeAccessibilityStateChangedIfNeeded(); } } @@ -3838,7 +3838,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager onViewRemoved(view); if (view.isImportantForAccessibility() && view.getVisibility() != View.GONE) { - childAccessibilityStateChanged(view); + notifySubtreeAccessibilityStateChangedIfNeeded(); } } diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index a5f92de092943..bf1f07b9d9c22 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -6397,12 +6397,10 @@ public final class ViewRootImpl implements ViewParent, public void run() { mLastEventTimeMillis = SystemClock.uptimeMillis(); - if (AccessibilityManager.getInstance(mContext).isEnabled()) { - AccessibilityEvent event = AccessibilityEvent.obtain(); - event.setEventType(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED); - event.setContentChangeType(AccessibilityEvent.CONTENT_CHANGE_TYPE_SUBTREE); - mSource.sendAccessibilityEventUnchecked(event); - } + AccessibilityEvent event = AccessibilityEvent.obtain(); + event.setEventType(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED); + event.setContentChangeType(AccessibilityEvent.CONTENT_CHANGE_TYPE_SUBTREE); + mSource.sendAccessibilityEventUnchecked(event); mSource.resetSubtreeAccessibilityStateChanged(); mSource = null; } @@ -6417,6 +6415,7 @@ public final class ViewRootImpl implements ViewParent, final long minEventIntevalMillis = ViewConfiguration.getSendRecurringAccessibilityEventsInterval(); if (timeSinceLastMillis >= minEventIntevalMillis) { + mSource.removeCallbacks(this); run(); } else { mSource.postDelayed(this, minEventIntevalMillis - timeSinceLastMillis); diff --git a/core/java/android/widget/AdapterView.java b/core/java/android/widget/AdapterView.java index 4a2df58c54156..31ab0afa4334a 100644 --- a/core/java/android/widget/AdapterView.java +++ b/core/java/android/widget/AdapterView.java @@ -1033,7 +1033,7 @@ public abstract class AdapterView extends ViewGroup { checkSelectionChanged(); } - childAccessibilityStateChanged(this); + notifySubtreeAccessibilityStateChangedIfNeeded(); } void checkSelectionChanged() {