diff options
| author | Sally <sallyyuen@google.com> | 2022-02-16 22:53:08 +0000 |
|---|---|---|
| committer | Sally Yuen <sallyyuen@google.com> | 2022-02-18 21:10:12 +0000 |
| commit | 4e8545b0b5ba6e0e859dedb217bcdcab4b48836e (patch) | |
| tree | dc391528661d55691b4839c9d62daa7f1d3ad18a /core/java/android | |
| parent | 33e714af1cd0f8fc5e52da86f06753c987a9af15 (diff) | |
Make pane logic consistent with documentation
APPEARED and DISAPPEARED events should be sent when a title is first
given and nulled respectively, following the Javadoc.
Test: Manual, atest AccessibilityPaneTest
Bug: 133131221
Change-Id: I41cd2548aa949c7ce320e228c2b07ef04ea0298b
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/view/View.java | 27 | ||||
| -rw-r--r-- | core/java/android/view/accessibility/AccessibilityEvent.java | 5 |
2 files changed, 28 insertions, 4 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 34a13868f4d7..553c537d9b95 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -8226,9 +8226,25 @@ public class View implements Drawable.Callback, KeyEvent.Callback, */ public void setAccessibilityPaneTitle(@Nullable CharSequence accessibilityPaneTitle) { if (!TextUtils.equals(accessibilityPaneTitle, mAccessibilityPaneTitle)) { + boolean currentPaneTitleEmpty = mAccessibilityPaneTitle == null; + boolean newPaneTitleEmpty = accessibilityPaneTitle == null; mAccessibilityPaneTitle = accessibilityPaneTitle; - notifyViewAccessibilityStateChangedIfNeeded( - AccessibilityEvent.CONTENT_CHANGE_TYPE_PANE_TITLE); + // Make explicitly important as nulled titles need to be important for DISAPPEARED + // events. + if (mAccessibilityPaneTitle != null + && getImportantForAccessibility() == IMPORTANT_FOR_ACCESSIBILITY_AUTO) { + setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES); + } + if (currentPaneTitleEmpty) { + notifyViewAccessibilityStateChangedIfNeeded( + AccessibilityEvent.CONTENT_CHANGE_TYPE_PANE_APPEARED); + } else if (newPaneTitleEmpty) { + notifyViewAccessibilityStateChangedIfNeeded( + AccessibilityEvent.CONTENT_CHANGE_TYPE_PANE_DISAPPEARED); + } else { + notifyViewAccessibilityStateChangedIfNeeded( + AccessibilityEvent.CONTENT_CHANGE_TYPE_PANE_TITLE); + } } } @@ -14168,9 +14184,12 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } // Changes to views with a pane title count as window state changes, as the pane title - // marks them as significant parts of the UI. + // marks them as significant parts of the UI. A visible view with a nulled title may send + // a disappeared event. if ((changeType != AccessibilityEvent.CONTENT_CHANGE_TYPE_SUBTREE) - && isAccessibilityPane()) { + && (isAccessibilityPane() + || (changeType == AccessibilityEvent.CONTENT_CHANGE_TYPE_PANE_DISAPPEARED) + && isAggregatedVisible())) { // If the pane isn't visible, content changed events are sufficient unless we're // reporting that the view just disappeared if ((isAggregatedVisible()) diff --git a/core/java/android/view/accessibility/AccessibilityEvent.java b/core/java/android/view/accessibility/AccessibilityEvent.java index cd8dd86b8e02..7e16531663d5 100644 --- a/core/java/android/view/accessibility/AccessibilityEvent.java +++ b/core/java/android/view/accessibility/AccessibilityEvent.java @@ -592,6 +592,11 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par /** * Change type for {@link #TYPE_WINDOW_STATE_CHANGED} event: * The node's pane title changed. + * <p> + * If this makes the pane appear, {@link #CONTENT_CHANGE_TYPE_PANE_APPEARED} is sent + * instead. If this makes the pane disappear, {@link #CONTENT_CHANGE_TYPE_PANE_DISAPPEARED} + * is sent. + * */ public static final int CONTENT_CHANGE_TYPE_PANE_TITLE = 0x00000008; |
