am 76597552: am 3a407fad: Merge "Fix HIDE_DESCENDANTS accessibility importance mode" into klp-dev

* commit '76597552805f810ff7de15f6fad72a0a89ff5724':
  Fix HIDE_DESCENDANTS accessibility importance mode
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index caeb1d8..c45307b 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -1738,47 +1738,41 @@
     /**
      * Masks for mPrivateFlags2, as generated by dumpFlags():
      *
-     * -------|-------|-------|-------|
-     *                                  PFLAG2_TEXT_ALIGNMENT_FLAGS[0]
-     *                                  PFLAG2_TEXT_DIRECTION_FLAGS[0]
-     *                                1 PFLAG2_DRAG_CAN_ACCEPT
-     *                               1  PFLAG2_DRAG_HOVERED
-     *                               1  PFLAG2_LAYOUT_DIRECTION_MASK_SHIFT
-     *                              11  PFLAG2_TEXT_DIRECTION_MASK_SHIFT
-     *                             1 1  PFLAG2_TEXT_DIRECTION_RESOLVED_MASK_SHIFT
-     *                             11   PFLAG2_LAYOUT_DIRECTION_MASK
-     *                             11 1 PFLAG2_TEXT_ALIGNMENT_MASK_SHIFT
-     *                            1     PFLAG2_LAYOUT_DIRECTION_RESOLVED_RTL
-     *                            1   1 PFLAG2_TEXT_ALIGNMENT_RESOLVED_MASK_SHIFT
-     *                            1 1   PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_SHIFT
-     *                           1      PFLAG2_LAYOUT_DIRECTION_RESOLVED
-     *                           11     PFLAG2_LAYOUT_DIRECTION_RESOLVED_MASK
-     *                          1       PFLAG2_TEXT_DIRECTION_FLAGS[1]
-     *                         1        PFLAG2_TEXT_DIRECTION_FLAGS[2]
-     *                         11       PFLAG2_TEXT_DIRECTION_FLAGS[3]
-     *                        1         PFLAG2_TEXT_DIRECTION_FLAGS[4]
-     *                        1 1       PFLAG2_TEXT_DIRECTION_FLAGS[5]
-     *                        111       PFLAG2_TEXT_DIRECTION_MASK
-     *                       1          PFLAG2_TEXT_DIRECTION_RESOLVED
-     *                      1           PFLAG2_TEXT_DIRECTION_RESOLVED_DEFAULT
-     *                    111           PFLAG2_TEXT_DIRECTION_RESOLVED_MASK
-     *                   1              PFLAG2_TEXT_ALIGNMENT_FLAGS[1]
-     *                  1               PFLAG2_TEXT_ALIGNMENT_FLAGS[2]
-     *                  11              PFLAG2_TEXT_ALIGNMENT_FLAGS[3]
-     *                 1                PFLAG2_TEXT_ALIGNMENT_FLAGS[4]
-     *                 1 1              PFLAG2_TEXT_ALIGNMENT_FLAGS[5]
-     *                 11               PFLAG2_TEXT_ALIGNMENT_FLAGS[6]
-     *                 111              PFLAG2_TEXT_ALIGNMENT_MASK
-     *                1                 PFLAG2_TEXT_ALIGNMENT_RESOLVED
-     *               1                  PFLAG2_TEXT_ALIGNMENT_RESOLVED_DEFAULT
-     *             111                  PFLAG2_TEXT_ALIGNMENT_RESOLVED_MASK
-     *           11                     PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_MASK
-     *          1                       PFLAG2_HAS_TRANSIENT_STATE
-     *      1                           PFLAG2_ACCESSIBILITY_FOCUSED
-     *     1                            PFLAG2_ACCESSIBILITY_STATE_CHANGED
-     *    1                             PFLAG2_VIEW_QUICK_REJECTED
-     *   1                              PFLAG2_PADDING_RESOLVED
-     * -------|-------|-------|-------|
+     * |-------|-------|-------|-------|
+     *                                 1 PFLAG2_DRAG_CAN_ACCEPT
+     *                                1  PFLAG2_DRAG_HOVERED
+     *                              11   PFLAG2_LAYOUT_DIRECTION_MASK
+     *                             1     PFLAG2_LAYOUT_DIRECTION_RESOLVED_RTL
+     *                            1      PFLAG2_LAYOUT_DIRECTION_RESOLVED
+     *                            11     PFLAG2_LAYOUT_DIRECTION_RESOLVED_MASK
+     *                           1       PFLAG2_TEXT_DIRECTION_FLAGS[1]
+     *                          1        PFLAG2_TEXT_DIRECTION_FLAGS[2]
+     *                          11       PFLAG2_TEXT_DIRECTION_FLAGS[3]
+     *                         1         PFLAG2_TEXT_DIRECTION_FLAGS[4]
+     *                         1 1       PFLAG2_TEXT_DIRECTION_FLAGS[5]
+     *                         111       PFLAG2_TEXT_DIRECTION_MASK
+     *                        1          PFLAG2_TEXT_DIRECTION_RESOLVED
+     *                       1           PFLAG2_TEXT_DIRECTION_RESOLVED_DEFAULT
+     *                     111           PFLAG2_TEXT_DIRECTION_RESOLVED_MASK
+     *                    1              PFLAG2_TEXT_ALIGNMENT_FLAGS[1]
+     *                   1               PFLAG2_TEXT_ALIGNMENT_FLAGS[2]
+     *                   11              PFLAG2_TEXT_ALIGNMENT_FLAGS[3]
+     *                  1                PFLAG2_TEXT_ALIGNMENT_FLAGS[4]
+     *                  1 1              PFLAG2_TEXT_ALIGNMENT_FLAGS[5]
+     *                  11               PFLAG2_TEXT_ALIGNMENT_FLAGS[6]
+     *                  111              PFLAG2_TEXT_ALIGNMENT_MASK
+     *                 1                 PFLAG2_TEXT_ALIGNMENT_RESOLVED
+     *                1                  PFLAG2_TEXT_ALIGNMENT_RESOLVED_DEFAULT
+     *              111                  PFLAG2_TEXT_ALIGNMENT_RESOLVED_MASK
+     *           111                     PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_MASK
+     *         11                        PFLAG2_ACCESSIBILITY_LIVE_REGION_MASK
+     *       1                           PFLAG2_ACCESSIBILITY_FOCUSED
+     *      1                            PFLAG2_SUBTREE_ACCESSIBILITY_STATE_CHANGED
+     *     1                             PFLAG2_VIEW_QUICK_REJECTED
+     *    1                              PFLAG2_PADDING_RESOLVED
+     *   1                               PFLAG2_DRAWABLE_RESOLVED
+     *  1                                PFLAG2_HAS_TRANSIENT_STATE
+     * |-------|-------|-------|-------|
      */
 
     /**
@@ -1876,15 +1870,6 @@
     static final int LAYOUT_DIRECTION_RESOLVED_DEFAULT = LAYOUT_DIRECTION_LTR;
 
     /**
-     * Indicates that the view is tracking some sort of transient state
-     * that the app should not need to be aware of, but that the framework
-     * should take special care to preserve.
-     *
-     * @hide
-     */
-    static final int PFLAG2_HAS_TRANSIENT_STATE = 0x1 << 22;
-
-    /**
      * Text direction is inherited thru {@link ViewGroup}
      */
     public static final int TEXT_DIRECTION_INHERIT = 0;
@@ -2216,6 +2201,13 @@
     static final int PFLAG2_DRAWABLE_RESOLVED = 0x40000000;
 
     /**
+     * Indicates that the view is tracking some sort of transient state
+     * that the app should not need to be aware of, but that the framework
+     * should take special care to preserve.
+     */
+    static final int PFLAG2_HAS_TRANSIENT_STATE = 0x80000000;
+
+    /**
      * Group of bits indicating that RTL properties resolution is done.
      */
     static final int ALL_RTL_PROPERTIES_RESOLVED = PFLAG2_LAYOUT_DIRECTION_RESOLVED |
@@ -7090,12 +7082,18 @@
      * @see #IMPORTANT_FOR_ACCESSIBILITY_AUTO
      */
     public void setImportantForAccessibility(int mode) {
-        final boolean oldIncludeForAccessibility = includeForAccessibility();
-        if (mode != getImportantForAccessibility()) {
+        final int oldMode = getImportantForAccessibility();
+        if (mode != oldMode) {
+            // If we're moving between AUTO and another state, we might not need
+            // to send a subtree changed notification. We'll store the computed
+            // importance, since we'll need to check it later to make sure.
+            final boolean maySkipNotify = oldMode == IMPORTANT_FOR_ACCESSIBILITY_AUTO
+                    || mode == IMPORTANT_FOR_ACCESSIBILITY_AUTO;
+            final boolean oldIncludeForAccessibility = maySkipNotify && includeForAccessibility();
             mPrivateFlags2 &= ~PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_MASK;
             mPrivateFlags2 |= (mode << PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_SHIFT)
                     & PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_MASK;
-            if (oldIncludeForAccessibility != includeForAccessibility()) {
+            if (!maySkipNotify || oldIncludeForAccessibility != includeForAccessibility()) {
                 notifySubtreeAccessibilityStateChangedIfNeeded();
             } else {
                 notifyViewAccessibilityStateChangedIfNeeded(