import android.widget.TextView;
import com.android.settings.R;
+import com.android.settingslib.Utils;
import com.android.settingslib.utils.StringUtil;
import java.util.Objects;
*/
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 String mStartLabel;
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;
/** The ending time of the billing cycle in milliseconds since epoch. */
private long mCycleEndTimeMs;
updateCycleTimeText(holder);
- 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);
launchButton.setOnClickListener((view) -> {
limitInfo.setText(mLimitInfoText);
}
+
private void updateDataUsageLabels(PreferenceViewHolder holder) {
TextView usageNumberField = (TextView) holder.findViewById(R.id.data_usage_view);
usageNumberField.setText(TextUtils.expandTemplate(
R.plurals.billing_cycle_days_left, (int) daysLeft, (int) daysLeft));
}
- private void setCarrierInfo(TextView carrierInfo, CharSequence carrierName, long updateAge) {
- if (mNumPlans > 0 && updateAge >= 0L) {
+
+ private void updateCarrierInfo(TextView carrierInfo) {
+ if (mNumPlans > 0 && mSnapshotTimeMs >= 0L) {
+ long updateAge = System.currentTimeMillis() - mSnapshotTimeMs;
carrierInfo.setVisibility(View.VISIBLE);
- if (carrierName != null) {
+ if (mCarrierName != null) {
carrierInfo.setText(getContext().getString(R.string.carrier_and_update_text,
- carrierName, StringUtil.formatRelativeTime(
+ 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(
+ updateAge <= WARNING_AGE
+ ? Utils.getColorAttr(getContext(), android.R.attr.textColorPrimary)
+ : Utils.getColorAttr(getContext(), android.R.attr.colorError));
} else {
carrierInfo.setVisibility(View.GONE);
}
package com.android.settings.datausage;
-import static com.google.common.truth.Truth.assertThat;
-
import android.content.Context;
import android.content.Intent;
import android.support.v7.preference.PreferenceViewHolder;
import com.android.settings.R;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
+import com.android.settingslib.Utils;
import com.android.settingslib.utils.StringUtil;
import java.util.concurrent.TimeUnit;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
+import java.util.concurrent.TimeUnit;
+
+import static com.google.common.truth.Truth.assertThat;
+
@RunWith(SettingsRobolectricTestRunner.class)
@Config(shadows = SettingsShadowResourcesImpl.class)
public class DataUsageSummaryPreferenceTest {
}
@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
public void testSetUsageInfo_withNoDataPlans_usageTitleNotShown() {
mSummaryPreference.setUsageInfo(mCycleEnd, mUpdateTime, DUMMY_CARRIER, 0 /* numPlans */,
new Intent());
@Test
public void testSetUsageInfo_cycleRemainingTimeIsLessOneDay() {
// just under one day
- final long cycleEnd = System.currentTimeMillis() + TimeUnit.DAYS.toMillis(1) - 1;
+ final long cycleEnd = System.currentTimeMillis() + TimeUnit.HOURS.toMillis(23);
mSummaryPreference.setUsageInfo(cycleEnd, mUpdateTime, DUMMY_CARRIER, 0 /* numPlans */,
new Intent());