Loading core/java/android/accessibilityservice/AccessibilityService.java +8 −0 Original line number Diff line number Diff line Loading @@ -2405,6 +2405,14 @@ public abstract class AccessibilityService extends Service { if (connection != null) { AccessibilityInteractionClient.getInstance(mContext).addConnection( mConnectionId, connection); if (mContext != null) { try { connection.setAttributionTag(mContext.getAttributionTag()); } catch (RemoteException re) { Log.w(LOG_TAG, "Error while setting attributionTag", re); re.rethrowFromSystemServer(); } } mCallback.init(mConnectionId, windowToken); mCallback.onServiceConnected(); } else { Loading core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,8 @@ interface IAccessibilityServiceConnection { void setServiceInfo(in AccessibilityServiceInfo info); void setAttributionTag(in String attributionTag); String[] findAccessibilityNodeInfoByAccessibilityId(int accessibilityWindowId, long accessibilityNodeId, int interactionId, IAccessibilityInteractionConnectionCallback callback, int flags, long threadId, Loading core/tests/coretests/src/android/view/accessibility/AccessibilityServiceConnectionImpl.java +2 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,8 @@ import java.util.List; public class AccessibilityServiceConnectionImpl extends IAccessibilityServiceConnection.Stub { public void setServiceInfo(AccessibilityServiceInfo info) {} public void setAttributionTag(String attributionTag) {} public String[] findAccessibilityNodeInfoByAccessibilityId(int accessibilityWindowId, long accessibilityNodeId, int interactionId, IAccessibilityInteractionConnectionCallback callback, int flags, long threadId, Loading services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java +12 −0 Original line number Diff line number Diff line Loading @@ -139,6 +139,9 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ protected final AccessibilitySecurityPolicy mSecurityPolicy; protected final AccessibilityTrace mTrace; // The attribution tag set by the service that is bound to this instance protected String mAttributionTag; // The service that's bound to this instance. Whenever this value is non-null, this // object is registered as a death recipient IBinder mService; Loading Loading @@ -419,6 +422,15 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ } } @Override public void setAttributionTag(String attributionTag) { mAttributionTag = attributionTag; } String getAttributionTag() { return mAttributionTag; } protected abstract boolean hasRightsToCurrentUserLocked(); @Nullable Loading services/accessibility/java/com/android/server/accessibility/AccessibilitySecurityPolicy.java +7 −3 Original line number Diff line number Diff line Loading @@ -534,7 +534,8 @@ public class AccessibilitySecurityPolicy { int servicePackageUid = serviceInfo.applicationInfo.uid; if (mAppOpsManager.noteOpNoThrow(AppOpsManager.OPSTR_BIND_ACCESSIBILITY_SERVICE, servicePackageUid, serviceInfo.packageName) != AppOpsManager.MODE_ALLOWED) { servicePackageUid, serviceInfo.packageName, null, null) != AppOpsManager.MODE_ALLOWED) { Slog.w(LOG_TAG, "Skipping accessibility service " + new ComponentName( serviceInfo.packageName, serviceInfo.name).flattenToShortString() + ": disallowed by AppOps"); Loading Loading @@ -562,15 +563,18 @@ public class AccessibilitySecurityPolicy { final int servicePackageUid = resolveInfo.serviceInfo.applicationInfo.uid; final int callingPid = Binder.getCallingPid(); final long identityToken = Binder.clearCallingIdentity(); final String attributionTag = service.getAttributionTag(); try { // For the caller is system, just block the data to a11y services. if (OWN_PROCESS_ID == callingPid) { return mAppOpsManager.noteOpNoThrow(AppOpsManager.OPSTR_ACCESS_ACCESSIBILITY, servicePackageUid, packageName, null, null) == AppOpsManager.MODE_ALLOWED; servicePackageUid, packageName, attributionTag, null) == AppOpsManager.MODE_ALLOWED; } return mAppOpsManager.noteOp(AppOpsManager.OPSTR_ACCESS_ACCESSIBILITY, servicePackageUid, packageName, null, null) == AppOpsManager.MODE_ALLOWED; servicePackageUid, packageName, attributionTag, null) == AppOpsManager.MODE_ALLOWED; } finally { Binder.restoreCallingIdentity(identityToken); } Loading Loading
core/java/android/accessibilityservice/AccessibilityService.java +8 −0 Original line number Diff line number Diff line Loading @@ -2405,6 +2405,14 @@ public abstract class AccessibilityService extends Service { if (connection != null) { AccessibilityInteractionClient.getInstance(mContext).addConnection( mConnectionId, connection); if (mContext != null) { try { connection.setAttributionTag(mContext.getAttributionTag()); } catch (RemoteException re) { Log.w(LOG_TAG, "Error while setting attributionTag", re); re.rethrowFromSystemServer(); } } mCallback.init(mConnectionId, windowToken); mCallback.onServiceConnected(); } else { Loading
core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,8 @@ interface IAccessibilityServiceConnection { void setServiceInfo(in AccessibilityServiceInfo info); void setAttributionTag(in String attributionTag); String[] findAccessibilityNodeInfoByAccessibilityId(int accessibilityWindowId, long accessibilityNodeId, int interactionId, IAccessibilityInteractionConnectionCallback callback, int flags, long threadId, Loading
core/tests/coretests/src/android/view/accessibility/AccessibilityServiceConnectionImpl.java +2 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,8 @@ import java.util.List; public class AccessibilityServiceConnectionImpl extends IAccessibilityServiceConnection.Stub { public void setServiceInfo(AccessibilityServiceInfo info) {} public void setAttributionTag(String attributionTag) {} public String[] findAccessibilityNodeInfoByAccessibilityId(int accessibilityWindowId, long accessibilityNodeId, int interactionId, IAccessibilityInteractionConnectionCallback callback, int flags, long threadId, Loading
services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java +12 −0 Original line number Diff line number Diff line Loading @@ -139,6 +139,9 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ protected final AccessibilitySecurityPolicy mSecurityPolicy; protected final AccessibilityTrace mTrace; // The attribution tag set by the service that is bound to this instance protected String mAttributionTag; // The service that's bound to this instance. Whenever this value is non-null, this // object is registered as a death recipient IBinder mService; Loading Loading @@ -419,6 +422,15 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ } } @Override public void setAttributionTag(String attributionTag) { mAttributionTag = attributionTag; } String getAttributionTag() { return mAttributionTag; } protected abstract boolean hasRightsToCurrentUserLocked(); @Nullable Loading
services/accessibility/java/com/android/server/accessibility/AccessibilitySecurityPolicy.java +7 −3 Original line number Diff line number Diff line Loading @@ -534,7 +534,8 @@ public class AccessibilitySecurityPolicy { int servicePackageUid = serviceInfo.applicationInfo.uid; if (mAppOpsManager.noteOpNoThrow(AppOpsManager.OPSTR_BIND_ACCESSIBILITY_SERVICE, servicePackageUid, serviceInfo.packageName) != AppOpsManager.MODE_ALLOWED) { servicePackageUid, serviceInfo.packageName, null, null) != AppOpsManager.MODE_ALLOWED) { Slog.w(LOG_TAG, "Skipping accessibility service " + new ComponentName( serviceInfo.packageName, serviceInfo.name).flattenToShortString() + ": disallowed by AppOps"); Loading Loading @@ -562,15 +563,18 @@ public class AccessibilitySecurityPolicy { final int servicePackageUid = resolveInfo.serviceInfo.applicationInfo.uid; final int callingPid = Binder.getCallingPid(); final long identityToken = Binder.clearCallingIdentity(); final String attributionTag = service.getAttributionTag(); try { // For the caller is system, just block the data to a11y services. if (OWN_PROCESS_ID == callingPid) { return mAppOpsManager.noteOpNoThrow(AppOpsManager.OPSTR_ACCESS_ACCESSIBILITY, servicePackageUid, packageName, null, null) == AppOpsManager.MODE_ALLOWED; servicePackageUid, packageName, attributionTag, null) == AppOpsManager.MODE_ALLOWED; } return mAppOpsManager.noteOp(AppOpsManager.OPSTR_ACCESS_ACCESSIBILITY, servicePackageUid, packageName, null, null) == AppOpsManager.MODE_ALLOWED; servicePackageUid, packageName, attributionTag, null) == AppOpsManager.MODE_ALLOWED; } finally { Binder.restoreCallingIdentity(identityToken); } Loading