Merge changes Icf6fafe9,I35eb3f0c,Ieec0c486,I8accb164 into pi-dev

am: 437d421eaf

Change-Id: I346e1868268fa53979886cf4a9c9bb0cebf9af9a
This commit is contained in:
Sundeep Ghuman
2018-03-15 15:54:16 +00:00
committed by android-build-merger
6 changed files with 232 additions and 46 deletions

View File

@@ -35,15 +35,34 @@
android:textColor="?android:attr/textColorSecondary" android:textColor="?android:attr/textColorSecondary"
android:text="@string/data_usage_title" /> android:text="@string/data_usage_title" />
<TextView <LinearLayout
android:id="@android:id/title" android:id="@+id/usage_layout"
android:paddingTop="12dp"
android:paddingBottom="4dp"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@*android:string/config_headlineFontFamily" android:paddingTop="12dp"
android:textColor="?android:attr/colorAccent" android:paddingBottom="4dp"
android:textAppearance="@android:style/TextAppearance.Material.Large" /> android:orientation="horizontal">
<TextView android:id="@+id/data_usage_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@*android:string/config_headlineFontFamily"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="?android:attr/colorAccent" />
<Space
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />
<TextView android:id="@+id/data_remaining_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@*android:string/config_headlineFontFamily"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="?android:attr/colorAccent" />
</LinearLayout>
<android.widget.ProgressBar <android.widget.ProgressBar
android:id="@+id/determinateBar" android:id="@+id/determinateBar"

View File

@@ -8745,14 +8745,26 @@
<!-- Data usage title text [CHAR LIMIT=30] --> <!-- Data usage title text [CHAR LIMIT=30] -->
<string name="data_usage_title">Primary data</string> <string name="data_usage_title">Primary data</string>
<!-- Data usage string [CHAR LIMIT=30] --> <!-- Data usage remaining string [CHAR LIMIT=30] -->
<string name="data_used"><xliff:g name="bytes" example="2 GB">^1</xliff:g> used</string> <string name="data_used"><xliff:g name="bytes" example="2 GB">^1</xliff:g> used</string>
<!-- Optional part of data usage showing the remaining amount [CHAR LIMIT=30] --> <!-- Data usage over limit string [CHAR LIMIT=30] -->
<string name="data_remaining"><xliff:g name="bytes" example="2 GB">, ^1</xliff:g> left</string> <string name="data_overusage"><xliff:g name="bytes" example="2 GB">^1</xliff:g> over</string>
<!-- Informational text about time left in billing cycle [CHAR LIMIT=30] --> <!-- Optional part of data usage showing the remaining amount [CHAR LIMIT=30] -->
<string name="cycle_left_time_text"><xliff:g name="time" example="2d">%1$s</xliff:g> left in this cycle</string> <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=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] --> <!-- 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> <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>

View File

@@ -234,12 +234,17 @@ public class DataUsageSummary extends DataUsageBaseFragment implements Indexable
static CharSequence formatUsage(Context context, String template, long usageLevel) { static CharSequence formatUsage(Context context, String template, long usageLevel) {
final float LARGER_SIZE = 1.25f * 1.25f; // (1/0.8)^2 final float LARGER_SIZE = 1.25f * 1.25f; // (1/0.8)^2
final float SMALLER_SIZE = 1.0f / LARGER_SIZE; // 0.8^2 final float SMALLER_SIZE = 1.0f / LARGER_SIZE; // 0.8^2
return formatUsage(context, template, usageLevel, LARGER_SIZE, SMALLER_SIZE);
}
static CharSequence formatUsage(Context context, String template, long usageLevel,
float larger, float smaller) {
final int FLAGS = Spannable.SPAN_INCLUSIVE_INCLUSIVE; final int FLAGS = Spannable.SPAN_INCLUSIVE_INCLUSIVE;
final Formatter.BytesResult usedResult = Formatter.formatBytes(context.getResources(), final Formatter.BytesResult usedResult = Formatter.formatBytes(context.getResources(),
usageLevel, Formatter.FLAG_CALCULATE_ROUNDED); usageLevel, Formatter.FLAG_CALCULATE_ROUNDED);
final SpannableString enlargedValue = new SpannableString(usedResult.value); final SpannableString enlargedValue = new SpannableString(usedResult.value);
enlargedValue.setSpan(new RelativeSizeSpan(LARGER_SIZE), 0, enlargedValue.length(), FLAGS); enlargedValue.setSpan(new RelativeSizeSpan(larger), 0, enlargedValue.length(), FLAGS);
final SpannableString amountTemplate = new SpannableString( final SpannableString amountTemplate = new SpannableString(
context.getString(com.android.internal.R.string.fileSizeSuffix) context.getString(com.android.internal.R.string.fileSizeSuffix)
@@ -248,7 +253,7 @@ public class DataUsageSummary extends DataUsageBaseFragment implements Indexable
enlargedValue, usedResult.units); enlargedValue, usedResult.units);
final SpannableString fullTemplate = new SpannableString(template); final SpannableString fullTemplate = new SpannableString(template);
fullTemplate.setSpan(new RelativeSizeSpan(SMALLER_SIZE), 0, fullTemplate.length(), FLAGS); fullTemplate.setSpan(new RelativeSizeSpan(smaller), 0, fullTemplate.length(), FLAGS);
return TextUtils.expandTemplate(fullTemplate, return TextUtils.expandTemplate(fullTemplate,
BidiFormatter.getInstance().unicodeWrap(formattedUsage.toString())); BidiFormatter.getInstance().unicodeWrap(formattedUsage.toString()));
} }

View File

@@ -21,6 +21,7 @@ import android.content.Intent;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceViewHolder; import android.support.v7.preference.PreferenceViewHolder;
import android.text.TextUtils; import android.text.TextUtils;
import android.text.format.Formatter;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.View; import android.view.View;
import android.widget.Button; import android.widget.Button;
@@ -28,19 +29,29 @@ import android.widget.ProgressBar;
import android.widget.TextView; import android.widget.TextView;
import com.android.settings.R; import com.android.settings.R;
import com.android.settingslib.Utils;
import com.android.settingslib.utils.StringUtil; import com.android.settingslib.utils.StringUtil;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.TimeUnit;
/** /**
* Provides a summary of data usage. * Provides a summary of data usage.
*/ */
public class DataUsageSummaryPreference extends Preference { public class DataUsageSummaryPreference extends Preference {
private static final long MILLIS_IN_A_DAY = TimeUnit.DAYS.toMillis(1);
private static final long WARNING_AGE = TimeUnit.HOURS.toMillis(6L);
private boolean mChartEnabled = true; private boolean mChartEnabled = true;
private String mStartLabel; private String mStartLabel;
private String mEndLabel; private String mEndLabel;
/** large vs small size is 36/16 ~ 2.25 */
private static final float LARGER_FONT_RATIO = 2.25f;
private static final float SMALLER_FONT_RATIO = 1.0f;
private boolean mDefaultTextColorSet;
private int mDefaultTextColor;
private int mNumPlans; private int mNumPlans;
/** The ending time of the billing cycle in milliseconds since epoch. */ /** The ending time of the billing cycle in milliseconds since epoch. */
private long mCycleEndTimeMs; private long mCycleEndTimeMs;
@@ -53,6 +64,16 @@ public class DataUsageSummaryPreference extends Preference {
/** Progress to display on ProgressBar */ /** Progress to display on ProgressBar */
private float mProgress; private float mProgress;
private boolean mHasMobileData;
/**
* The size of the first registered plan if one exists or the size of the warning if it is set.
* -1 if no information is available.
*/
private long mDataplanSize;
/** The number of bytes used since the start of the cycle. */
private long mDataplanUse;
public DataUsageSummaryPreference(Context context, AttributeSet attrs) { public DataUsageSummaryPreference(Context context, AttributeSet attrs) {
super(context, attrs); super(context, attrs);
@@ -94,10 +115,18 @@ public class DataUsageSummaryPreference extends Preference {
notifyChanged(); notifyChanged();
} }
void setUsageNumbers(long used, long dataPlanSize, boolean hasMobileData) {
mDataplanUse = used;
mDataplanSize = dataPlanSize;
mHasMobileData = hasMobileData;
notifyChanged();
}
@Override @Override
public void onBindViewHolder(PreferenceViewHolder holder) { public void onBindViewHolder(PreferenceViewHolder holder) {
super.onBindViewHolder(holder); super.onBindViewHolder(holder);
if (mChartEnabled && (!TextUtils.isEmpty(mStartLabel) || !TextUtils.isEmpty(mEndLabel))) { if (mChartEnabled && (!TextUtils.isEmpty(mStartLabel) || !TextUtils.isEmpty(mEndLabel))) {
holder.findViewById(R.id.label_bar).setVisibility(View.VISIBLE); holder.findViewById(R.id.label_bar).setVisibility(View.VISIBLE);
ProgressBar bar = (ProgressBar) holder.findViewById(R.id.determinateBar); ProgressBar bar = (ProgressBar) holder.findViewById(R.id.determinateBar);
@@ -108,16 +137,15 @@ public class DataUsageSummaryPreference extends Preference {
holder.findViewById(R.id.label_bar).setVisibility(View.GONE); holder.findViewById(R.id.label_bar).setVisibility(View.GONE);
} }
updateDataUsageLabels(holder);
TextView usageTitle = (TextView) holder.findViewById(R.id.usage_title); TextView usageTitle = (TextView) holder.findViewById(R.id.usage_title);
usageTitle.setVisibility(mNumPlans > 1 ? View.VISIBLE : View.GONE); usageTitle.setVisibility(mNumPlans > 1 ? View.VISIBLE : View.GONE);
TextView cycleTime = (TextView) holder.findViewById(R.id.cycle_left_time); updateCycleTimeText(holder);
cycleTime.setText(getContext().getString(R.string.cycle_left_time_text,
StringUtil.formatElapsedTime(getContext(),
mCycleEndTimeMs - System.currentTimeMillis(),false /* withSeconds */)));
TextView carrierInfo = (TextView) holder.findViewById(R.id.carrier_and_update);
setCarrierInfo(carrierInfo, mCarrierName, mSnapshotTimeMs); updateCarrierInfo((TextView) holder.findViewById(R.id.carrier_and_update));
Button launchButton = (Button) holder.findViewById(R.id.launch_mdp_app_button); Button launchButton = (Button) holder.findViewById(R.id.launch_mdp_app_button);
launchButton.setOnClickListener((view) -> { launchButton.setOnClickListener((view) -> {
@@ -135,18 +163,61 @@ public class DataUsageSummaryPreference extends Preference {
limitInfo.setText(mLimitInfoText); limitInfo.setText(mLimitInfoText);
} }
private void setCarrierInfo(TextView carrierInfo, CharSequence carrierName, long updateAge) {
if (mNumPlans > 0 && updateAge >= 0L) { private void updateDataUsageLabels(PreferenceViewHolder holder) {
TextView usageNumberField = (TextView) holder.findViewById(R.id.data_usage_view);
usageNumberField.setText(TextUtils.expandTemplate(
getContext().getString(R.string.data_used),
Formatter.formatFileSize(getContext(), mDataplanUse)));
if (mHasMobileData && mNumPlans >= 0 && mDataplanSize > 0L) {
TextView usageRemainingField = (TextView) holder.findViewById(R.id.data_remaining_view);
long dataRemaining = mDataplanSize - mDataplanUse;
if (dataRemaining >= 0) {
usageRemainingField.setText(
TextUtils.expandTemplate(getContext().getText(R.string.data_remaining),
Formatter.formatFileSize(getContext(), dataRemaining)));
} else {
usageRemainingField.setText(
TextUtils.expandTemplate(getContext().getText(R.string.data_overusage),
Formatter.formatFileSize(getContext(), -dataRemaining)));
}
}
}
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 updateCarrierInfo(TextView carrierInfo) {
if (mNumPlans > 0 && mSnapshotTimeMs >= 0L) {
long updateAge = System.currentTimeMillis() - mSnapshotTimeMs;
carrierInfo.setVisibility(View.VISIBLE); carrierInfo.setVisibility(View.VISIBLE);
if (carrierName != null) { if (mCarrierName != null) {
carrierInfo.setText(getContext().getString(R.string.carrier_and_update_text, carrierInfo.setText(getContext().getString(R.string.carrier_and_update_text,
carrierName, StringUtil.formatRelativeTime( mCarrierName, StringUtil.formatRelativeTime(
getContext(), updateAge, false /* withSeconds */))); getContext(), updateAge, false /* withSeconds */)));
} else { } else {
carrierInfo.setText(getContext().getString(R.string.no_carrier_update_text, carrierInfo.setText(getContext().getString(R.string.no_carrier_update_text,
StringUtil.formatRelativeTime( StringUtil.formatRelativeTime(
getContext(), updateAge, false /* withSeconds */))); getContext(), updateAge, false /* withSeconds */)));
} }
carrierInfo.setTextColor(
updateAge <= WARNING_AGE
? Utils.getColorAttr(getContext(), android.R.attr.textColorPrimary)
: Utils.getColorAttr(getContext(), android.R.attr.colorError));
} else { } else {
carrierInfo.setVisibility(View.GONE); carrierInfo.setVisibility(View.GONE);
} }

View File

@@ -174,19 +174,7 @@ public class DataUsageSummaryPreferenceController extends BasePreferenceControll
summaryPreference.setLimitInfo(null); summaryPreference.setLimitInfo(null);
} }
final StringBuilder title = new StringBuilder(); summaryPreference.setUsageNumbers(mDataplanUse, mDataplanSize, mHasMobileData);
if (mHasMobileData) {
title.append(formatUsage(mContext, mContext.getString(R.string.data_used),
mDataplanUse));
if (mDataplanCount >= 0 && mDataplanSize > 0L) {
title.append(formatUsage(mContext, mContext.getString(R.string.data_remaining),
mDataplanSize - mDataplanUse));
}
} else {
title.append(formatUsage(mContext, mContext.getString(mDataUsageTemplate),
mDataplanUse));
}
summaryPreference.setTitle(title.toString());
if (mDataplanSize <= 0) { if (mDataplanSize <= 0) {
summaryPreference.setChartEnabled(false); summaryPreference.setChartEnabled(false);
@@ -231,7 +219,7 @@ public class DataUsageSummaryPreferenceController extends BasePreferenceControll
mCycleStart = rule.start.toEpochSecond() * 1000L; mCycleStart = rule.start.toEpochSecond() * 1000L;
mCycleEnd = rule.end.toEpochSecond() * 1000L; mCycleEnd = rule.end.toEpochSecond() * 1000L;
} }
mSnapshotTime = System.currentTimeMillis() - primaryPlan.getDataUsageTime(); mSnapshotTime = primaryPlan.getDataUsageTime();
} }
} }
mManageSubscriptionIntent = mManageSubscriptionIntent =

View File

@@ -16,8 +16,6 @@
package com.android.settings.datausage; package com.android.settings.datausage;
import static com.google.common.truth.Truth.assertThat;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.support.v7.preference.PreferenceViewHolder; import android.support.v7.preference.PreferenceViewHolder;
@@ -31,7 +29,9 @@ import android.widget.TextView;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl; import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
import com.android.settingslib.Utils;
import com.android.settingslib.utils.StringUtil; import com.android.settingslib.utils.StringUtil;
import java.util.concurrent.TimeUnit;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -40,6 +40,10 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import java.util.concurrent.TimeUnit;
import static com.google.common.truth.Truth.assertThat;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
@Config(shadows = SettingsShadowResourcesImpl.class) @Config(shadows = SettingsShadowResourcesImpl.class)
public class DataUsageSummaryPreferenceTest { public class DataUsageSummaryPreferenceTest {
@@ -55,6 +59,8 @@ public class DataUsageSummaryPreferenceTest {
private TextView mCycleTime; private TextView mCycleTime;
private TextView mCarrierInfo; private TextView mCarrierInfo;
private TextView mDataLimits; private TextView mDataLimits;
private TextView mDataUsed;
private TextView mDataRemaining;
private Button mLaunchButton; private Button mLaunchButton;
private LinearLayout mLabelBar; private LinearLayout mLabelBar;
private TextView mLabel1; private TextView mLabel1;
@@ -116,6 +122,31 @@ public class DataUsageSummaryPreferenceTest {
assertThat(mCarrierInfo.getVisibility()).isEqualTo(View.GONE); assertThat(mCarrierInfo.getVisibility()).isEqualTo(View.GONE);
} }
@Test
public void testSetUsageInfo_withRecentCarrierUpdate_doesNotSetCarrierInfoWarningColor() {
final long updateTime = System.currentTimeMillis() - TimeUnit.HOURS.toMillis(1);
mCarrierInfo = (TextView) mHolder.findViewById(R.id.carrier_and_update);
mSummaryPreference.setUsageInfo(mCycleEnd, updateTime, DUMMY_CARRIER, 1 /* numPlans */,
new Intent());
bindViewHolder();
assertThat(mCarrierInfo.getVisibility()).isEqualTo(View.VISIBLE);
assertThat(mCarrierInfo.getCurrentTextColor()).isEqualTo(
Utils.getColorAttr(mContext, android.R.attr.textColorPrimary));
}
@Test
public void testSetUsageInfo_withStaleCarrierUpdate_setsCarrierInfoWarningColor() {
final long updateTime = System.currentTimeMillis() - TimeUnit.HOURS.toMillis(7);
mSummaryPreference.setUsageInfo(mCycleEnd, updateTime, DUMMY_CARRIER, 1 /* numPlans */,
new Intent());
bindViewHolder();
assertThat(mCarrierInfo.getVisibility()).isEqualTo(View.VISIBLE);
assertThat(mCarrierInfo.getCurrentTextColor()).isEqualTo(
Utils.getColorAttr(mContext, android.R.attr.colorError));
}
@Test @Test
public void testSetUsageInfo_withNoDataPlans_usageTitleNotShown() { public void testSetUsageInfo_withNoDataPlans_usageTitleNotShown() {
mSummaryPreference.setUsageInfo(mCycleEnd, mUpdateTime, DUMMY_CARRIER, 0 /* numPlans */, mSummaryPreference.setUsageInfo(mCycleEnd, mUpdateTime, DUMMY_CARRIER, 0 /* numPlans */,
@@ -135,16 +166,41 @@ public class DataUsageSummaryPreferenceTest {
} }
@Test @Test
public void testSetUsageInfo_cycleRemainingTimeShown() { public void testSetUsageInfo_cycleRemainingTimeIsLessOneDay() {
mSummaryPreference.setUsageInfo(mCycleEnd, mUpdateTime, DUMMY_CARRIER, 0 /* numPlans */, // just under one day
final long cycleEnd = System.currentTimeMillis() + TimeUnit.HOURS.toMillis(23);
mSummaryPreference.setUsageInfo(cycleEnd, mUpdateTime, DUMMY_CARRIER, 0 /* numPlans */,
new Intent()); 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(); bindViewHolder();
assertThat(mCycleTime.getVisibility()).isEqualTo(View.VISIBLE); assertThat(mCycleTime.getVisibility()).isEqualTo(View.VISIBLE);
assertThat(mCycleTime.getText()).isEqualTo(text); 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());
bindViewHolder();
assertThat(mCycleTime.getVisibility()).isEqualTo(View.VISIBLE);
assertThat(mCycleTime.getText()).isEqualTo(daysLeft + " days left");
} }
@Test @Test
@@ -205,12 +261,47 @@ public class DataUsageSummaryPreferenceTest {
mSummaryPreference.setLabels("0.0 GB", "5.0 GB"); mSummaryPreference.setLabels("0.0 GB", "5.0 GB");
} }
@Test
public void testSetUsageAndRemainingInfo_withUsageInfo_dataUsageAndRemainingShown() {
mSummaryPreference.setUsageInfo(mCycleEnd, mUpdateTime, DUMMY_CARRIER, 1 /* numPlans */,
new Intent());
mSummaryPreference.setUsageNumbers(1000000L, 10000000L, true);
bindViewHolder();
assertThat(mDataUsed.getText().toString()).isEqualTo("1.00 MB used");
assertThat(mDataRemaining.getText().toString()).isEqualTo("9.00 MB left");
}
@Test
public void testSetUsageInfo_withDataOverusage() {
mSummaryPreference.setUsageInfo(mCycleEnd, mUpdateTime, DUMMY_CARRIER, 1 /* numPlans */,
new Intent());
mSummaryPreference.setUsageNumbers(11_000_000L, 10_000_000L, true);
bindViewHolder();
assertThat(mDataUsed.getText().toString()).isEqualTo("11.00 MB used");
assertThat(mDataRemaining.getText().toString()).isEqualTo("1.00 MB over");
}
@Test
public void testSetUsageInfo_withUsageInfo_dataUsageShown() {
mSummaryPreference.setUsageInfo(mCycleEnd, mUpdateTime, DUMMY_CARRIER, 0 /* numPlans */,
new Intent());
mSummaryPreference.setUsageNumbers(1000000L, -1L, true);
bindViewHolder();
assertThat(mDataUsed.getText().toString()).isEqualTo("1.00 MB used");
assertThat(mDataRemaining.getText()).isEqualTo("");
}
private void bindViewHolder() { private void bindViewHolder() {
mSummaryPreference.onBindViewHolder(mHolder); mSummaryPreference.onBindViewHolder(mHolder);
mUsageTitle = (TextView) mHolder.findViewById(R.id.usage_title); mUsageTitle = (TextView) mHolder.findViewById(R.id.usage_title);
mCycleTime = (TextView) mHolder.findViewById(R.id.cycle_left_time); mCycleTime = (TextView) mHolder.findViewById(R.id.cycle_left_time);
mCarrierInfo = (TextView) mHolder.findViewById(R.id.carrier_and_update); mCarrierInfo = (TextView) mHolder.findViewById(R.id.carrier_and_update);
mDataLimits = (TextView) mHolder.findViewById(R.id.data_limits); mDataLimits = (TextView) mHolder.findViewById(R.id.data_limits);
mDataUsed = (TextView) mHolder.findViewById(R.id.data_usage_view);
mDataRemaining = (TextView) mHolder.findViewById(R.id.data_remaining_view);
mLaunchButton = (Button) mHolder.findViewById(R.id.launch_mdp_app_button); mLaunchButton = (Button) mHolder.findViewById(R.id.launch_mdp_app_button);
mLabelBar = (LinearLayout) mHolder.findViewById(R.id.label_bar); mLabelBar = (LinearLayout) mHolder.findViewById(R.id.label_bar);
mLabel1 = (TextView) mHolder.findViewById(R.id.text1); mLabel1 = (TextView) mHolder.findViewById(R.id.text1);