summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Mortimer <sam@mortimer.me.uk>2020-05-26 20:53:59 -0700
committerdoc HD <doc.divxm@gmail.com>2020-12-07 13:39:46 +0300
commitedddea0316efb627034888bf699e0be1b2f86f18 (patch)
tree0cd9865f34f104d006906fb394ed81a90a5b0a70
parent3303de917e7f6acb50be1f28522f8c1b0be9bc46 (diff)
Settings: Add support for per app network isolationr11.0
Change-Id: I0aaf5703d6dd5d6e6ec3cda3940f28833fe052ea
-rw-r--r--res/values/aicp_strings.xml2
-rw-r--r--res/xml/app_data_usage.xml5
-rw-r--r--src/com/android/settings/datausage/AppDataUsage.java66
3 files changed, 62 insertions, 11 deletions
diff --git a/res/values/aicp_strings.xml b/res/values/aicp_strings.xml
index fa67868470d..fcf3e171eba 100644
--- a/res/values/aicp_strings.xml
+++ b/res/values/aicp_strings.xml
@@ -161,6 +161,8 @@
<string name="value_equals_default">def</string>
<!-- Per-app data restrictions -->
+ <string name="data_usage_app_restrict_all">Allow network access</string>
+ <string name="data_usage_app_restrict_all_summary">Enable network usage</string>
<string name="data_usage_app_restrict_mobile">Mobile data</string>
<string name="data_usage_app_restrict_mobile_summary">Enable usage of mobile data</string>
<string name="data_usage_app_restrict_vpn">VPN data</string>
diff --git a/res/xml/app_data_usage.xml b/res/xml/app_data_usage.xml
index a4089d0b2f3..a864b88ee23 100644
--- a/res/xml/app_data_usage.xml
+++ b/res/xml/app_data_usage.xml
@@ -56,6 +56,11 @@
android:title="@string/data_usage_app_settings" />
<com.android.settingslib.RestrictedSwitchPreference
+ android:key="restrict_all"
+ android:title="@string/data_usage_app_restrict_all"
+ android:summary="@string/data_usage_app_restrict_all_summary" />
+
+ <com.android.settingslib.RestrictedSwitchPreference
android:key="restrict_wifi"
android:title="@string/data_usage_app_restrict_wifi"
android:summary="@string/data_usage_app_restrict_wifi_summary" />
diff --git a/src/com/android/settings/datausage/AppDataUsage.java b/src/com/android/settings/datausage/AppDataUsage.java
index 660ec2d22a1..5fe8a1676f5 100644
--- a/src/com/android/settings/datausage/AppDataUsage.java
+++ b/src/com/android/settings/datausage/AppDataUsage.java
@@ -14,6 +14,7 @@
package com.android.settings.datausage;
+import static android.net.NetworkPolicyManager.POLICY_REJECT_ALL;
import static android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND;
import static android.net.NetworkPolicyManager.POLICY_REJECT_CELLULAR;
import static android.net.NetworkPolicyManager.POLICY_REJECT_VPN;
@@ -73,6 +74,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
private static final String KEY_FOREGROUND_USAGE = "foreground_usage";
private static final String KEY_BACKGROUND_USAGE = "background_usage";
private static final String KEY_APP_SETTINGS = "app_settings";
+ private static final String KEY_RESTRICT_ALL = "restrict_all";
private static final String KEY_RESTRICT_BACKGROUND = "restrict_background";
private static final String KEY_RESTRICT_CELLULAR = "restrict_cellular";
private static final String KEY_RESTRICT_VPN = "restrict_vpn";
@@ -90,6 +92,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
private Preference mForegroundUsage;
private Preference mBackgroundUsage;
private Preference mAppSettings;
+ private RestrictedSwitchPreference mRestrictAll;
private RestrictedSwitchPreference mRestrictBackground;
private RestrictedSwitchPreference mRestrictCellular;
private RestrictedSwitchPreference mRestrictVpn;
@@ -165,6 +168,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
mIcon = uidDetail.icon;
mLabel = uidDetail.label;
removePreference(KEY_UNRESTRICTED_DATA);
+ removePreference(KEY_RESTRICT_ALL);
removePreference(KEY_RESTRICT_BACKGROUND);
removePreference(KEY_RESTRICT_CELLULAR);
removePreference(KEY_RESTRICT_VPN);
@@ -180,6 +184,8 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
} catch (PackageManager.NameNotFoundException e) {
}
}
+ mRestrictAll = findPreference(KEY_RESTRICT_ALL);
+ mRestrictAll.setOnPreferenceChangeListener(this);
mRestrictBackground = findPreference(KEY_RESTRICT_BACKGROUND);
mRestrictBackground.setOnPreferenceChangeListener(this);
mRestrictCellular = findPreference(KEY_RESTRICT_CELLULAR);
@@ -227,6 +233,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
removePreference(KEY_UNRESTRICTED_DATA);
removePreference(KEY_APP_SETTINGS);
+ removePreference(KEY_RESTRICT_ALL);
removePreference(KEY_RESTRICT_BACKGROUND);
removePreference(KEY_RESTRICT_CELLULAR);
removePreference(KEY_RESTRICT_VPN);
@@ -260,6 +267,10 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
mDataSaverBackend.setIsBlacklisted(mAppItem.key, mPackageName, !(Boolean) newValue);
updatePrefs();
return true;
+ } else if (preference == mRestrictAll) {
+ setAppRestrictAll(!(Boolean) newValue);
+ updatePrefs();
+ return true;
} else if (preference == mRestrictCellular) {
setAppRestrictCellular(!(Boolean) newValue);
updatePrefs();
@@ -303,7 +314,8 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
@VisibleForTesting
void updatePrefs() {
updatePrefs(getAppRestrictBackground(), getUnrestrictData(),
- getAppRestrictCellular(), getAppRestrictVpn(), getAppRestrictWifi());
+ getAppRestrictCellular(), getAppRestrictVpn(), getAppRestrictWifi(),
+ getAppRestrictAll());
}
@VisibleForTesting
@@ -312,37 +324,59 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
}
private void updatePrefs(boolean restrictBackground, boolean unrestrictData,
- boolean restrictCellular, boolean restrictVpn, boolean restrictWifi) {
+ boolean restrictCellular, boolean restrictVpn, boolean restrictWifi,
+ boolean restrictAll) {
final EnforcedAdmin admin = RestrictedLockUtilsInternal.checkIfMeteredDataRestricted(
mContext, mPackageName, UserHandle.getUserId(mAppItem.key));
if (mRestrictBackground != null) {
- if (restrictCellular) {
+ if (restrictCellular || restrictAll) {
mRestrictBackground.setEnabled(false);
mRestrictBackground.setChecked(false);
} else {
mRestrictBackground.setEnabled(true);
mRestrictBackground.setChecked(!restrictBackground);
+ mRestrictBackground.setDisabledByAdmin(admin);
}
- mRestrictBackground.setDisabledByAdmin(admin);
+ }
+ if (mRestrictAll != null) {
+ mRestrictAll.setChecked(!restrictAll);
}
if (mRestrictCellular != null) {
- mRestrictCellular.setChecked(!restrictCellular);
+ if (restrictAll) {
+ mRestrictCellular.setEnabled(false);
+ mRestrictCellular.setChecked(false);
+ } else {
+ mRestrictCellular.setEnabled(true);
+ mRestrictCellular.setChecked(!restrictCellular);
+ }
}
if (mRestrictVpn != null) {
- mRestrictVpn.setChecked(!restrictVpn);
+ if (restrictAll) {
+ mRestrictVpn.setEnabled(false);
+ mRestrictVpn.setChecked(false);
+ } else {
+ mRestrictVpn.setEnabled(true);
+ mRestrictVpn.setChecked(!restrictVpn);
+ }
}
if (mRestrictWifi != null) {
- mRestrictWifi.setChecked(!restrictWifi);
+ if (restrictAll) {
+ mRestrictWifi.setEnabled(false);
+ mRestrictWifi.setChecked(false);
+ } else {
+ mRestrictWifi.setEnabled(true);
+ mRestrictWifi.setChecked(!restrictWifi);
+ }
}
if (mUnrestrictedData != null) {
- if (restrictCellular || restrictBackground) {
+ if (restrictCellular || restrictBackground || restrictAll) {
mUnrestrictedData.setEnabled(false);
mUnrestrictedData.setChecked(false);
} else {
mUnrestrictedData.setEnabled(true);
mUnrestrictedData.setChecked(unrestrictData);
+ mUnrestrictedData.setDisabledByAdmin(admin);
}
- mUnrestrictedData.setDisabledByAdmin(admin);
}
}
@@ -378,6 +412,10 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
return getAppRestriction(POLICY_REJECT_METERED_BACKGROUND);
}
+ private boolean getAppRestrictAll() {
+ return getAppRestriction(POLICY_REJECT_ALL);
+ }
+
private boolean getAppRestrictCellular() {
return getAppRestriction(POLICY_REJECT_CELLULAR);
}
@@ -403,6 +441,10 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
return (uidPolicy & policy) != 0;
}
+ private void setAppRestrictAll(boolean restrict) {
+ setAppRestriction(POLICY_REJECT_ALL, restrict);
+ }
+
private void setAppRestrictCellular(boolean restrict) {
setAppRestriction(POLICY_REJECT_CELLULAR, restrict);
}
@@ -556,7 +598,8 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
public void onWhitelistStatusChanged(int uid, boolean isWhitelisted) {
if (mAppItem.uids.get(uid, false)) {
updatePrefs(getAppRestrictBackground(), isWhitelisted,
- getAppRestrictCellular(), getAppRestrictVpn(), getAppRestrictWifi());
+ getAppRestrictCellular(), getAppRestrictVpn(), getAppRestrictWifi(),
+ getAppRestrictAll());
}
}
@@ -564,7 +607,8 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
public void onBlacklistStatusChanged(int uid, boolean isBlacklisted) {
if (mAppItem.uids.get(uid, false)) {
updatePrefs(isBlacklisted, getUnrestrictData(),
- getAppRestrictCellular(), getAppRestrictVpn(), getAppRestrictWifi());
+ getAppRestrictCellular(), getAppRestrictVpn(), getAppRestrictWifi(),
+ getAppRestrictAll());
}
}
}