summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDoris Ling <dling@google.com>2018-12-06 17:12:05 -0800
committerDoris Ling <dling@google.com>2018-12-06 17:12:05 -0800
commit8727a408939176d4a60d0bd4380b04c51b55e097 (patch)
tree436b7c2dea56e8b41faaf032a08d7bb8889d7aa2
parentf80e5b561e6a6f0e6f5cdb538d161db91f72f740 (diff)
downloadpackages_apps_Settings-8727a408939176d4a60d0bd4380b04c51b55e097.tar.gz
packages_apps_Settings-8727a408939176d4a60d0bd4380b04c51b55e097.tar.bz2
packages_apps_Settings-8727a408939176d4a60d0bd4380b04c51b55e097.zip
Don't plot usage data beyond current date.
- the new data usage api returns buckets for future date with 0 usage. When we plot the data usage chart, need to check the bucket date to make sure we only plot points up to the current date. Change-Id: I50e161ca9cdbb30c8fda8f6cdd24c993b546ad0d Fixes: 120490567 Test: make RunSettingsRoboTests
-rw-r--r--src/com/android/settings/datausage/ChartDataUsagePreference.java4
-rw-r--r--tests/robotests/src/com/android/settings/datausage/ChartDataUsagePreferenceTest.java68
2 files changed, 68 insertions, 4 deletions
diff --git a/src/com/android/settings/datausage/ChartDataUsagePreference.java b/src/com/android/settings/datausage/ChartDataUsagePreference.java
index 1c8eb52869..17f23c4ec8 100644
--- a/src/com/android/settings/datausage/ChartDataUsagePreference.java
+++ b/src/com/android/settings/datausage/ChartDataUsagePreference.java
@@ -95,9 +95,13 @@ public class ChartDataUsagePreference extends Preference {
final SparseIntArray points = new SparseIntArray();
points.put(0, 0);
+ final long now = System.currentTimeMillis();
long totalData = 0;
for (NetworkCycleData data : usageSummary) {
final long startTime = data.getStartTime();
+ if (startTime > now) {
+ break;
+ }
final long endTime = data.getEndTime();
// increment by current bucket total
diff --git a/tests/robotests/src/com/android/settings/datausage/ChartDataUsagePreferenceTest.java b/tests/robotests/src/com/android/settings/datausage/ChartDataUsagePreferenceTest.java
index af56029ddc..0f9aed118e 100644
--- a/tests/robotests/src/com/android/settings/datausage/ChartDataUsagePreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/ChartDataUsagePreferenceTest.java
@@ -37,11 +37,14 @@ import org.robolectric.RuntimeEnvironment;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.TimeUnit;
@RunWith(SettingsRobolectricTestRunner.class)
public class ChartDataUsagePreferenceTest {
+ // Test cycle start date, 20 Mar 2018 22:00: GMT
private static final long TIMESTAMP_START = 1521583200000L;
+ // Test bucket end date, 22 Mar 2018 00:00:00
private static final long TIMESTAMP_END = 1521676800000L;
private List<NetworkCycleData> mNetworkCycleData;
@@ -55,8 +58,6 @@ public class ChartDataUsagePreferenceTest {
mContext = RuntimeEnvironment.application;
mPreference = new ChartDataUsagePreference(mContext, null);
- createTestNetworkData();
- mPreference.setNetworkCycleData(mNetworkCycleChartData);
}
@Test
@@ -64,11 +65,13 @@ public class ChartDataUsagePreferenceTest {
final UsageView usageView = mock(UsageView.class);
final ArgumentCaptor<SparseIntArray> pointsCaptor =
ArgumentCaptor.forClass(SparseIntArray.class);
+ createTestNetworkData();
+ mPreference.setNetworkCycleData(mNetworkCycleChartData);
mPreference.calcPoints(usageView, mNetworkCycleData.subList(0, 5));
verify(usageView).addPath(pointsCaptor.capture());
- SparseIntArray points = pointsCaptor.getValue();
+ final SparseIntArray points = pointsCaptor.getValue();
// the point should be normal usage data
assertThat(points.valueAt(1)).isNotEqualTo(-1);
}
@@ -78,16 +81,73 @@ public class ChartDataUsagePreferenceTest {
final UsageView usageView = mock(UsageView.class);
final ArgumentCaptor<SparseIntArray> pointsCaptor =
ArgumentCaptor.forClass(SparseIntArray.class);
+ createTestNetworkData();
+ mPreference.setNetworkCycleData(mNetworkCycleChartData);
mPreference.calcPoints(usageView, mNetworkCycleData.subList(2, 7));
verify(usageView).addPath(pointsCaptor.capture());
- SparseIntArray points = pointsCaptor.getValue();
+ final SparseIntArray points = pointsCaptor.getValue();
// indicator that no data is available
assertThat(points.keyAt(1)).isEqualTo(points.keyAt(2) - 1);
assertThat(points.valueAt(1)).isEqualTo(-1);
}
+ @Test
+ public void calcPoints_shouldNotDrawPointForFutureDate() {
+ final UsageView usageView = mock(UsageView.class);
+ final ArgumentCaptor<SparseIntArray> pointsCaptor =
+ ArgumentCaptor.forClass(SparseIntArray.class);
+ final long tonight = System.currentTimeMillis() + TimeUnit.HOURS.toMillis(12);
+ mNetworkCycleData = new ArrayList<>();
+ // add test usage data for last 5 days
+ mNetworkCycleData.add(createNetworkCycleData(
+ tonight - TimeUnit.DAYS.toMillis(5), tonight - TimeUnit.DAYS.toMillis(4), 743823454L));
+ mNetworkCycleData.add(createNetworkCycleData(
+ tonight - TimeUnit.DAYS.toMillis(4), tonight - TimeUnit.DAYS.toMillis(3), 64396L));
+ mNetworkCycleData.add(createNetworkCycleData(
+ tonight - TimeUnit.DAYS.toMillis(3), tonight - TimeUnit.DAYS.toMillis(2), 2832L));
+ mNetworkCycleData.add(createNetworkCycleData(
+ tonight - TimeUnit.DAYS.toMillis(2), tonight - TimeUnit.DAYS.toMillis(1), 83849690L));
+ mNetworkCycleData.add(createNetworkCycleData(
+ tonight - TimeUnit.DAYS.toMillis(1), tonight, 1883657L));
+ // add dummy usage data for next 5 days
+ mNetworkCycleData.add(createNetworkCycleData(
+ tonight, tonight + TimeUnit.DAYS.toMillis(1), 0L));
+ mNetworkCycleData.add(createNetworkCycleData(
+ tonight + TimeUnit.DAYS.toMillis(1), tonight + TimeUnit.DAYS.toMillis(2), 0L));
+ mNetworkCycleData.add(createNetworkCycleData(
+ tonight + TimeUnit.DAYS.toMillis(2), tonight + TimeUnit.DAYS.toMillis(3), 0L));
+ mNetworkCycleData.add(createNetworkCycleData(
+ tonight + TimeUnit.DAYS.toMillis(3), tonight + TimeUnit.DAYS.toMillis(4), 0L));
+ mNetworkCycleData.add(createNetworkCycleData(
+ tonight + TimeUnit.DAYS.toMillis(4), tonight + TimeUnit.DAYS.toMillis(5), 0L));
+ mNetworkCycleData.add(createNetworkCycleData(
+ tonight + TimeUnit.DAYS.toMillis(5), tonight + TimeUnit.DAYS.toMillis(6), 0L));
+
+ final NetworkCycleChartData.Builder builder = new NetworkCycleChartData.Builder();
+ builder.setUsageBuckets(mNetworkCycleData)
+ .setStartTime(tonight - TimeUnit.DAYS.toMillis(5))
+ .setEndTime(tonight + TimeUnit.DAYS.toMillis(6));
+ mNetworkCycleChartData = builder.build();
+ mPreference.setNetworkCycleData(mNetworkCycleChartData);
+
+ mPreference.calcPoints(usageView, mNetworkCycleData);
+
+ verify(usageView).addPath(pointsCaptor.capture());
+ final SparseIntArray points = pointsCaptor.getValue();
+ // should only have 7 points: 1 dummy point indicating the start of data, starting point 0,
+ // and 5 actual data point for each day
+ assertThat(points.size()).isEqualTo(7);
+ assertThat(points.keyAt(0)).isEqualTo(-1);
+ assertThat(points.keyAt(1)).isEqualTo(0);
+ assertThat(points.keyAt(2)).isEqualTo(TimeUnit.DAYS.toMinutes(1));
+ assertThat(points.keyAt(3)).isEqualTo(TimeUnit.DAYS.toMinutes(2));
+ assertThat(points.keyAt(4)).isEqualTo(TimeUnit.DAYS.toMinutes(3));
+ assertThat(points.keyAt(5)).isEqualTo(TimeUnit.DAYS.toMinutes(4));
+ assertThat(points.keyAt(6)).isEqualTo(TimeUnit.DAYS.toMinutes(5));
+ }
+
private void createTestNetworkData() {
mNetworkCycleData = new ArrayList<>();
// create 10 arbitrary network data