Loading core/api/test-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -2970,6 +2970,7 @@ package android.view.accessibility { public final class AccessibilityManager { method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ACCESSIBILITY) public java.util.List<java.lang.String> getAccessibilityShortcutTargets(int); method public boolean hasAnyDirectConnection(); } public class AccessibilityNodeInfo implements android.os.Parcelable { Loading core/java/android/view/ViewRootImpl.java +4 −0 Original line number Diff line number Diff line Loading @@ -10497,6 +10497,8 @@ public final class ViewRootImpl implements ViewParent, if (mDirectConnectionId == AccessibilityNodeInfo.UNDEFINED_CONNECTION_ID) { mDirectConnectionId = AccessibilityInteractionClient.addDirectConnection( new AccessibilityInteractionConnection(ViewRootImpl.this)); // Notify listeners in the app process. mAccessibilityManager.notifyAccessibilityStateChanged(); } return mDirectConnectionId; } Loading @@ -10505,6 +10507,8 @@ public final class ViewRootImpl implements ViewParent, if (mDirectConnectionId != AccessibilityNodeInfo.UNDEFINED_CONNECTION_ID) { AccessibilityInteractionClient.removeConnection(mDirectConnectionId); mDirectConnectionId = AccessibilityNodeInfo.UNDEFINED_CONNECTION_ID; // Notify listeners in the app process. mAccessibilityManager.notifyAccessibilityStateChanged(); } } } Loading core/java/android/view/accessibility/AccessibilityInteractionClient.java +10 −0 Original line number Diff line number Diff line Loading @@ -117,6 +117,7 @@ public final class AccessibilityInteractionClient // Used to generate connection ids for direct app-process connections. Start sufficiently far // enough from the connection ids generated by AccessibilityManagerService. private static int sDirectConnectionIdCounter = 1 << 30; private static int sDirectConnectionCount = 0; /** List of timestamps which indicate the latest time an a11y service receives a scroll event from a window, mapping from windowId -> timestamp. */ Loading Loading @@ -272,12 +273,18 @@ public final class AccessibilityInteractionClient DirectAccessibilityConnection directAccessibilityConnection = new DirectAccessibilityConnection(connection); sConnectionCache.put(connectionId, directAccessibilityConnection); sDirectConnectionCount++; // Do not use AccessibilityCache for this connection, since there is no corresponding // AccessibilityService to handle cache invalidation events. return connectionId; } } /** Check if any {@link DirectAccessibilityConnection} is currently in the connection cache. */ public static boolean hasAnyDirectConnection() { return sDirectConnectionCount > 0; } /** * Gets a cached associated with the connection id if available. * Loading @@ -295,6 +302,9 @@ public final class AccessibilityInteractionClient */ public static void removeConnection(int connectionId) { synchronized (sConnectionCache) { if (getConnection(connectionId) instanceof DirectAccessibilityConnection) { sDirectConnectionCount--; } sConnectionCache.remove(connectionId); sCaches.remove(connectionId); } Loading core/java/android/view/accessibility/AccessibilityManager.java +17 −3 Original line number Diff line number Diff line Loading @@ -602,11 +602,20 @@ public final class AccessibilityManager { */ public boolean isEnabled() { synchronized (mLock) { return mIsEnabled || (mAccessibilityPolicy != null && mAccessibilityPolicy.isEnabled(mIsEnabled)); return mIsEnabled || hasAnyDirectConnection() || (mAccessibilityPolicy != null && mAccessibilityPolicy.isEnabled(mIsEnabled)); } } /** * @see AccessibilityInteractionClient#hasAnyDirectConnection * @hide */ @TestApi public boolean hasAnyDirectConnection() { return AccessibilityInteractionClient.hasAnyDirectConnection(); } /** * Returns if the touch exploration in the system is enabled. * <p> Loading Loading @@ -1942,8 +1951,13 @@ public final class AccessibilityManager { /** * Notifies the registered {@link AccessibilityStateChangeListener}s. * * Note: this method notifies only the listeners of this single instance. * AccessibilityManagerService is responsible for calling this method on all of * its AccessibilityManager clients in order to notify all listeners. * @hide */ private void notifyAccessibilityStateChanged() { public void notifyAccessibilityStateChanged() { final boolean isEnabled; final ArrayMap<AccessibilityStateChangeListener, Handler> listeners; synchronized (mLock) { Loading Loading
core/api/test-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -2970,6 +2970,7 @@ package android.view.accessibility { public final class AccessibilityManager { method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ACCESSIBILITY) public java.util.List<java.lang.String> getAccessibilityShortcutTargets(int); method public boolean hasAnyDirectConnection(); } public class AccessibilityNodeInfo implements android.os.Parcelable { Loading
core/java/android/view/ViewRootImpl.java +4 −0 Original line number Diff line number Diff line Loading @@ -10497,6 +10497,8 @@ public final class ViewRootImpl implements ViewParent, if (mDirectConnectionId == AccessibilityNodeInfo.UNDEFINED_CONNECTION_ID) { mDirectConnectionId = AccessibilityInteractionClient.addDirectConnection( new AccessibilityInteractionConnection(ViewRootImpl.this)); // Notify listeners in the app process. mAccessibilityManager.notifyAccessibilityStateChanged(); } return mDirectConnectionId; } Loading @@ -10505,6 +10507,8 @@ public final class ViewRootImpl implements ViewParent, if (mDirectConnectionId != AccessibilityNodeInfo.UNDEFINED_CONNECTION_ID) { AccessibilityInteractionClient.removeConnection(mDirectConnectionId); mDirectConnectionId = AccessibilityNodeInfo.UNDEFINED_CONNECTION_ID; // Notify listeners in the app process. mAccessibilityManager.notifyAccessibilityStateChanged(); } } } Loading
core/java/android/view/accessibility/AccessibilityInteractionClient.java +10 −0 Original line number Diff line number Diff line Loading @@ -117,6 +117,7 @@ public final class AccessibilityInteractionClient // Used to generate connection ids for direct app-process connections. Start sufficiently far // enough from the connection ids generated by AccessibilityManagerService. private static int sDirectConnectionIdCounter = 1 << 30; private static int sDirectConnectionCount = 0; /** List of timestamps which indicate the latest time an a11y service receives a scroll event from a window, mapping from windowId -> timestamp. */ Loading Loading @@ -272,12 +273,18 @@ public final class AccessibilityInteractionClient DirectAccessibilityConnection directAccessibilityConnection = new DirectAccessibilityConnection(connection); sConnectionCache.put(connectionId, directAccessibilityConnection); sDirectConnectionCount++; // Do not use AccessibilityCache for this connection, since there is no corresponding // AccessibilityService to handle cache invalidation events. return connectionId; } } /** Check if any {@link DirectAccessibilityConnection} is currently in the connection cache. */ public static boolean hasAnyDirectConnection() { return sDirectConnectionCount > 0; } /** * Gets a cached associated with the connection id if available. * Loading @@ -295,6 +302,9 @@ public final class AccessibilityInteractionClient */ public static void removeConnection(int connectionId) { synchronized (sConnectionCache) { if (getConnection(connectionId) instanceof DirectAccessibilityConnection) { sDirectConnectionCount--; } sConnectionCache.remove(connectionId); sCaches.remove(connectionId); } Loading
core/java/android/view/accessibility/AccessibilityManager.java +17 −3 Original line number Diff line number Diff line Loading @@ -602,11 +602,20 @@ public final class AccessibilityManager { */ public boolean isEnabled() { synchronized (mLock) { return mIsEnabled || (mAccessibilityPolicy != null && mAccessibilityPolicy.isEnabled(mIsEnabled)); return mIsEnabled || hasAnyDirectConnection() || (mAccessibilityPolicy != null && mAccessibilityPolicy.isEnabled(mIsEnabled)); } } /** * @see AccessibilityInteractionClient#hasAnyDirectConnection * @hide */ @TestApi public boolean hasAnyDirectConnection() { return AccessibilityInteractionClient.hasAnyDirectConnection(); } /** * Returns if the touch exploration in the system is enabled. * <p> Loading Loading @@ -1942,8 +1951,13 @@ public final class AccessibilityManager { /** * Notifies the registered {@link AccessibilityStateChangeListener}s. * * Note: this method notifies only the listeners of this single instance. * AccessibilityManagerService is responsible for calling this method on all of * its AccessibilityManager clients in order to notify all listeners. * @hide */ private void notifyAccessibilityStateChanged() { public void notifyAccessibilityStateChanged() { final boolean isEnabled; final ArrayMap<AccessibilityStateChangeListener, Handler> listeners; synchronized (mLock) { Loading