Loading core/api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -3091,6 +3091,7 @@ package android.accessibilityservice { public abstract class AccessibilityService extends android.app.Service { ctor public AccessibilityService(); method public void attachAccessibilityOverlayToDisplay(int, @NonNull android.view.SurfaceControl); method public void attachAccessibilityOverlayToWindow(int, @NonNull android.view.SurfaceControl); method public boolean clearCache(); method public boolean clearCachedSubtree(@NonNull android.view.accessibility.AccessibilityNodeInfo); method public final void disableSelf(); core/java/android/accessibilityservice/AccessibilityService.java +16 −0 Original line number Diff line number Diff line Loading @@ -3439,4 +3439,20 @@ public abstract class AccessibilityService extends Service { throw new RuntimeException(re); } } /** * Attaches an accessibility overlay {@link android.view.SurfaceControl} to the specified * window. This method should be used when you want the overlay to move and resize as the parent * window moves and resizes. To remove this overlay and free the associated resources, use * <code> new SurfaceControl.Transaction().reparent(sc, null).apply();</code>. * * @param accessibilityWindowId The window id, from {@link AccessibilityWindowInfo#getId()}. * @param sc the SurfaceControl containing the overlay content */ public void attachAccessibilityOverlayToWindow( int accessibilityWindowId, @NonNull SurfaceControl sc) { Preconditions.checkNotNull(sc, "SurfaceControl cannot be null"); AccessibilityInteractionClient.getInstance(this) .attachAccessibilityOverlayToWindow(mConnectionId, accessibilityWindowId, sc); } } core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl +4 −1 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.graphics.Region; import android.os.Bundle; import android.os.RemoteCallback; import android.view.MagnificationSpec; import android.view.SurfaceControl; import android.view.MotionEvent; import android.view.SurfaceControl; import android.view.accessibility.AccessibilityNodeInfo; Loading Loading @@ -157,4 +158,6 @@ interface IAccessibilityServiceConnection { List<AccessibilityServiceInfo> getInstalledAndEnabledServices(); void attachAccessibilityOverlayToDisplay(int displayId, in SurfaceControl sc); void attachAccessibilityOverlayToWindow(int accessibilityWindowId, in SurfaceControl sc); } No newline at end of file core/java/android/view/AccessibilityInteractionController.java +21 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ import static android.view.accessibility.AccessibilityNodeInfo.ACTION_ARGUMENT_A import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_REQUESTED_KEY; import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY; import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage; import android.accessibilityservice.AccessibilityService; import android.annotation.NonNull; import android.graphics.Matrix; Loading Loading @@ -1961,4 +1963,23 @@ public final class AccessibilityInteractionController { } } } /** Attaches an accessibility overlay to the specified window. */ public void attachAccessibilityOverlayToWindowClientThread(SurfaceControl sc) { mHandler.sendMessage( obtainMessage( AccessibilityInteractionController ::attachAccessibilityOverlayToWindowUiThread, this, sc)); } private void attachAccessibilityOverlayToWindowUiThread(SurfaceControl sc) { SurfaceControl parent = mViewRootImpl.getSurfaceControl(); if (parent.isValid()) { SurfaceControl.Transaction t = new SurfaceControl.Transaction(); t.reparent(sc, parent).apply(); t.close(); } } } core/java/android/view/ViewRootImpl.java +9 −0 Original line number Diff line number Diff line Loading @@ -10810,6 +10810,15 @@ public final class ViewRootImpl implements ViewParent, } } } public void attachAccessibilityOverlayToWindow(SurfaceControl sc) { ViewRootImpl viewRootImpl = mViewRootImpl.get(); if (viewRootImpl != null) { viewRootImpl .getAccessibilityInteractionController() .attachAccessibilityOverlayToWindowClientThread(sc); } } } /** Loading Loading
core/api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -3091,6 +3091,7 @@ package android.accessibilityservice { public abstract class AccessibilityService extends android.app.Service { ctor public AccessibilityService(); method public void attachAccessibilityOverlayToDisplay(int, @NonNull android.view.SurfaceControl); method public void attachAccessibilityOverlayToWindow(int, @NonNull android.view.SurfaceControl); method public boolean clearCache(); method public boolean clearCachedSubtree(@NonNull android.view.accessibility.AccessibilityNodeInfo); method public final void disableSelf();
core/java/android/accessibilityservice/AccessibilityService.java +16 −0 Original line number Diff line number Diff line Loading @@ -3439,4 +3439,20 @@ public abstract class AccessibilityService extends Service { throw new RuntimeException(re); } } /** * Attaches an accessibility overlay {@link android.view.SurfaceControl} to the specified * window. This method should be used when you want the overlay to move and resize as the parent * window moves and resizes. To remove this overlay and free the associated resources, use * <code> new SurfaceControl.Transaction().reparent(sc, null).apply();</code>. * * @param accessibilityWindowId The window id, from {@link AccessibilityWindowInfo#getId()}. * @param sc the SurfaceControl containing the overlay content */ public void attachAccessibilityOverlayToWindow( int accessibilityWindowId, @NonNull SurfaceControl sc) { Preconditions.checkNotNull(sc, "SurfaceControl cannot be null"); AccessibilityInteractionClient.getInstance(this) .attachAccessibilityOverlayToWindow(mConnectionId, accessibilityWindowId, sc); } }
core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl +4 −1 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.graphics.Region; import android.os.Bundle; import android.os.RemoteCallback; import android.view.MagnificationSpec; import android.view.SurfaceControl; import android.view.MotionEvent; import android.view.SurfaceControl; import android.view.accessibility.AccessibilityNodeInfo; Loading Loading @@ -157,4 +158,6 @@ interface IAccessibilityServiceConnection { List<AccessibilityServiceInfo> getInstalledAndEnabledServices(); void attachAccessibilityOverlayToDisplay(int displayId, in SurfaceControl sc); void attachAccessibilityOverlayToWindow(int accessibilityWindowId, in SurfaceControl sc); } No newline at end of file
core/java/android/view/AccessibilityInteractionController.java +21 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ import static android.view.accessibility.AccessibilityNodeInfo.ACTION_ARGUMENT_A import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_REQUESTED_KEY; import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY; import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage; import android.accessibilityservice.AccessibilityService; import android.annotation.NonNull; import android.graphics.Matrix; Loading Loading @@ -1961,4 +1963,23 @@ public final class AccessibilityInteractionController { } } } /** Attaches an accessibility overlay to the specified window. */ public void attachAccessibilityOverlayToWindowClientThread(SurfaceControl sc) { mHandler.sendMessage( obtainMessage( AccessibilityInteractionController ::attachAccessibilityOverlayToWindowUiThread, this, sc)); } private void attachAccessibilityOverlayToWindowUiThread(SurfaceControl sc) { SurfaceControl parent = mViewRootImpl.getSurfaceControl(); if (parent.isValid()) { SurfaceControl.Transaction t = new SurfaceControl.Transaction(); t.reparent(sc, parent).apply(); t.close(); } } }
core/java/android/view/ViewRootImpl.java +9 −0 Original line number Diff line number Diff line Loading @@ -10810,6 +10810,15 @@ public final class ViewRootImpl implements ViewParent, } } } public void attachAccessibilityOverlayToWindow(SurfaceControl sc) { ViewRootImpl viewRootImpl = mViewRootImpl.get(); if (viewRootImpl != null) { viewRootImpl .getAccessibilityInteractionController() .attachAccessibilityOverlayToWindowClientThread(sc); } } } /** Loading