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;