Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7385665d authored by Zaiyue Xue's avatar Zaiyue Xue Committed by Android (Google) Code Review
Browse files

Merge "Use empty BatteryDiffData instead of null to avoid NullPointerException" into main

parents 03aa2e44 834e19b1
Loading
Loading
Loading
Loading
+12 −18
Original line number Diff line number Diff line
@@ -626,17 +626,20 @@ public final class DataProcessor {
            final List<BatteryHistEntry> batteryHistEntryList,
            final @NonNull Set<String> systemAppsPackageNames,
            final @NonNull Set<Integer> systemAppsUids) {
        final List<BatteryDiffEntry> appEntries = new ArrayList<>();
        final List<BatteryDiffEntry> 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<BatteryDiffEntry> appEntries = new ArrayList<>();
        final List<BatteryDiffEntry> 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);
    }

+5 −3
Original line number Diff line number Diff line
@@ -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