From 834e19b188aeec271e82d7c99bc020a09e82e4cd Mon Sep 17 00:00:00 2001 From: Zaiyue Xue Date: Sun, 8 Oct 2023 15:09:49 +0800 Subject: [PATCH] Use empty BatteryDiffData instead of null to avoid NullPointerException This is one action post P0 bug b/301362376. Bug: 304067689 Bug: 303838369 Fix: 304067689 Fix: 303838369 Test: manual Change-Id: I8bb6bfe9c3fca78ab19dfbfd2a184b0f92f4ef09 --- .../fuelgauge/batteryusage/DataProcessor.java | 30 ++++++++----------- .../batteryusage/DataProcessorTest.java | 8 +++-- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java index 32cd1b9da5e..609919223d4 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java +++ b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java @@ -626,17 +626,20 @@ public final class DataProcessor { final List batteryHistEntryList, final @NonNull Set systemAppsPackageNames, final @NonNull Set systemAppsUids) { + final List appEntries = new ArrayList<>(); + final List systemEntries = new ArrayList<>(); if (batteryHistEntryList == null || batteryHistEntryList.isEmpty()) { Log.w(TAG, "batteryHistEntryList is null or empty in generateBatteryDiffData()"); - return null; + return new BatteryDiffData(context, startTimestamp, getCurrentTimeMillis(), + /* startBatteryLevel =*/ 100, getCurrentLevel(context), /* screenOnTime= */ 0L, + appEntries, systemEntries, systemAppsPackageNames, systemAppsUids, + /* isAccumulated= */ false); } final int currentUserId = context.getUserId(); final UserHandle userHandle = Utils.getManagedProfile(context.getSystemService(UserManager.class)); final int workProfileUserId = userHandle != null ? userHandle.getIdentifier() : Integer.MIN_VALUE; - final List appEntries = new ArrayList<>(); - final List systemEntries = new ArrayList<>(); for (BatteryHistEntry entry : batteryHistEntryList) { final boolean isFromOtherUsers = isConsumedFromOtherUsers( @@ -670,11 +673,6 @@ public final class DataProcessor { } } } - - // If there is no data, return null instead of empty item. - if (appEntries.isEmpty() && systemEntries.isEmpty()) { - return null; - } return new BatteryDiffData(context, startTimestamp, getCurrentTimeMillis(), /* startBatteryLevel =*/ 100, getCurrentLevel(context), /* screenOnTime= */ 0L, appEntries, systemEntries, systemAppsPackageNames, systemAppsUids, @@ -1318,7 +1316,9 @@ public final class DataProcessor { // We should not get the empty list since we have at least one fake data to record // the battery level and status in each time slot, the empty list is used to // represent there is no enough data to apply interpolation arithmetic. - return null; + return new BatteryDiffData(context, startTimestamp, endTimestamp, startBatteryLevel, + endBatteryLevel, /* screenOnTime= */ 0L, appEntries, systemEntries, + systemAppsPackageNames, systemAppsUids, /* isAccumulated= */ false); } allBatteryHistEntryKeys.addAll(slotBatteryHistMap.keySet()); } @@ -1458,12 +1458,6 @@ public final class DataProcessor { appEntries.add(currentBatteryDiffEntry); } } - - // If there is no data, return null instead of empty item. - if (appEntries.isEmpty() && systemEntries.isEmpty()) { - return null; - } - return new BatteryDiffData(context, startTimestamp, endTimestamp, startBatteryLevel, endBatteryLevel, slotScreenOnTime, appEntries, systemEntries, systemAppsPackageNames, systemAppsUids, /* isAccumulated= */ false); @@ -1563,9 +1557,9 @@ public final class DataProcessor { } } - return diffEntryList.isEmpty() ? null : new BatteryDiffData(context, startTimestamp, - endTimestamp, startBatteryLevel, endBatteryLevel, totalScreenOnTime, appEntries, - systemEntries, /* systemAppsPackageNames= */ new ArraySet<>(), + return new BatteryDiffData(context, startTimestamp, endTimestamp, startBatteryLevel, + endBatteryLevel, totalScreenOnTime, appEntries, systemEntries, + /* systemAppsPackageNames= */ new ArraySet<>(), /* systemAppsUids= */ new ArraySet<>(), /* isAccumulated= */ true); } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java index c4394f76130..636a7a363fd 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java @@ -1397,12 +1397,14 @@ public final class DataProcessorTest { } @Test - public void generateBatteryDiffData_emptyBatteryEntryList_returnNull() { - assertThat(DataProcessor.generateBatteryDiffData(mContext, + public void generateBatteryDiffData_emptyBatteryEntryList_returnEmptyBatteryDiffData() { + final BatteryDiffData batteryDiffData = DataProcessor.generateBatteryDiffData(mContext, System.currentTimeMillis(), DataProcessor.convertToBatteryHistEntry(null, mBatteryUsageStats), /* systemAppsPackageNames= */ Set.of(), - /* systemAppsUids= */ Set.of())).isNull(); + /* systemAppsUids= */ Set.of()); + assertThat(batteryDiffData.getAppDiffEntryList()).isEmpty(); + assertThat(batteryDiffData.getSystemDiffEntryList()).isEmpty(); } @Test