summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Himanshu Gupta <himanshuz@google.com> 2023-05-10 11:02:04 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-05-10 11:02:04 +0000
commita08ca180432ad9617a02feeafeaf2faa675b4fa5 (patch)
treefd880b14c8ce6487c5caf8fbebf9a9d651f6fbed
parent1bdf6d26f2b7aa6d6b316f8a2d39d3e2646d5ccc (diff)
parent7fb1ca4cb24dbe7bb267f6d00300f4191eea973f (diff)
Merge "Adding a way to communicate user space for AppOp changes." into udc-dev
-rw-r--r--core/java/android/app/AppOpsManager.java24
1 files changed, 23 insertions, 1 deletions
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index 0e5cbe228c1b..ba5a9f741756 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -7089,6 +7089,26 @@ public class AppOpsManager {
*/
public interface OnOpChangedListener {
public void onOpChanged(String op, String packageName);
+
+ /**
+ * Implementations can override this method to add handling logic for AppOp changes.
+ *
+ * Normally, listeners to AppOp changes work in the same User Space as the App whose Op
+ * has changed. However, in some case listeners can have a single instance responsible for
+ * multiple users. (For ex single Media Provider instance in user 0 is responsible for both
+ * cloned and user 0 spaces). For handling such cases correctly, listeners need to be
+ * passed userId in addition to PackageName and Op.
+
+ * The default impl is to fallback onto {@link #onOpChanged(String, String)
+ *
+ * @param op The Op that changed.
+ * @param packageName Package of the app whose Op changed.
+ * @param userId User Space of the app whose Op changed.
+ * @hide
+ */
+ default void onOpChanged(@NonNull String op, @NonNull String packageName, int userId) {
+ onOpChanged(op, packageName);
+ }
}
/**
@@ -7785,7 +7805,9 @@ public class AppOpsManager {
((OnOpChangedInternalListener)callback).onOpChanged(op, packageName);
}
if (sAppOpInfos[op].name != null) {
- callback.onOpChanged(sAppOpInfos[op].name, packageName);
+
+ callback.onOpChanged(sAppOpInfos[op].name, packageName,
+ UserHandle.getUserId(uid));
}
}
};