Settings: Add support for allowing/disallowing apps on cellular, vpn and wifi networks

*) Add options to disable all cellular, vpn and wifi data
   in app data usage settings.

*) Disable the existing background data and unrestricted
   data usage options when all cellular data access is
   disabled.

*) The vpn data option can be selected independently from
   the Wi-Fi and cellular options.

*) Prevent DataSaverBackend from overwriting uid policies

This is a replacement for the appops menu based cell/wifi data
restriction settings in cm-13.0:
Author: Danesh M <daneshm90@gmail.com>
Date:   Mon Mar 7 15:17:59 2016 -0800
    Settings : Add per app internet/data control
    CYAN-3976
    CRACKLING-834
    Change-Id: I13192df837c057b5cadde8f31532e12daaf3c1b0

Change-Id: Ic087c27a5ed0bdb84bb8f297c425c6bcbffec848
(cherry picked from commit d4a2eea698cbc4636a635d60f2a52ec1bbc36ba2)
This commit is contained in:
Oliver Scott
2021-11-17 22:29:39 -05:00
committed by Michael Bestas
parent 0b57abfdec
commit 0017a2f638
4 changed files with 133 additions and 15 deletions

View File

@@ -86,12 +86,15 @@ public class DataSaverBackend {
public void setIsAllowlisted(int uid, String packageName, boolean allowlisted) {
final int policy = allowlisted ? POLICY_ALLOW_METERED_BACKGROUND : POLICY_NONE;
mDynamicDenylistManager.setUidPolicyLocked(uid, policy);
mUidPolicies.put(uid, policy);
if (allowlisted) {
mPolicyManager.addUidPolicy(uid, POLICY_ALLOW_METERED_BACKGROUND);
mMetricsFeatureProvider.action(
mContext, SettingsEnums.ACTION_DATA_SAVER_WHITELIST, packageName);
} else {
mPolicyManager.removeUidPolicy(uid, POLICY_ALLOW_METERED_BACKGROUND);
}
mPolicyManager.removeUidPolicy(uid, POLICY_REJECT_METERED_BACKGROUND);
}
public boolean isAllowlisted(int uid) {
@@ -116,12 +119,15 @@ public class DataSaverBackend {
public void setIsDenylisted(int uid, String packageName, boolean denylisted) {
final int policy = denylisted ? POLICY_REJECT_METERED_BACKGROUND : POLICY_NONE;
mDynamicDenylistManager.setUidPolicyLocked(uid, policy);
mUidPolicies.put(uid, policy);
if (denylisted) {
mPolicyManager.addUidPolicy(uid, POLICY_REJECT_METERED_BACKGROUND);
mMetricsFeatureProvider.action(
mContext, SettingsEnums.ACTION_DATA_SAVER_BLACKLIST, packageName);
} else {
mPolicyManager.removeUidPolicy(uid, POLICY_REJECT_METERED_BACKGROUND);
}
mPolicyManager.removeUidPolicy(uid, POLICY_ALLOW_METERED_BACKGROUND);
}
public boolean isDenylisted(int uid) {
@@ -162,6 +168,9 @@ public class DataSaverBackend {
loadAllowlist();
loadDenylist();
// We only care about allow/reject metered background policy here.
newPolicy &= POLICY_ALLOW_METERED_BACKGROUND | POLICY_REJECT_METERED_BACKGROUND;
final int oldPolicy = mUidPolicies.get(uid, POLICY_NONE);
if (newPolicy == POLICY_NONE) {
mUidPolicies.delete(uid);