diff options
| author | Sam Mortimer <sam@mortimer.me.uk> | 2020-05-26 20:53:59 -0700 |
|---|---|---|
| committer | doc HD <doc.divxm@gmail.com> | 2020-12-07 13:39:46 +0300 |
| commit | edddea0316efb627034888bf699e0be1b2f86f18 (patch) | |
| tree | 0cd9865f34f104d006906fb394ed81a90a5b0a70 | |
| parent | 3303de917e7f6acb50be1f28522f8c1b0be9bc46 (diff) | |
Settings: Add support for per app network isolationr11.0
Change-Id: I0aaf5703d6dd5d6e6ec3cda3940f28833fe052ea
| -rw-r--r-- | res/values/aicp_strings.xml | 2 | ||||
| -rw-r--r-- | res/xml/app_data_usage.xml | 5 | ||||
| -rw-r--r-- | src/com/android/settings/datausage/AppDataUsage.java | 66 |
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()); } } } |
