diff options
author | 2024-05-01 20:21:13 +0000 | |
---|---|---|
committer | 2024-05-01 20:21:13 +0000 | |
commit | 73d7df59439dc32487e3a3be28eacba6f7d6abfc (patch) | |
tree | fee25d466e43caf737cac5696da7f56b86ccdf45 | |
parent | 5842296740eff221bc7c8c532c305d8c29d1301d (diff) | |
parent | e911b478adc3fed7f117b47c4838bed8563be606 (diff) |
Merge "[DeviceAwareAppOp] Add device Id in OpEventProxyInfo" into main
-rw-r--r-- | core/api/system-current.txt | 1 | ||||
-rw-r--r-- | core/java/android/app/AppOpsManager.java | 39 | ||||
-rw-r--r-- | core/java/android/permission/flags.aconfig | 8 | ||||
-rw-r--r-- | services/core/java/com/android/server/appop/AttributedOp.java | 10 |
4 files changed, 48 insertions, 10 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt index f10c0fc21455..eabe1f1c271a 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -872,6 +872,7 @@ package android.app { public static final class AppOpsManager.OpEventProxyInfo implements android.os.Parcelable { method public int describeContents(); method @Nullable public String getAttributionTag(); + method @FlaggedApi("android.permission.flags.device_id_in_op_proxy_info_enabled") @Nullable public String getDeviceId(); method @Nullable public String getPackageName(); method @IntRange(from=0) public int getUid(); method public void writeToParcel(@NonNull android.os.Parcel, int); diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java index 20b2357e967d..2d0f6fccb8f2 100644 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -3457,6 +3457,8 @@ public class AppOpsManager { private @Nullable String mPackageName; /** Attribution tag of the proxy that noted the op */ private @Nullable String mAttributionTag; + /** Persistent device Id of the proxy that noted the op */ + private @Nullable String mDeviceId; /** * Reinit existing object with new state. @@ -3464,14 +3466,16 @@ public class AppOpsManager { * @param uid UID of the proxy app that noted the op * @param packageName Package of the proxy that noted the op * @param attributionTag attribution tag of the proxy that noted the op + * @param deviceId Persistent device Id of the proxy that noted the op * * @hide */ public void reinit(@IntRange(from = 0) int uid, @Nullable String packageName, - @Nullable String attributionTag) { + @Nullable String attributionTag, @Nullable String deviceId) { mUid = Preconditions.checkArgumentNonnegative(uid); mPackageName = packageName; mAttributionTag = attributionTag; + mDeviceId = deviceId; } @@ -3505,16 +3509,33 @@ public class AppOpsManager { @IntRange(from = 0) int uid, @Nullable String packageName, @Nullable String attributionTag) { + this(uid, packageName, attributionTag, + VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT); + } + + /** + * Creates a new OpEventProxyInfo. + * + * @param uid UID of the proxy app that noted the op + * @param packageName Package of the proxy that noted the op + * @param attributionTag Attribution tag of the proxy that noted the op + * @param deviceId Persistent device Id of the proxy that noted the op + * + * @hide + */ + public OpEventProxyInfo( + @IntRange(from = 0) int uid, + @Nullable String packageName, + @Nullable String attributionTag, + @Nullable String deviceId) { this.mUid = uid; com.android.internal.util.AnnotationValidations.validate( IntRange.class, null, mUid, "from", 0); this.mPackageName = packageName; this.mAttributionTag = attributionTag; - - // onConstructed(); // You can define this method to get a callback + this.mDeviceId = deviceId; } - /** * Copy constructor * @@ -3525,6 +3546,7 @@ public class AppOpsManager { mUid = orig.mUid; mPackageName = orig.mPackageName; mAttributionTag = orig.mAttributionTag; + mDeviceId = orig.mDeviceId; } /** @@ -3551,6 +3573,9 @@ public class AppOpsManager { return mAttributionTag; } + @FlaggedApi(Flags.FLAG_DEVICE_ID_IN_OP_PROXY_INFO_ENABLED) + public @Nullable String getDeviceId() { return mDeviceId; } + @Override @DataClass.Generated.Member public void writeToParcel(@NonNull Parcel dest, int flags) { @@ -3560,10 +3585,12 @@ public class AppOpsManager { byte flg = 0; if (mPackageName != null) flg |= 0x2; if (mAttributionTag != null) flg |= 0x4; + if (mDeviceId != null) flg |= 0x8; dest.writeByte(flg); dest.writeInt(mUid); if (mPackageName != null) dest.writeString(mPackageName); if (mAttributionTag != null) dest.writeString(mAttributionTag); + if (mDeviceId != null) dest.writeString(mDeviceId); } @Override @@ -3581,14 +3608,14 @@ public class AppOpsManager { int uid = in.readInt(); String packageName = (flg & 0x2) == 0 ? null : in.readString(); String attributionTag = (flg & 0x4) == 0 ? null : in.readString(); - + String deviceId = (flg & 0x8) == 0 ? null : in.readString(); this.mUid = uid; com.android.internal.util.AnnotationValidations.validate( IntRange.class, null, mUid, "from", 0); this.mPackageName = packageName; this.mAttributionTag = attributionTag; - + this.mDeviceId = deviceId; // onConstructed(); // You can define this method to get a callback } diff --git a/core/java/android/permission/flags.aconfig b/core/java/android/permission/flags.aconfig index 6b5e17d8563d..b58830861c5e 100644 --- a/core/java/android/permission/flags.aconfig +++ b/core/java/android/permission/flags.aconfig @@ -180,3 +180,11 @@ flag { description: "Use runtime permission state to determine appop state" bug: "266164193" } + +flag { + name: "device_id_in_op_proxy_info_enabled" + is_fixed_read_only: true + namespace: "permissions" + description: "Enable getDeviceId API in OpEventProxyInfo" + bug: "337340961" +}
\ No newline at end of file diff --git a/services/core/java/com/android/server/appop/AttributedOp.java b/services/core/java/com/android/server/appop/AttributedOp.java index 94baf88e4853..2285826c0b58 100644 --- a/services/core/java/com/android/server/appop/AttributedOp.java +++ b/services/core/java/com/android/server/appop/AttributedOp.java @@ -24,6 +24,7 @@ import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.AppOpsManager; +import android.companion.virtual.VirtualDeviceManager; import android.os.IBinder; import android.os.Process; import android.os.RemoteException; @@ -134,7 +135,7 @@ final class AttributedOp { AppOpsManager.OpEventProxyInfo proxyInfo = null; if (proxyUid != Process.INVALID_UID) { proxyInfo = mAppOpsService.mOpEventProxyInfoPool.acquire(proxyUid, proxyPackageName, - proxyAttributionTag); + proxyAttributionTag, VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT); } AppOpsManager.NoteOpEvent existingEvent = mAccessEvents.get(key); @@ -855,7 +856,7 @@ final class AttributedOp { AppOpsManager.OpEventProxyInfo proxyInfo = null; if (proxyUid != Process.INVALID_UID) { proxyInfo = mOpEventProxyInfoPool.acquire(proxyUid, proxyPackageName, - proxyAttributionTag); + proxyAttributionTag, VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT); } if (recycled != null) { @@ -881,10 +882,11 @@ final class AttributedOp { AppOpsManager.OpEventProxyInfo acquire(@IntRange(from = 0) int uid, @Nullable String packageName, - @Nullable String attributionTag) { + @Nullable String attributionTag, + @Nullable String deviceId) { AppOpsManager.OpEventProxyInfo recycled = acquire(); if (recycled != null) { - recycled.reinit(uid, packageName, attributionTag); + recycled.reinit(uid, packageName, attributionTag, deviceId); return recycled; } |