Loading core/java/android/accessibilityservice/AccessibilityService.java +1 −3 Original line number Diff line number Diff line Loading @@ -2878,9 +2878,7 @@ public abstract class AccessibilityService extends Service { public IAccessibilityServiceClientWrapper(Context context, Looper looper, Callbacks callback) { mCallback = callback; mContext = context; mExecutor = new HandlerExecutor(new Handler(looper)); this(context, new HandlerExecutor(new Handler(looper)), callback); } public void init(IAccessibilityServiceConnection connection, int connectionId, Loading core/java/android/app/UiAutomation.java +36 −2 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import android.os.RemoteException; import android.os.SystemClock; import android.os.UserHandle; import android.util.ArraySet; import android.util.DebugUtils; import android.util.Log; import android.util.SparseArray; import android.view.Display; Loading Loading @@ -111,6 +112,7 @@ public final class UiAutomation { private static final String LOG_TAG = UiAutomation.class.getSimpleName(); private static final boolean DEBUG = false; private static final boolean VERBOSE = false; private static final int CONNECTION_ID_UNDEFINED = -1; Loading Loading @@ -321,11 +323,18 @@ public final class UiAutomation { * @hide */ public void connectWithTimeout(int flags, long timeoutMillis) throws TimeoutException { if (DEBUG) { Log.d(LOG_TAG, "connectWithTimeout: user=" + Process.myUserHandle().getIdentifier() + ", flags=" + DebugUtils.flagsToString(UiAutomation.class, "FLAG_", flags) + ", timeout=" + timeoutMillis + "ms"); } synchronized (mLock) { throwIfConnectedLocked(); if (mConnectionState == ConnectionState.CONNECTING) { if (DEBUG) Log.d(LOG_TAG, "already connecting"); return; } if (DEBUG) Log.d(LOG_TAG, "setting state to CONNECTING"); mConnectionState = ConnectionState.CONNECTING; mRemoteCallbackThread = new HandlerThread("UiAutomation"); mRemoteCallbackThread.start(); Loading @@ -341,6 +350,7 @@ public final class UiAutomation { // If UiAutomation is not allowed to use the accessibility subsystem, the // connection state should keep disconnected and not to start the client connection. if (!useAccessibility()) { if (DEBUG) Log.d(LOG_TAG, "setting state to DISCONNECTED"); mConnectionState = ConnectionState.DISCONNECTED; return; } Loading @@ -357,6 +367,7 @@ public final class UiAutomation { final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis; final long remainingTimeMillis = timeoutMillis - elapsedTimeMillis; if (remainingTimeMillis <= 0) { if (DEBUG) Log.d(LOG_TAG, "setting state to FAILED"); mConnectionState = ConnectionState.FAILED; throw new TimeoutException("Timeout while connecting " + this); } Loading Loading @@ -1367,7 +1378,8 @@ public final class UiAutomation { UserHandle userHandle) { try { if (DEBUG) { Log.i(LOG_TAG, "Granting runtime permission"); Log.i(LOG_TAG, "Granting runtime permission (" + permission + ") to package " + packageName + " on user " + userHandle); } // Calling out without a lock held. mUiAutomationConnection.grantRuntimePermission(packageName, Loading Loading @@ -1592,7 +1604,7 @@ public final class UiAutomation { private class IAccessibilityServiceClientImpl extends IAccessibilityServiceClientWrapper { public IAccessibilityServiceClientImpl(Looper looper, int generationId) { super(null, looper, new Callbacks() { super(/* context= */ null, looper, new Callbacks() { private final int mGenerationId = generationId; /** Loading @@ -1606,10 +1618,21 @@ public final class UiAutomation { @Override public void init(int connectionId, IBinder windowToken) { if (DEBUG) { Log.d(LOG_TAG, "init(): connectionId=" + connectionId + ", windowToken=" + windowToken + ", user=" + Process.myUserHandle() + ", mGenerationId=" + mGenerationId + ", UiAutomation.mGenerationId=" + UiAutomation.this.mGenerationId); } synchronized (mLock) { if (isGenerationChangedLocked()) { if (DEBUG) { Log.d(LOG_TAG, "init(): returning because generation id changed"); } return; } if (DEBUG) Log.d(LOG_TAG, "setting state to CONNECTED"); mConnectionState = ConnectionState.CONNECTED; mConnectionId = connectionId; mLock.notifyAll(); Loading Loading @@ -1662,9 +1685,20 @@ public final class UiAutomation { @Override public void onAccessibilityEvent(AccessibilityEvent event) { if (VERBOSE) { Log.v(LOG_TAG, "onAccessibilityEvent(" + Process.myUserHandle() + "): " + event); } final OnAccessibilityEventListener listener; synchronized (mLock) { if (isGenerationChangedLocked()) { if (VERBOSE) { Log.v(LOG_TAG, "onAccessibilityEvent(): returning because " + "generation id changed (from " + UiAutomation.this.mGenerationId + " to " + mGenerationId + ")"); } return; } // It is not guaranteed that the accessibility framework sends events by the Loading core/java/android/app/UiAutomationConnection.java +1 −0 Original line number Diff line number Diff line Loading @@ -103,6 +103,7 @@ public final class UiAutomationConnection extends IUiAutomationConnection.Stub { @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public UiAutomationConnection() { Log.d(TAG, "Created on user " + Process.myUserHandle()); } @Override Loading core/java/android/view/accessibility/AccessibilityRecord.java +1 −0 Original line number Diff line number Diff line Loading @@ -976,6 +976,7 @@ public class AccessibilityRecord { append(builder, "AddedCount", mAddedCount); append(builder, "RemovedCount", mRemovedCount); append(builder, "ParcelableData", mParcelableData); append(builder, "DisplayId", mSourceDisplayId); builder.append(" ]"); return builder; } Loading services/accessibility/java/com/android/server/accessibility/UiAutomationManager.java +5 −8 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.annotation.Nullable; import android.app.UiAutomation; import android.content.ComponentName; import android.content.Context; import android.os.Binder; import android.os.Handler; import android.os.IBinder; import android.os.IBinder.DeathRecipient; Loading @@ -34,6 +35,7 @@ import android.view.Display; import android.view.accessibility.AccessibilityEvent; import com.android.internal.util.DumpUtils; import com.android.server.utils.Slogf; import com.android.server.wm.WindowManagerInternal; import java.io.FileDescriptor; Loading @@ -51,12 +53,8 @@ class UiAutomationManager { private UiAutomationService mUiAutomationService; private AccessibilityServiceInfo mUiAutomationServiceInfo; private AbstractAccessibilityServiceConnection.SystemSupport mSystemSupport; private AccessibilityTrace mTrace; private int mUiAutomationFlags; UiAutomationManager(Object lock) { Loading Loading @@ -97,9 +95,10 @@ class UiAutomationManager { WindowManagerInternal windowManagerInternal, SystemActionPerformer systemActionPerformer, AccessibilityWindowManager awm, int flags) { synchronized (mLock) { accessibilityServiceInfo.setComponentName(COMPONENT_NAME); Slogf.i(LOG_TAG, "Registering UiTestAutomationService (id=%s) when called by user %d", accessibilityServiceInfo.getId(), Binder.getCallingUserHandle().getIdentifier()); synchronized (mLock) { if (mUiAutomationService != null) { throw new IllegalStateException( "UiAutomationService " + mUiAutomationService.mServiceInterface Loading @@ -116,7 +115,6 @@ class UiAutomationManager { mUiAutomationFlags = flags; mSystemSupport = systemSupport; mTrace = trace; // Ignore registering UiAutomation if it is not allowed to use the accessibility // subsystem. if (!useAccessibility()) { Loading @@ -126,7 +124,6 @@ class UiAutomationManager { mainHandler, mLock, securityPolicy, systemSupport, trace, windowManagerInternal, systemActionPerformer, awm); mUiAutomationServiceOwner = owner; mUiAutomationServiceInfo = accessibilityServiceInfo; mUiAutomationService.mServiceInterface = serviceClient; try { mUiAutomationService.mServiceInterface.asBinder().linkToDeath(mUiAutomationService, Loading Loading
core/java/android/accessibilityservice/AccessibilityService.java +1 −3 Original line number Diff line number Diff line Loading @@ -2878,9 +2878,7 @@ public abstract class AccessibilityService extends Service { public IAccessibilityServiceClientWrapper(Context context, Looper looper, Callbacks callback) { mCallback = callback; mContext = context; mExecutor = new HandlerExecutor(new Handler(looper)); this(context, new HandlerExecutor(new Handler(looper)), callback); } public void init(IAccessibilityServiceConnection connection, int connectionId, Loading
core/java/android/app/UiAutomation.java +36 −2 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import android.os.RemoteException; import android.os.SystemClock; import android.os.UserHandle; import android.util.ArraySet; import android.util.DebugUtils; import android.util.Log; import android.util.SparseArray; import android.view.Display; Loading Loading @@ -111,6 +112,7 @@ public final class UiAutomation { private static final String LOG_TAG = UiAutomation.class.getSimpleName(); private static final boolean DEBUG = false; private static final boolean VERBOSE = false; private static final int CONNECTION_ID_UNDEFINED = -1; Loading Loading @@ -321,11 +323,18 @@ public final class UiAutomation { * @hide */ public void connectWithTimeout(int flags, long timeoutMillis) throws TimeoutException { if (DEBUG) { Log.d(LOG_TAG, "connectWithTimeout: user=" + Process.myUserHandle().getIdentifier() + ", flags=" + DebugUtils.flagsToString(UiAutomation.class, "FLAG_", flags) + ", timeout=" + timeoutMillis + "ms"); } synchronized (mLock) { throwIfConnectedLocked(); if (mConnectionState == ConnectionState.CONNECTING) { if (DEBUG) Log.d(LOG_TAG, "already connecting"); return; } if (DEBUG) Log.d(LOG_TAG, "setting state to CONNECTING"); mConnectionState = ConnectionState.CONNECTING; mRemoteCallbackThread = new HandlerThread("UiAutomation"); mRemoteCallbackThread.start(); Loading @@ -341,6 +350,7 @@ public final class UiAutomation { // If UiAutomation is not allowed to use the accessibility subsystem, the // connection state should keep disconnected and not to start the client connection. if (!useAccessibility()) { if (DEBUG) Log.d(LOG_TAG, "setting state to DISCONNECTED"); mConnectionState = ConnectionState.DISCONNECTED; return; } Loading @@ -357,6 +367,7 @@ public final class UiAutomation { final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis; final long remainingTimeMillis = timeoutMillis - elapsedTimeMillis; if (remainingTimeMillis <= 0) { if (DEBUG) Log.d(LOG_TAG, "setting state to FAILED"); mConnectionState = ConnectionState.FAILED; throw new TimeoutException("Timeout while connecting " + this); } Loading Loading @@ -1367,7 +1378,8 @@ public final class UiAutomation { UserHandle userHandle) { try { if (DEBUG) { Log.i(LOG_TAG, "Granting runtime permission"); Log.i(LOG_TAG, "Granting runtime permission (" + permission + ") to package " + packageName + " on user " + userHandle); } // Calling out without a lock held. mUiAutomationConnection.grantRuntimePermission(packageName, Loading Loading @@ -1592,7 +1604,7 @@ public final class UiAutomation { private class IAccessibilityServiceClientImpl extends IAccessibilityServiceClientWrapper { public IAccessibilityServiceClientImpl(Looper looper, int generationId) { super(null, looper, new Callbacks() { super(/* context= */ null, looper, new Callbacks() { private final int mGenerationId = generationId; /** Loading @@ -1606,10 +1618,21 @@ public final class UiAutomation { @Override public void init(int connectionId, IBinder windowToken) { if (DEBUG) { Log.d(LOG_TAG, "init(): connectionId=" + connectionId + ", windowToken=" + windowToken + ", user=" + Process.myUserHandle() + ", mGenerationId=" + mGenerationId + ", UiAutomation.mGenerationId=" + UiAutomation.this.mGenerationId); } synchronized (mLock) { if (isGenerationChangedLocked()) { if (DEBUG) { Log.d(LOG_TAG, "init(): returning because generation id changed"); } return; } if (DEBUG) Log.d(LOG_TAG, "setting state to CONNECTED"); mConnectionState = ConnectionState.CONNECTED; mConnectionId = connectionId; mLock.notifyAll(); Loading Loading @@ -1662,9 +1685,20 @@ public final class UiAutomation { @Override public void onAccessibilityEvent(AccessibilityEvent event) { if (VERBOSE) { Log.v(LOG_TAG, "onAccessibilityEvent(" + Process.myUserHandle() + "): " + event); } final OnAccessibilityEventListener listener; synchronized (mLock) { if (isGenerationChangedLocked()) { if (VERBOSE) { Log.v(LOG_TAG, "onAccessibilityEvent(): returning because " + "generation id changed (from " + UiAutomation.this.mGenerationId + " to " + mGenerationId + ")"); } return; } // It is not guaranteed that the accessibility framework sends events by the Loading
core/java/android/app/UiAutomationConnection.java +1 −0 Original line number Diff line number Diff line Loading @@ -103,6 +103,7 @@ public final class UiAutomationConnection extends IUiAutomationConnection.Stub { @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public UiAutomationConnection() { Log.d(TAG, "Created on user " + Process.myUserHandle()); } @Override Loading
core/java/android/view/accessibility/AccessibilityRecord.java +1 −0 Original line number Diff line number Diff line Loading @@ -976,6 +976,7 @@ public class AccessibilityRecord { append(builder, "AddedCount", mAddedCount); append(builder, "RemovedCount", mRemovedCount); append(builder, "ParcelableData", mParcelableData); append(builder, "DisplayId", mSourceDisplayId); builder.append(" ]"); return builder; } Loading
services/accessibility/java/com/android/server/accessibility/UiAutomationManager.java +5 −8 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.annotation.Nullable; import android.app.UiAutomation; import android.content.ComponentName; import android.content.Context; import android.os.Binder; import android.os.Handler; import android.os.IBinder; import android.os.IBinder.DeathRecipient; Loading @@ -34,6 +35,7 @@ import android.view.Display; import android.view.accessibility.AccessibilityEvent; import com.android.internal.util.DumpUtils; import com.android.server.utils.Slogf; import com.android.server.wm.WindowManagerInternal; import java.io.FileDescriptor; Loading @@ -51,12 +53,8 @@ class UiAutomationManager { private UiAutomationService mUiAutomationService; private AccessibilityServiceInfo mUiAutomationServiceInfo; private AbstractAccessibilityServiceConnection.SystemSupport mSystemSupport; private AccessibilityTrace mTrace; private int mUiAutomationFlags; UiAutomationManager(Object lock) { Loading Loading @@ -97,9 +95,10 @@ class UiAutomationManager { WindowManagerInternal windowManagerInternal, SystemActionPerformer systemActionPerformer, AccessibilityWindowManager awm, int flags) { synchronized (mLock) { accessibilityServiceInfo.setComponentName(COMPONENT_NAME); Slogf.i(LOG_TAG, "Registering UiTestAutomationService (id=%s) when called by user %d", accessibilityServiceInfo.getId(), Binder.getCallingUserHandle().getIdentifier()); synchronized (mLock) { if (mUiAutomationService != null) { throw new IllegalStateException( "UiAutomationService " + mUiAutomationService.mServiceInterface Loading @@ -116,7 +115,6 @@ class UiAutomationManager { mUiAutomationFlags = flags; mSystemSupport = systemSupport; mTrace = trace; // Ignore registering UiAutomation if it is not allowed to use the accessibility // subsystem. if (!useAccessibility()) { Loading @@ -126,7 +124,6 @@ class UiAutomationManager { mainHandler, mLock, securityPolicy, systemSupport, trace, windowManagerInternal, systemActionPerformer, awm); mUiAutomationServiceOwner = owner; mUiAutomationServiceInfo = accessibilityServiceInfo; mUiAutomationService.mServiceInterface = serviceClient; try { mUiAutomationService.mServiceInterface.asBinder().linkToDeath(mUiAutomationService, Loading