diff --git a/res/values/strings.xml b/res/values/strings.xml
index fae54aeb32e..d3597cc3cb0 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -3629,8 +3629,8 @@
Show Wi-Fi usage
Show Ethernet usage
-
- Expensive networks
+
+ Metered networks
Change cycle\u2026
@@ -3684,13 +3684,13 @@
Restrict background data
- Disable background data on mobile data network only. Wi-Fi will be used if available.
+ Disable background data on metered networks. Unmetered networks will be used if available.
To restrict background data for this app, first set a mobile data limit.
Restrict background data?
- This feature may cause an app that depends on background data to stop working when Wi-Fi isn\'t available.\n\nYou can find more appropriate data usage controls in the settings available within the app.
+ This feature may cause an app that depends on background data to stop working when only metered networks are available.\n\nYou can find more appropriate data usage controls in the settings available within the app.
Restricting background data is possible only when you\'ve set a mobile data limit.
@@ -3735,10 +3735,10 @@
%2$s: about %1$s used, as measured by your phone. Your carrier\'s data usage accounting may differ.
-
- Expensive networks
+
+ Metered networks
- Select the networks for which data usage is expensive. Apps can be restricted from using these networks when in the background. Apps may also warn before using these networks for large downloads.
+ Select the networks for which data usage is metered. Apps can be restricted from using these networks when in the background. Apps may also warn before using these networks for large downloads.
Mobile networks
diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java
index ae9c1cba5ff..0d003b33645 100644
--- a/src/com/android/settings/DataUsageSummary.java
+++ b/src/com/android/settings/DataUsageSummary.java
@@ -784,7 +784,7 @@ public class DataUsageSummary extends Fragment {
} else {
mAppSettingsIntent = null;
- mAppSettings.setEnabled(false);
+ mAppSettings.setVisibility(View.GONE);
}
updateDetailData();
@@ -1601,19 +1601,21 @@ public class DataUsageSummary extends Fragment {
final Resources res = parent.getResources();
final CharSequence message;
+ final long minLimitBytes = (long) (
+ parent.mPolicyEditor.getPolicy(parent.mTemplate).warningBytes * 1.2f);
final long limitBytes;
// TODO: customize default limits based on network template
final String currentTab = parent.mCurrentTab;
if (TAB_3G.equals(currentTab)) {
message = res.getString(R.string.data_usage_limit_dialog_mobile);
- limitBytes = 5 * GB_IN_BYTES;
+ limitBytes = Math.max(5 * GB_IN_BYTES, minLimitBytes);
} else if (TAB_4G.equals(currentTab)) {
message = res.getString(R.string.data_usage_limit_dialog_mobile);
- limitBytes = 5 * GB_IN_BYTES;
+ limitBytes = Math.max(5 * GB_IN_BYTES, minLimitBytes);
} else if (TAB_MOBILE.equals(currentTab)) {
message = res.getString(R.string.data_usage_limit_dialog_mobile);
- limitBytes = 5 * GB_IN_BYTES;
+ limitBytes = Math.max(5 * GB_IN_BYTES, minLimitBytes);
} else {
throw new IllegalArgumentException("unknown current tab: " + currentTab);
}
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 1922100431a..88fac0a2af6 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -31,6 +31,9 @@ import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
+import android.os.INetworkManagementService;
+import android.os.RemoteException;
+import android.os.ServiceManager;
import android.os.UserId;
import android.preference.Preference;
import android.preference.PreferenceActivity;
@@ -359,6 +362,17 @@ public class Settings extends PreferenceActivity implements ButtonBarHandler {
if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)) {
target.remove(header);
}
+ } else if (id == R.id.data_usage_settings) {
+ // Remove data usage when kernel module not enabled
+ final INetworkManagementService netManager = INetworkManagementService.Stub
+ .asInterface(ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE));
+ try {
+ if (!netManager.isBandwidthControlEnabled()) {
+ target.remove(header);
+ }
+ } catch (RemoteException e) {
+ // ignored
+ }
} else if (id == R.id.user_settings) {
if (!mEnableUserManagement
|| !UserId.MU_ENABLED || UserId.myUserId() != 0
diff --git a/src/com/android/settings/net/DataUsageMeteredSettings.java b/src/com/android/settings/net/DataUsageMeteredSettings.java
index 4967611a3f1..fea8a12a68b 100644
--- a/src/com/android/settings/net/DataUsageMeteredSettings.java
+++ b/src/com/android/settings/net/DataUsageMeteredSettings.java
@@ -16,6 +16,7 @@
package com.android.settings.net;
+import static android.net.NetworkPolicy.LIMIT_DISABLED;
import static android.net.wifi.WifiInfo.removeDoubleQuotes;
import static com.android.settings.DataUsageSummary.hasReadyMobileRadio;
import static com.android.settings.DataUsageSummary.hasWifiRadio;
@@ -106,19 +107,35 @@ public class DataUsageMeteredSettings extends SettingsPreferenceFragment {
private class MeteredPreference extends CheckBoxPreference {
private final NetworkTemplate mTemplate;
+ private boolean mBinding;
public MeteredPreference(Context context, NetworkTemplate template) {
super(context);
mTemplate = template;
setPersistent(false);
- setChecked(mPolicyEditor.getPolicyMetered(mTemplate));
+
+ mBinding = true;
+ final NetworkPolicy policy = mPolicyEditor.getPolicy(template);
+ if (policy != null) {
+ if (policy.limitBytes != LIMIT_DISABLED) {
+ setChecked(true);
+ setEnabled(false);
+ } else {
+ setChecked(policy.metered);
+ }
+ } else {
+ setChecked(false);
+ }
+ mBinding = false;
}
@Override
protected void notifyChanged() {
super.notifyChanged();
- mPolicyEditor.setPolicyMetered(mTemplate, isChecked());
+ if (!mBinding) {
+ mPolicyEditor.setPolicyMetered(mTemplate, isChecked());
+ }
}
}
}