diff options
| author | TreeHugger Robot <treehugger-gerrit@google.com> | 2018-10-06 20:14:06 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-10-06 20:14:06 +0000 |
| commit | 10efed0b49e5ae7a302c2cba37aae1982732d072 (patch) | |
| tree | eda1a3bcb3e171ed9bc67c847bcb2109f2d6409f /core/java/android/content/ContentProvider.java | |
| parent | ce10f9b15f3acf3543ce21d443cf03033232bb7f (diff) | |
| parent | 9351985f7accbe36e3dc66818f2c5b47b5457ff6 (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.java | 31 |
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} */ |
