Merge "Modify "Updated ..." text." into pi-dev

This commit is contained in:
TreeHugger Robot
2018-03-22 02:58:41 +00:00
committed by Android (Google) Code Review
3 changed files with 159 additions and 25 deletions

View File

@@ -8825,10 +8825,16 @@
<string name="billing_cycle_less_than_one_day_left">Less than 1 day left</string> <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</xliff:g> <xliff:g name="time" example="3m">^2</xliff:g> ago</string>
<!-- Informational text about update time only, without carrier [CHAR LIMIT=30] --> <!-- Informational text about update time only, without carrier. First argument intentionally skipped. [CHAR LIMIT=30] -->
<string name="no_carrier_update_text">Updated <xliff:g name="time" example="3m">%1$s</xliff:g></string> <string name="no_carrier_update_text">Updated <xliff:g name="time" example="3m">^2</xliff:g> ago</string>
<!-- Informational text about a recent carrier and update time [CHAR LIMIT=30] -->
<string name="carrier_and_update_now_text">Updated by <xliff:g name="carrier" example="T-mobile">^1</xliff:g> just now</string>
<!-- Informational text about recent update time only, without carrier [CHAR LIMIT=30] -->
<string name="no_carrier_update_now_text">Updated just now</string>
<!-- Button to launch external data plan app [CHAR LIMIT=30] --> <!-- Button to launch external data plan app [CHAR LIMIT=30] -->
<string name="launch_mdp_app_text">View plan</string> <string name="launch_mdp_app_text">View plan</string>

View File

@@ -16,8 +16,10 @@
package com.android.settings.datausage; package com.android.settings.datausage;
import android.annotation.AttrRes;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.graphics.Typeface;
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.Spannable; import android.text.Spannable;
@@ -31,6 +33,7 @@ import android.widget.Button;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import android.widget.TextView; import android.widget.TextView;
import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R; import com.android.settings.R;
import com.android.settingslib.Utils; import com.android.settingslib.Utils;
import com.android.settingslib.utils.StringUtil; import com.android.settingslib.utils.StringUtil;
@@ -44,6 +47,8 @@ import java.util.concurrent.TimeUnit;
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 MILLIS_IN_A_DAY = TimeUnit.DAYS.toMillis(1);
private static final long WARNING_AGE = TimeUnit.HOURS.toMillis(6L); private static final long WARNING_AGE = TimeUnit.HOURS.toMillis(6L);
@VisibleForTesting static final Typeface SANS_SERIF_MEDIUM =
Typeface.create("sans-serif-medium", Typeface.NORMAL);
private boolean mChartEnabled = true; private boolean mChartEnabled = true;
private String mStartLabel; private String mStartLabel;
@@ -217,24 +222,64 @@ public class DataUsageSummaryPreference extends Preference {
private void updateCarrierInfo(TextView carrierInfo) { private void updateCarrierInfo(TextView carrierInfo) {
if (mNumPlans > 0 && mSnapshotTimeMs >= 0L) { if (mNumPlans > 0 && mSnapshotTimeMs >= 0L) {
long updateAge = System.currentTimeMillis() - mSnapshotTimeMs;
carrierInfo.setVisibility(View.VISIBLE); carrierInfo.setVisibility(View.VISIBLE);
if (mCarrierName != null) { long updateAgeMillis = calculateTruncatedUpdateAge();
carrierInfo.setText(getContext().getString(R.string.carrier_and_update_text,
mCarrierName, StringUtil.formatRelativeTime(
getContext(), updateAge, false /* withSeconds */)));
} else {
carrierInfo.setText(getContext().getString(R.string.no_carrier_update_text,
StringUtil.formatRelativeTime(
getContext(), updateAge, false /* withSeconds */)));
}
carrierInfo.setTextColor( int textResourceId;
updateAge <= WARNING_AGE CharSequence updateTime = null;
? Utils.getColorAttr(getContext(), android.R.attr.textColorPrimary) if (updateAgeMillis == 0) {
: Utils.getColorAttr(getContext(), android.R.attr.colorError)); if (mCarrierName != null) {
textResourceId = R.string.carrier_and_update_now_text;
} else {
textResourceId = R.string.no_carrier_update_now_text;
}
} else {
if (mCarrierName != null) {
textResourceId = R.string.carrier_and_update_text;
} else {
textResourceId = R.string.no_carrier_update_text;
}
updateTime = StringUtil.formatElapsedTime(
getContext(), updateAgeMillis, false /* withSeconds */);
}
carrierInfo.setText(TextUtils.expandTemplate(
getContext().getText(textResourceId),
mCarrierName,
updateTime));
if (updateAgeMillis <= WARNING_AGE) {
setCarrierInfoTextStyle(
carrierInfo, android.R.attr.textColorSecondary, Typeface.SANS_SERIF);
} else {
setCarrierInfoTextStyle(carrierInfo, android.R.attr.colorError, SANS_SERIF_MEDIUM);
}
} else { } else {
carrierInfo.setVisibility(View.GONE); carrierInfo.setVisibility(View.GONE);
} }
} }
/**
* Returns the time since the last carrier update, as defined by {@link #mSnapshotTimeMs},
* truncated to the nearest day / hour / minute in milliseconds, or 0 if less than 1 min.
*/
private long calculateTruncatedUpdateAge() {
long updateAgeMillis = System.currentTimeMillis() - mSnapshotTimeMs;
// Round to nearest whole unit
if (updateAgeMillis >= TimeUnit.DAYS.toMillis(1)) {
return (updateAgeMillis / TimeUnit.DAYS.toMillis(1)) * TimeUnit.DAYS.toMillis(1);
} else if (updateAgeMillis >= TimeUnit.HOURS.toMillis(1)) {
return (updateAgeMillis / TimeUnit.HOURS.toMillis(1)) * TimeUnit.HOURS.toMillis(1);
} else if (updateAgeMillis >= TimeUnit.MINUTES.toMillis(1)) {
return (updateAgeMillis / TimeUnit.MINUTES.toMillis(1)) * TimeUnit.MINUTES.toMillis(1);
} else {
return 0;
}
}
private void setCarrierInfoTextStyle(
TextView carrierInfo, @AttrRes int colorId, Typeface typeface) {
carrierInfo.setTextColor(Utils.getColorAttr(getContext(), colorId));
carrierInfo.setTypeface(typeface);
}
} }

View File

@@ -16,8 +16,11 @@
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.graphics.Typeface;
import android.support.v7.preference.PreferenceViewHolder; import android.support.v7.preference.PreferenceViewHolder;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@@ -30,8 +33,6 @@ 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;
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;
@@ -42,8 +43,6 @@ import org.robolectric.annotation.Config;
import java.util.concurrent.TimeUnit; 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 {
@@ -123,7 +122,88 @@ public class DataUsageSummaryPreferenceTest {
} }
@Test @Test
public void testSetUsageInfo_withRecentCarrierUpdate_doesNotSetCarrierInfoWarningColor() { public void testCarrierUpdateTime_shouldFormatDaysCorrectly() {
int baseUnit = 2;
int smudge = 6;
final long updateTime = System.currentTimeMillis()
- TimeUnit.DAYS.toMillis(baseUnit) - TimeUnit.HOURS.toMillis(smudge);
mCarrierInfo = (TextView) mHolder.findViewById(R.id.carrier_and_update);
mSummaryPreference.setUsageInfo(mCycleEnd, updateTime, DUMMY_CARRIER, 1 /* numPlans */,
new Intent());
bindViewHolder();
assertThat(mCarrierInfo.getText().toString())
.isEqualTo("Updated by " + DUMMY_CARRIER + " " + baseUnit + "d ago");
}
@Test
public void testCarrierUpdateTime_shouldFormatHoursCorrectly() {
int baseUnit = 2;
int smudge = 6;
final long updateTime = System.currentTimeMillis()
- TimeUnit.HOURS.toMillis(baseUnit) - TimeUnit.MINUTES.toMillis(smudge);
mCarrierInfo = (TextView) mHolder.findViewById(R.id.carrier_and_update);
mSummaryPreference.setUsageInfo(mCycleEnd, updateTime, DUMMY_CARRIER, 1 /* numPlans */,
new Intent());
bindViewHolder();
assertThat(mCarrierInfo.getText().toString())
.isEqualTo("Updated by " + DUMMY_CARRIER + " " + baseUnit + "h ago");
}
@Test
public void testCarrierUpdateTime_shouldFormatMinutesCorrectly() {
int baseUnit = 2;
int smudge = 6;
final long updateTime = System.currentTimeMillis()
- TimeUnit.MINUTES.toMillis(baseUnit) - TimeUnit.SECONDS.toMillis(smudge);
mCarrierInfo = (TextView) mHolder.findViewById(R.id.carrier_and_update);
mSummaryPreference.setUsageInfo(mCycleEnd, updateTime, DUMMY_CARRIER, 1 /* numPlans */,
new Intent());
bindViewHolder();
assertThat(mCarrierInfo.getText().toString())
.isEqualTo("Updated by " + DUMMY_CARRIER + " " + baseUnit + "m ago");
}
@Test
public void testCarrierUpdateTime_shouldFormatLessThanMinuteCorrectly() {
final long updateTime = System.currentTimeMillis() - TimeUnit.SECONDS.toMillis(45);
mCarrierInfo = (TextView) mHolder.findViewById(R.id.carrier_and_update);
mSummaryPreference.setUsageInfo(mCycleEnd, updateTime, DUMMY_CARRIER, 1 /* numPlans */,
new Intent());
bindViewHolder();
assertThat(mCarrierInfo.getText().toString())
.isEqualTo("Updated by " + DUMMY_CARRIER + " just now");
}
@Test
public void testCarrierUpdateTimeWithNoCarrier_shouldSayJustNow() {
final long updateTime = System.currentTimeMillis() - TimeUnit.SECONDS.toMillis(45);
mCarrierInfo = (TextView) mHolder.findViewById(R.id.carrier_and_update);
mSummaryPreference.setUsageInfo(mCycleEnd, updateTime, null /* carrier */,
1 /* numPlans */, new Intent());
bindViewHolder();
assertThat(mCarrierInfo.getText().toString())
.isEqualTo("Updated just now");
}
@Test
public void testCarrierUpdateTimeWithNoCarrier_shouldFormatTime() {
final long updateTime = System.currentTimeMillis() - TimeUnit.MINUTES.toMillis(2);
mCarrierInfo = (TextView) mHolder.findViewById(R.id.carrier_and_update);
mSummaryPreference.setUsageInfo(mCycleEnd, updateTime, null /* carrier */,
1 /* numPlans */, new Intent());
bindViewHolder();
assertThat(mCarrierInfo.getText().toString())
.isEqualTo("Updated 2m ago");
}
@Test
public void testSetUsageInfo_withRecentCarrierUpdate_doesNotSetCarrierInfoWarningColorAndFont() {
final long updateTime = System.currentTimeMillis() - TimeUnit.HOURS.toMillis(1); final long updateTime = System.currentTimeMillis() - TimeUnit.HOURS.toMillis(1);
mCarrierInfo = (TextView) mHolder.findViewById(R.id.carrier_and_update); mCarrierInfo = (TextView) mHolder.findViewById(R.id.carrier_and_update);
mSummaryPreference.setUsageInfo(mCycleEnd, updateTime, DUMMY_CARRIER, 1 /* numPlans */, mSummaryPreference.setUsageInfo(mCycleEnd, updateTime, DUMMY_CARRIER, 1 /* numPlans */,
@@ -132,11 +212,12 @@ public class DataUsageSummaryPreferenceTest {
bindViewHolder(); bindViewHolder();
assertThat(mCarrierInfo.getVisibility()).isEqualTo(View.VISIBLE); assertThat(mCarrierInfo.getVisibility()).isEqualTo(View.VISIBLE);
assertThat(mCarrierInfo.getCurrentTextColor()).isEqualTo( assertThat(mCarrierInfo.getCurrentTextColor()).isEqualTo(
Utils.getColorAttr(mContext, android.R.attr.textColorPrimary)); Utils.getColorAttr(mContext, android.R.attr.textColorSecondary));
assertThat(mCarrierInfo.getTypeface()).isEqualTo(Typeface.SANS_SERIF);
} }
@Test @Test
public void testSetUsageInfo_withStaleCarrierUpdate_setsCarrierInfoWarningColor() { public void testSetUsageInfo_withStaleCarrierUpdate_setsCarrierInfoWarningColorAndFont() {
final long updateTime = System.currentTimeMillis() - TimeUnit.HOURS.toMillis(7); final long updateTime = System.currentTimeMillis() - TimeUnit.HOURS.toMillis(7);
mSummaryPreference.setUsageInfo(mCycleEnd, updateTime, DUMMY_CARRIER, 1 /* numPlans */, mSummaryPreference.setUsageInfo(mCycleEnd, updateTime, DUMMY_CARRIER, 1 /* numPlans */,
new Intent()); new Intent());
@@ -145,6 +226,8 @@ public class DataUsageSummaryPreferenceTest {
assertThat(mCarrierInfo.getVisibility()).isEqualTo(View.VISIBLE); assertThat(mCarrierInfo.getVisibility()).isEqualTo(View.VISIBLE);
assertThat(mCarrierInfo.getCurrentTextColor()).isEqualTo( assertThat(mCarrierInfo.getCurrentTextColor()).isEqualTo(
Utils.getColorAttr(mContext, android.R.attr.colorError)); Utils.getColorAttr(mContext, android.R.attr.colorError));
assertThat(mCarrierInfo.getTypeface()).isEqualTo(
DataUsageSummaryPreference.SANS_SERIF_MEDIUM);
} }
@Test @Test
@@ -311,4 +394,4 @@ public class DataUsageSummaryPreferenceTest {
mLabel2 = (TextView) mHolder.findViewById(R.id.text2); mLabel2 = (TextView) mHolder.findViewById(R.id.text2);
mProgressBar = (ProgressBar) mHolder.findViewById(R.id.determinateBar); mProgressBar = (ProgressBar) mHolder.findViewById(R.id.determinateBar);
} }
} }