Loading res/values/strings.xml +11 −2 Original line number Diff line number Diff line Loading @@ -8754,8 +8754,17 @@ <!-- Optional part of data usage showing the remaining amount [CHAR LIMIT=30] --> <string name="data_remaining"><xliff:g name="bytes" example="2 GB">^1</xliff:g> left</string> <!-- Informational text about time left in billing cycle [CHAR LIMIT=30] --> <string name="cycle_left_time_text"><xliff:g name="time" example="2d">%1$s</xliff:g> left in this cycle</string> <!-- Informational text about time left in billing cycle [CHAR LIMIT=60] --> <string name="cycle_left_multiple_days"><xliff:g name="time" example="2d">%d</xliff:g> days left</string> <!-- Informational text about time left in billing cycle [CHAR LIMIT=60] --> <plurals name="billing_cycle_days_left"> <item quantity="one">%d day left</item> <item quantity="other">%d days left</item> </plurals> <!-- Informational text about time left in billing cycle [CHAR LIMIT=60] --> <string name="billing_cycle_less_than_one_day_left">Less than 1 day left</string> <!-- Informational text about carrier and update time [CHAR LIMIT=30] --> <string name="carrier_and_update_text">Updated by <xliff:g name="carrier" example="T-mobile">%1$s</xliff:g> <xliff:g name="time" example="3m">%2$s</xliff:g></string> src/com/android/settings/datausage/DataUsageSummaryPreference.java +18 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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); Loading tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java +32 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading
res/values/strings.xml +11 −2 Original line number Diff line number Diff line Loading @@ -8754,8 +8754,17 @@ <!-- Optional part of data usage showing the remaining amount [CHAR LIMIT=30] --> <string name="data_remaining"><xliff:g name="bytes" example="2 GB">^1</xliff:g> left</string> <!-- Informational text about time left in billing cycle [CHAR LIMIT=30] --> <string name="cycle_left_time_text"><xliff:g name="time" example="2d">%1$s</xliff:g> left in this cycle</string> <!-- Informational text about time left in billing cycle [CHAR LIMIT=60] --> <string name="cycle_left_multiple_days"><xliff:g name="time" example="2d">%d</xliff:g> days left</string> <!-- Informational text about time left in billing cycle [CHAR LIMIT=60] --> <plurals name="billing_cycle_days_left"> <item quantity="one">%d day left</item> <item quantity="other">%d days left</item> </plurals> <!-- Informational text about time left in billing cycle [CHAR LIMIT=60] --> <string name="billing_cycle_less_than_one_day_left">Less than 1 day left</string> <!-- Informational text about carrier and update time [CHAR LIMIT=30] --> <string name="carrier_and_update_text">Updated by <xliff:g name="carrier" example="T-mobile">%1$s</xliff:g> <xliff:g name="time" example="3m">%2$s</xliff:g></string>
src/com/android/settings/datausage/DataUsageSummaryPreference.java +18 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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); Loading
tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java +32 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading