API CHANGE - Add hasGrantedPolicy() API
* Allows an app to detect that it needs to have additional policies granted * Add "refreshing" parameter to setActiveAdmin() to handle this case * Minor cleanups to eliminate warnings (mostly for unused things) Bug: 3253179 Change-Id: I4bf639bf560557130bf98e8cfb75f996fac416f1
This commit is contained in:
@ -816,7 +816,11 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
public void setActiveAdmin(ComponentName adminReceiver) {
|
||||
/**
|
||||
* @param adminReceiver The admin to add
|
||||
* @param refreshing true = update an active admin, no error
|
||||
*/
|
||||
public void setActiveAdmin(ComponentName adminReceiver, boolean refreshing) {
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.BIND_DEVICE_ADMIN, null);
|
||||
|
||||
@ -827,15 +831,29 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
synchronized (this) {
|
||||
long ident = Binder.clearCallingIdentity();
|
||||
try {
|
||||
if (getActiveAdminUncheckedLocked(adminReceiver) != null) {
|
||||
if (!refreshing && getActiveAdminUncheckedLocked(adminReceiver) != null) {
|
||||
throw new IllegalArgumentException("Admin is already added");
|
||||
}
|
||||
ActiveAdmin admin = new ActiveAdmin(info);
|
||||
mAdminMap.put(adminReceiver, admin);
|
||||
mAdminList.add(admin);
|
||||
ActiveAdmin newAdmin = new ActiveAdmin(info);
|
||||
mAdminMap.put(adminReceiver, newAdmin);
|
||||
int replaceIndex = -1;
|
||||
if (refreshing) {
|
||||
final int N = mAdminList.size();
|
||||
for (int i=0; i < N; i++) {
|
||||
ActiveAdmin oldAdmin = mAdminList.get(i);
|
||||
if (oldAdmin.info.getComponent().equals(adminReceiver)) {
|
||||
replaceIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (replaceIndex == -1) {
|
||||
mAdminList.add(newAdmin);
|
||||
} else {
|
||||
mAdminList.set(replaceIndex, newAdmin);
|
||||
}
|
||||
saveSettingsLocked();
|
||||
sendAdminCommandLocked(admin,
|
||||
DeviceAdminReceiver.ACTION_DEVICE_ADMIN_ENABLED);
|
||||
sendAdminCommandLocked(newAdmin, DeviceAdminReceiver.ACTION_DEVICE_ADMIN_ENABLED);
|
||||
} finally {
|
||||
Binder.restoreCallingIdentity(ident);
|
||||
}
|
||||
@ -848,6 +866,16 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
public boolean hasGrantedPolicy(ComponentName adminReceiver, int policyId) {
|
||||
synchronized (this) {
|
||||
ActiveAdmin administrator = getActiveAdminUncheckedLocked(adminReceiver);
|
||||
if (administrator == null) {
|
||||
throw new SecurityException("No active admin " + adminReceiver);
|
||||
}
|
||||
return administrator.info.usesPolicy(policyId);
|
||||
}
|
||||
}
|
||||
|
||||
public List<ComponentName> getActiveAdmins() {
|
||||
synchronized (this) {
|
||||
final int N = mAdminList.size();
|
||||
|
Reference in New Issue
Block a user