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

Commit 28db63f7 authored by /e/ robot's avatar /e/ robot
Browse files

Merge remote-tracking branch 'origin/lineage-21.0' into v1-u

parents caee1e63 99c7e917
Loading
Loading
Loading
Loading
+32 −13
Original line number Original line Diff line number Diff line
@@ -30,7 +30,6 @@ import com.android.settingslib.utils.ThreadUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.NotNull;


import java.util.ArrayList;
import java.util.ArrayList;
import java.util.Arrays;


public class DataSaverBackend {
public class DataSaverBackend {


@@ -124,32 +123,52 @@ public class DataSaverBackend {
    }
    }


    private void loadUidPolicies(int policy) {
    private void loadUidPolicies(int policy) {
        final int[] uidsWithPolicy = mPolicyManager.getUidsWithPolicy(policy);
        final int[] uidsWithPolicyArray = mPolicyManager.getUidsWithPolicy(policy);
        for (int uid : uidsWithPolicy) {
        final ArrayList<Integer> uidsWithPolicy = new ArrayList<>(uidsWithPolicyArray.length);
            setCachedUidPolicyFlag(uid, policy, true);
        for (final int uid : uidsWithPolicyArray) {
            uidsWithPolicy.add(uid);
        }
        }
        // Update existing cached UID policies.
        for (int i = 0; i < mUidPolicies.size(); i++) {
        for (int i = 0; i < mUidPolicies.size(); i++) {
            final int uid = mUidPolicies.keyAt(i);
            final Integer cachedEntryUid = mUidPolicies.keyAt(i);
            if (!Arrays.asList(uidsWithPolicy).contains(uid)) {
            if (uidsWithPolicy.remove(cachedEntryUid)) {
                setCachedUidPolicyFlag(uid, policy, false);
                // UID had the policy. It was removed so we don't have to process it twice.
                setCachedUidPolicyFlagAt(i, policy, true);
            } else {
                // UID does not have the policy.
                setCachedUidPolicyFlagAt(i, policy, false);
            }
        }
        }
        // Add policies for remaining UIDs, which did not have cached policies, so we're it.
        for (final int uid : uidsWithPolicy) {
            mUidPolicies.put(uid, policy);
        }
        }
    }
    }


    private int setCachedUidPolicyFlag(int uid, int policy, boolean add) {
    private void setCachedUidPolicyFlag(int uid, int policy, boolean add) {
        final int currentPolicy = mUidPolicies.get(uid, POLICY_NONE);
        final int index = mUidPolicies.indexOfKey(uid);
        if (index < 0) {
            if (add) {
                mUidPolicies.put(uid, policy);
            }
            return;
        }
        setCachedUidPolicyFlagAt(index, policy, add);
    }

    private void setCachedUidPolicyFlagAt(int index, int policy, boolean add) {
        final int currentPolicy = mUidPolicies.valueAt(index);
        final int newPolicy = add ? (currentPolicy | policy) : (currentPolicy & ~policy);
        final int newPolicy = add ? (currentPolicy | policy) : (currentPolicy & ~policy);
        mUidPolicies.put(uid, newPolicy);
        mUidPolicies.setValueAt(index, newPolicy);
        return newPolicy;
    }
    }


    private int setUidPolicyFlag(int uid, int policy, boolean add) {
    private void setUidPolicyFlag(int uid, int policy, boolean add) {
        if (add) {
        if (add) {
            mPolicyManager.addUidPolicy(uid, policy);
            mPolicyManager.addUidPolicy(uid, policy);
        } else {
        } else {
            mPolicyManager.removeUidPolicy(uid, policy);
            mPolicyManager.removeUidPolicy(uid, policy);
        }
        }
        return setCachedUidPolicyFlag(uid, policy, add);
        setCachedUidPolicyFlag(uid, policy, add);
    }
    }


    private boolean isUidPolicyFlagSet(int uid, int policy) {
    private boolean isUidPolicyFlagSet(int uid, int policy) {