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

Commit bae1a7a2 authored by Kholoud Mohamed's avatar Kholoud Mohamed
Browse files

Allow setting lock task features without setting packages

Fixes: 278121754
Test: MixedDeviceOwnerTest#testLockTaskAfterReboot
Change-Id: Ib2fe11f927d2085b8bc50f86ef0c3681b9472291
parent 29ddb4d3
Loading
Loading
Loading
Loading
+17 −6
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ public final class LockTaskPolicy extends PolicyValue<LockTaskPolicy> {
    /**
     * @hide
     */
    // We default on the power button menu, in order to be consistent with pre-P behaviour
    public static final int DEFAULT_LOCK_TASK_FLAG =
            DevicePolicyManager.LOCK_TASK_FEATURE_GLOBAL_ACTIONS;

@@ -72,18 +73,28 @@ public final class LockTaskPolicy extends PolicyValue<LockTaskPolicy> {
    /**
     * @hide
     */
    public LockTaskPolicy(@NonNull Set<String> packages) {
        Objects.requireNonNull(packages);
    public LockTaskPolicy(@Nullable Set<String> packages) {
        if (packages != null) {
            mPackages.addAll(packages);
        }
        setValue(this);
    }

    /**
     * @hide
     */
    public LockTaskPolicy(@NonNull Set<String> packages, int flags) {
        Objects.requireNonNull(packages);
        mPackages = new HashSet<>(packages);
    public LockTaskPolicy(int flags) {
        mFlags = flags;
        setValue(this);
    }

    /**
     * @hide
     */
    public LockTaskPolicy(@Nullable Set<String> packages, int flags) {
        if (packages != null) {
            mPackages.addAll(packages);
        }
        mFlags = flags;
        setValue(this);
    }
+31 −23
Original line number Diff line number Diff line
@@ -14744,12 +14744,6 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
            synchronized (getLockObject()) {
                enforcingAdmin = enforceCanCallLockTaskLocked(who, caller.getPackageName());
            }
            if (packages.length == 0) {
                mDevicePolicyEngine.removeLocalPolicy(
                        PolicyDefinition.LOCK_TASK,
                        enforcingAdmin,
                        caller.getUserId());
            } else {
            LockTaskPolicy currentPolicy = mDevicePolicyEngine.getLocalPolicySetByAdmin(
                    PolicyDefinition.LOCK_TASK,
                    enforcingAdmin,
@@ -14761,7 +14755,13 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
                policy = new LockTaskPolicy(currentPolicy);
                policy.setPackages(Set.of(packages));
            }
            if (policy.getPackages().isEmpty()
                    && policy.getFlags() == DevicePolicyManager.LOCK_TASK_FEATURE_NONE) {
                mDevicePolicyEngine.removeLocalPolicy(
                        PolicyDefinition.LOCK_TASK,
                        enforcingAdmin,
                        caller.getUserId());
            } else {
                mDevicePolicyEngine.setLocalPolicy(
                        PolicyDefinition.LOCK_TASK,
                        enforcingAdmin,
@@ -14876,18 +14876,26 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
                    PolicyDefinition.LOCK_TASK,
                    enforcingAdmin,
                    caller.getUserId());
            LockTaskPolicy policy;
            if (currentPolicy == null) {
                throw new IllegalArgumentException("Can't set a lock task flags without setting "
                        + "lock task packages first.");
            }
            LockTaskPolicy policy = new LockTaskPolicy(currentPolicy);
                policy = new LockTaskPolicy(flags);
            } else {
                policy = new LockTaskPolicy(currentPolicy);
                policy.setFlags(flags);
            }
            if (policy.getPackages().isEmpty()
                    && policy.getFlags() == DevicePolicyManager.LOCK_TASK_FEATURE_NONE) {
                mDevicePolicyEngine.removeLocalPolicy(
                        PolicyDefinition.LOCK_TASK,
                        enforcingAdmin,
                        caller.getUserId());
            } else {
                mDevicePolicyEngine.setLocalPolicy(
                        PolicyDefinition.LOCK_TASK,
                        enforcingAdmin,
                        policy,
                        caller.getUserId());
            }
        } else {
            Objects.requireNonNull(who, "ComponentName is null");
            synchronized (getLockObject()) {
+0 −4
Original line number Diff line number Diff line
@@ -42,10 +42,6 @@ final class LockTaskPolicySerializer extends PolicySerializer<LockTaskPolicy> {
    void saveToXml(PolicyKey policyKey, TypedXmlSerializer serializer,
            @NonNull LockTaskPolicy value) throws IOException {
        Objects.requireNonNull(value);
        if (value.getPackages() == null || value.getPackages().isEmpty()) {
            throw new IllegalArgumentException("Error saving LockTaskPolicy to file, lock task "
                    + "packages must be present");
        }
        serializer.attribute(
                /* namespace= */ null,
                ATTR_PACKAGES,