From 99c1ddc921060f54a7b4bcd7a4251b349daf2b8c Mon Sep 17 00:00:00 2001 From: John Zhao Date: Thu, 6 Sep 2018 00:29:31 +0800 Subject: [PATCH] DO NOT MERGE base: getDataUsageInfo get cycle validation When the DataUsageController calculate the DataUsageInfo based on the cycle from NetworkPolicyManager, that cycle should be not null. Otherwise, it couldn't be used to do operation like toInstant() directly. The error could be got from logcat is as: E AndroidRuntime: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.time.Instant java.time.ZonedDateTime.toInstant()' on a null object reference E AndroidRuntime: at com.android.settingslib.net. DataUsageController.getDataUsageInfo (DataUsageController.java:140) Inside of the core/java/android/net/NetworkPolicyManager.java: public static Iterator> cycleIterator(NetworkPolicy policy) { ... ... return Pair.create(null, null); ... ... } That should be avoided. Considering it could be happened in the NetworkPolicyManager side, and it is reasonable if it did it, validating operation is better to be considered by any caller such as the DataUsageController. Bug: 113952713 Test: specify the hasNext to be false but the DataUsageController don't crash. Change-Id: I2469c129a160e30615ea6011adf18688f951eac8 Signed-off-by: John Zhao --- .../src/com/android/settingslib/net/DataUsageController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java b/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java index f7aa29796ce83..33321938fe3fb 100644 --- a/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java +++ b/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java @@ -134,7 +134,7 @@ public class DataUsageController { final NetworkStatsHistory history = session.getHistoryForNetwork(template, FIELDS); final long now = System.currentTimeMillis(); final long start, end; - if (policy != null) { + if (policy != null && policy.hasCycle()) { final Pair cycle = NetworkPolicyManager .cycleIterator(policy).next(); start = cycle.first.toInstant().toEpochMilli();