diff --git a/res/values/strings.xml b/res/values/strings.xml
index e2dd020e2a2..75fbf8716d8 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -8693,6 +8693,15 @@
App data usage cycle
+
+ ^1 data warning
+
+
+ ^1 data limit
+
+
+ ^1 data warning / ^2 data limit
+
Monthly on day %1$s
diff --git a/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java b/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java
index 281c8b6970c..6deced71e70 100644
--- a/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java
+++ b/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java
@@ -37,6 +37,7 @@ import android.util.RecurrenceRule;
import com.android.internal.util.CollectionUtils;
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
+import com.android.settings.core.FeatureFlags;
import com.android.settingslib.NetworkPolicyEditor;
import com.android.settingslib.net.DataUsageController;
@@ -164,12 +165,19 @@ public class DataUsageSummaryPreferenceController extends BasePreferenceControll
refreshDataplanInfo(info);
}
- if (mDataplanCount == 0 && (info.warningLevel > 0 || info.limitLevel > 0)) {
- final String warning = Formatter.formatFileSize(mContext, info.warningLevel);
- final String limit = Formatter.formatFileSize(mContext, info.limitLevel);
- summaryPreference.setLimitInfo(mContext.getString(info.limitLevel <= 0
- ? R.string.cell_warning_only
- : R.string.cell_warning_and_limit, warning, limit));
+ if (info.warningLevel > 0 && info.limitLevel > 0) {
+ summaryPreference.setLimitInfo(TextUtils.expandTemplate(
+ mContext.getText(R.string.cell_data_warning_and_limit),
+ Formatter.formatFileSize(mContext, info.warningLevel),
+ Formatter.formatFileSize(mContext, info.limitLevel)).toString());
+ } else if (info.warningLevel > 0) {
+ summaryPreference.setLimitInfo(TextUtils.expandTemplate(
+ mContext.getText(R.string.cell_data_warning),
+ Formatter.formatFileSize(mContext, info.warningLevel)).toString());
+ } else if (info.limitLevel > 0) {
+ summaryPreference.setLimitInfo(TextUtils.expandTemplate(
+ mContext.getText(R.string.cell_data_limit),
+ Formatter.formatFileSize(mContext, info.limitLevel)).toString());
} else {
summaryPreference.setLimitInfo(null);
}
@@ -188,6 +196,13 @@ public class DataUsageSummaryPreferenceController extends BasePreferenceControll
mDataplanCount, mManageSubscriptionIntent);
}
+ private String getLimitText(long limit, int textId) {
+ if (limit <= 0) {
+ return null;
+ }
+ return mContext.getString(textId, Formatter.formatFileSize(mContext, limit));
+ }
+
// TODO(b/70950124) add test for this method once the robolectric shadow run script is
// completed (b/3526807)
private void refreshDataplanInfo(DataUsageController.DataUsageInfo info) {
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceControllerTest.java
index eb94d8dd436..191425038f2 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceControllerTest.java
@@ -90,12 +90,12 @@ public class DataUsageSummaryPreferenceControllerTest {
final Intent intent = new Intent();
- when(mDataUsageController.getDataUsageInfo()).thenReturn(info);
+ when(mDataUsageController.getDataUsageInfo(any())).thenReturn(info);
mController.setPlanValues(1 /* dataPlanCount */, LIMIT1, USAGE1);
mController.setCarrierValues(CARRIER_NAME, now - UPDATE_BACKOFF_MS, info.cycleEnd, intent);
mController.updateState(mSummaryPreference);
- verify(mSummaryPreference).setLimitInfo(null);
+ verify(mSummaryPreference).setLimitInfo("500 MB data warning / 1.00 GB data limit");
verify(mSummaryPreference).setUsageInfo(info.cycleEnd, now - UPDATE_BACKOFF_MS,
CARRIER_NAME, 1 /* numPlans */, intent);
verify(mSummaryPreference).setChartEnabled(true);
@@ -113,7 +113,7 @@ public class DataUsageSummaryPreferenceControllerTest {
mController.setCarrierValues(CARRIER_NAME, now - UPDATE_BACKOFF_MS, info.cycleEnd, intent);
mController.updateState(mSummaryPreference);
- verify(mSummaryPreference).setLimitInfo("500 MB Data warning / 1.00 GB Data limit");
+ verify(mSummaryPreference).setLimitInfo("500 MB data warning / 1.00 GB data limit");
verify(mSummaryPreference).setUsageInfo(info.cycleEnd, now - UPDATE_BACKOFF_MS,
CARRIER_NAME, 0 /* numPlans */, intent);
verify(mSummaryPreference).setChartEnabled(true);
@@ -130,7 +130,7 @@ public class DataUsageSummaryPreferenceControllerTest {
info.cycleEnd, null /* intent */);
mController.updateState(mSummaryPreference);
- verify(mSummaryPreference).setLimitInfo("500 MB Data warning / 1.00 GB Data limit");
+ verify(mSummaryPreference).setLimitInfo("500 MB data warning / 1.00 GB data limit");
verify(mSummaryPreference).setUsageInfo(
info.cycleEnd,
-1L /* snapshotTime */,
@@ -152,7 +152,7 @@ public class DataUsageSummaryPreferenceControllerTest {
info.cycleEnd, null /* intent */);
mController.updateState(mSummaryPreference);
- verify(mSummaryPreference).setLimitInfo("500 MB Data warning / 1.00 GB Data limit");
+ verify(mSummaryPreference).setLimitInfo("500 MB data warning / 1.00 GB data limit");
verify(mSummaryPreference).setUsageInfo(
info.cycleEnd,
-1L /* snapshotTime */,
@@ -162,6 +162,74 @@ public class DataUsageSummaryPreferenceControllerTest {
verify(mSummaryPreference).setChartEnabled(false);
}
+ @Test
+ public void testSummaryUpdate_noLimitNoWarning() {
+ final long now = System.currentTimeMillis();
+ final DataUsageController.DataUsageInfo info = createTestDataUsageInfo(now);
+ info.warningLevel = 0L;
+ info.limitLevel = 0L;
+
+ final Intent intent = new Intent();
+
+ when(mDataUsageController.getDataUsageInfo(any())).thenReturn(info);
+ mController.setPlanValues(0 /* dataPlanCount */, LIMIT1, USAGE1);
+ mController.setCarrierValues(CARRIER_NAME, now - UPDATE_BACKOFF_MS, info.cycleEnd, intent);
+
+ mController.updateState(mSummaryPreference);
+ verify(mSummaryPreference).setLimitInfo(null);
+ }
+
+ @Test
+ public void testSummaryUpdate_warningOnly() {
+ final long now = System.currentTimeMillis();
+ final DataUsageController.DataUsageInfo info = createTestDataUsageInfo(now);
+ info.warningLevel = 1000000L;
+ info.limitLevel = 0L;
+
+ final Intent intent = new Intent();
+
+ when(mDataUsageController.getDataUsageInfo(any())).thenReturn(info);
+ mController.setPlanValues(0 /* dataPlanCount */, LIMIT1, USAGE1);
+ mController.setCarrierValues(CARRIER_NAME, now - UPDATE_BACKOFF_MS, info.cycleEnd, intent);
+
+ mController.updateState(mSummaryPreference);
+ verify(mSummaryPreference).setLimitInfo("1.00 MB data warning");
+ }
+
+ @Test
+ public void testSummaryUpdate_limitOnly() {
+ final long now = System.currentTimeMillis();
+ final DataUsageController.DataUsageInfo info = createTestDataUsageInfo(now);
+ info.warningLevel = 0L;
+ info.limitLevel = 1000000L;
+
+ final Intent intent = new Intent();
+
+ when(mDataUsageController.getDataUsageInfo(any())).thenReturn(info);
+ mController.setPlanValues(0 /* dataPlanCount */, LIMIT1, USAGE1);
+ mController.setCarrierValues(CARRIER_NAME, now - UPDATE_BACKOFF_MS, info.cycleEnd, intent);
+
+ mController.updateState(mSummaryPreference);
+ verify(mSummaryPreference).setLimitInfo("1.00 MB data limit");
+ }
+
+ @Test
+ public void testSummaryUpdate_limitAndWarning() {
+ final long now = System.currentTimeMillis();
+ final DataUsageController.DataUsageInfo info = createTestDataUsageInfo(now);
+ info.warningLevel = 1000000L;
+ info.limitLevel = 1000000L;
+
+ final Intent intent = new Intent();
+
+ when(mDataUsageController.getDataUsageInfo(any())).thenReturn(info);
+ mController.setPlanValues(0 /* dataPlanCount */, LIMIT1, USAGE1);
+ mController.setCarrierValues(CARRIER_NAME, now - UPDATE_BACKOFF_MS, info.cycleEnd, intent);
+
+ mController.updateState(mSummaryPreference);
+ verify(mSummaryPreference).setLimitInfo("1.00 MB data warning / 1.00 MB data limit");
+ }
+
private DataUsageController.DataUsageInfo createTestDataUsageInfo(long now) {
DataUsageController.DataUsageInfo info = new DataUsageController.DataUsageInfo();
info.carrier = CARRIER_NAME;