App ops: turn off content provider ops when running under test.

Change-Id: I3a5084d195de29122b2f5f2a13b5d4f92f22fa92
This commit is contained in:
Dianne Hackborn
2013-02-26 13:35:11 -08:00
parent 1bf1af60a3
commit 7e6f976c87

View File

@@ -101,6 +101,7 @@ public abstract class ContentProvider implements ComponentCallbacks2 {
private String mWritePermission;
private PathPermission[] mPathPermissions;
private boolean mExported;
private boolean mNoPerms;
private Transport mTransport = new Transport();
@@ -523,10 +524,12 @@ public abstract class ContentProvider implements ComponentCallbacks2 {
/** @hide */
public final void setAppOps(int readOp, int writeOp) {
mTransport.mAppOpsManager = (AppOpsManager)mContext.getSystemService(
Context.APP_OPS_SERVICE);
mTransport.mReadOp = readOp;
mTransport.mWriteOp = writeOp;
if (!mNoPerms) {
mTransport.mAppOpsManager = (AppOpsManager)mContext.getSystemService(
Context.APP_OPS_SERVICE);
mTransport.mReadOp = readOp;
mTransport.mWriteOp = writeOp;
}
}
/** @hide */
@@ -1191,6 +1194,16 @@ public abstract class ContentProvider implements ComponentCallbacks2 {
setWritePermission(info.writePermission);
setPathPermissions(info.pathPermissions);
mExported = info.exported;
mNoPerms = false;
} else {
// We enter here because the content provider is being instantiated
// as a mock. We don't have any information about the provider (such
// as its required permissions), and also want to avoid doing app op
// checks since these aren't real calls coming in and we may not be
// able to get the app ops service at all (if the test is using something
// like the IsolatedProvider). So set this to true, to prevent us
// from enabling app ops on this object.
mNoPerms = true;
}
ContentProvider.this.onCreate();
}