am 23439bb9: am bab7ceaf: am d50ec637: Merge "Create DPM APIs for cross profile callerId" into lmp-dev
* commit '23439bb9f3edcd2191aff79d57018ddaf2d74847': Create DPM APIs for cross profile callerId
This commit is contained in:
@@ -5327,6 +5327,7 @@ package android.app.admin {
|
||||
method public android.os.Bundle getApplicationRestrictions(android.content.ComponentName, java.lang.String);
|
||||
method public boolean getBlockUninstall(android.content.ComponentName, java.lang.String);
|
||||
method public boolean getCameraDisabled(android.content.ComponentName);
|
||||
method public boolean getCrossProfileCallerIdDisabled(android.content.ComponentName);
|
||||
method public int getCurrentFailedPasswordAttempts();
|
||||
method public int getKeyguardDisabledFeatures(android.content.ComponentName);
|
||||
method public int getMaximumFailedPasswordsForWipe(android.content.ComponentName);
|
||||
@@ -5366,6 +5367,7 @@ package android.app.admin {
|
||||
method public int setApplicationsBlocked(android.content.ComponentName, android.content.Intent, boolean);
|
||||
method public void setBlockUninstall(android.content.ComponentName, java.lang.String, boolean);
|
||||
method public void setCameraDisabled(android.content.ComponentName, boolean);
|
||||
method public void setCrossProfileCallerIdDisabled(android.content.ComponentName, boolean);
|
||||
method public void setGlobalSetting(android.content.ComponentName, java.lang.String, java.lang.String);
|
||||
method public void setKeyguardDisabledFeatures(android.content.ComponentName, int);
|
||||
method public void setLockTaskPackages(java.lang.String[]) throws java.lang.SecurityException;
|
||||
|
||||
@@ -2269,6 +2269,45 @@ public class DevicePolicyManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by a profile owner to set whether caller-Id information from the managed
|
||||
* profile will be shown for incoming calls.
|
||||
*
|
||||
* <p>The calling device admin must be a profile owner. If it is not, a
|
||||
* security exception will be thrown.
|
||||
*
|
||||
* @param who Which {@link DeviceAdminReceiver} this request is associated with.
|
||||
* @param disabled If true caller-Id information in the managed profile is not displayed.
|
||||
*/
|
||||
public void setCrossProfileCallerIdDisabled(ComponentName who, boolean disabled) {
|
||||
if (mService != null) {
|
||||
try {
|
||||
mService.setCrossProfileCallerIdDisabled(who, disabled);
|
||||
} catch (RemoteException e) {
|
||||
Log.w(TAG, "Failed talking with device policy service", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether or not caller-Id information has been disabled.
|
||||
*
|
||||
* <p>The calling device admin must be a profile owner. If it is not, a
|
||||
* security exception will be thrown.
|
||||
*
|
||||
* @param who Which {@link DeviceAdminReceiver} this request is associated with.
|
||||
*/
|
||||
public boolean getCrossProfileCallerIdDisabled(ComponentName who) {
|
||||
if (mService != null) {
|
||||
try {
|
||||
return mService.getCrossProfileCallerIdDisabled(who);
|
||||
} catch (RemoteException e) {
|
||||
Log.w(TAG, "Failed talking with device policy service", e);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by the profile owner so that some intents sent in the managed profile can also be
|
||||
* resolved in the parent, or vice versa.
|
||||
|
||||
@@ -162,4 +162,8 @@ interface IDevicePolicyManager {
|
||||
|
||||
void setBlockUninstall(in ComponentName admin, in String packageName, boolean blockUninstall);
|
||||
boolean getBlockUninstall(in ComponentName admin, in String packageName);
|
||||
|
||||
void setCrossProfileCallerIdDisabled(in ComponentName who, boolean disabled);
|
||||
boolean getCrossProfileCallerIdDisabled(in ComponentName who);
|
||||
boolean getCrossProfileCallerIdDisabledForUser(int userId);
|
||||
}
|
||||
|
||||
@@ -257,6 +257,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
static class ActiveAdmin {
|
||||
private static final String TAG_DISABLE_KEYGUARD_FEATURES = "disable-keyguard-features";
|
||||
private static final String TAG_DISABLE_CAMERA = "disable-camera";
|
||||
private static final String TAG_DISABLE_CALLER_ID = "disable-caller-id";
|
||||
private static final String TAG_DISABLE_ACCOUNT_MANAGEMENT = "disable-account-management";
|
||||
private static final String TAG_ACCOUNT_TYPE = "account-type";
|
||||
private static final String TAG_ENCRYPTION_REQUESTED = "encryption-requested";
|
||||
@@ -324,6 +325,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
|
||||
boolean encryptionRequested = false;
|
||||
boolean disableCamera = false;
|
||||
boolean disableCallerId = false;
|
||||
Set<String> accountTypesWithManagementDisabled = new HashSet<String>();
|
||||
|
||||
// TODO: review implementation decisions with frameworks team
|
||||
@@ -436,6 +438,11 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
out.attribute(null, ATTR_VALUE, Boolean.toString(disableCamera));
|
||||
out.endTag(null, TAG_DISABLE_CAMERA);
|
||||
}
|
||||
if (disableCallerId) {
|
||||
out.startTag(null, TAG_DISABLE_CALLER_ID);
|
||||
out.attribute(null, ATTR_VALUE, Boolean.toString(disableCallerId));
|
||||
out.endTag(null, TAG_DISABLE_CALLER_ID);
|
||||
}
|
||||
if (disabledKeyguardFeatures != DEF_KEYGUARD_FEATURES_DISABLED) {
|
||||
out.startTag(null, TAG_DISABLE_KEYGUARD_FEATURES);
|
||||
out.attribute(null, ATTR_VALUE, Integer.toString(disabledKeyguardFeatures));
|
||||
@@ -518,6 +525,9 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
} else if (TAG_DISABLE_CAMERA.equals(tag)) {
|
||||
disableCamera = Boolean.parseBoolean(
|
||||
parser.getAttributeValue(null, ATTR_VALUE));
|
||||
} else if (TAG_DISABLE_CALLER_ID.equals(tag)) {
|
||||
disableCallerId = Boolean.parseBoolean(
|
||||
parser.getAttributeValue(null, ATTR_VALUE));
|
||||
} else if (TAG_DISABLE_KEYGUARD_FEATURES.equals(tag)) {
|
||||
disabledKeyguardFeatures = Integer.parseInt(
|
||||
parser.getAttributeValue(null, ATTR_VALUE));
|
||||
@@ -594,6 +604,8 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
pw.println(encryptionRequested);
|
||||
pw.print(prefix); pw.print("disableCamera=");
|
||||
pw.println(disableCamera);
|
||||
pw.print(prefix); pw.print("disableCallerId=");
|
||||
pw.println(disableCallerId);
|
||||
pw.print(prefix); pw.print("disabledKeyguardFeatures=");
|
||||
pw.println(disabledKeyguardFeatures);
|
||||
}
|
||||
@@ -3291,6 +3303,25 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Returns the active profile owner for this user or null if the current user has no
|
||||
// profile owner.
|
||||
private ActiveAdmin getProfileOwnerAdmin(int userHandle) {
|
||||
String profileOwnerPackage = getProfileOwner(userHandle);
|
||||
if (profileOwnerPackage == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
DevicePolicyData policy = getUserData(userHandle);
|
||||
final int n = policy.mAdminList.size();
|
||||
for (int i = 0; i < n; i++) {
|
||||
ActiveAdmin admin = policy.mAdminList.get(i);
|
||||
if (profileOwnerPackage.equals(admin.info.getPackageName())) {
|
||||
return admin;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getProfileOwnerName(int userHandle) {
|
||||
if (!mHasFeature) {
|
||||
@@ -3329,6 +3360,12 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
private void enforceSystemProcess(String message) {
|
||||
if (Binder.getCallingUid() != Process.SYSTEM_UID) {
|
||||
throw new SecurityException(message);
|
||||
}
|
||||
}
|
||||
|
||||
private void enforceNotManagedProfile(int userHandle, String message) {
|
||||
if(isManagedProfile(userHandle)) {
|
||||
throw new SecurityException("You can not " + message + " for a managed profile. ");
|
||||
@@ -3956,6 +3993,50 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCrossProfileCallerIdDisabled(ComponentName who, boolean disabled) {
|
||||
if (!mHasFeature) {
|
||||
return;
|
||||
}
|
||||
synchronized (this) {
|
||||
if (who == null) {
|
||||
throw new NullPointerException("ComponentName is null");
|
||||
}
|
||||
ActiveAdmin admin = getActiveAdminForCallerLocked(who,
|
||||
DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
|
||||
if (admin.disableCallerId != disabled) {
|
||||
admin.disableCallerId = disabled;
|
||||
saveSettingsLocked(UserHandle.getCallingUserId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getCrossProfileCallerIdDisabled(ComponentName who) {
|
||||
if (!mHasFeature) {
|
||||
return false;
|
||||
}
|
||||
|
||||
synchronized (this) {
|
||||
if (who == null) {
|
||||
throw new NullPointerException("ComponentName is null");
|
||||
}
|
||||
|
||||
ActiveAdmin admin = getActiveAdminForCallerLocked(who,
|
||||
DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
|
||||
return admin.disableCallerId;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getCrossProfileCallerIdDisabledForUser(int userId) {
|
||||
enforceSystemProcess("getCrossProfileCallerIdDisabled can only be called by system");
|
||||
synchronized (this) {
|
||||
ActiveAdmin admin = getProfileOwnerAdmin(userId);
|
||||
return (admin != null) ? admin.disableCallerId : false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets which packages may enter lock task mode.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user