Loading core/java/android/app/UiAutomation.java +36 −27 Original line number Diff line number Diff line Loading @@ -580,14 +580,18 @@ public final class UiAutomation { command.run(); // Acquire the lock and wait for the event. synchronized (mLock) { try { // Wait for the event. final long startTimeMillis = SystemClock.uptimeMillis(); while (true) { List<AccessibilityEvent> localEvents = new ArrayList<>(); synchronized (mLock) { localEvents.addAll(mEventQueue); mEventQueue.clear(); } // Drain the event queue while (!mEventQueue.isEmpty()) { AccessibilityEvent event = mEventQueue.remove(0); while (!localEvents.isEmpty()) { AccessibilityEvent event = localEvents.remove(0); // Ignore events from previous interactions. if (event.getEventTime() < executionStartTimeMillis) { continue; Loading @@ -604,13 +608,18 @@ public final class UiAutomation { throw new TimeoutException("Expected event not received within: " + timeoutMillis + " ms."); } synchronized (mLock) { if (mEventQueue.isEmpty()) { try { mLock.wait(remainingTimeMillis); } catch (InterruptedException ie) { /* ignore */ } } } } } finally { synchronized (mLock) { mWaitingForEventDelivery = false; mEventQueue.clear(); mLock.notifyAll(); Loading core/java/android/view/View.java +1 −7 Original line number Diff line number Diff line Loading @@ -6928,13 +6928,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.setVisibleToUser(isVisibleToUser()); if ((mAttachInfo != null) && ((mAttachInfo.mAccessibilityFetchFlags & AccessibilityNodeInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS) != 0)) { info.setImportantForAccessibility(isImportantForAccessibility()); } else { info.setImportantForAccessibility(true); } info.setPackageName(mContext.getPackageName()); info.setClassName(getAccessibilityClassName()); info.setContentDescription(getContentDescription()); Loading core/java/android/view/ViewGroup.java +20 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ import android.util.Pools.SynchronizedPool; import android.util.SparseArray; import android.util.SparseBooleanArray; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityManager; import android.view.accessibility.AccessibilityNodeInfo; import android.view.animation.Animation; import android.view.animation.AnimationUtils; Loading Loading @@ -3144,6 +3145,25 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } } /** @hide */ @Override public void notifySubtreeAccessibilityStateChangedIfNeeded() { if (!AccessibilityManager.getInstance(mContext).isEnabled() || mAttachInfo == null) { return; } // If something important for a11y is happening in this subtree, make sure it's dispatched // from a view that is important for a11y so it doesn't get lost. if ((getImportantForAccessibility() != IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS) && !isImportantForAccessibility() && (getChildCount() > 0)) { ViewParent a11yParent = getParentForAccessibility(); if (a11yParent instanceof View) { ((View) a11yParent).notifySubtreeAccessibilityStateChangedIfNeeded(); return; } } super.notifySubtreeAccessibilityStateChangedIfNeeded(); } @Override void resetSubtreeAccessibilityStateChanged() { super.resetSubtreeAccessibilityStateChanged(); Loading core/java/android/view/accessibility/AccessibilityNodeInfo.java +1 −0 Original line number Diff line number Diff line Loading @@ -3296,6 +3296,7 @@ public class AccessibilityNodeInfo implements Parcelable { builder.append("; enabled: ").append(isEnabled()); builder.append("; password: ").append(isPassword()); builder.append("; scrollable: ").append(isScrollable()); builder.append("; importantForAccessibility: ").append(isImportantForAccessibility()); builder.append("; actions: ").append(mActions); return builder.toString(); Loading Loading
core/java/android/app/UiAutomation.java +36 −27 Original line number Diff line number Diff line Loading @@ -580,14 +580,18 @@ public final class UiAutomation { command.run(); // Acquire the lock and wait for the event. synchronized (mLock) { try { // Wait for the event. final long startTimeMillis = SystemClock.uptimeMillis(); while (true) { List<AccessibilityEvent> localEvents = new ArrayList<>(); synchronized (mLock) { localEvents.addAll(mEventQueue); mEventQueue.clear(); } // Drain the event queue while (!mEventQueue.isEmpty()) { AccessibilityEvent event = mEventQueue.remove(0); while (!localEvents.isEmpty()) { AccessibilityEvent event = localEvents.remove(0); // Ignore events from previous interactions. if (event.getEventTime() < executionStartTimeMillis) { continue; Loading @@ -604,13 +608,18 @@ public final class UiAutomation { throw new TimeoutException("Expected event not received within: " + timeoutMillis + " ms."); } synchronized (mLock) { if (mEventQueue.isEmpty()) { try { mLock.wait(remainingTimeMillis); } catch (InterruptedException ie) { /* ignore */ } } } } } finally { synchronized (mLock) { mWaitingForEventDelivery = false; mEventQueue.clear(); mLock.notifyAll(); Loading
core/java/android/view/View.java +1 −7 Original line number Diff line number Diff line Loading @@ -6928,13 +6928,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.setVisibleToUser(isVisibleToUser()); if ((mAttachInfo != null) && ((mAttachInfo.mAccessibilityFetchFlags & AccessibilityNodeInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS) != 0)) { info.setImportantForAccessibility(isImportantForAccessibility()); } else { info.setImportantForAccessibility(true); } info.setPackageName(mContext.getPackageName()); info.setClassName(getAccessibilityClassName()); info.setContentDescription(getContentDescription()); Loading
core/java/android/view/ViewGroup.java +20 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ import android.util.Pools.SynchronizedPool; import android.util.SparseArray; import android.util.SparseBooleanArray; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityManager; import android.view.accessibility.AccessibilityNodeInfo; import android.view.animation.Animation; import android.view.animation.AnimationUtils; Loading Loading @@ -3144,6 +3145,25 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } } /** @hide */ @Override public void notifySubtreeAccessibilityStateChangedIfNeeded() { if (!AccessibilityManager.getInstance(mContext).isEnabled() || mAttachInfo == null) { return; } // If something important for a11y is happening in this subtree, make sure it's dispatched // from a view that is important for a11y so it doesn't get lost. if ((getImportantForAccessibility() != IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS) && !isImportantForAccessibility() && (getChildCount() > 0)) { ViewParent a11yParent = getParentForAccessibility(); if (a11yParent instanceof View) { ((View) a11yParent).notifySubtreeAccessibilityStateChangedIfNeeded(); return; } } super.notifySubtreeAccessibilityStateChangedIfNeeded(); } @Override void resetSubtreeAccessibilityStateChanged() { super.resetSubtreeAccessibilityStateChanged(); Loading
core/java/android/view/accessibility/AccessibilityNodeInfo.java +1 −0 Original line number Diff line number Diff line Loading @@ -3296,6 +3296,7 @@ public class AccessibilityNodeInfo implements Parcelable { builder.append("; enabled: ").append(isEnabled()); builder.append("; password: ").append(isPassword()); builder.append("; scrollable: ").append(isScrollable()); builder.append("; importantForAccessibility: ").append(isImportantForAccessibility()); builder.append("; actions: ").append(mActions); return builder.toString(); Loading