summaryrefslogtreecommitdiff
path: root/core/java/android/content/ContentProvider.java
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2018-10-06 20:14:06 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2018-10-06 20:14:06 +0000
commit10efed0b49e5ae7a302c2cba37aae1982732d072 (patch)
treeeda1a3bcb3e171ed9bc67c847bcb2109f2d6409f /core/java/android/content/ContentProvider.java
parentce10f9b15f3acf3543ce21d443cf03033232bb7f (diff)
parent9351985f7accbe36e3dc66818f2c5b47b5457ff6 (diff)
Merge "Remove SMS access for apps other than current SMS handler"
Diffstat (limited to 'core/java/android/content/ContentProvider.java')
-rw-r--r--core/java/android/content/ContentProvider.java31
1 files changed, 19 insertions, 12 deletions
diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java
index a13a438cd7f7..2a03787f134c 100644
--- a/core/java/android/content/ContentProvider.java
+++ b/core/java/android/content/ContentProvider.java
@@ -18,6 +18,7 @@ package android.content;
import static android.Manifest.permission.INTERACT_ACROSS_USERS;
import static android.app.AppOpsManager.MODE_ALLOWED;
+import static android.app.AppOpsManager.MODE_DEFAULT;
import static android.app.AppOpsManager.MODE_ERRORED;
import static android.app.AppOpsManager.MODE_IGNORED;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
@@ -569,11 +570,7 @@ public abstract class ContentProvider implements ComponentCallbacks2 {
return mode;
}
- if (mReadOp != AppOpsManager.OP_NONE) {
- return mAppOpsManager.noteProxyOp(mReadOp, callingPkg);
- }
-
- return AppOpsManager.MODE_ALLOWED;
+ return noteProxyOp(callingPkg, mReadOp);
}
private int enforceWritePermission(String callingPkg, Uri uri, IBinder callerToken)
@@ -583,8 +580,13 @@ public abstract class ContentProvider implements ComponentCallbacks2 {
return mode;
}
- if (mWriteOp != AppOpsManager.OP_NONE) {
- return mAppOpsManager.noteProxyOp(mWriteOp, callingPkg);
+ return noteProxyOp(callingPkg, mWriteOp);
+ }
+
+ private int noteProxyOp(String callingPkg, int op) {
+ if (op != AppOpsManager.OP_NONE) {
+ int mode = mAppOpsManager.noteProxyOp(op, callingPkg);
+ return mode == MODE_DEFAULT ? interpretDefaultAppOpMode(op) : mode;
}
return AppOpsManager.MODE_ALLOWED;
@@ -609,12 +611,17 @@ public abstract class ContentProvider implements ComponentCallbacks2 {
return MODE_ERRORED;
}
- final int permOp = AppOpsManager.permissionToOpCode(permission);
- if (permOp != AppOpsManager.OP_NONE) {
- return mTransport.mAppOpsManager.noteProxyOp(permOp, callingPkg);
- }
+ return mTransport.noteProxyOp(callingPkg, AppOpsManager.permissionToOpCode(permission));
+ }
- return MODE_ALLOWED;
+ /**
+ * Allows for custom interpretations of {@link AppOpsManager#MODE_DEFAULT} by individual
+ * content providers
+ *
+ * @hide
+ */
+ protected int interpretDefaultAppOpMode(int op) {
+ return MODE_IGNORED;
}
/** {@hide} */