diff options
author | Jason Monk <jmonk@google.com> | 2014-05-06 09:55:28 -0400 |
---|---|---|
committer | Jason Monk <jmonk@google.com> | 2014-05-16 13:12:41 -0400 |
commit | 62062996dd256df8b575b2ba1f0bf97109c4e0ba (patch) | |
tree | 92ff2b6aa73c201a971e005e92eb8ea7f2a6eef9 /core | |
parent | 0598cc586449c1c40728d1c05c42c6490df171ed (diff) | |
download | frameworks_base-62062996dd256df8b575b2ba1f0bf97109c4e0ba.zip frameworks_base-62062996dd256df8b575b2ba1f0bf97109c4e0ba.tar.gz frameworks_base-62062996dd256df8b575b2ba1f0bf97109c4e0ba.tar.bz2 |
Notify AppOpsService of UserRestrictions and Owners
This makes the DevicePolicyManagerService and UserManagerService
push the DeviceOwner/ProfileOwners and user restrictions on boot
as well as on any change.
This also adds a list of restrictions that allow any op to connected with
a user restriction such that it will return MODE_IGNORED when the user
restriction is present (except for the device/profile owner).
Change-Id: Id8a9591d8f04fe5ecebd95750d9010afc0cd786c
Diffstat (limited to 'core')
-rw-r--r-- | core/java/android/app/AppOpsManager.java | 65 | ||||
-rw-r--r-- | core/java/com/android/internal/app/IAppOpsService.aidl | 7 |
2 files changed, 72 insertions, 0 deletions
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java index d813dab..62c4f0f 100644 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -19,6 +19,7 @@ package android.app; import android.Manifest; import android.os.Binder; import android.os.IBinder; +import android.os.UserManager; import android.util.ArrayMap; import com.android.internal.app.IAppOpsService; import com.android.internal.app.IAppOpsCallback; @@ -412,6 +413,58 @@ public class AppOpsManager { }; /** + * Specifies whether an Op should be restricted by a user restriction. + * Each Op should be filled with a restriction string from UserManager or + * null to specify it is not affected by any user restriction. + */ + private static String[] sOpRestrictions = new String[] { + null, //COARSE_LOCATION + null, //FINE_LOCATION + null, //GPS + null, //VIBRATE + null, //READ_CONTACTS + null, //WRITE_CONTACTS + null, //READ_CALL_LOG + null, //WRITE_CALL_LOG + null, //READ_CALENDAR + null, //WRITE_CALENDAR + null, //WIFI_SCAN + null, //POST_NOTIFICATION + null, //NEIGHBORING_CELLS + null, //CALL_PHONE + null, //READ_SMS + null, //WRITE_SMS + null, //RECEIVE_SMS + null, //RECEIVE_EMERGECY_SMS + null, //RECEIVE_MMS + null, //RECEIVE_WAP_PUSH + null, //SEND_SMS + null, //READ_ICC_SMS + null, //WRITE_ICC_SMS + null, //WRITE_SETTINGS + null, //SYSTEM_ALERT_WINDOW + null, //ACCESS_NOTIFICATIONS + null, //CAMERA + null, //RECORD_AUDIO + null, //PLAY_AUDIO + null, //READ_CLIPBOARD + null, //WRITE_CLIPBOARD + null, //TAKE_MEDIA_BUTTONS + null, //TAKE_AUDIO_FOCUS + null, //AUDIO_MASTER_VOLUME + null, //AUDIO_VOICE_VOLUME + null, //AUDIO_RING_VOLUME + null, //AUDIO_MEDIA_VOLUME + null, //AUDIO_ALARM_VOLUME + null, //AUDIO_NOTIFICATION_VOLUME + null, //AUDIO_BLUETOOTH_VOLUME + null, //WAKE_LOCK + null, //MONITOR_LOCATION + null, //MONITOR_HIGH_POWER_LOCATION + null, //GET_USAGE_STATS + }; + + /** * This specifies the default mode for each operation. */ private static int[] sOpDefaultMode = new int[] { @@ -542,6 +595,10 @@ public class AppOpsManager { throw new IllegalStateException("sOpDisableReset length " + sOpDisableReset.length + " should be " + _NUM_OP); } + if (sOpRestrictions.length != _NUM_OP) { + throw new IllegalStateException("sOpRestrictions length " + sOpRestrictions.length + + " should be " + _NUM_OP); + } for (int i=0; i<_NUM_OP; i++) { if (sOpToString[i] != null) { sOpStrToOp.put(sOpToString[i], i); @@ -575,6 +632,14 @@ public class AppOpsManager { } /** + * Retrieve the user restriction associated with an operation, or null if there is not one. + * @hide + */ + public static String opToRestriction(int op) { + return sOpRestrictions[op]; + } + + /** * Retrieve the default mode for the operation. * @hide */ diff --git a/core/java/com/android/internal/app/IAppOpsService.aidl b/core/java/com/android/internal/app/IAppOpsService.aidl index cd75010..8e6fa58 100644 --- a/core/java/com/android/internal/app/IAppOpsService.aidl +++ b/core/java/com/android/internal/app/IAppOpsService.aidl @@ -17,6 +17,7 @@ package com.android.internal.app; import android.app.AppOpsManager; +import android.os.Bundle; import com.android.internal.app.IAppOpsCallback; interface IAppOpsService { @@ -38,4 +39,10 @@ interface IAppOpsService { void resetAllModes(); int checkAudioOperation(int code, int stream, int uid, String packageName); void setAudioRestriction(int code, int stream, int uid, int mode, in String[] exceptionPackages); + + void setDeviceOwner(String packageName); + void setProfileOwner(String packageName, int userHandle); + void setUserRestrictions(in Bundle restrictions, int userHandle); + void removeUser(int userHandle); + } |