Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 19d214bd authored by Jacky Kao's avatar Jacky Kao
Browse files

Sending A11y events when a view becomes invisible.

Making the A11y event sending to A11y services when a view becomes
invisible if the ancestors of this view are all visible, and this view
becomes invisible from visible.

Bug: 130273130
Test: a11y CTS & unit tests
Change-Id: I836d3e34c7a9cba31843d34922b7ba02a8a062f0
parent c5caed0c
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -13800,6 +13800,17 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
        }
    }
    private void notifySubtreeAccessibilityStateChangedByParentIfNeeded() {
        if (!AccessibilityManager.getInstance(mContext).isEnabled()) {
            return;
        }
        final View sendA11yEventView = (View) getParentForAccessibility();
        if (sendA11yEventView != null && sendA11yEventView.isShown()) {
            sendA11yEventView.notifySubtreeAccessibilityStateChangedIfNeeded();
        }
    }
    /**
     * Changes the visibility of this View without triggering any other changes. This should only
     * be used by animation frameworks, such as {@link android.transition.Transition}, where
@@ -16229,9 +16240,15 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
                        ((!(mParent instanceof ViewGroup)) || ((ViewGroup) mParent).isShown())) {
                    dispatchVisibilityAggregated(newVisibility == VISIBLE);
                }
                // If this view is invisible from visible, then sending the A11y event by its
                // parent which is shown and has the accessibility important.
                if ((old & VISIBILITY_MASK) == VISIBLE) {
                    notifySubtreeAccessibilityStateChangedByParentIfNeeded();
                } else {
                    notifySubtreeAccessibilityStateChangedIfNeeded();
                }
            }
        }
        if ((changed & WILL_NOT_CACHE_DRAWING) != 0) {
            destroyDrawingCache();