summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Svetoslav Ganov <svetoslavganov@google.com> 2016-05-06 23:08:30 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2016-05-06 23:08:31 +0000
commitba83e90e1825f3e40a16370babc83b8ac0645cf9 (patch)
treecb743f1b4426a4e93218fc56e360f4e40eba13ea
parenta5aa3ecbe3426b44b6d550624e7b30f4b84c1025 (diff)
parenteaca4c5022fc2bde816ac58fe57d80f7e9706ead (diff)
Merge "Properly map runtime permissions to app ops" into nyc-dev
-rw-r--r--core/java/android/app/AppOpsManager.java55
1 files changed, 48 insertions, 7 deletions
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index 783c37de1552..c62c1115fe81 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -105,7 +105,7 @@ public class AppOpsManager {
// when adding one of these:
// - increment _NUM_OP
- // - add rows to sOpToSwitch, sOpToString, sOpNames, sOpPerms, sOpDefaultMode
+ // - add rows to sOpToSwitch, sOpToString, sOpNames, sOpToPerms, sOpDefault
// - add descriptive strings to Settings/res/values/arrays.xml
// - add the op to the appropriate template in AppOpsState.OpsTemplate (settings app)
@@ -339,6 +339,43 @@ public class AppOpsManager {
public static final String OPSTR_GET_ACCOUNTS
= "android:get_accounts";
+ private static final int[] RUNTIME_PERMISSIONS_OPS = {
+ // Contacts
+ OP_READ_CONTACTS,
+ OP_WRITE_CONTACTS,
+ OP_GET_ACCOUNTS,
+ // Calendar
+ OP_READ_CALENDAR,
+ OP_WRITE_CALENDAR,
+ // SMS
+ OP_SEND_SMS,
+ OP_RECEIVE_SMS,
+ OP_READ_SMS,
+ OP_RECEIVE_WAP_PUSH,
+ OP_RECEIVE_MMS,
+ OP_READ_CELL_BROADCASTS,
+ // Storage
+ OP_READ_EXTERNAL_STORAGE,
+ OP_WRITE_EXTERNAL_STORAGE,
+ // Location
+ OP_COARSE_LOCATION,
+ OP_FINE_LOCATION,
+ // Phone
+ OP_READ_PHONE_STATE,
+ OP_CALL_PHONE,
+ OP_READ_CALL_LOG,
+ OP_WRITE_CALL_LOG,
+ OP_ADD_VOICEMAIL,
+ OP_USE_SIP,
+ OP_PROCESS_OUTGOING_CALLS,
+ // Microphone
+ OP_RECORD_AUDIO,
+ // Camera
+ OP_CAMERA,
+ // Body sensors
+ OP_BODY_SENSORS
+ };
+
/**
* This maps each operation to the operation that serves as the
* switch to determine whether it is allowed. Generally this is
@@ -922,7 +959,7 @@ public class AppOpsManager {
/**
* Mapping from a permission to the corresponding app op.
*/
- private static HashMap<String, Integer> sPermToOp = new HashMap<>();
+ private static HashMap<String, Integer> sRuntimePermToOp = new HashMap<>();
static {
if (sOpToSwitch.length != _NUM_OP) {
@@ -962,9 +999,9 @@ public class AppOpsManager {
sOpStrToOp.put(sOpToString[i], i);
}
}
- for (int i=0; i<_NUM_OP; i++) {
- if (sOpPerms[i] != null) {
- sPermToOp.put(sOpPerms[i], i);
+ for (int op : RUNTIME_PERMISSIONS_OPS) {
+ if (sOpPerms[op] != null) {
+ sRuntimePermToOp.put(sOpPerms[op], op);
}
}
}
@@ -1016,10 +1053,12 @@ public class AppOpsManager {
/**
* Retrieve the app op code for a permission, or null if there is not one.
+ * This API is intended to be used for mapping runtime permissions to the
+ * corresponding app op.
* @hide
*/
public static int permissionToOpCode(String permission) {
- Integer boxedOpCode = sPermToOp.get(permission);
+ Integer boxedOpCode = sRuntimePermToOp.get(permission);
return boxedOpCode != null ? boxedOpCode : OP_NONE;
}
@@ -1352,12 +1391,14 @@ public class AppOpsManager {
* Gets the app op name associated with a given permission.
* The app op name is one of the public constants defined
* in this class such as {@link #OPSTR_COARSE_LOCATION}.
+ * This API is intended to be used for mapping runtime
+ * permissions to the corresponding app op.
*
* @param permission The permission.
* @return The app op associated with the permission or null.
*/
public static String permissionToOp(String permission) {
- final Integer opCode = sPermToOp.get(permission);
+ final Integer opCode = sRuntimePermToOp.get(permission);
if (opCode == null) {
return null;
}