Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 07dd4511 authored by John Wu's avatar John Wu Committed by Android (Google) Code Review
Browse files

Merge "Add attribution tag to checkAccessibilityAccess"

parents bd6a9843 cb33d536
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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 {
+2 −0
Original line number Diff line number Diff line
@@ -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,
+2 −0
Original line number Diff line number Diff line
@@ -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,
+12 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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
+7 −3
Original line number Diff line number Diff line
@@ -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");
@@ -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