diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml
index ab2fa9d86e4..62668ef80fb 100644
--- a/res/values/cm_strings.xml
+++ b/res/values/cm_strings.xml
@@ -60,6 +60,10 @@
Navigation hint
Show navigation hint bar at the bottom of the screen
+
+ Allow network access
+ Enable network usage
+
Scramble layout
Scramble PIN layout when unlocking device
diff --git a/res/xml/app_data_usage.xml b/res/xml/app_data_usage.xml
index 3135f597368..013088ab822 100644
--- a/res/xml/app_data_usage.xml
+++ b/res/xml/app_data_usage.xml
@@ -42,6 +42,11 @@
android:title="@string/data_usage_app_settings"
settings:controller="com.android.settings.datausage.AppDataUsageAppSettingsController" />
+
+
mPackages = new ArraySet<>();
+ private RestrictedSwitchPreference mRestrictAll;
private RestrictedSwitchPreference mRestrictBackground;
private Drawable mIcon;
@@ -147,6 +151,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);
} else {
if (mPackages.size() != 0) {
@@ -161,6 +166,8 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
}
use(AppDataUsageAppSettingsController.class).init(mPackages, userId);
}
+ mRestrictAll = findPreference(KEY_RESTRICT_ALL);
+ mRestrictAll.setOnPreferenceChangeListener(this);
mRestrictBackground = findPreference(KEY_RESTRICT_BACKGROUND);
mRestrictBackground.setOnPreferenceChangeListener(this);
mUnrestrictedData = findPreference(KEY_UNRESTRICTED_DATA);
@@ -177,6 +184,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
mPackageName = context.getPackageName();
removePreference(KEY_UNRESTRICTED_DATA);
+ removePreference(KEY_RESTRICT_ALL);
removePreference(KEY_RESTRICT_BACKGROUND);
}
@@ -219,6 +227,17 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
mDataSaverBackend.setIsDenylisted(mAppItem.key, mPackageName, !(Boolean) newValue);
updatePrefs();
return true;
+ } else if (preference == mRestrictAll) {
+ Set uids =
+ ConnectivitySettingsManager.getUidsAllowedOnRestrictedNetworks(mContext);
+ if (!(Boolean) newValue) {
+ uids.remove(mAppItem.key);
+ } else {
+ uids.add(mAppItem.key);
+ }
+ ConnectivitySettingsManager.setUidsAllowedOnRestrictedNetworks(mContext, uids);
+ updatePrefs();
+ return true;
} else if (preference == mUnrestrictedData) {
mDataSaverBackend.setIsAllowlisted(mAppItem.key, mPackageName, (Boolean) newValue);
return true;
@@ -238,7 +257,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
@VisibleForTesting
void updatePrefs() {
- updatePrefs(getAppRestrictBackground(), getUnrestrictData());
+ updatePrefs(getAppRestrictBackground(), getUnrestrictData(), getAppRestrictAll());
}
@VisibleForTesting
@@ -279,7 +298,8 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
}
}
- private void updatePrefs(boolean restrictBackground, boolean unrestrictData) {
+ private void updatePrefs(boolean restrictBackground, boolean unrestrictData,
+ boolean restrictAll) {
if (!isSimHardwareVisible(mContext)) {
return;
}
@@ -287,18 +307,20 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
final EnforcedAdmin admin = RestrictedLockUtilsInternal
.checkIfMeteredDataUsageUserControlDisabled(mContext, mPackageName,
UserHandle.getUserId(mAppItem.key));
+ if (mRestrictAll != null) {
+ mRestrictAll.setChecked(!restrictAll);
+ }
if (mRestrictBackground != null) {
- mRestrictBackground.setChecked(!restrictBackground);
mRestrictBackground.setDisabledByAdmin(admin);
+ mRestrictBackground.setEnabled(!mRestrictBackground.isDisabledByAdmin() &&
+ !restrictAll);
+ mRestrictBackground.setChecked(!restrictBackground && !restrictAll);
}
if (mUnrestrictedData != null) {
- if (restrictBackground) {
- mUnrestrictedData.setVisible(false);
- } else {
- mUnrestrictedData.setVisible(true);
- mUnrestrictedData.setChecked(unrestrictData);
- mUnrestrictedData.setDisabledByAdmin(admin);
- }
+ mUnrestrictedData.setDisabledByAdmin(admin);
+ mUnrestrictedData.setEnabled(!mUnrestrictedData.isDisabledByAdmin() &&
+ !restrictBackground && !restrictAll);
+ mUnrestrictedData.setChecked(unrestrictData && !restrictBackground && !restrictAll);
}
}
@@ -316,6 +338,11 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
&& DynamicDenylistManager.getInstance(mContext).isInManualDenylist(uid);
}
+ private boolean getAppRestrictAll() {
+ return !ConnectivitySettingsManager.getUidsAllowedOnRestrictedNetworks(mContext)
+ .contains(mAppItem.key);
+ }
+
private boolean getUnrestrictData() {
if (mDataSaverBackend != null) {
return mDataSaverBackend.isAllowlisted(mAppItem.key);
@@ -365,14 +392,14 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
@Override
public void onAllowlistStatusChanged(int uid, boolean isAllowlisted) {
if (mAppItem.uids.get(uid, false)) {
- updatePrefs(getAppRestrictBackground(), isAllowlisted);
+ updatePrefs(getAppRestrictBackground(), isAllowlisted, getAppRestrictAll());
}
}
@Override
public void onDenylistStatusChanged(int uid, boolean isDenylisted) {
if (mAppItem.uids.get(uid, false)) {
- updatePrefs(isDenylisted, getUnrestrictData());
+ updatePrefs(isDenylisted, getUnrestrictData(), getAppRestrictAll());
}
}
}