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
This commit is contained in:
@@ -626,17 +626,20 @@ public final class DataProcessor {
|
|||||||
final List<BatteryHistEntry> batteryHistEntryList,
|
final List<BatteryHistEntry> batteryHistEntryList,
|
||||||
final @NonNull Set<String> systemAppsPackageNames,
|
final @NonNull Set<String> systemAppsPackageNames,
|
||||||
final @NonNull Set<Integer> systemAppsUids) {
|
final @NonNull Set<Integer> systemAppsUids) {
|
||||||
|
final List<BatteryDiffEntry> appEntries = new ArrayList<>();
|
||||||
|
final List<BatteryDiffEntry> systemEntries = new ArrayList<>();
|
||||||
if (batteryHistEntryList == null || batteryHistEntryList.isEmpty()) {
|
if (batteryHistEntryList == null || batteryHistEntryList.isEmpty()) {
|
||||||
Log.w(TAG, "batteryHistEntryList is null or empty in generateBatteryDiffData()");
|
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 int currentUserId = context.getUserId();
|
||||||
final UserHandle userHandle =
|
final UserHandle userHandle =
|
||||||
Utils.getManagedProfile(context.getSystemService(UserManager.class));
|
Utils.getManagedProfile(context.getSystemService(UserManager.class));
|
||||||
final int workProfileUserId =
|
final int workProfileUserId =
|
||||||
userHandle != null ? userHandle.getIdentifier() : Integer.MIN_VALUE;
|
userHandle != null ? userHandle.getIdentifier() : Integer.MIN_VALUE;
|
||||||
final List<BatteryDiffEntry> appEntries = new ArrayList<>();
|
|
||||||
final List<BatteryDiffEntry> systemEntries = new ArrayList<>();
|
|
||||||
|
|
||||||
for (BatteryHistEntry entry : batteryHistEntryList) {
|
for (BatteryHistEntry entry : batteryHistEntryList) {
|
||||||
final boolean isFromOtherUsers = isConsumedFromOtherUsers(
|
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(),
|
return new BatteryDiffData(context, startTimestamp, getCurrentTimeMillis(),
|
||||||
/* startBatteryLevel =*/ 100, getCurrentLevel(context), /* screenOnTime= */ 0L,
|
/* startBatteryLevel =*/ 100, getCurrentLevel(context), /* screenOnTime= */ 0L,
|
||||||
appEntries, systemEntries, systemAppsPackageNames, systemAppsUids,
|
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
|
// 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
|
// 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.
|
// 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());
|
allBatteryHistEntryKeys.addAll(slotBatteryHistMap.keySet());
|
||||||
}
|
}
|
||||||
@@ -1458,12 +1458,6 @@ public final class DataProcessor {
|
|||||||
appEntries.add(currentBatteryDiffEntry);
|
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,
|
return new BatteryDiffData(context, startTimestamp, endTimestamp, startBatteryLevel,
|
||||||
endBatteryLevel, slotScreenOnTime, appEntries, systemEntries,
|
endBatteryLevel, slotScreenOnTime, appEntries, systemEntries,
|
||||||
systemAppsPackageNames, systemAppsUids, /* isAccumulated= */ false);
|
systemAppsPackageNames, systemAppsUids, /* isAccumulated= */ false);
|
||||||
@@ -1563,9 +1557,9 @@ public final class DataProcessor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return diffEntryList.isEmpty() ? null : new BatteryDiffData(context, startTimestamp,
|
return new BatteryDiffData(context, startTimestamp, endTimestamp, startBatteryLevel,
|
||||||
endTimestamp, startBatteryLevel, endBatteryLevel, totalScreenOnTime, appEntries,
|
endBatteryLevel, totalScreenOnTime, appEntries, systemEntries,
|
||||||
systemEntries, /* systemAppsPackageNames= */ new ArraySet<>(),
|
/* systemAppsPackageNames= */ new ArraySet<>(),
|
||||||
/* systemAppsUids= */ new ArraySet<>(), /* isAccumulated= */ true);
|
/* systemAppsUids= */ new ArraySet<>(), /* isAccumulated= */ true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1397,12 +1397,14 @@ public final class DataProcessorTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void generateBatteryDiffData_emptyBatteryEntryList_returnNull() {
|
public void generateBatteryDiffData_emptyBatteryEntryList_returnEmptyBatteryDiffData() {
|
||||||
assertThat(DataProcessor.generateBatteryDiffData(mContext,
|
final BatteryDiffData batteryDiffData = DataProcessor.generateBatteryDiffData(mContext,
|
||||||
System.currentTimeMillis(),
|
System.currentTimeMillis(),
|
||||||
DataProcessor.convertToBatteryHistEntry(null, mBatteryUsageStats),
|
DataProcessor.convertToBatteryHistEntry(null, mBatteryUsageStats),
|
||||||
/* systemAppsPackageNames= */ Set.of(),
|
/* systemAppsPackageNames= */ Set.of(),
|
||||||
/* systemAppsUids= */ Set.of())).isNull();
|
/* systemAppsUids= */ Set.of());
|
||||||
|
assertThat(batteryDiffData.getAppDiffEntryList()).isEmpty();
|
||||||
|
assertThat(batteryDiffData.getSystemDiffEntryList()).isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
Reference in New Issue
Block a user