Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a6f6e9c4 authored by Jan Nordqvist's avatar Jan Nordqvist Committed by Sundeep Ghuman
Browse files

In Data Usage screen, Below the data bar, Add “X days left” field.

Bug: 70950124

Test: manual
Test: make RunSettingsRoboTests
Change-Id: I35eb3f0c09c84d609ad54e87400913ec77e19ea0
parent 21ef6cb6
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -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>
+18 −4
Original line number Diff line number Diff line
@@ -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);
+32 −6
Original line number Diff line number Diff line
@@ -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