App ops: new operations for SMS.
Implementation required a new framework feature
to associate an app op with a broadcast.
Change-Id: I4ff41a52f7ad4ee8fd80cbf7b394f04d6c4315b3
diff --git a/services/java/com/android/server/am/BroadcastQueue.java b/services/java/com/android/server/am/BroadcastQueue.java
index bada7f0..e8e8f25 100644
--- a/services/java/com/android/server/am/BroadcastQueue.java
+++ b/services/java/com/android/server/am/BroadcastQueue.java
@@ -22,6 +22,7 @@
import android.app.ActivityManager;
import android.app.AppGlobals;
+import android.app.AppOpsManager;
import android.content.ComponentName;
import android.content.IIntentReceiver;
import android.content.Intent;
@@ -409,6 +410,16 @@
skip = true;
}
}
+ if (r.appOp != AppOpsManager.OP_NONE) {
+ int mode = mService.mAppOpsService.checkOperation(r.appOp,
+ filter.receiverList.uid, filter.packageName);
+ if (mode != AppOpsManager.MODE_ALLOWED) {
+ if (DEBUG_BROADCAST) Slog.v(TAG,
+ "App op " + r.appOp + " not allowed for broadcast to uid "
+ + filter.receiverList.uid + " pkg " + filter.packageName);
+ skip = true;
+ }
+ }
if (!skip) {
// If this is not being sent as an ordered broadcast, then we
@@ -706,6 +717,17 @@
skip = true;
}
}
+ if (r.appOp != AppOpsManager.OP_NONE) {
+ int mode = mService.mAppOpsService.checkOperation(r.appOp,
+ info.activityInfo.applicationInfo.uid, info.activityInfo.packageName);
+ if (mode != AppOpsManager.MODE_ALLOWED) {
+ if (DEBUG_BROADCAST) Slog.v(TAG,
+ "App op " + r.appOp + " not allowed for broadcast to uid "
+ + info.activityInfo.applicationInfo.uid + " pkg "
+ + info.activityInfo.packageName);
+ skip = true;
+ }
+ }
boolean isSingleton = false;
try {
isSingleton = mService.isSingleton(info.activityInfo.processName,