Merge "Create a new device policy for controlling work contacts search"
This commit is contained in:
@@ -5793,6 +5793,7 @@ package android.app.admin {
|
||||
method public boolean getCameraDisabled(android.content.ComponentName);
|
||||
method public java.lang.String getCertInstallerPackage(android.content.ComponentName) throws java.lang.SecurityException;
|
||||
method public boolean getCrossProfileCallerIdDisabled(android.content.ComponentName);
|
||||
method public boolean getCrossProfileContactsSearchDisabled(android.content.ComponentName);
|
||||
method public java.util.List<java.lang.String> getCrossProfileWidgetProviders(android.content.ComponentName);
|
||||
method public int getCurrentFailedPasswordAttempts();
|
||||
method public java.lang.String getDeviceOwnerLockScreenInfo();
|
||||
@@ -5857,6 +5858,7 @@ package android.app.admin {
|
||||
method public void setCameraDisabled(android.content.ComponentName, boolean);
|
||||
method public void setCertInstallerPackage(android.content.ComponentName, java.lang.String) throws java.lang.SecurityException;
|
||||
method public void setCrossProfileCallerIdDisabled(android.content.ComponentName, boolean);
|
||||
method public void setCrossProfileContactsSearchDisabled(android.content.ComponentName, boolean);
|
||||
method public boolean setDeviceOwnerLockScreenInfo(android.content.ComponentName, java.lang.String);
|
||||
method public void setGlobalSetting(android.content.ComponentName, java.lang.String, java.lang.String);
|
||||
method public boolean setKeyguardDisabled(android.content.ComponentName, boolean);
|
||||
|
||||
@@ -5919,6 +5919,7 @@ package android.app.admin {
|
||||
method public boolean getCameraDisabled(android.content.ComponentName);
|
||||
method public java.lang.String getCertInstallerPackage(android.content.ComponentName) throws java.lang.SecurityException;
|
||||
method public boolean getCrossProfileCallerIdDisabled(android.content.ComponentName);
|
||||
method public boolean getCrossProfileContactsSearchDisabled(android.content.ComponentName);
|
||||
method public java.util.List<java.lang.String> getCrossProfileWidgetProviders(android.content.ComponentName);
|
||||
method public int getCurrentFailedPasswordAttempts();
|
||||
method public deprecated java.lang.String getDeviceInitializerApp();
|
||||
@@ -5992,6 +5993,7 @@ package android.app.admin {
|
||||
method public void setCameraDisabled(android.content.ComponentName, boolean);
|
||||
method public void setCertInstallerPackage(android.content.ComponentName, java.lang.String) throws java.lang.SecurityException;
|
||||
method public void setCrossProfileCallerIdDisabled(android.content.ComponentName, boolean);
|
||||
method public void setCrossProfileContactsSearchDisabled(android.content.ComponentName, boolean);
|
||||
method public boolean setDeviceOwnerLockScreenInfo(android.content.ComponentName, java.lang.String);
|
||||
method public void setGlobalSetting(android.content.ComponentName, java.lang.String, java.lang.String);
|
||||
method public boolean setKeyguardDisabled(android.content.ComponentName, boolean);
|
||||
|
||||
@@ -5795,6 +5795,7 @@ package android.app.admin {
|
||||
method public boolean getCameraDisabled(android.content.ComponentName);
|
||||
method public java.lang.String getCertInstallerPackage(android.content.ComponentName) throws java.lang.SecurityException;
|
||||
method public boolean getCrossProfileCallerIdDisabled(android.content.ComponentName);
|
||||
method public boolean getCrossProfileContactsSearchDisabled(android.content.ComponentName);
|
||||
method public java.util.List<java.lang.String> getCrossProfileWidgetProviders(android.content.ComponentName);
|
||||
method public int getCurrentFailedPasswordAttempts();
|
||||
method public java.lang.String getDeviceOwnerLockScreenInfo();
|
||||
@@ -5859,6 +5860,7 @@ package android.app.admin {
|
||||
method public void setCameraDisabled(android.content.ComponentName, boolean);
|
||||
method public void setCertInstallerPackage(android.content.ComponentName, java.lang.String) throws java.lang.SecurityException;
|
||||
method public void setCrossProfileCallerIdDisabled(android.content.ComponentName, boolean);
|
||||
method public void setCrossProfileContactsSearchDisabled(android.content.ComponentName, boolean);
|
||||
method public boolean setDeviceOwnerLockScreenInfo(android.content.ComponentName, java.lang.String);
|
||||
method public void setGlobalSetting(android.content.ComponentName, java.lang.String, java.lang.String);
|
||||
method public boolean setKeyguardDisabled(android.content.ComponentName, boolean);
|
||||
|
||||
@@ -3539,6 +3539,66 @@ public class DevicePolicyManager {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by a profile owner of a managed profile to set whether contacts search from
|
||||
* the managed profile will be shown in the parent profile, for incoming calls.
|
||||
*
|
||||
* <p>The calling device admin must be a profile owner. If it is not, a
|
||||
* security exception will be thrown.
|
||||
*
|
||||
* @param admin Which {@link DeviceAdminReceiver} this request is associated with.
|
||||
* @param disabled If true contacts search in the managed profile is not displayed.
|
||||
*/
|
||||
public void setCrossProfileContactsSearchDisabled(@NonNull ComponentName admin,
|
||||
boolean disabled) {
|
||||
if (mService != null) {
|
||||
try {
|
||||
mService.setCrossProfileContactsSearchDisabled(admin, disabled);
|
||||
} catch (RemoteException e) {
|
||||
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by a profile owner of a managed profile to determine whether or not contacts search
|
||||
* has been disabled.
|
||||
*
|
||||
* <p>The calling device admin must be a profile owner. If it is not, a
|
||||
* security exception will be thrown.
|
||||
*
|
||||
* @param admin Which {@link DeviceAdminReceiver} this request is associated with.
|
||||
*/
|
||||
public boolean getCrossProfileContactsSearchDisabled(@NonNull ComponentName admin) {
|
||||
if (mService != null) {
|
||||
try {
|
||||
return mService.getCrossProfileContactsSearchDisabled(admin);
|
||||
} catch (RemoteException e) {
|
||||
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Determine whether or not contacts search has been disabled.
|
||||
*
|
||||
* @param userHandle The user for whom to check the contacts search permission
|
||||
* @hide
|
||||
*/
|
||||
public boolean getCrossProfileContactsSearchDisabled(@NonNull UserHandle userHandle) {
|
||||
if (mService != null) {
|
||||
try {
|
||||
return mService
|
||||
.getCrossProfileContactsSearchDisabledForUser(userHandle.getIdentifier());
|
||||
} catch (RemoteException e) {
|
||||
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Start Quick Contact on the managed profile for the user, if the policy allows.
|
||||
* @hide
|
||||
|
||||
@@ -202,6 +202,9 @@ interface IDevicePolicyManager {
|
||||
void setCrossProfileCallerIdDisabled(in ComponentName who, boolean disabled);
|
||||
boolean getCrossProfileCallerIdDisabled(in ComponentName who);
|
||||
boolean getCrossProfileCallerIdDisabledForUser(int userId);
|
||||
void setCrossProfileContactsSearchDisabled(in ComponentName who, boolean disabled);
|
||||
boolean getCrossProfileContactsSearchDisabled(in ComponentName who);
|
||||
boolean getCrossProfileContactsSearchDisabledForUser(int userId);
|
||||
void startManagedQuickContact(String lookupKey, long contactId, long directoryId, in Intent originalIntent);
|
||||
|
||||
void setBluetoothContactSharingDisabled(in ComponentName who, boolean disabled);
|
||||
|
||||
@@ -388,6 +388,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
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_CONTACTS_SEARCH = "disable-contacts-search";
|
||||
private static final String TAG_DISABLE_BLUETOOTH_CONTACT_SHARING
|
||||
= "disable-bt-contacts-sharing";
|
||||
private static final String TAG_DISABLE_SCREEN_CAPTURE = "disable-screen-capture";
|
||||
@@ -476,6 +477,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
boolean encryptionRequested = false;
|
||||
boolean disableCamera = false;
|
||||
boolean disableCallerId = false;
|
||||
boolean disableContactsSearch = false;
|
||||
boolean disableBluetoothContactSharing = true;
|
||||
boolean disableScreenCapture = false; // Can only be set by a device/profile owner.
|
||||
boolean requireAutoTime = false; // Can only be set by a device owner.
|
||||
@@ -638,6 +640,11 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
out.attribute(null, ATTR_VALUE, Boolean.toString(disableCallerId));
|
||||
out.endTag(null, TAG_DISABLE_CALLER_ID);
|
||||
}
|
||||
if (disableContactsSearch) {
|
||||
out.startTag(null, TAG_DISABLE_CONTACTS_SEARCH);
|
||||
out.attribute(null, ATTR_VALUE, Boolean.toString(disableContactsSearch));
|
||||
out.endTag(null, TAG_DISABLE_CONTACTS_SEARCH);
|
||||
}
|
||||
if (disableBluetoothContactSharing) {
|
||||
out.startTag(null, TAG_DISABLE_BLUETOOTH_CONTACT_SHARING);
|
||||
out.attribute(null, ATTR_VALUE,
|
||||
@@ -809,6 +816,9 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
} else if (TAG_DISABLE_CALLER_ID.equals(tag)) {
|
||||
disableCallerId = Boolean.parseBoolean(
|
||||
parser.getAttributeValue(null, ATTR_VALUE));
|
||||
} else if (TAG_DISABLE_CONTACTS_SEARCH.equals(tag)) {
|
||||
disableContactsSearch = Boolean.parseBoolean(
|
||||
parser.getAttributeValue(null, ATTR_VALUE));
|
||||
} else if (TAG_DISABLE_BLUETOOTH_CONTACT_SHARING.equals(tag)) {
|
||||
disableBluetoothContactSharing = Boolean.parseBoolean(parser
|
||||
.getAttributeValue(null, ATTR_VALUE));
|
||||
@@ -1034,6 +1044,8 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
pw.println(disableCamera);
|
||||
pw.print(prefix); pw.print("disableCallerId=");
|
||||
pw.println(disableCallerId);
|
||||
pw.print(prefix); pw.print("disableContactsSearch=");
|
||||
pw.println(disableContactsSearch);
|
||||
pw.print(prefix); pw.print("disableBluetoothContactSharing=");
|
||||
pw.println(disableBluetoothContactSharing);
|
||||
pw.print(prefix); pw.print("disableScreenCapture=");
|
||||
@@ -1808,7 +1820,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return null;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
Intent resolveIntent = new Intent();
|
||||
resolveIntent.setComponent(adminName);
|
||||
List<ResolveInfo> infos = mContext.getPackageManager().queryBroadcastReceiversAsUser(
|
||||
@@ -2411,7 +2423,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
Bundle onEnableData) {
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.MANAGE_DEVICE_ADMINS, null);
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
|
||||
DevicePolicyData policy = getUserData(userHandle);
|
||||
DeviceAdminInfo info = findAdmin(adminReceiver, userHandle,
|
||||
@@ -2457,7 +2469,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return false;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
synchronized (this) {
|
||||
return getActiveAdminUncheckedLocked(adminReceiver, userHandle) != null;
|
||||
}
|
||||
@@ -2468,7 +2480,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return false;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
synchronized (this) {
|
||||
DevicePolicyData policyData = getUserData(userHandle);
|
||||
return policyData.mRemovingAdmins.contains(adminReceiver);
|
||||
@@ -2480,7 +2492,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return false;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
synchronized (this) {
|
||||
ActiveAdmin administrator = getActiveAdminUncheckedLocked(adminReceiver, userHandle);
|
||||
if (administrator == null) {
|
||||
@@ -2497,7 +2509,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
return Collections.EMPTY_LIST;
|
||||
}
|
||||
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
synchronized (this) {
|
||||
DevicePolicyData policy = getUserData(userHandle);
|
||||
final int N = policy.mAdminList.size();
|
||||
@@ -2517,7 +2529,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return false;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
synchronized (this) {
|
||||
DevicePolicyData policy = getUserData(userHandle);
|
||||
final int N = policy.mAdminList.size();
|
||||
@@ -2535,7 +2547,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
synchronized (this) {
|
||||
ActiveAdmin admin = getActiveAdminUncheckedLocked(adminReceiver, userHandle);
|
||||
if (admin == null) {
|
||||
@@ -2594,7 +2606,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
synchronized (this) {
|
||||
int mode = DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
|
||||
|
||||
@@ -2664,7 +2676,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return 0;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
synchronized (this) {
|
||||
int length = 0;
|
||||
|
||||
@@ -2711,7 +2723,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return 0;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
synchronized (this) {
|
||||
int length = 0;
|
||||
|
||||
@@ -2771,7 +2783,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return 0L;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
synchronized (this) {
|
||||
long timeout = 0L;
|
||||
|
||||
@@ -2898,7 +2910,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return 0L;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
synchronized (this) {
|
||||
return getPasswordExpirationLocked(who, userHandle);
|
||||
}
|
||||
@@ -2926,7 +2938,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return 0;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
synchronized (this) {
|
||||
int length = 0;
|
||||
|
||||
@@ -2970,7 +2982,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return 0;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
synchronized (this) {
|
||||
int length = 0;
|
||||
|
||||
@@ -3017,7 +3029,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return 0;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
synchronized (this) {
|
||||
int length = 0;
|
||||
|
||||
@@ -3067,7 +3079,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return 0;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
synchronized (this) {
|
||||
int length = 0;
|
||||
|
||||
@@ -3117,7 +3129,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return 0;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
synchronized (this) {
|
||||
int length = 0;
|
||||
|
||||
@@ -3167,7 +3179,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return 0;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
synchronized (this) {
|
||||
int length = 0;
|
||||
|
||||
@@ -3200,7 +3212,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return true;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
|
||||
synchronized (this) {
|
||||
int id = getCredentialOwner(userHandle);
|
||||
@@ -3272,7 +3284,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return 0;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
synchronized (this) {
|
||||
ActiveAdmin admin = (who != null) ? getActiveAdminUncheckedLocked(who, userHandle)
|
||||
: getAdminWithMinimumFailedPasswordsForWipeLocked(userHandle);
|
||||
@@ -3285,7 +3297,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return UserHandle.USER_NULL;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
synchronized (this) {
|
||||
ActiveAdmin admin = getAdminWithMinimumFailedPasswordsForWipeLocked(userHandle);
|
||||
return admin != null ? admin.getUserHandle().getIdentifier() : UserHandle.USER_NULL;
|
||||
@@ -3584,7 +3596,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return 0;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
synchronized (this) {
|
||||
long time = 0;
|
||||
|
||||
@@ -3906,7 +3918,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
return;
|
||||
}
|
||||
final int userHandle = mInjector.userHandleGetCallingUserId();
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
synchronized (this) {
|
||||
// This API can only be called by an active device admin,
|
||||
// so try to retrieve it to check that the caller is one.
|
||||
@@ -3985,7 +3997,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.BIND_DEVICE_ADMIN, null);
|
||||
|
||||
@@ -4014,7 +4026,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
// Managed Profile password can only be changed when per user encryption is present.
|
||||
if (!LockPatternUtils.isSeparateWorkChallengeEnabled()) {
|
||||
enforceNotManagedProfile(userHandle, "set the active password");
|
||||
@@ -4083,7 +4095,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
|
||||
@Override
|
||||
public void reportFailedPasswordAttempt(int userHandle) {
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
enforceNotManagedProfile(userHandle, "report failed password attempt");
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.BIND_DEVICE_ADMIN, null);
|
||||
@@ -4125,7 +4137,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
|
||||
@Override
|
||||
public void reportSuccessfulPasswordAttempt(int userHandle) {
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.BIND_DEVICE_ADMIN, null);
|
||||
|
||||
@@ -4209,7 +4221,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return null;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
synchronized(this) {
|
||||
DevicePolicyData policy = getUserData(UserHandle.USER_SYSTEM);
|
||||
// Scan through active admins and find if anyone has already
|
||||
@@ -4346,7 +4358,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return false;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
synchronized (this) {
|
||||
// Check for permissions if a particular caller is specified
|
||||
if (who != null) {
|
||||
@@ -4376,7 +4388,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
// Ok to return current status.
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
return getEncryptionStatus();
|
||||
}
|
||||
|
||||
@@ -4624,7 +4636,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
if (!mHasFeature) {
|
||||
return 0;
|
||||
}
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
long ident = mInjector.binderClearCallingIdentity();
|
||||
try {
|
||||
synchronized (this) {
|
||||
@@ -5185,17 +5197,28 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
private void enforceCrossUserPermission(int userHandle) {
|
||||
private void enforceFullCrossUsersPermission(int userHandle) {
|
||||
enforceSystemUserOrPermission(userHandle,
|
||||
android.Manifest.permission.INTERACT_ACROSS_USERS_FULL);
|
||||
}
|
||||
|
||||
private void enforceCrossUsersPermission(int userHandle) {
|
||||
enforceSystemUserOrPermission(userHandle,
|
||||
android.Manifest.permission.INTERACT_ACROSS_USERS);
|
||||
}
|
||||
|
||||
private void enforceSystemUserOrPermission(int userHandle, String permission) {
|
||||
if (userHandle < 0) {
|
||||
throw new IllegalArgumentException("Invalid userId " + userHandle);
|
||||
}
|
||||
final int callingUid = mInjector.binderGetCallingUid();
|
||||
if (userHandle == UserHandle.getUserId(callingUid)) return;
|
||||
if (userHandle == UserHandle.getUserId(callingUid)) {
|
||||
return;
|
||||
}
|
||||
if (!(UserHandle.isSameApp(callingUid, Process.SYSTEM_UID)
|
||||
|| callingUid == Process.ROOT_UID)) {
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, "Must be system or have"
|
||||
+ " INTERACT_ACROSS_USERS_FULL permission");
|
||||
mContext.enforceCallingOrSelfPermission(permission,
|
||||
"Must be system or have " + permission + " permission");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5405,7 +5428,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
return null;
|
||||
}
|
||||
Preconditions.checkNotNull(agent, "agent null");
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
|
||||
synchronized (this) {
|
||||
final String componentName = agent.flattenToString();
|
||||
@@ -6068,7 +6091,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
@Override
|
||||
public Bundle getUserRestrictions(ComponentName who, int userHandle) {
|
||||
Preconditions.checkNotNull(who, "ComponentName is null");
|
||||
enforceCrossUserPermission(userHandle);
|
||||
enforceFullCrossUsersPermission(userHandle);
|
||||
synchronized (this) {
|
||||
ActiveAdmin activeAdmin = getActiveAdminUncheckedLocked(who, userHandle);
|
||||
if (activeAdmin == null) {
|
||||
@@ -6260,7 +6283,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
|
||||
@Override
|
||||
public String[] getAccountTypesWithManagementDisabledAsUser(int userId) {
|
||||
enforceCrossUserPermission(userId);
|
||||
enforceFullCrossUsersPermission(userId);
|
||||
if (!mHasFeature) {
|
||||
return null;
|
||||
}
|
||||
@@ -6332,7 +6355,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
|
||||
if (admin.disableCallerId != disabled) {
|
||||
admin.disableCallerId = disabled;
|
||||
saveSettingsLocked(UserHandle.getCallingUserId());
|
||||
saveSettingsLocked(mInjector.userHandleGetCallingUserId());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6352,14 +6375,51 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
|
||||
@Override
|
||||
public boolean getCrossProfileCallerIdDisabledForUser(int userId) {
|
||||
// TODO: Should there be a check to make sure this relationship is within a profile group?
|
||||
//enforceSystemProcess("getCrossProfileCallerIdDisabled can only be called by system");
|
||||
enforceCrossUsersPermission(userId);
|
||||
synchronized (this) {
|
||||
ActiveAdmin admin = getProfileOwnerAdminLocked(userId);
|
||||
return (admin != null) ? admin.disableCallerId : false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCrossProfileContactsSearchDisabled(ComponentName who, boolean disabled) {
|
||||
if (!mHasFeature) {
|
||||
return;
|
||||
}
|
||||
Preconditions.checkNotNull(who, "ComponentName is null");
|
||||
synchronized (this) {
|
||||
ActiveAdmin admin = getActiveAdminForCallerLocked(who,
|
||||
DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
|
||||
if (admin.disableContactsSearch != disabled) {
|
||||
admin.disableContactsSearch = disabled;
|
||||
saveSettingsLocked(mInjector.userHandleGetCallingUserId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getCrossProfileContactsSearchDisabled(ComponentName who) {
|
||||
if (!mHasFeature) {
|
||||
return false;
|
||||
}
|
||||
Preconditions.checkNotNull(who, "ComponentName is null");
|
||||
synchronized (this) {
|
||||
ActiveAdmin admin = getActiveAdminForCallerLocked(who,
|
||||
DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
|
||||
return admin.disableContactsSearch;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getCrossProfileContactsSearchDisabledForUser(int userId) {
|
||||
enforceCrossUsersPermission(userId);
|
||||
synchronized (this) {
|
||||
ActiveAdmin admin = getProfileOwnerAdminLocked(userId);
|
||||
return (admin != null) ? admin.disableContactsSearch : false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startManagedQuickContact(String actualLookupKey, long actualContactId,
|
||||
long actualDirectoryId, Intent originalIntent) {
|
||||
|
||||
Reference in New Issue
Block a user