summaryrefslogtreecommitdiff
path: root/core/java/android/content/ContentProvider.java
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2013-02-05 17:22:41 -0800
committerDianne Hackborn <hackbod@google.com>2013-02-05 17:22:41 -0800
commit961321fe4ed4431a6362d729d9e4ea26bdecde61 (patch)
tree0ddcc0f94b7840ce752fd10a9e57b55c3f2c4d9b /core/java/android/content/ContentProvider.java
parentf51f61269aacdfcf737b2c32b6b216c48ab61e65 (diff)
App ops: add op for writing settings.
Also fix a build. And fix a bug that I think was introduced in the multi-user work that removed the permission check for writing to settings...! Change-Id: I5945682faa789ffc78fd3546c0df7d03693f106d
Diffstat (limited to 'core/java/android/content/ContentProvider.java')
-rw-r--r--core/java/android/content/ContentProvider.java24
1 files changed, 19 insertions, 5 deletions
diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java
index e66efd525ba8..90ee0ac8a390 100644
--- a/core/java/android/content/ContentProvider.java
+++ b/core/java/android/content/ContentProvider.java
@@ -174,8 +174,8 @@ public abstract class ContentProvider implements ComponentCallbacks2 {
*/
class Transport extends ContentProviderNative {
AppOpsManager mAppOpsManager = null;
- int mReadOp = -1;
- int mWriteOp = -1;
+ int mReadOp = AppOpsManager.OP_NONE;
+ int mWriteOp = AppOpsManager.OP_NONE;
ContentProvider getContentProvider() {
return ContentProvider.this;
@@ -274,7 +274,7 @@ public abstract class ContentProvider implements ComponentCallbacks2 {
@Override
public Bundle call(String callingPkg, String method, String arg, Bundle extras) {
- return ContentProvider.this.call(method, arg, extras);
+ return ContentProvider.this.callFromPackage(callingPkg, method, arg, extras);
}
@Override
@@ -309,7 +309,7 @@ public abstract class ContentProvider implements ComponentCallbacks2 {
private int enforceReadPermission(String callingPkg, Uri uri) throws SecurityException {
enforceReadPermissionInner(uri);
- if (mAppOpsManager != null) {
+ if (mReadOp != AppOpsManager.OP_NONE) {
return mAppOpsManager.noteOp(mReadOp, Binder.getCallingUid(), callingPkg);
}
return AppOpsManager.MODE_ALLOWED;
@@ -378,7 +378,7 @@ public abstract class ContentProvider implements ComponentCallbacks2 {
private int enforceWritePermission(String callingPkg, Uri uri) throws SecurityException {
enforceWritePermissionInner(uri);
- if (mAppOpsManager != null) {
+ if (mWriteOp != AppOpsManager.OP_NONE) {
return mAppOpsManager.noteOp(mWriteOp, Binder.getCallingUid(), callingPkg);
}
return AppOpsManager.MODE_ALLOWED;
@@ -529,6 +529,11 @@ public abstract class ContentProvider implements ComponentCallbacks2 {
mTransport.mWriteOp = writeOp;
}
+ /** @hide */
+ public AppOpsManager getAppOpsManager() {
+ return mTransport.mAppOpsManager;
+ }
+
/**
* Implement this to initialize your content provider on startup.
* This method is called for all registered content providers on the
@@ -1189,6 +1194,15 @@ public abstract class ContentProvider implements ComponentCallbacks2 {
}
/**
+ * @hide
+ * Front-end to {@link #call(String, String, android.os.Bundle)} that provides the name
+ * of the calling package.
+ */
+ public Bundle callFromPackage(String callingPackag, String method, String arg, Bundle extras) {
+ return call(method, arg, extras);
+ }
+
+ /**
* Call a provider-defined method. This can be used to implement
* interfaces that are cheaper and/or unnatural for a table-like
* model.