From 9a65e5fec78c744f21b0c9673229f7828dbe44f4 Mon Sep 17 00:00:00 2001 From: Jan Nordqvist Date: Mon, 12 Mar 2018 15:19:29 -0700 Subject: [PATCH] Set color of update line to red if update is older than six hours. In Data Usage screen, out-of-date state Bug: 70950124 Test: manual Test: make RunSettingsRoboTests Change-Id: Icf6fafe9ab61a2c1ac3fba2bebf3bd4407c0ecfe --- .../datausage/DataUsageSummaryPreference.java | 24 +++++++++---- .../DataUsageSummaryPreferenceController.java | 2 +- .../DataUsageSummaryPreferenceTest.java | 34 +++++++++++++++++-- 3 files changed, 50 insertions(+), 10 deletions(-) diff --git a/src/com/android/settings/datausage/DataUsageSummaryPreference.java b/src/com/android/settings/datausage/DataUsageSummaryPreference.java index f1f3283b0d9..e8715aac296 100644 --- a/src/com/android/settings/datausage/DataUsageSummaryPreference.java +++ b/src/com/android/settings/datausage/DataUsageSummaryPreference.java @@ -29,6 +29,7 @@ import android.widget.ProgressBar; import android.widget.TextView; import com.android.settings.R; +import com.android.settingslib.Utils; import com.android.settingslib.utils.StringUtil; import java.util.Objects; @@ -39,6 +40,7 @@ import java.util.concurrent.TimeUnit; */ 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; @@ -48,6 +50,8 @@ public class DataUsageSummaryPreference extends Preference { 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; @@ -140,8 +144,8 @@ public class DataUsageSummaryPreference extends Preference { 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) -> { @@ -159,6 +163,7 @@ public class DataUsageSummaryPreference extends Preference { limitInfo.setText(mLimitInfoText); } + private void updateDataUsageLabels(PreferenceViewHolder holder) { TextView usageNumberField = (TextView) holder.findViewById(R.id.data_usage_view); usageNumberField.setText(TextUtils.expandTemplate( @@ -194,18 +199,25 @@ public class DataUsageSummaryPreference extends Preference { 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); } diff --git a/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java b/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java index 5deca964fbd..281c8b6970c 100644 --- a/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java +++ b/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java @@ -219,7 +219,7 @@ public class DataUsageSummaryPreferenceController extends BasePreferenceControll mCycleStart = rule.start.toEpochSecond() * 1000L; mCycleEnd = rule.end.toEpochSecond() * 1000L; } - mSnapshotTime = System.currentTimeMillis() - primaryPlan.getDataUsageTime(); + mSnapshotTime = primaryPlan.getDataUsageTime(); } } mManageSubscriptionIntent = diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java index 0dd2d893545..638ee792045 100644 --- a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java +++ b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java @@ -16,8 +16,6 @@ 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; @@ -31,6 +29,7 @@ import android.widget.TextView; 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; @@ -41,6 +40,10 @@ import org.mockito.MockitoAnnotations; 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 { @@ -119,6 +122,31 @@ public class DataUsageSummaryPreferenceTest { 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 public void testSetUsageInfo_withNoDataPlans_usageTitleNotShown() { mSummaryPreference.setUsageInfo(mCycleEnd, mUpdateTime, DUMMY_CARRIER, 0 /* numPlans */, @@ -140,7 +168,7 @@ public class DataUsageSummaryPreferenceTest { @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());