am 084110bd: Merge "Allow DO/PO to go back to normal permission state." into mnc-dev

* commit '084110bd394b72b42451a266f7e4c5b1348b86de':
  Allow DO/PO to go back to normal permission state.
This commit is contained in:
Svet Ganov
2015-05-20 20:19:13 +00:00
committed by Android Git Automerger
5 changed files with 69 additions and 27 deletions

View File

@@ -5773,7 +5773,7 @@ package android.app.admin {
method public void setPasswordMinimumSymbols(android.content.ComponentName, int); method public void setPasswordMinimumSymbols(android.content.ComponentName, int);
method public void setPasswordMinimumUpperCase(android.content.ComponentName, int); method public void setPasswordMinimumUpperCase(android.content.ComponentName, int);
method public void setPasswordQuality(android.content.ComponentName, int); method public void setPasswordQuality(android.content.ComponentName, int);
method public boolean setPermissionGranted(android.content.ComponentName, java.lang.String, java.lang.String, boolean); method public boolean setPermissionGrantState(android.content.ComponentName, java.lang.String, java.lang.String, int);
method public void setPermissionPolicy(android.content.ComponentName, int); method public void setPermissionPolicy(android.content.ComponentName, int);
method public boolean setPermittedAccessibilityServices(android.content.ComponentName, java.util.List<java.lang.String>); method public boolean setPermittedAccessibilityServices(android.content.ComponentName, java.util.List<java.lang.String>);
method public boolean setPermittedInputMethods(android.content.ComponentName, java.util.List<java.lang.String>); method public boolean setPermittedInputMethods(android.content.ComponentName, java.util.List<java.lang.String>);
@@ -5862,6 +5862,9 @@ package android.app.admin {
field public static final int PASSWORD_QUALITY_NUMERIC_COMPLEX = 196608; // 0x30000 field public static final int PASSWORD_QUALITY_NUMERIC_COMPLEX = 196608; // 0x30000
field public static final int PASSWORD_QUALITY_SOMETHING = 65536; // 0x10000 field public static final int PASSWORD_QUALITY_SOMETHING = 65536; // 0x10000
field public static final int PASSWORD_QUALITY_UNSPECIFIED = 0; // 0x0 field public static final int PASSWORD_QUALITY_UNSPECIFIED = 0; // 0x0
field public static final int PERMISSION_GRANT_STATE_DEFAULT = 0; // 0x0
field public static final int PERMISSION_GRANT_STATE_DENIED = 2; // 0x2
field public static final int PERMISSION_GRANT_STATE_GRANTED = 1; // 0x1
field public static final int PERMISSION_POLICY_AUTO_DENY = 2; // 0x2 field public static final int PERMISSION_POLICY_AUTO_DENY = 2; // 0x2
field public static final int PERMISSION_POLICY_AUTO_GRANT = 1; // 0x1 field public static final int PERMISSION_POLICY_AUTO_GRANT = 1; // 0x1
field public static final int PERMISSION_POLICY_PROMPT = 0; // 0x0 field public static final int PERMISSION_POLICY_PROMPT = 0; // 0x0

View File

@@ -5882,7 +5882,7 @@ package android.app.admin {
method public void setPasswordMinimumSymbols(android.content.ComponentName, int); method public void setPasswordMinimumSymbols(android.content.ComponentName, int);
method public void setPasswordMinimumUpperCase(android.content.ComponentName, int); method public void setPasswordMinimumUpperCase(android.content.ComponentName, int);
method public void setPasswordQuality(android.content.ComponentName, int); method public void setPasswordQuality(android.content.ComponentName, int);
method public boolean setPermissionGranted(android.content.ComponentName, java.lang.String, java.lang.String, boolean); method public boolean setPermissionGrantState(android.content.ComponentName, java.lang.String, java.lang.String, int);
method public void setPermissionPolicy(android.content.ComponentName, int); method public void setPermissionPolicy(android.content.ComponentName, int);
method public boolean setPermittedAccessibilityServices(android.content.ComponentName, java.util.List<java.lang.String>); method public boolean setPermittedAccessibilityServices(android.content.ComponentName, java.util.List<java.lang.String>);
method public boolean setPermittedInputMethods(android.content.ComponentName, java.util.List<java.lang.String>); method public boolean setPermittedInputMethods(android.content.ComponentName, java.util.List<java.lang.String>);
@@ -5976,6 +5976,9 @@ package android.app.admin {
field public static final int PASSWORD_QUALITY_NUMERIC_COMPLEX = 196608; // 0x30000 field public static final int PASSWORD_QUALITY_NUMERIC_COMPLEX = 196608; // 0x30000
field public static final int PASSWORD_QUALITY_SOMETHING = 65536; // 0x10000 field public static final int PASSWORD_QUALITY_SOMETHING = 65536; // 0x10000
field public static final int PASSWORD_QUALITY_UNSPECIFIED = 0; // 0x0 field public static final int PASSWORD_QUALITY_UNSPECIFIED = 0; // 0x0
field public static final int PERMISSION_GRANT_STATE_DEFAULT = 0; // 0x0
field public static final int PERMISSION_GRANT_STATE_DENIED = 2; // 0x2
field public static final int PERMISSION_GRANT_STATE_GRANTED = 1; // 0x1
field public static final int PERMISSION_POLICY_AUTO_DENY = 2; // 0x2 field public static final int PERMISSION_POLICY_AUTO_DENY = 2; // 0x2
field public static final int PERMISSION_POLICY_AUTO_GRANT = 1; // 0x1 field public static final int PERMISSION_POLICY_AUTO_GRANT = 1; // 0x1
field public static final int PERMISSION_POLICY_PROMPT = 0; // 0x0 field public static final int PERMISSION_POLICY_PROMPT = 0; // 0x0

View File

@@ -825,6 +825,23 @@ public class DevicePolicyManager {
*/ */
public static final int PERMISSION_POLICY_AUTO_DENY = 2; public static final int PERMISSION_POLICY_AUTO_DENY = 2;
/**
* Runtime permission state: The user can manage the permission
* through the UI.
*/
public static final int PERMISSION_GRANT_STATE_DEFAULT = 0;
/**
* Runtime permission state: The permission is granted to the app
* and the user cannot manage the permission through the UI.
*/
public static final int PERMISSION_GRANT_STATE_GRANTED = 1;
/**
* Runtime permission state: The permission is denied to the app
* and the user cannot manage the permission through the UI.
*/
public static final int PERMISSION_GRANT_STATE_DENIED = 2;
/** /**
* Return true if the given administrator component is currently * Return true if the given administrator component is currently
@@ -4401,21 +4418,31 @@ public class DevicePolicyManager {
} }
/** /**
* Grants or revokes a runtime permission to a specific application so that the user * Sets the grant state of a runtime permission for a specific application. The state
* does not have to be prompted. This might affect all permissions in a group that the * can be {@link #PERMISSION_GRANT_STATE_DEFAULT default} in which a user can manage it
* runtime permission belongs to. This method can only be called by a profile or device * through the UI, {@link #PERMISSION_GRANT_STATE_DENIED denied}, in which the permission
* owner. * is denied and the user cannot manage it through the UI, and {@link
* #PERMISSION_GRANT_STATE_GRANTED granted} in which the permission is granted and the
* user cannot manage it through the UI. This might affect all permissions in a
* group that the runtime permission belongs to. This method can only be called
* by a profile or device owner.
*
* @param admin Which profile or device owner this request is associated with. * @param admin Which profile or device owner this request is associated with.
* @param packageName The application to grant or revoke a permission to. * @param packageName The application to grant or revoke a permission to.
* @param permission The permission to grant or revoke. * @param permission The permission to grant or revoke.
* @param granted Whether or not to grant the permission. If false, all permissions in the * @param grantState The permission grant state which is one of {@link
* associated permission group will be denied. * #PERMISSION_GRANT_STATE_DENIED}, {@link #PERMISSION_GRANT_STATE_DEFAULT},
* @return whether the permission was successfully granted or revoked * {@link #PERMISSION_GRANT_STATE_GRANTED},
* @return whether the permission was successfully granted or revoked.
*
* @see #PERMISSION_GRANT_STATE_DENIED
* @see #PERMISSION_GRANT_STATE_DEFAULT
* @see #PERMISSION_GRANT_STATE_GRANTED
*/ */
public boolean setPermissionGranted(ComponentName admin, String packageName, public boolean setPermissionGrantState(ComponentName admin, String packageName,
String permission, boolean granted) { String permission, int grantState) {
try { try {
return mService.setPermissionGranted(admin, packageName, permission, granted); return mService.setPermissionGrantState(admin, packageName, permission, grantState);
} catch (RemoteException re) { } catch (RemoteException re) {
Log.w(TAG, "Failed talking with device policy service", re); Log.w(TAG, "Failed talking with device policy service", re);
return false; return false;

View File

@@ -234,6 +234,6 @@ interface IDevicePolicyManager {
void setPermissionPolicy(in ComponentName admin, int policy); void setPermissionPolicy(in ComponentName admin, int policy);
int getPermissionPolicy(in ComponentName admin); int getPermissionPolicy(in ComponentName admin);
boolean setPermissionGranted(in ComponentName admin, String packageName, String permission, boolean setPermissionGrantState(in ComponentName admin, String packageName,
boolean granted); String permission, int grantState);
} }

View File

@@ -6392,25 +6392,34 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
} }
@Override @Override
public boolean setPermissionGranted(ComponentName admin, String packageName, public boolean setPermissionGrantState(ComponentName admin, String packageName,
String permission, boolean granted) throws RemoteException { String permission, int grantState) throws RemoteException {
UserHandle user = Binder.getCallingUserHandle(); UserHandle user = Binder.getCallingUserHandle();
synchronized (this) { synchronized (this) {
getActiveAdminForCallerLocked(admin, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER); getActiveAdminForCallerLocked(admin, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
long ident = Binder.clearCallingIdentity(); long ident = Binder.clearCallingIdentity();
try { try {
PackageManager packageManager = mContext.getPackageManager(); PackageManager packageManager = mContext.getPackageManager();
if (granted) { switch (grantState) {
packageManager.grantRuntimePermission(packageName, permission, user); case DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED: {
packageManager.updatePermissionFlags(permission, packageName, packageManager.grantRuntimePermission(packageName, permission, user);
PackageManager.FLAG_PERMISSION_POLICY_FIXED, packageManager.updatePermissionFlags(permission, packageName,
PackageManager.FLAG_PERMISSION_POLICY_FIXED, user); PackageManager.FLAG_PERMISSION_POLICY_FIXED,
} else { PackageManager.FLAG_PERMISSION_POLICY_FIXED, user);
packageManager.revokeRuntimePermission(packageName, } break;
permission, user);
packageManager.updatePermissionFlags(permission, packageName, case DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED: {
PackageManager.FLAG_PERMISSION_POLICY_FIXED, packageManager.revokeRuntimePermission(packageName,
PackageManager.FLAG_PERMISSION_POLICY_FIXED, user); permission, user);
packageManager.updatePermissionFlags(permission, packageName,
PackageManager.FLAG_PERMISSION_POLICY_FIXED,
PackageManager.FLAG_PERMISSION_POLICY_FIXED, user);
} break;
case DevicePolicyManager.PERMISSION_GRANT_STATE_DEFAULT: {
packageManager.updatePermissionFlags(permission, packageName,
PackageManager.FLAG_PERMISSION_POLICY_FIXED, 0, user);
} break;
} }
return true; return true;
} catch (SecurityException se) { } catch (SecurityException se) {