Loading core/api/system-current.txt +1 −0 Original line number Original line Diff line number Diff line Loading @@ -16686,6 +16686,7 @@ package android.view.accessibility { method public void interrupt(); method public void interrupt(); method public void onAccessibilityEvent(@NonNull android.view.accessibility.AccessibilityEvent); method public void onAccessibilityEvent(@NonNull android.view.accessibility.AccessibilityEvent); method public void onProxyConnected(); method public void onProxyConnected(); method public void setAccessibilityFocusAppearance(int, @ColorInt int); method public void setInstalledAndEnabledServices(@NonNull java.util.List<android.accessibilityservice.AccessibilityServiceInfo>); method public void setInstalledAndEnabledServices(@NonNull java.util.List<android.accessibilityservice.AccessibilityServiceInfo>); } } core/java/android/view/accessibility/AccessibilityDisplayProxy.java +22 −0 Original line number Original line Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.accessibilityservice.AccessibilityServiceInfo; import android.accessibilityservice.IAccessibilityServiceClient; import android.accessibilityservice.IAccessibilityServiceClient; import android.accessibilityservice.IAccessibilityServiceConnection; import android.accessibilityservice.IAccessibilityServiceConnection; import android.accessibilityservice.MagnificationConfig; import android.accessibilityservice.MagnificationConfig; import android.annotation.ColorInt; import android.annotation.NonNull; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.Nullable; import android.annotation.SystemApi; import android.annotation.SystemApi; Loading Loading @@ -239,6 +240,27 @@ public abstract class AccessibilityDisplayProxy { return Collections.emptyList(); return Collections.emptyList(); } } /** * Sets the strokeWidth and color of the accessibility focus rectangle. * * @param strokeWidth The stroke width of the rectangle in pixels. * Setting this value to zero results in no focus rectangle being drawn. * @param color The color of the rectangle. */ public void setAccessibilityFocusAppearance(int strokeWidth, @ColorInt int color) { IAccessibilityServiceConnection connection = AccessibilityInteractionClient.getInstance().getConnection(mConnectionId); if (connection != null) { try { connection.setFocusAppearance(strokeWidth, color); } catch (RemoteException re) { Log.w(LOG_TAG, "Error while setting the strokeWidth and color of the " + "accessibility focus rectangle", re); re.rethrowFromSystemServer(); } } } /** /** * An IAccessibilityServiceClient that handles interrupts, accessibility events, and system * An IAccessibilityServiceClient that handles interrupts, accessibility events, and system * connection. * connection. Loading services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java +3 −0 Original line number Original line Diff line number Diff line Loading @@ -314,6 +314,9 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ void unbindImeLocked(AbstractAccessibilityServiceConnection connection); void unbindImeLocked(AbstractAccessibilityServiceConnection connection); void attachAccessibilityOverlayToDisplay(int displayId, SurfaceControl sc); void attachAccessibilityOverlayToDisplay(int displayId, SurfaceControl sc); void setCurrentUserFocusAppearance(int strokeWidth, int color); } } public AbstractAccessibilityServiceConnection(Context context, ComponentName componentName, public AbstractAccessibilityServiceConnection(Context context, ComponentName componentName, Loading services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +7 −0 Original line number Original line Diff line number Diff line Loading @@ -4876,4 +4876,11 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub transaction.apply(); transaction.apply(); transaction.close(); transaction.close(); } } @Override public void setCurrentUserFocusAppearance(int strokeWidth, int color) { synchronized (mLock) { getCurrentUserStateLocked().setFocusAppearanceLocked(strokeWidth, color); } } } } services/accessibility/java/com/android/server/accessibility/ProxyAccessibilityServiceConnection.java +52 −0 Original line number Original line Diff line number Diff line Loading @@ -43,6 +43,7 @@ import android.view.accessibility.AccessibilityWindowInfo; import androidx.annotation.Nullable; import androidx.annotation.Nullable; import com.android.internal.R; import com.android.server.wm.WindowManagerInternal; import com.android.server.wm.WindowManagerInternal; import java.util.Arrays; import java.util.Arrays; Loading @@ -63,6 +64,11 @@ public class ProxyAccessibilityServiceConnection extends AccessibilityServiceCon private int mDisplayId; private int mDisplayId; private List<AccessibilityServiceInfo> mInstalledAndEnabledServices; private List<AccessibilityServiceInfo> mInstalledAndEnabledServices; /** The stroke width of the focus rectangle in pixels */ private int mFocusStrokeWidth; /** The color of the focus rectangle */ private int mFocusColor; ProxyAccessibilityServiceConnection( ProxyAccessibilityServiceConnection( Context context, Context context, ComponentName componentName, ComponentName componentName, Loading @@ -77,6 +83,10 @@ public class ProxyAccessibilityServiceConnection extends AccessibilityServiceCon /* systemActionPerformer= */ null, awm, /* activityTaskManagerService= */ null); /* systemActionPerformer= */ null, awm, /* activityTaskManagerService= */ null); mDisplayId = displayId; mDisplayId = displayId; setDisplayTypes(DISPLAY_TYPE_PROXY); setDisplayTypes(DISPLAY_TYPE_PROXY); mFocusStrokeWidth = mContext.getResources().getDimensionPixelSize( R.dimen.accessibility_focus_highlight_stroke_width); mFocusColor = mContext.getResources().getColor( R.color.accessibility_focus_highlight_color); } } /** /** Loading Loading @@ -202,6 +212,48 @@ public class ProxyAccessibilityServiceConnection extends AccessibilityServiceCon return displayWindows; return displayWindows; } } @Override public void setFocusAppearance(int strokeWidth, int color) { synchronized (mLock) { if (!hasRightsToCurrentUserLocked()) { return; } if (!mSecurityPolicy.checkAccessibilityAccess(this)) { return; } if (getFocusStrokeWidthLocked() == strokeWidth && getFocusColorLocked() == color) { return; } mFocusStrokeWidth = strokeWidth; mFocusColor = color; // Sets the appearance data in the A11yUserState for now, since the A11yManagers are not // separated. // TODO(254545943): Separate proxy and non-proxy states so the focus appearance on the // phone is not affected by the appearance of a proxy-ed app. mSystemSupport.setCurrentUserFocusAppearance(mFocusStrokeWidth, mFocusColor); mSystemSupport.onClientChangeLocked(false); } } /** * Gets the stroke width of the focus rectangle. * @return The stroke width. */ public int getFocusStrokeWidthLocked() { return mFocusStrokeWidth; } /** * Gets the color of the focus rectangle. * @return The color. */ public int getFocusColorLocked() { return mFocusColor; } @Override @Override public void binderDied() { public void binderDied() { } } Loading Loading
core/api/system-current.txt +1 −0 Original line number Original line Diff line number Diff line Loading @@ -16686,6 +16686,7 @@ package android.view.accessibility { method public void interrupt(); method public void interrupt(); method public void onAccessibilityEvent(@NonNull android.view.accessibility.AccessibilityEvent); method public void onAccessibilityEvent(@NonNull android.view.accessibility.AccessibilityEvent); method public void onProxyConnected(); method public void onProxyConnected(); method public void setAccessibilityFocusAppearance(int, @ColorInt int); method public void setInstalledAndEnabledServices(@NonNull java.util.List<android.accessibilityservice.AccessibilityServiceInfo>); method public void setInstalledAndEnabledServices(@NonNull java.util.List<android.accessibilityservice.AccessibilityServiceInfo>); } }
core/java/android/view/accessibility/AccessibilityDisplayProxy.java +22 −0 Original line number Original line Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.accessibilityservice.AccessibilityServiceInfo; import android.accessibilityservice.IAccessibilityServiceClient; import android.accessibilityservice.IAccessibilityServiceClient; import android.accessibilityservice.IAccessibilityServiceConnection; import android.accessibilityservice.IAccessibilityServiceConnection; import android.accessibilityservice.MagnificationConfig; import android.accessibilityservice.MagnificationConfig; import android.annotation.ColorInt; import android.annotation.NonNull; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.Nullable; import android.annotation.SystemApi; import android.annotation.SystemApi; Loading Loading @@ -239,6 +240,27 @@ public abstract class AccessibilityDisplayProxy { return Collections.emptyList(); return Collections.emptyList(); } } /** * Sets the strokeWidth and color of the accessibility focus rectangle. * * @param strokeWidth The stroke width of the rectangle in pixels. * Setting this value to zero results in no focus rectangle being drawn. * @param color The color of the rectangle. */ public void setAccessibilityFocusAppearance(int strokeWidth, @ColorInt int color) { IAccessibilityServiceConnection connection = AccessibilityInteractionClient.getInstance().getConnection(mConnectionId); if (connection != null) { try { connection.setFocusAppearance(strokeWidth, color); } catch (RemoteException re) { Log.w(LOG_TAG, "Error while setting the strokeWidth and color of the " + "accessibility focus rectangle", re); re.rethrowFromSystemServer(); } } } /** /** * An IAccessibilityServiceClient that handles interrupts, accessibility events, and system * An IAccessibilityServiceClient that handles interrupts, accessibility events, and system * connection. * connection. Loading
services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java +3 −0 Original line number Original line Diff line number Diff line Loading @@ -314,6 +314,9 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ void unbindImeLocked(AbstractAccessibilityServiceConnection connection); void unbindImeLocked(AbstractAccessibilityServiceConnection connection); void attachAccessibilityOverlayToDisplay(int displayId, SurfaceControl sc); void attachAccessibilityOverlayToDisplay(int displayId, SurfaceControl sc); void setCurrentUserFocusAppearance(int strokeWidth, int color); } } public AbstractAccessibilityServiceConnection(Context context, ComponentName componentName, public AbstractAccessibilityServiceConnection(Context context, ComponentName componentName, Loading
services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +7 −0 Original line number Original line Diff line number Diff line Loading @@ -4876,4 +4876,11 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub transaction.apply(); transaction.apply(); transaction.close(); transaction.close(); } } @Override public void setCurrentUserFocusAppearance(int strokeWidth, int color) { synchronized (mLock) { getCurrentUserStateLocked().setFocusAppearanceLocked(strokeWidth, color); } } } }
services/accessibility/java/com/android/server/accessibility/ProxyAccessibilityServiceConnection.java +52 −0 Original line number Original line Diff line number Diff line Loading @@ -43,6 +43,7 @@ import android.view.accessibility.AccessibilityWindowInfo; import androidx.annotation.Nullable; import androidx.annotation.Nullable; import com.android.internal.R; import com.android.server.wm.WindowManagerInternal; import com.android.server.wm.WindowManagerInternal; import java.util.Arrays; import java.util.Arrays; Loading @@ -63,6 +64,11 @@ public class ProxyAccessibilityServiceConnection extends AccessibilityServiceCon private int mDisplayId; private int mDisplayId; private List<AccessibilityServiceInfo> mInstalledAndEnabledServices; private List<AccessibilityServiceInfo> mInstalledAndEnabledServices; /** The stroke width of the focus rectangle in pixels */ private int mFocusStrokeWidth; /** The color of the focus rectangle */ private int mFocusColor; ProxyAccessibilityServiceConnection( ProxyAccessibilityServiceConnection( Context context, Context context, ComponentName componentName, ComponentName componentName, Loading @@ -77,6 +83,10 @@ public class ProxyAccessibilityServiceConnection extends AccessibilityServiceCon /* systemActionPerformer= */ null, awm, /* activityTaskManagerService= */ null); /* systemActionPerformer= */ null, awm, /* activityTaskManagerService= */ null); mDisplayId = displayId; mDisplayId = displayId; setDisplayTypes(DISPLAY_TYPE_PROXY); setDisplayTypes(DISPLAY_TYPE_PROXY); mFocusStrokeWidth = mContext.getResources().getDimensionPixelSize( R.dimen.accessibility_focus_highlight_stroke_width); mFocusColor = mContext.getResources().getColor( R.color.accessibility_focus_highlight_color); } } /** /** Loading Loading @@ -202,6 +212,48 @@ public class ProxyAccessibilityServiceConnection extends AccessibilityServiceCon return displayWindows; return displayWindows; } } @Override public void setFocusAppearance(int strokeWidth, int color) { synchronized (mLock) { if (!hasRightsToCurrentUserLocked()) { return; } if (!mSecurityPolicy.checkAccessibilityAccess(this)) { return; } if (getFocusStrokeWidthLocked() == strokeWidth && getFocusColorLocked() == color) { return; } mFocusStrokeWidth = strokeWidth; mFocusColor = color; // Sets the appearance data in the A11yUserState for now, since the A11yManagers are not // separated. // TODO(254545943): Separate proxy and non-proxy states so the focus appearance on the // phone is not affected by the appearance of a proxy-ed app. mSystemSupport.setCurrentUserFocusAppearance(mFocusStrokeWidth, mFocusColor); mSystemSupport.onClientChangeLocked(false); } } /** * Gets the stroke width of the focus rectangle. * @return The stroke width. */ public int getFocusStrokeWidthLocked() { return mFocusStrokeWidth; } /** * Gets the color of the focus rectangle. * @return The color. */ public int getFocusColorLocked() { return mFocusColor; } @Override @Override public void binderDied() { public void binderDied() { } } Loading