Loading core/api/current.txt +2 −0 Original line number Original line Diff line number Diff line Loading @@ -9694,6 +9694,7 @@ package android.content { method public int describeContents(); method public int describeContents(); method public void enforceCallingUid(); method public void enforceCallingUid(); method @Nullable public String getAttributionTag(); method @Nullable public String getAttributionTag(); method public int getDeviceId(); method @Nullable public android.content.AttributionSource getNext(); method @Nullable public android.content.AttributionSource getNext(); method @Nullable public String getPackageName(); method @Nullable public String getPackageName(); method public int getPid(); method public int getPid(); Loading @@ -9709,6 +9710,7 @@ package android.content { ctor public AttributionSource.Builder(@NonNull android.content.AttributionSource); ctor public AttributionSource.Builder(@NonNull android.content.AttributionSource); method @NonNull public android.content.AttributionSource build(); method @NonNull public android.content.AttributionSource build(); method @NonNull public android.content.AttributionSource.Builder setAttributionTag(@Nullable String); method @NonNull public android.content.AttributionSource.Builder setAttributionTag(@Nullable String); method @NonNull public android.content.AttributionSource.Builder setDeviceId(int); method @Deprecated @NonNull public android.content.AttributionSource.Builder setNext(@Nullable android.content.AttributionSource); method @Deprecated @NonNull public android.content.AttributionSource.Builder setNext(@Nullable android.content.AttributionSource); method @NonNull public android.content.AttributionSource.Builder setNextAttributionSource(@NonNull android.content.AttributionSource); method @NonNull public android.content.AttributionSource.Builder setNextAttributionSource(@NonNull android.content.AttributionSource); method @NonNull public android.content.AttributionSource.Builder setPackageName(@Nullable String); method @NonNull public android.content.AttributionSource.Builder setPackageName(@Nullable String); core/api/test-current.txt +1 −0 Original line number Original line Diff line number Diff line Loading @@ -850,6 +850,7 @@ package android.content { ctor public AttributionSource(int, @Nullable String, @Nullable String, @NonNull android.os.IBinder); ctor public AttributionSource(int, @Nullable String, @Nullable String, @NonNull android.os.IBinder); ctor public AttributionSource(int, @Nullable String, @Nullable String, @Nullable java.util.Set<java.lang.String>, @Nullable android.content.AttributionSource); ctor public AttributionSource(int, @Nullable String, @Nullable String, @Nullable java.util.Set<java.lang.String>, @Nullable android.content.AttributionSource); ctor public AttributionSource(int, int, @Nullable String, @Nullable String, @NonNull android.os.IBinder, @Nullable String[], @Nullable android.content.AttributionSource); ctor public AttributionSource(int, int, @Nullable String, @Nullable String, @NonNull android.os.IBinder, @Nullable String[], @Nullable android.content.AttributionSource); ctor public AttributionSource(int, int, @Nullable String, @Nullable String, @NonNull android.os.IBinder, @Nullable String[], int, @Nullable android.content.AttributionSource); method public void enforceCallingPid(); method public void enforceCallingPid(); } } Loading core/java/android/app/ContextImpl.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -3463,7 +3463,7 @@ class ContextImpl extends Context { AttributionSource attributionSource = new AttributionSource(Process.myUid(), AttributionSource attributionSource = new AttributionSource(Process.myUid(), Process.myPid(), mOpPackageName, attributionTag, Process.myPid(), mOpPackageName, attributionTag, (renouncedPermissions != null) ? renouncedPermissions.toArray(new String[0]) : null, (renouncedPermissions != null) ? renouncedPermissions.toArray(new String[0]) : null, nextAttributionSource); getDeviceId(), nextAttributionSource); // If we want to access protected data on behalf of another app we need to // If we want to access protected data on behalf of another app we need to // tell the OS that we opt in to participate in the attribution chain. // tell the OS that we opt in to participate in the attribution chain. if (nextAttributionSource != null) { if (nextAttributionSource != null) { Loading core/java/android/content/AttributionSource.java +53 −10 Original line number Original line Diff line number Diff line Loading @@ -115,14 +115,14 @@ public final class AttributionSource implements Parcelable { public AttributionSource(int uid, @Nullable String packageName, public AttributionSource(int uid, @Nullable String packageName, @Nullable String attributionTag, @NonNull IBinder token) { @Nullable String attributionTag, @NonNull IBinder token) { this(uid, Process.INVALID_PID, packageName, attributionTag, token, this(uid, Process.INVALID_PID, packageName, attributionTag, token, /*renouncedPermissions*/ null, /*next*/ null); /*renouncedPermissions*/ null, Context.DEVICE_ID_DEFAULT, /*next*/ null); } } /** @hide */ /** @hide */ public AttributionSource(int uid, int pid, @Nullable String packageName, public AttributionSource(int uid, int pid, @Nullable String packageName, @Nullable String attributionTag, @NonNull IBinder token) { @Nullable String attributionTag, @NonNull IBinder token) { this(uid, pid, packageName, attributionTag, token, /*renouncedPermissions*/ null, this(uid, pid, packageName, attributionTag, token, /*renouncedPermissions*/ null, /*next*/ null); Context.DEVICE_ID_DEFAULT, /*next*/ null); } } /** @hide */ /** @hide */ Loading @@ -132,21 +132,23 @@ public final class AttributionSource implements Parcelable { @Nullable AttributionSource next) { @Nullable AttributionSource next) { this(uid, Process.INVALID_PID, packageName, attributionTag, sDefaultToken, this(uid, Process.INVALID_PID, packageName, attributionTag, sDefaultToken, (renouncedPermissions != null) (renouncedPermissions != null) ? renouncedPermissions.toArray(new String[0]) : null, /*next*/ next); ? renouncedPermissions.toArray(new String[0]) : null, Context.DEVICE_ID_DEFAULT, /*next*/ next); } } /** @hide */ /** @hide */ public AttributionSource(@NonNull AttributionSource current, @Nullable AttributionSource next) { public AttributionSource(@NonNull AttributionSource current, @Nullable AttributionSource next) { this(current.getUid(), current.getPid(), current.getPackageName(), this(current.getUid(), current.getPid(), current.getPackageName(), current.getAttributionTag(), current.getToken(), current.getAttributionTag(), current.getToken(), current.mAttributionSourceState.renouncedPermissions, next); current.mAttributionSourceState.renouncedPermissions, current.getDeviceId(), next); } } /** @hide */ /** @hide */ public AttributionSource(int uid, int pid, @Nullable String packageName, public AttributionSource(int uid, int pid, @Nullable String packageName, @Nullable String attributionTag, @Nullable String[] renouncedPermissions, @Nullable String attributionTag, @Nullable String[] renouncedPermissions, int deviceId, @Nullable AttributionSource next) { @Nullable AttributionSource next) { this(uid, pid, packageName, attributionTag, sDefaultToken, renouncedPermissions, next); this(uid, pid, packageName, attributionTag, sDefaultToken, renouncedPermissions, deviceId, next); } } /** @hide */ /** @hide */ Loading @@ -155,6 +157,16 @@ public final class AttributionSource implements Parcelable { @Nullable String attributionTag, @NonNull IBinder token, @Nullable String attributionTag, @NonNull IBinder token, @Nullable String[] renouncedPermissions, @Nullable String[] renouncedPermissions, @Nullable AttributionSource next) { @Nullable AttributionSource next) { this(uid, pid, packageName, attributionTag, token, renouncedPermissions, Context.DEVICE_ID_DEFAULT, next); } /** @hide */ @TestApi public AttributionSource(int uid, int pid, @Nullable String packageName, @Nullable String attributionTag, @NonNull IBinder token, @Nullable String[] renouncedPermissions, int deviceId, @Nullable AttributionSource next) { mAttributionSourceState = new AttributionSourceState(); mAttributionSourceState = new AttributionSourceState(); mAttributionSourceState.uid = uid; mAttributionSourceState.uid = uid; mAttributionSourceState.pid = pid; mAttributionSourceState.pid = pid; Loading @@ -162,6 +174,7 @@ public final class AttributionSource implements Parcelable { mAttributionSourceState.packageName = packageName; mAttributionSourceState.packageName = packageName; mAttributionSourceState.attributionTag = attributionTag; mAttributionSourceState.attributionTag = attributionTag; mAttributionSourceState.renouncedPermissions = renouncedPermissions; mAttributionSourceState.renouncedPermissions = renouncedPermissions; mAttributionSourceState.deviceId = deviceId; mAttributionSourceState.next = (next != null) ? new AttributionSourceState[] mAttributionSourceState.next = (next != null) ? new AttributionSourceState[] {next.mAttributionSourceState} : new AttributionSourceState[0]; {next.mAttributionSourceState} : new AttributionSourceState[0]; } } Loading Loading @@ -197,25 +210,31 @@ public final class AttributionSource implements Parcelable { /** @hide */ /** @hide */ public AttributionSource withNextAttributionSource(@Nullable AttributionSource next) { public AttributionSource withNextAttributionSource(@Nullable AttributionSource next) { return new AttributionSource(getUid(), getPid(), getPackageName(), getAttributionTag(), return new AttributionSource(getUid(), getPid(), getPackageName(), getAttributionTag(), getToken(), mAttributionSourceState.renouncedPermissions, next); getToken(), mAttributionSourceState.renouncedPermissions, getDeviceId(), next); } } /** @hide */ /** @hide */ public AttributionSource withPackageName(@Nullable String packageName) { public AttributionSource withPackageName(@Nullable String packageName) { return new AttributionSource(getUid(), getPid(), packageName, getAttributionTag(), return new AttributionSource(getUid(), getPid(), packageName, getAttributionTag(), getToken(), mAttributionSourceState.renouncedPermissions, getNext()); getToken(), mAttributionSourceState.renouncedPermissions, getDeviceId(), getNext()); } } /** @hide */ /** @hide */ public AttributionSource withToken(@NonNull Binder token) { public AttributionSource withToken(@NonNull Binder token) { return new AttributionSource(getUid(), getPid(), getPackageName(), getAttributionTag(), return new AttributionSource(getUid(), getPid(), getPackageName(), getAttributionTag(), token, mAttributionSourceState.renouncedPermissions, getNext()); token, mAttributionSourceState.renouncedPermissions, getDeviceId(), getNext()); } } /** @hide */ /** @hide */ public AttributionSource withPid(int pid) { public AttributionSource withPid(int pid) { return new AttributionSource(getUid(), pid, getPackageName(), getAttributionTag(), return new AttributionSource(getUid(), pid, getPackageName(), getAttributionTag(), getToken(), mAttributionSourceState.renouncedPermissions, getNext()); getToken(), mAttributionSourceState.renouncedPermissions, getDeviceId(), getNext()); } /** @hide */ public AttributionSource withDeviceId(int deviceId) { return new AttributionSource(getUid(), getPid(), getPackageName(), getAttributionTag(), getToken(), mAttributionSourceState.renouncedPermissions, deviceId, getNext()); } } /** @hide */ /** @hide */ Loading Loading @@ -259,6 +278,7 @@ public final class AttributionSource implements Parcelable { try { try { return new AttributionSource.Builder(uid) return new AttributionSource.Builder(uid) .setPid(Process.myPid()) .setPid(Process.myPid()) .setDeviceId(Context.DEVICE_ID_DEFAULT) .setPackageName(AppGlobals.getPackageManager().getPackagesForUid(uid)[0]) .setPackageName(AppGlobals.getPackageManager().getPackagesForUid(uid)[0]) .build(); .build(); } catch (Exception ignored) { } catch (Exception ignored) { Loading Loading @@ -496,6 +516,13 @@ public final class AttributionSource implements Parcelable { return mAttributionSourceState.attributionTag; return mAttributionSourceState.attributionTag; } } /** * The device ID for which permissions are checked. */ public int getDeviceId() { return mAttributionSourceState.deviceId; } /** /** * Unique token for that source. * Unique token for that source. * * Loading Loading @@ -661,6 +688,19 @@ public final class AttributionSource implements Parcelable { return this; return this; } } /** * Set the device ID for this attribution source, permission check would happen * against this device ID. * * @return the builder */ public @NonNull Builder setDeviceId(int deviceId) { checkNotUsed(); mBuilderFieldsSet |= 0x12; mAttributionSourceState.deviceId = deviceId; return this; } /** /** * The next app to receive the permission protected data. * The next app to receive the permission protected data. * * Loading Loading @@ -703,6 +743,9 @@ public final class AttributionSource implements Parcelable { if ((mBuilderFieldsSet & 0x10) == 0) { if ((mBuilderFieldsSet & 0x10) == 0) { mAttributionSourceState.renouncedPermissions = null; mAttributionSourceState.renouncedPermissions = null; } } if ((mBuilderFieldsSet & 0x12) == 0) { mAttributionSourceState.deviceId = Context.DEVICE_ID_DEFAULT; } if ((mBuilderFieldsSet & 0x20) == 0) { if ((mBuilderFieldsSet & 0x20) == 0) { mAttributionSourceState.next = null; mAttributionSourceState.next = null; } } Loading services/core/java/com/android/server/am/ActivityManagerService.java +6 −3 Original line number Original line Diff line number Diff line Loading @@ -19885,7 +19885,8 @@ public class ActivityManagerService extends IActivityManager.Stub return superImpl.apply(code, new AttributionSource(shellUid, return superImpl.apply(code, new AttributionSource(shellUid, Process.INVALID_PID, "com.android.shell", Process.INVALID_PID, "com.android.shell", attributionSource.getAttributionTag(), attributionSource.getToken(), attributionSource.getAttributionTag(), attributionSource.getToken(), /*renouncedPermissions*/ null, attributionSource.getNext()), /*renouncedPermissions*/ null, attributionSource.getDeviceId(), attributionSource.getNext()), shouldCollectAsyncNotedOp, message, shouldCollectMessage, shouldCollectAsyncNotedOp, message, shouldCollectMessage, skiProxyOperation); skiProxyOperation); } finally { } finally { Loading Loading @@ -19938,7 +19939,8 @@ public class ActivityManagerService extends IActivityManager.Stub return superImpl.apply(clientId, code, new AttributionSource(shellUid, return superImpl.apply(clientId, code, new AttributionSource(shellUid, Process.INVALID_PID, "com.android.shell", Process.INVALID_PID, "com.android.shell", attributionSource.getAttributionTag(), attributionSource.getToken(), attributionSource.getAttributionTag(), attributionSource.getToken(), /*renouncedPermissions*/ null, attributionSource.getNext()), /*renouncedPermissions*/ null, attributionSource.getDeviceId(), attributionSource.getNext()), startIfModeDefault, shouldCollectAsyncNotedOp, message, startIfModeDefault, shouldCollectAsyncNotedOp, message, shouldCollectMessage, skipProxyOperation, proxyAttributionFlags, shouldCollectMessage, skipProxyOperation, proxyAttributionFlags, proxiedAttributionFlags, attributionChainId); proxiedAttributionFlags, attributionChainId); Loading @@ -19964,7 +19966,8 @@ public class ActivityManagerService extends IActivityManager.Stub superImpl.apply(clientId, code, new AttributionSource(shellUid, superImpl.apply(clientId, code, new AttributionSource(shellUid, Process.INVALID_PID, "com.android.shell", Process.INVALID_PID, "com.android.shell", attributionSource.getAttributionTag(), attributionSource.getToken(), attributionSource.getAttributionTag(), attributionSource.getToken(), /*renouncedPermissions*/ null, attributionSource.getNext()), /*renouncedPermissions*/ null, attributionSource.getDeviceId(), attributionSource.getNext()), skipProxyOperation); skipProxyOperation); } finally { } finally { Binder.restoreCallingIdentity(identity); Binder.restoreCallingIdentity(identity); Loading
core/api/current.txt +2 −0 Original line number Original line Diff line number Diff line Loading @@ -9694,6 +9694,7 @@ package android.content { method public int describeContents(); method public int describeContents(); method public void enforceCallingUid(); method public void enforceCallingUid(); method @Nullable public String getAttributionTag(); method @Nullable public String getAttributionTag(); method public int getDeviceId(); method @Nullable public android.content.AttributionSource getNext(); method @Nullable public android.content.AttributionSource getNext(); method @Nullable public String getPackageName(); method @Nullable public String getPackageName(); method public int getPid(); method public int getPid(); Loading @@ -9709,6 +9710,7 @@ package android.content { ctor public AttributionSource.Builder(@NonNull android.content.AttributionSource); ctor public AttributionSource.Builder(@NonNull android.content.AttributionSource); method @NonNull public android.content.AttributionSource build(); method @NonNull public android.content.AttributionSource build(); method @NonNull public android.content.AttributionSource.Builder setAttributionTag(@Nullable String); method @NonNull public android.content.AttributionSource.Builder setAttributionTag(@Nullable String); method @NonNull public android.content.AttributionSource.Builder setDeviceId(int); method @Deprecated @NonNull public android.content.AttributionSource.Builder setNext(@Nullable android.content.AttributionSource); method @Deprecated @NonNull public android.content.AttributionSource.Builder setNext(@Nullable android.content.AttributionSource); method @NonNull public android.content.AttributionSource.Builder setNextAttributionSource(@NonNull android.content.AttributionSource); method @NonNull public android.content.AttributionSource.Builder setNextAttributionSource(@NonNull android.content.AttributionSource); method @NonNull public android.content.AttributionSource.Builder setPackageName(@Nullable String); method @NonNull public android.content.AttributionSource.Builder setPackageName(@Nullable String);
core/api/test-current.txt +1 −0 Original line number Original line Diff line number Diff line Loading @@ -850,6 +850,7 @@ package android.content { ctor public AttributionSource(int, @Nullable String, @Nullable String, @NonNull android.os.IBinder); ctor public AttributionSource(int, @Nullable String, @Nullable String, @NonNull android.os.IBinder); ctor public AttributionSource(int, @Nullable String, @Nullable String, @Nullable java.util.Set<java.lang.String>, @Nullable android.content.AttributionSource); ctor public AttributionSource(int, @Nullable String, @Nullable String, @Nullable java.util.Set<java.lang.String>, @Nullable android.content.AttributionSource); ctor public AttributionSource(int, int, @Nullable String, @Nullable String, @NonNull android.os.IBinder, @Nullable String[], @Nullable android.content.AttributionSource); ctor public AttributionSource(int, int, @Nullable String, @Nullable String, @NonNull android.os.IBinder, @Nullable String[], @Nullable android.content.AttributionSource); ctor public AttributionSource(int, int, @Nullable String, @Nullable String, @NonNull android.os.IBinder, @Nullable String[], int, @Nullable android.content.AttributionSource); method public void enforceCallingPid(); method public void enforceCallingPid(); } } Loading
core/java/android/app/ContextImpl.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -3463,7 +3463,7 @@ class ContextImpl extends Context { AttributionSource attributionSource = new AttributionSource(Process.myUid(), AttributionSource attributionSource = new AttributionSource(Process.myUid(), Process.myPid(), mOpPackageName, attributionTag, Process.myPid(), mOpPackageName, attributionTag, (renouncedPermissions != null) ? renouncedPermissions.toArray(new String[0]) : null, (renouncedPermissions != null) ? renouncedPermissions.toArray(new String[0]) : null, nextAttributionSource); getDeviceId(), nextAttributionSource); // If we want to access protected data on behalf of another app we need to // If we want to access protected data on behalf of another app we need to // tell the OS that we opt in to participate in the attribution chain. // tell the OS that we opt in to participate in the attribution chain. if (nextAttributionSource != null) { if (nextAttributionSource != null) { Loading
core/java/android/content/AttributionSource.java +53 −10 Original line number Original line Diff line number Diff line Loading @@ -115,14 +115,14 @@ public final class AttributionSource implements Parcelable { public AttributionSource(int uid, @Nullable String packageName, public AttributionSource(int uid, @Nullable String packageName, @Nullable String attributionTag, @NonNull IBinder token) { @Nullable String attributionTag, @NonNull IBinder token) { this(uid, Process.INVALID_PID, packageName, attributionTag, token, this(uid, Process.INVALID_PID, packageName, attributionTag, token, /*renouncedPermissions*/ null, /*next*/ null); /*renouncedPermissions*/ null, Context.DEVICE_ID_DEFAULT, /*next*/ null); } } /** @hide */ /** @hide */ public AttributionSource(int uid, int pid, @Nullable String packageName, public AttributionSource(int uid, int pid, @Nullable String packageName, @Nullable String attributionTag, @NonNull IBinder token) { @Nullable String attributionTag, @NonNull IBinder token) { this(uid, pid, packageName, attributionTag, token, /*renouncedPermissions*/ null, this(uid, pid, packageName, attributionTag, token, /*renouncedPermissions*/ null, /*next*/ null); Context.DEVICE_ID_DEFAULT, /*next*/ null); } } /** @hide */ /** @hide */ Loading @@ -132,21 +132,23 @@ public final class AttributionSource implements Parcelable { @Nullable AttributionSource next) { @Nullable AttributionSource next) { this(uid, Process.INVALID_PID, packageName, attributionTag, sDefaultToken, this(uid, Process.INVALID_PID, packageName, attributionTag, sDefaultToken, (renouncedPermissions != null) (renouncedPermissions != null) ? renouncedPermissions.toArray(new String[0]) : null, /*next*/ next); ? renouncedPermissions.toArray(new String[0]) : null, Context.DEVICE_ID_DEFAULT, /*next*/ next); } } /** @hide */ /** @hide */ public AttributionSource(@NonNull AttributionSource current, @Nullable AttributionSource next) { public AttributionSource(@NonNull AttributionSource current, @Nullable AttributionSource next) { this(current.getUid(), current.getPid(), current.getPackageName(), this(current.getUid(), current.getPid(), current.getPackageName(), current.getAttributionTag(), current.getToken(), current.getAttributionTag(), current.getToken(), current.mAttributionSourceState.renouncedPermissions, next); current.mAttributionSourceState.renouncedPermissions, current.getDeviceId(), next); } } /** @hide */ /** @hide */ public AttributionSource(int uid, int pid, @Nullable String packageName, public AttributionSource(int uid, int pid, @Nullable String packageName, @Nullable String attributionTag, @Nullable String[] renouncedPermissions, @Nullable String attributionTag, @Nullable String[] renouncedPermissions, int deviceId, @Nullable AttributionSource next) { @Nullable AttributionSource next) { this(uid, pid, packageName, attributionTag, sDefaultToken, renouncedPermissions, next); this(uid, pid, packageName, attributionTag, sDefaultToken, renouncedPermissions, deviceId, next); } } /** @hide */ /** @hide */ Loading @@ -155,6 +157,16 @@ public final class AttributionSource implements Parcelable { @Nullable String attributionTag, @NonNull IBinder token, @Nullable String attributionTag, @NonNull IBinder token, @Nullable String[] renouncedPermissions, @Nullable String[] renouncedPermissions, @Nullable AttributionSource next) { @Nullable AttributionSource next) { this(uid, pid, packageName, attributionTag, token, renouncedPermissions, Context.DEVICE_ID_DEFAULT, next); } /** @hide */ @TestApi public AttributionSource(int uid, int pid, @Nullable String packageName, @Nullable String attributionTag, @NonNull IBinder token, @Nullable String[] renouncedPermissions, int deviceId, @Nullable AttributionSource next) { mAttributionSourceState = new AttributionSourceState(); mAttributionSourceState = new AttributionSourceState(); mAttributionSourceState.uid = uid; mAttributionSourceState.uid = uid; mAttributionSourceState.pid = pid; mAttributionSourceState.pid = pid; Loading @@ -162,6 +174,7 @@ public final class AttributionSource implements Parcelable { mAttributionSourceState.packageName = packageName; mAttributionSourceState.packageName = packageName; mAttributionSourceState.attributionTag = attributionTag; mAttributionSourceState.attributionTag = attributionTag; mAttributionSourceState.renouncedPermissions = renouncedPermissions; mAttributionSourceState.renouncedPermissions = renouncedPermissions; mAttributionSourceState.deviceId = deviceId; mAttributionSourceState.next = (next != null) ? new AttributionSourceState[] mAttributionSourceState.next = (next != null) ? new AttributionSourceState[] {next.mAttributionSourceState} : new AttributionSourceState[0]; {next.mAttributionSourceState} : new AttributionSourceState[0]; } } Loading Loading @@ -197,25 +210,31 @@ public final class AttributionSource implements Parcelable { /** @hide */ /** @hide */ public AttributionSource withNextAttributionSource(@Nullable AttributionSource next) { public AttributionSource withNextAttributionSource(@Nullable AttributionSource next) { return new AttributionSource(getUid(), getPid(), getPackageName(), getAttributionTag(), return new AttributionSource(getUid(), getPid(), getPackageName(), getAttributionTag(), getToken(), mAttributionSourceState.renouncedPermissions, next); getToken(), mAttributionSourceState.renouncedPermissions, getDeviceId(), next); } } /** @hide */ /** @hide */ public AttributionSource withPackageName(@Nullable String packageName) { public AttributionSource withPackageName(@Nullable String packageName) { return new AttributionSource(getUid(), getPid(), packageName, getAttributionTag(), return new AttributionSource(getUid(), getPid(), packageName, getAttributionTag(), getToken(), mAttributionSourceState.renouncedPermissions, getNext()); getToken(), mAttributionSourceState.renouncedPermissions, getDeviceId(), getNext()); } } /** @hide */ /** @hide */ public AttributionSource withToken(@NonNull Binder token) { public AttributionSource withToken(@NonNull Binder token) { return new AttributionSource(getUid(), getPid(), getPackageName(), getAttributionTag(), return new AttributionSource(getUid(), getPid(), getPackageName(), getAttributionTag(), token, mAttributionSourceState.renouncedPermissions, getNext()); token, mAttributionSourceState.renouncedPermissions, getDeviceId(), getNext()); } } /** @hide */ /** @hide */ public AttributionSource withPid(int pid) { public AttributionSource withPid(int pid) { return new AttributionSource(getUid(), pid, getPackageName(), getAttributionTag(), return new AttributionSource(getUid(), pid, getPackageName(), getAttributionTag(), getToken(), mAttributionSourceState.renouncedPermissions, getNext()); getToken(), mAttributionSourceState.renouncedPermissions, getDeviceId(), getNext()); } /** @hide */ public AttributionSource withDeviceId(int deviceId) { return new AttributionSource(getUid(), getPid(), getPackageName(), getAttributionTag(), getToken(), mAttributionSourceState.renouncedPermissions, deviceId, getNext()); } } /** @hide */ /** @hide */ Loading Loading @@ -259,6 +278,7 @@ public final class AttributionSource implements Parcelable { try { try { return new AttributionSource.Builder(uid) return new AttributionSource.Builder(uid) .setPid(Process.myPid()) .setPid(Process.myPid()) .setDeviceId(Context.DEVICE_ID_DEFAULT) .setPackageName(AppGlobals.getPackageManager().getPackagesForUid(uid)[0]) .setPackageName(AppGlobals.getPackageManager().getPackagesForUid(uid)[0]) .build(); .build(); } catch (Exception ignored) { } catch (Exception ignored) { Loading Loading @@ -496,6 +516,13 @@ public final class AttributionSource implements Parcelable { return mAttributionSourceState.attributionTag; return mAttributionSourceState.attributionTag; } } /** * The device ID for which permissions are checked. */ public int getDeviceId() { return mAttributionSourceState.deviceId; } /** /** * Unique token for that source. * Unique token for that source. * * Loading Loading @@ -661,6 +688,19 @@ public final class AttributionSource implements Parcelable { return this; return this; } } /** * Set the device ID for this attribution source, permission check would happen * against this device ID. * * @return the builder */ public @NonNull Builder setDeviceId(int deviceId) { checkNotUsed(); mBuilderFieldsSet |= 0x12; mAttributionSourceState.deviceId = deviceId; return this; } /** /** * The next app to receive the permission protected data. * The next app to receive the permission protected data. * * Loading Loading @@ -703,6 +743,9 @@ public final class AttributionSource implements Parcelable { if ((mBuilderFieldsSet & 0x10) == 0) { if ((mBuilderFieldsSet & 0x10) == 0) { mAttributionSourceState.renouncedPermissions = null; mAttributionSourceState.renouncedPermissions = null; } } if ((mBuilderFieldsSet & 0x12) == 0) { mAttributionSourceState.deviceId = Context.DEVICE_ID_DEFAULT; } if ((mBuilderFieldsSet & 0x20) == 0) { if ((mBuilderFieldsSet & 0x20) == 0) { mAttributionSourceState.next = null; mAttributionSourceState.next = null; } } Loading
services/core/java/com/android/server/am/ActivityManagerService.java +6 −3 Original line number Original line Diff line number Diff line Loading @@ -19885,7 +19885,8 @@ public class ActivityManagerService extends IActivityManager.Stub return superImpl.apply(code, new AttributionSource(shellUid, return superImpl.apply(code, new AttributionSource(shellUid, Process.INVALID_PID, "com.android.shell", Process.INVALID_PID, "com.android.shell", attributionSource.getAttributionTag(), attributionSource.getToken(), attributionSource.getAttributionTag(), attributionSource.getToken(), /*renouncedPermissions*/ null, attributionSource.getNext()), /*renouncedPermissions*/ null, attributionSource.getDeviceId(), attributionSource.getNext()), shouldCollectAsyncNotedOp, message, shouldCollectMessage, shouldCollectAsyncNotedOp, message, shouldCollectMessage, skiProxyOperation); skiProxyOperation); } finally { } finally { Loading Loading @@ -19938,7 +19939,8 @@ public class ActivityManagerService extends IActivityManager.Stub return superImpl.apply(clientId, code, new AttributionSource(shellUid, return superImpl.apply(clientId, code, new AttributionSource(shellUid, Process.INVALID_PID, "com.android.shell", Process.INVALID_PID, "com.android.shell", attributionSource.getAttributionTag(), attributionSource.getToken(), attributionSource.getAttributionTag(), attributionSource.getToken(), /*renouncedPermissions*/ null, attributionSource.getNext()), /*renouncedPermissions*/ null, attributionSource.getDeviceId(), attributionSource.getNext()), startIfModeDefault, shouldCollectAsyncNotedOp, message, startIfModeDefault, shouldCollectAsyncNotedOp, message, shouldCollectMessage, skipProxyOperation, proxyAttributionFlags, shouldCollectMessage, skipProxyOperation, proxyAttributionFlags, proxiedAttributionFlags, attributionChainId); proxiedAttributionFlags, attributionChainId); Loading @@ -19964,7 +19966,8 @@ public class ActivityManagerService extends IActivityManager.Stub superImpl.apply(clientId, code, new AttributionSource(shellUid, superImpl.apply(clientId, code, new AttributionSource(shellUid, Process.INVALID_PID, "com.android.shell", Process.INVALID_PID, "com.android.shell", attributionSource.getAttributionTag(), attributionSource.getToken(), attributionSource.getAttributionTag(), attributionSource.getToken(), /*renouncedPermissions*/ null, attributionSource.getNext()), /*renouncedPermissions*/ null, attributionSource.getDeviceId(), attributionSource.getNext()), skipProxyOperation); skipProxyOperation); } finally { } finally { Binder.restoreCallingIdentity(identity); Binder.restoreCallingIdentity(identity);