Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e9362fa1 authored by Andy Stadler's avatar Andy Stadler Committed by Android (Google) Code Review
Browse files

Merge "API CHANGE - Add hasGrantedPolicy() API"

parents fe0b5a52 c25f70a4
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -36937,6 +36937,21 @@
<parameter name="admin" type="android.content.ComponentName">
</parameter>
</method>
<method name="hasGrantedPolicy"
 return="boolean"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="admin" type="android.content.ComponentName">
</parameter>
<parameter name="usesPolicy" type="int">
</parameter>
</method>
<method name="isActivePasswordSufficient"
 return="boolean"
 abstract="false"
+28 −7
Original line number Diff line number Diff line
@@ -43,17 +43,12 @@ import java.util.List;
 */
public class DevicePolicyManager {
    private static String TAG = "DevicePolicyManager";
    private static boolean DEBUG = false;
    private static boolean localLOGV = DEBUG || android.util.Config.LOGV;

    private final Context mContext;
    private final IDevicePolicyManager mService;

    private final Handler mHandler;

    private DevicePolicyManager(Context context, Handler handler) {
        mContext = context;
        mHandler = handler;
        mService = IDevicePolicyManager.Stub.asInterface(
                ServiceManager.getService(Context.DEVICE_POLICY_SERVICE));
    }
@@ -74,6 +69,11 @@ public class DevicePolicyManager {
     * <p>You can optionally include the {@link #EXTRA_ADD_EXPLANATION}
     * field to provide the user with additional explanation (in addition
     * to your component's description) about what is being added.
     *
     * <p>If your administrator is already active, this will ordinarily return immediately (without
     * user intervention).  However, if your administrator has been updated and is requesting
     * additional uses-policy flags, the user will be presented with the new list.  New policies
     * will not be available to the updated administrator until the user has accepted the new list.
     */
    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    public static final String ACTION_ADD_DEVICE_ADMIN
@@ -178,6 +178,26 @@ public class DevicePolicyManager {
        }
    }

    /**
     * Returns true if an administrator has been granted a particular device policy.  This can
     * be used to check if the administrator was activated under an earlier set of policies,
     * but requires additional policies after an upgrade.
     *
     * @param admin Which {@link DeviceAdminReceiver} this request is associated with.  Must be
     * an active administrator, or an exception will be thrown.
     * @param usesPolicy Which uses-policy to check, as defined in {@link DeviceAdminInfo}.
     */
    public boolean hasGrantedPolicy(ComponentName admin, int usesPolicy) {
        if (mService != null) {
            try {
                return mService.hasGrantedPolicy(admin, usesPolicy);
            } catch (RemoteException e) {
                Log.w(TAG, "Failed talking with device policy service", e);
            }
        }
        return false;
    }

    /**
     * Constant for {@link #setPasswordQuality}: the policy has no requirements
     * for the password.  Note that quality constants are ordered so that higher
@@ -1075,10 +1095,10 @@ public class DevicePolicyManager {
    /**
     * @hide
     */
    public void setActiveAdmin(ComponentName policyReceiver) {
    public void setActiveAdmin(ComponentName policyReceiver, boolean refreshing) {
        if (mService != null) {
            try {
                mService.setActiveAdmin(policyReceiver);
                mService.setActiveAdmin(policyReceiver, refreshing);
            } catch (RemoteException e) {
                Log.w(TAG, "Failed talking with device policy service", e);
            }
@@ -1086,6 +1106,7 @@ public class DevicePolicyManager {
    }

    /**
     * Returns the DeviceAdminInfo as defined by the administrator's package info & meta-data
     * @hide
     */
    public DeviceAdminInfo getAdminInfo(ComponentName cn) {
+2 −1
Original line number Diff line number Diff line
@@ -75,12 +75,13 @@ interface IDevicePolicyManager {
    ComponentName setGlobalProxy(in ComponentName admin, String proxySpec, String exclusionList);
    ComponentName getGlobalProxyAdmin();
    
    void setActiveAdmin(in ComponentName policyReceiver);
    void setActiveAdmin(in ComponentName policyReceiver, boolean refreshing);
    boolean isAdminActive(in ComponentName policyReceiver);
    List<ComponentName> getActiveAdmins();
    boolean packageHasActiveAdmins(String packageName);
    void getRemoveWarning(in ComponentName policyReceiver, in RemoteCallback result);
    void removeActiveAdmin(in ComponentName policyReceiver);
    boolean hasGrantedPolicy(in ComponentName policyReceiver, int usesPolicy);
    
    void setActivePasswordState(int quality, int length, int letters, int uppercase, int lowercase,
        int numbers, int symbols, int nonletter);
+35 −7
Original line number Diff line number Diff line
@@ -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();