summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorSally <sallyyuen@google.com>2022-02-16 22:53:08 +0000
committerSally Yuen <sallyyuen@google.com>2022-02-18 21:10:12 +0000
commit4e8545b0b5ba6e0e859dedb217bcdcab4b48836e (patch)
treedc391528661d55691b4839c9d62daa7f1d3ad18a /core/java/android
parent33e714af1cd0f8fc5e52da86f06753c987a9af15 (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.java27
-rw-r--r--core/java/android/view/accessibility/AccessibilityEvent.java5
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;