diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 96e75064522e9..02666142e4ddf 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -15585,7 +15585,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, */ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) void setFlags(int flags, int mask) { - final boolean accessibilityEnabled = AccessibilityManager.getInstance(mContext).isEnabled(); + final boolean accessibilityEnabled = + AccessibilityManager.getInstance(mContext).isEnabled(); final boolean oldIncludeForAccessibility = accessibilityEnabled && includeForAccessibility(); int old = mViewFlags; @@ -15800,14 +15801,19 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if (accessibilityEnabled) { // If we're an accessibility pane and the visibility changed, we already have sent // a state change, so we really don't need to report other changes. - // Accessibility Services aren't concerned with changes between GONE and INVISIBLE. - boolean visibilityChanged = !isAccessibilityPane() && ((changed & VISIBILITY_MASK) != 0) - && ((old & VISIBILITY_MASK) == VISIBLE || newVisibility == VISIBLE); - if (oldIncludeForAccessibility != includeForAccessibility() || visibilityChanged) { - notifySubtreeAccessibilityStateChangedIfNeeded(); - } else if ((changed & ENABLED_MASK) != 0 || (changed & FOCUSABLE) != 0 + if (isAccessibilityPane()) { + changed &= ~VISIBILITY_MASK; + } + if ((changed & FOCUSABLE) != 0 || (changed & VISIBILITY_MASK) != 0 || (changed & CLICKABLE) != 0 || (changed & LONG_CLICKABLE) != 0 || (changed & CONTEXT_CLICKABLE) != 0) { + if (oldIncludeForAccessibility != includeForAccessibility()) { + notifySubtreeAccessibilityStateChangedIfNeeded(); + } else { + notifyViewAccessibilityStateChangedIfNeeded( + AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED); + } + } else if ((changed & ENABLED_MASK) != 0) { notifyViewAccessibilityStateChangedIfNeeded( AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED); }