Loading api/current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -34967,6 +34967,7 @@ package android.view { field public static final int SOFT_INPUT_STATE_UNSPECIFIED = 0; // 0x0 field public static final int SOFT_INPUT_STATE_VISIBLE = 4; // 0x4 field public static final int TITLE_CHANGED = 64; // 0x40 field public static final int TYPE_ACCESSIBILITY_OVERLAY = 2032; // 0x7f0 field public static final int TYPE_APPLICATION = 2; // 0x2 field public static final int TYPE_APPLICATION_ATTACHED_DIALOG = 1003; // 0x3eb field public static final int TYPE_APPLICATION_MEDIA = 1001; // 0x3e9 Loading Loading @@ -35386,6 +35387,7 @@ package android.view.accessibility { method public void recycle(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4 field public static final int TYPE_APPLICATION = 1; // 0x1 field public static final int TYPE_INPUT_METHOD = 2; // 0x2 field public static final int TYPE_SYSTEM = 3; // 0x3 core/java/android/accessibilityservice/AccessibilityService.java +86 −10 Original line number Diff line number Diff line Loading @@ -24,13 +24,18 @@ import android.os.Looper; import android.os.Message; import android.os.RemoteException; import android.util.Log; import android.view.Display; import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityInteractionClient; import android.view.accessibility.AccessibilityNodeInfo; import android.view.accessibility.AccessibilityWindowInfo; import com.android.internal.os.HandlerCaller; import com.android.internal.os.SomeArgs; import java.util.List; Loading Loading @@ -366,7 +371,7 @@ public abstract class AccessibilityService extends Service { public void onAccessibilityEvent(AccessibilityEvent event); public void onInterrupt(); public void onServiceConnected(); public void onSetConnectionId(int connectionId); public void init(int connectionId, IBinder windowToken); public boolean onGesture(int gestureId); public boolean onKeyEvent(KeyEvent event); } Loading @@ -375,6 +380,10 @@ public abstract class AccessibilityService extends Service { private AccessibilityServiceInfo mInfo; private IBinder mWindowToken; private WindowManager mWindowManager; /** * Callback for {@link android.view.accessibility.AccessibilityEvent}s. * Loading Loading @@ -611,6 +620,18 @@ public abstract class AccessibilityService extends Service { } } @Override public Object getSystemService(String name) { if (Context.WINDOW_SERVICE.equals(name)) { if (mWindowManager == null) { WindowManager wrapped = (WindowManager) super.getSystemService(name); mWindowManager = new LocalWindowManager(wrapped); } return mWindowManager; } return super.getSystemService(name); } /** * Implement to return the implementation of the internal accessibility * service interface. Loading @@ -634,8 +655,9 @@ public abstract class AccessibilityService extends Service { } @Override public void onSetConnectionId( int connectionId) { public void init(int connectionId, IBinder windowToken) { mConnectionId = connectionId; mWindowToken = windowToken; } @Override Loading @@ -658,7 +680,7 @@ public abstract class AccessibilityService extends Service { */ public static class IAccessibilityServiceClientWrapper extends IAccessibilityServiceClient.Stub implements HandlerCaller.Callback { private static final int DO_SET_SET_CONNECTION = 1; private static final int DO_INIT = 1; private static final int DO_ON_INTERRUPT = 2; private static final int DO_ON_ACCESSIBILITY_EVENT = 3; private static final int DO_ON_GESTURE = 4; Loading @@ -677,9 +699,10 @@ public abstract class AccessibilityService extends Service { mCaller = new HandlerCaller(context, looper, this, true /*asyncHandler*/); } public void setConnection(IAccessibilityServiceConnection connection, int connectionId) { Message message = mCaller.obtainMessageIO(DO_SET_SET_CONNECTION, connectionId, connection); public void init(IAccessibilityServiceConnection connection, int connectionId, IBinder windowToken) { Message message = mCaller.obtainMessageIOO(DO_INIT, connectionId, connection, windowToken); mCaller.sendMessage(message); } Loading Loading @@ -730,20 +753,24 @@ public abstract class AccessibilityService extends Service { mCallback.onInterrupt(); } return; case DO_SET_SET_CONNECTION: { case DO_INIT: { mConnectionId = message.arg1; SomeArgs args = (SomeArgs) message.obj; IAccessibilityServiceConnection connection = (IAccessibilityServiceConnection) message.obj; (IAccessibilityServiceConnection) args.arg1; IBinder windowToken = (IBinder) args.arg2; args.recycle(); if (connection != null) { AccessibilityInteractionClient.getInstance().addConnection(mConnectionId, connection); mCallback.onSetConnectionId(mConnectionId); mCallback.init(mConnectionId, windowToken); mCallback.onServiceConnected(); } else { AccessibilityInteractionClient.getInstance().removeConnection( mConnectionId); mConnectionId = AccessibilityInteractionClient.NO_ID; AccessibilityInteractionClient.getInstance().clearCache(); mCallback.onSetConnectionId(AccessibilityInteractionClient.NO_ID); mCallback.init(AccessibilityInteractionClient.NO_ID, null); } } return; Loading Loading @@ -785,4 +812,53 @@ public abstract class AccessibilityService extends Service { } } } private class LocalWindowManager implements WindowManager { private final WindowManager mImpl; private LocalWindowManager(WindowManager impl) { mImpl = impl; } @Override public Display getDefaultDisplay() { return mImpl.getDefaultDisplay(); } @Override public void addView(View view, ViewGroup.LayoutParams params) { if (!(params instanceof WindowManager.LayoutParams)) { throw new IllegalArgumentException("Params must be WindowManager.LayoutParams"); } WindowManager.LayoutParams windowParams = (WindowManager.LayoutParams) params; if (windowParams.type == LayoutParams.TYPE_ACCESSIBILITY_OVERLAY && windowParams.token == null) { windowParams.token = mWindowToken; } mImpl.addView(view, params); } @Override public void updateViewLayout(View view, ViewGroup.LayoutParams params) { if (!(params instanceof WindowManager.LayoutParams)) { throw new IllegalArgumentException("Params must be WindowManager.LayoutParams"); } WindowManager.LayoutParams windowParams = (WindowManager.LayoutParams) params; if (windowParams.type == LayoutParams.TYPE_ACCESSIBILITY_OVERLAY && windowParams.token == null) { windowParams.token = mWindowToken; } mImpl.updateViewLayout(view, params); } @Override public void removeViewImmediate(View view) { mImpl.removeViewImmediate(view); } @Override public void removeView(View view) { mImpl.removeView(view); } } } core/java/android/accessibilityservice/IAccessibilityServiceClient.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -28,7 +28,7 @@ import android.view.KeyEvent; */ oneway interface IAccessibilityServiceClient { void setConnection(in IAccessibilityServiceConnection connection, int connectionId); void init(in IAccessibilityServiceConnection connection, int connectionId, IBinder windowToken); void onAccessibilityEvent(in AccessibilityEvent event); Loading core/java/android/app/UiAutomation.java +2 −1 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Point; import android.hardware.display.DisplayManagerGlobal; import android.os.IBinder; import android.os.Looper; import android.os.ParcelFileDescriptor; import android.os.RemoteException; Loading Loading @@ -919,7 +920,7 @@ public final class UiAutomation { public IAccessibilityServiceClientImpl(Looper looper) { super(null, looper, new Callbacks() { @Override public void onSetConnectionId(int connectionId) { public void init(int connectionId, IBinder windowToken) { synchronized (mLock) { mConnectionId = connectionId; mLock.notifyAll(); Loading core/java/android/view/WindowManager.java +13 −0 Original line number Diff line number Diff line Loading @@ -541,6 +541,19 @@ public interface WindowManager extends ViewManager { */ public static final int TYPE_VOICE_INTERACTION = FIRST_SYSTEM_WINDOW+31; /** * Window type: Windows that are overlaid <em>only</em> by an {@link * android.accessibilityservice.AccessibilityService} for interception of * user interactions without changing the windows an accessibility service * can introspect. In particular, an accessibility service can introspect * only windows that a sighted user can interact with which is they can touch * these windows or can type into these windows. For example, if there * is a full screen accessibility overlay that is touchable, the windows * below it will be introspectable by an accessibility service regardless * they are covered by a touchable window. */ public static final int TYPE_ACCESSIBILITY_OVERLAY = FIRST_SYSTEM_WINDOW+32; /** * End of types of system windows. */ Loading Loading
api/current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -34967,6 +34967,7 @@ package android.view { field public static final int SOFT_INPUT_STATE_UNSPECIFIED = 0; // 0x0 field public static final int SOFT_INPUT_STATE_VISIBLE = 4; // 0x4 field public static final int TITLE_CHANGED = 64; // 0x40 field public static final int TYPE_ACCESSIBILITY_OVERLAY = 2032; // 0x7f0 field public static final int TYPE_APPLICATION = 2; // 0x2 field public static final int TYPE_APPLICATION_ATTACHED_DIALOG = 1003; // 0x3eb field public static final int TYPE_APPLICATION_MEDIA = 1001; // 0x3e9 Loading Loading @@ -35386,6 +35387,7 @@ package android.view.accessibility { method public void recycle(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4 field public static final int TYPE_APPLICATION = 1; // 0x1 field public static final int TYPE_INPUT_METHOD = 2; // 0x2 field public static final int TYPE_SYSTEM = 3; // 0x3
core/java/android/accessibilityservice/AccessibilityService.java +86 −10 Original line number Diff line number Diff line Loading @@ -24,13 +24,18 @@ import android.os.Looper; import android.os.Message; import android.os.RemoteException; import android.util.Log; import android.view.Display; import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityInteractionClient; import android.view.accessibility.AccessibilityNodeInfo; import android.view.accessibility.AccessibilityWindowInfo; import com.android.internal.os.HandlerCaller; import com.android.internal.os.SomeArgs; import java.util.List; Loading Loading @@ -366,7 +371,7 @@ public abstract class AccessibilityService extends Service { public void onAccessibilityEvent(AccessibilityEvent event); public void onInterrupt(); public void onServiceConnected(); public void onSetConnectionId(int connectionId); public void init(int connectionId, IBinder windowToken); public boolean onGesture(int gestureId); public boolean onKeyEvent(KeyEvent event); } Loading @@ -375,6 +380,10 @@ public abstract class AccessibilityService extends Service { private AccessibilityServiceInfo mInfo; private IBinder mWindowToken; private WindowManager mWindowManager; /** * Callback for {@link android.view.accessibility.AccessibilityEvent}s. * Loading Loading @@ -611,6 +620,18 @@ public abstract class AccessibilityService extends Service { } } @Override public Object getSystemService(String name) { if (Context.WINDOW_SERVICE.equals(name)) { if (mWindowManager == null) { WindowManager wrapped = (WindowManager) super.getSystemService(name); mWindowManager = new LocalWindowManager(wrapped); } return mWindowManager; } return super.getSystemService(name); } /** * Implement to return the implementation of the internal accessibility * service interface. Loading @@ -634,8 +655,9 @@ public abstract class AccessibilityService extends Service { } @Override public void onSetConnectionId( int connectionId) { public void init(int connectionId, IBinder windowToken) { mConnectionId = connectionId; mWindowToken = windowToken; } @Override Loading @@ -658,7 +680,7 @@ public abstract class AccessibilityService extends Service { */ public static class IAccessibilityServiceClientWrapper extends IAccessibilityServiceClient.Stub implements HandlerCaller.Callback { private static final int DO_SET_SET_CONNECTION = 1; private static final int DO_INIT = 1; private static final int DO_ON_INTERRUPT = 2; private static final int DO_ON_ACCESSIBILITY_EVENT = 3; private static final int DO_ON_GESTURE = 4; Loading @@ -677,9 +699,10 @@ public abstract class AccessibilityService extends Service { mCaller = new HandlerCaller(context, looper, this, true /*asyncHandler*/); } public void setConnection(IAccessibilityServiceConnection connection, int connectionId) { Message message = mCaller.obtainMessageIO(DO_SET_SET_CONNECTION, connectionId, connection); public void init(IAccessibilityServiceConnection connection, int connectionId, IBinder windowToken) { Message message = mCaller.obtainMessageIOO(DO_INIT, connectionId, connection, windowToken); mCaller.sendMessage(message); } Loading Loading @@ -730,20 +753,24 @@ public abstract class AccessibilityService extends Service { mCallback.onInterrupt(); } return; case DO_SET_SET_CONNECTION: { case DO_INIT: { mConnectionId = message.arg1; SomeArgs args = (SomeArgs) message.obj; IAccessibilityServiceConnection connection = (IAccessibilityServiceConnection) message.obj; (IAccessibilityServiceConnection) args.arg1; IBinder windowToken = (IBinder) args.arg2; args.recycle(); if (connection != null) { AccessibilityInteractionClient.getInstance().addConnection(mConnectionId, connection); mCallback.onSetConnectionId(mConnectionId); mCallback.init(mConnectionId, windowToken); mCallback.onServiceConnected(); } else { AccessibilityInteractionClient.getInstance().removeConnection( mConnectionId); mConnectionId = AccessibilityInteractionClient.NO_ID; AccessibilityInteractionClient.getInstance().clearCache(); mCallback.onSetConnectionId(AccessibilityInteractionClient.NO_ID); mCallback.init(AccessibilityInteractionClient.NO_ID, null); } } return; Loading Loading @@ -785,4 +812,53 @@ public abstract class AccessibilityService extends Service { } } } private class LocalWindowManager implements WindowManager { private final WindowManager mImpl; private LocalWindowManager(WindowManager impl) { mImpl = impl; } @Override public Display getDefaultDisplay() { return mImpl.getDefaultDisplay(); } @Override public void addView(View view, ViewGroup.LayoutParams params) { if (!(params instanceof WindowManager.LayoutParams)) { throw new IllegalArgumentException("Params must be WindowManager.LayoutParams"); } WindowManager.LayoutParams windowParams = (WindowManager.LayoutParams) params; if (windowParams.type == LayoutParams.TYPE_ACCESSIBILITY_OVERLAY && windowParams.token == null) { windowParams.token = mWindowToken; } mImpl.addView(view, params); } @Override public void updateViewLayout(View view, ViewGroup.LayoutParams params) { if (!(params instanceof WindowManager.LayoutParams)) { throw new IllegalArgumentException("Params must be WindowManager.LayoutParams"); } WindowManager.LayoutParams windowParams = (WindowManager.LayoutParams) params; if (windowParams.type == LayoutParams.TYPE_ACCESSIBILITY_OVERLAY && windowParams.token == null) { windowParams.token = mWindowToken; } mImpl.updateViewLayout(view, params); } @Override public void removeViewImmediate(View view) { mImpl.removeViewImmediate(view); } @Override public void removeView(View view) { mImpl.removeView(view); } } }
core/java/android/accessibilityservice/IAccessibilityServiceClient.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -28,7 +28,7 @@ import android.view.KeyEvent; */ oneway interface IAccessibilityServiceClient { void setConnection(in IAccessibilityServiceConnection connection, int connectionId); void init(in IAccessibilityServiceConnection connection, int connectionId, IBinder windowToken); void onAccessibilityEvent(in AccessibilityEvent event); Loading
core/java/android/app/UiAutomation.java +2 −1 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Point; import android.hardware.display.DisplayManagerGlobal; import android.os.IBinder; import android.os.Looper; import android.os.ParcelFileDescriptor; import android.os.RemoteException; Loading Loading @@ -919,7 +920,7 @@ public final class UiAutomation { public IAccessibilityServiceClientImpl(Looper looper) { super(null, looper, new Callbacks() { @Override public void onSetConnectionId(int connectionId) { public void init(int connectionId, IBinder windowToken) { synchronized (mLock) { mConnectionId = connectionId; mLock.notifyAll(); Loading
core/java/android/view/WindowManager.java +13 −0 Original line number Diff line number Diff line Loading @@ -541,6 +541,19 @@ public interface WindowManager extends ViewManager { */ public static final int TYPE_VOICE_INTERACTION = FIRST_SYSTEM_WINDOW+31; /** * Window type: Windows that are overlaid <em>only</em> by an {@link * android.accessibilityservice.AccessibilityService} for interception of * user interactions without changing the windows an accessibility service * can introspect. In particular, an accessibility service can introspect * only windows that a sighted user can interact with which is they can touch * these windows or can type into these windows. For example, if there * is a full screen accessibility overlay that is touchable, the windows * below it will be introspectable by an accessibility service regardless * they are covered by a touchable window. */ public static final int TYPE_ACCESSIBILITY_OVERLAY = FIRST_SYSTEM_WINDOW+32; /** * End of types of system windows. */ Loading