From: Jan Nordqvist Date: Fri, 9 Mar 2018 23:13:46 +0000 (-0800) Subject: In Data Usage screen, Below the data bar, Add “X days left” field. X-Git-Tag: android-x86-9.0-r1~73^2~19^2~1 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=a6f6e9c41c61d29f5f361baeb261a165b1097f78;p=android-x86%2Fpackages-apps-Settings.git In Data Usage screen, Below the data bar, Add “X days left” field. Bug: 70950124 Test: manual Test: make RunSettingsRoboTests Change-Id: I35eb3f0c09c84d609ad54e87400913ec77e19ea0 --- diff --git a/res/values/strings.xml b/res/values/strings.xml index 45d8816203..a611a82257 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -8754,8 +8754,17 @@ ^1 left - - %1$s left in this cycle + + %d days left + + + + %d day left + %d days left + + + + Less than 1 day left Updated by %1$s %2$s diff --git a/src/com/android/settings/datausage/DataUsageSummaryPreference.java b/src/com/android/settings/datausage/DataUsageSummaryPreference.java index e7f4a9dec7..f1f3283b0d 100644 --- a/src/com/android/settings/datausage/DataUsageSummaryPreference.java +++ b/src/com/android/settings/datausage/DataUsageSummaryPreference.java @@ -32,11 +32,13 @@ import com.android.settings.R; import com.android.settingslib.utils.StringUtil; import java.util.Objects; +import java.util.concurrent.TimeUnit; /** * Provides a summary of data usage. */ public class DataUsageSummaryPreference extends Preference { + private static final long MILLIS_IN_A_DAY = TimeUnit.DAYS.toMillis(1); private boolean mChartEnabled = true; private String mStartLabel; @@ -136,10 +138,7 @@ public class DataUsageSummaryPreference extends Preference { TextView usageTitle = (TextView) holder.findViewById(R.id.usage_title); usageTitle.setVisibility(mNumPlans > 1 ? View.VISIBLE : View.GONE); - TextView cycleTime = (TextView) holder.findViewById(R.id.cycle_left_time); - cycleTime.setText(getContext().getString(R.string.cycle_left_time_text, - StringUtil.formatElapsedTime(getContext(), - mCycleEndTimeMs - System.currentTimeMillis(),false /* withSeconds */))); + updateCycleTimeText(holder); TextView carrierInfo = (TextView) holder.findViewById(R.id.carrier_and_update); setCarrierInfo(carrierInfo, mCarrierName, mSnapshotTimeMs); @@ -180,6 +179,21 @@ public class DataUsageSummaryPreference extends Preference { } } + private void updateCycleTimeText(PreferenceViewHolder holder) { + float daysLeft = + ((float) mCycleEndTimeMs - System.currentTimeMillis()) / MILLIS_IN_A_DAY; + if (daysLeft < 0) { + daysLeft = 0; + } + + TextView cycleTime = (TextView) holder.findViewById(R.id.cycle_left_time); + cycleTime.setText( + (daysLeft > 0 && daysLeft < 1) + ? getContext().getString(R.string.billing_cycle_less_than_one_day_left) + : getContext().getResources().getQuantityString( + R.plurals.billing_cycle_days_left, (int) daysLeft, (int) daysLeft)); + } + private void setCarrierInfo(TextView carrierInfo, CharSequence carrierName, long updateAge) { if (mNumPlans > 0 && updateAge >= 0L) { carrierInfo.setVisibility(View.VISIBLE); diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java index 2a64e90c2f..0dd2d89354 100644 --- a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java +++ b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java @@ -32,6 +32,7 @@ import com.android.settings.R; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl; import com.android.settingslib.utils.StringUtil; +import java.util.concurrent.TimeUnit; import org.junit.Before; import org.junit.Test; @@ -137,16 +138,41 @@ public class DataUsageSummaryPreferenceTest { } @Test - public void testSetUsageInfo_cycleRemainingTimeShown() { - mSummaryPreference.setUsageInfo(mCycleEnd, mUpdateTime, DUMMY_CARRIER, 0 /* numPlans */, + public void testSetUsageInfo_cycleRemainingTimeIsLessOneDay() { + // just under one day + final long cycleEnd = System.currentTimeMillis() + TimeUnit.DAYS.toMillis(1) - 1; + mSummaryPreference.setUsageInfo(cycleEnd, mUpdateTime, DUMMY_CARRIER, 0 /* numPlans */, + new Intent()); + + bindViewHolder(); + assertThat(mCycleTime.getVisibility()).isEqualTo(View.VISIBLE); + assertThat(mCycleTime.getText()).isEqualTo( + mContext.getString(R.string.billing_cycle_less_than_one_day_left)); + } + + @Test + public void testSetUsageInfo_cycleRemainingTimeNegativeDaysLeft_shouldDisplayZeroDays() { + final long cycleEnd = System.currentTimeMillis() - 1L; + mSummaryPreference.setUsageInfo(cycleEnd, mUpdateTime, DUMMY_CARRIER, 0 /* numPlans */, + new Intent()); + + bindViewHolder(); + assertThat(mCycleTime.getVisibility()).isEqualTo(View.VISIBLE); + assertThat(mCycleTime.getText()).isEqualTo( + mContext.getResources().getQuantityString(R.plurals.billing_cycle_days_left, 0, 0)); + } + + @Test + public void testSetUsageInfo_cycleRemainingTimeDaysLeft_shouldUsePlurals() { + final int daysLeft = 3; + final long cycleEnd = System.currentTimeMillis() + TimeUnit.DAYS.toMillis(daysLeft) + + TimeUnit.HOURS.toMillis(1); + mSummaryPreference.setUsageInfo(cycleEnd, mUpdateTime, DUMMY_CARRIER, 0 /* numPlans */, new Intent()); - String cyclePrefix = StringUtil.formatElapsedTime(mContext, CYCLE_DURATION_MILLIS, - false /* withSeconds */).toString(); - String text = mContext.getString(R.string.cycle_left_time_text, cyclePrefix); bindViewHolder(); assertThat(mCycleTime.getVisibility()).isEqualTo(View.VISIBLE); - assertThat(mCycleTime.getText()).isEqualTo(text); + assertThat(mCycleTime.getText()).isEqualTo(daysLeft + " days left"); } @Test