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 /services/devicepolicy | |
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 'services/devicepolicy')
-rw-r--r-- | services/devicepolicy/java/com/android/server/devicepolicy/DeviceOwner.java | 5 | ||||
-rw-r--r-- | services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java | 35 |
2 files changed, 40 insertions, 0 deletions
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DeviceOwner.java b/services/devicepolicy/java/com/android/server/devicepolicy/DeviceOwner.java index 1647425..674c6f4 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DeviceOwner.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DeviceOwner.java @@ -39,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.HashMap; +import java.util.Set; /** * Stores and restores state for the Device and Profile owners. By definition there can be @@ -137,6 +138,10 @@ public class DeviceOwner { return profileOwner != null ? profileOwner.name : null; } + Set<Integer> getProfileOwnerKeys() { + return mProfileOwners.keySet(); + } + boolean hasDeviceOwner() { return mDeviceOwner != null; } diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 1980d1e..a0c59cc 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -19,6 +19,7 @@ package com.android.server.devicepolicy; import static android.Manifest.permission.MANAGE_CA_CERTIFICATES; import com.android.internal.R; +import com.android.internal.app.IAppOpsService; import com.android.internal.os.storage.ExternalStorageFormatter; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.JournaledFile; @@ -237,6 +238,8 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { } }; + private IAppOpsService mAppOpsService; + static class ActiveAdmin { private static final String TAG_DISABLE_KEYGUARD_FEATURES = "disable-keyguard-features"; private static final String TAG_DISABLE_CAMERA = "disable-camera"; @@ -1209,6 +1212,22 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { loadSettingsLocked(getUserData(UserHandle.USER_OWNER), UserHandle.USER_OWNER); loadDeviceOwner(); } + mAppOpsService = IAppOpsService.Stub.asInterface( + ServiceManager.getService(Context.APP_OPS_SERVICE)); + if (mDeviceOwner.hasDeviceOwner()) { + try { + mAppOpsService.setDeviceOwner(mDeviceOwner.getDeviceOwnerPackageName()); + } catch (RemoteException e) { + Log.w(LOG_TAG, "Unable to notify AppOpsService of DeviceOwner", e); + } + } + for (Integer i : mDeviceOwner.getProfileOwnerKeys()) { + try { + mAppOpsService.setProfileOwner(mDeviceOwner.getProfileOwnerName(i), i); + } catch (RemoteException e) { + Log.w(LOG_TAG, "Unable to notify AppOpsService of ProfileOwner", e); + } + } } private void handlePasswordExpirationNotification(int userHandle) { @@ -2953,6 +2972,14 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { "Trying to set device owner but device owner is already set."); } + long token = Binder.clearCallingIdentity(); + try { + mAppOpsService.setDeviceOwner(packageName); + } catch (RemoteException e) { + Log.w(LOG_TAG, "Unable to notify AppOpsService of DeviceOwner", e); + } finally { + Binder.restoreCallingIdentity(token); + } if (mDeviceOwner == null) { // Device owner is not set and does not exist, set it. mDeviceOwner = DeviceOwner.createWithDeviceOwner(packageName, ownerName); @@ -3029,6 +3056,14 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { throw new IllegalStateException( "Trying to set profile owner but user is already set-up."); } + long token = Binder.clearCallingIdentity(); + try { + mAppOpsService.setProfileOwner(packageName, userHandle); + } catch (RemoteException e) { + Log.w(LOG_TAG, "Unable to notify AppOpsService of ProfileOwner", e); + } finally { + Binder.restoreCallingIdentity(token); + } if (mDeviceOwner == null) { // Device owner state does not exist, create it. mDeviceOwner = DeviceOwner.createWithProfileOwner(packageName, ownerName, |