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
diff --git a/services/java/com/android/server/AppOpsService.java b/services/java/com/android/server/AppOpsService.java
index 335917e..748b3cb 100644
--- a/services/java/com/android/server/AppOpsService.java
+++ b/services/java/com/android/server/AppOpsService.java
@@ -204,6 +204,7 @@
     @Override
     public void setMode(int code, int uid, String packageName, int mode) {
         verifyIncomingUid(uid);
+        verifyIncomingOp(code);
         synchronized (this) {
             Op op = getOpLocked(AppOpsManager.opToSwitch(code), uid, packageName, true);
             if (op != null) {
@@ -218,6 +219,7 @@
     @Override
     public int checkOperation(int code, int uid, String packageName) {
         verifyIncomingUid(uid);
+        verifyIncomingOp(code);
         synchronized (this) {
             Op op = getOpLocked(AppOpsManager.opToSwitch(code), uid, packageName, false);
             if (op == null) {
@@ -230,6 +232,7 @@
     @Override
     public int noteOperation(int code, int uid, String packageName) {
         verifyIncomingUid(uid);
+        verifyIncomingOp(code);
         synchronized (this) {
             Ops ops = getOpsLocked(uid, packageName, true);
             if (ops == null) {
@@ -261,6 +264,7 @@
     @Override
     public int startOperation(int code, int uid, String packageName) {
         verifyIncomingUid(uid);
+        verifyIncomingOp(code);
         synchronized (this) {
             Ops ops = getOpsLocked(uid, packageName, true);
             if (ops == null) {
@@ -291,6 +295,7 @@
     @Override
     public void finishOperation(int code, int uid, String packageName) {
         verifyIncomingUid(uid);
+        verifyIncomingOp(code);
         synchronized (this) {
             Op op = getOpLocked(code, uid, packageName, true);
             if (op == null) {
@@ -322,6 +327,13 @@
                 Binder.getCallingPid(), Binder.getCallingUid(), null);
     }
 
+    private void verifyIncomingOp(int op) {
+        if (op >= 0 && op < AppOpsManager._NUM_OP) {
+            return;
+        }
+        throw new IllegalArgumentException("Bad operation #" + op);
+    }
+
     private Ops getOpsLocked(int uid, String packageName, boolean edit) {
         HashMap<String, Ops> pkgOps = mUidOps.get(uid);
         if (pkgOps == null) {