diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java index b917d1f7a03..d5ddee245f5 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java +++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java @@ -29,6 +29,7 @@ import com.android.settings.fuelgauge.PowerUsageFeatureProvider; import com.android.settings.fuelgauge.batteryusage.bugreport.BatteryUsageLogUtils; import com.android.settings.overlay.FeatureFactory; +import java.io.IOException; import java.util.List; import java.util.Map; import java.util.function.Supplier; @@ -56,30 +57,32 @@ public final class BatteryUsageDataLoader { static void loadBatteryStatsData(final Context context, final boolean isFullChargeStart) { BatteryUsageLogUtils.writeLog(context, Action.FETCH_USAGE_DATA, ""); final long currentTime = System.currentTimeMillis(); - final BatteryUsageStats batteryUsageStats = DataProcessor.getBatteryUsageStats(context); - final List batteryEntryList = - sFakeBatteryEntryListSupplier != null - ? sFakeBatteryEntryListSupplier.get() - : DataProcessor.generateBatteryEntryListFromBatteryUsageStats( - context, batteryUsageStats); - if (batteryEntryList == null || batteryEntryList.isEmpty()) { - Log.w(TAG, "getBatteryEntryList() returns null or empty content"); - } - final long elapsedTime = System.currentTimeMillis() - currentTime; - Log.d(TAG, String.format("getBatteryUsageStats() in %d/ms", elapsedTime)); - if (isFullChargeStart) { - DatabaseUtils.recordDateTime(context, DatabaseUtils.KEY_LAST_LOAD_FULL_CHARGE_TIME); - DatabaseUtils.sendBatteryEventData( - context, - ConvertUtils.convertToBatteryEvent( - currentTime, BatteryEventType.FULL_CHARGED, 100)); - DatabaseUtils.removeDismissedPowerAnomalyKeys(context); - } + try (BatteryUsageStats batteryUsageStats = DataProcessor.getBatteryUsageStats(context)) { + final List batteryEntryList = + sFakeBatteryEntryListSupplier != null + ? sFakeBatteryEntryListSupplier.get() + : DataProcessor.generateBatteryEntryListFromBatteryUsageStats( + context, batteryUsageStats); + if (batteryEntryList == null || batteryEntryList.isEmpty()) { + Log.w(TAG, "getBatteryEntryList() returns null or empty content"); + } + final long elapsedTime = System.currentTimeMillis() - currentTime; + Log.d(TAG, String.format("getBatteryUsageStats() in %d/ms", elapsedTime)); + if (isFullChargeStart) { + DatabaseUtils.recordDateTime(context, DatabaseUtils.KEY_LAST_LOAD_FULL_CHARGE_TIME); + DatabaseUtils.sendBatteryEventData( + context, + ConvertUtils.convertToBatteryEvent( + currentTime, BatteryEventType.FULL_CHARGED, 100)); + DatabaseUtils.removeDismissedPowerAnomalyKeys(context); + } - // Uploads the BatteryEntry data into database. - DatabaseUtils.sendBatteryEntryData( - context, currentTime, batteryEntryList, batteryUsageStats, isFullChargeStart); - DataProcessor.closeBatteryUsageStats(batteryUsageStats); + // Uploads the BatteryEntry data into database. + DatabaseUtils.sendBatteryEntryData( + context, currentTime, batteryEntryList, batteryUsageStats, isFullChargeStart); + } catch (IOException e) { + Log.e(TAG, "loadBatteryStatsData:", e); + } } @VisibleForTesting diff --git a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java index ebe7996d335..fb7a9dbb65f 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java +++ b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java @@ -170,7 +170,7 @@ public final class DataProcessor { } /** Gets the {@link BatteryUsageStats} from system service. */ - @Nullable + @NonNull public static BatteryUsageStats getBatteryUsageStats(final Context context) { final long startTime = System.currentTimeMillis(); final BatteryUsageStatsQuery batteryUsageStatsQuery = @@ -240,17 +240,6 @@ public final class DataProcessor { return events; } - /** Closes the {@link BatteryUsageStats} after using it. */ - public static void closeBatteryUsageStats(BatteryUsageStats batteryUsageStats) { - if (batteryUsageStats != null) { - try { - batteryUsageStats.close(); - } catch (Exception e) { - Log.e(TAG, "BatteryUsageStats.close() failed", e); - } - } - } - /** * Generates the indexed {@link AppUsagePeriod} list data for each corresponding time slot. * Attributes the list of {@link AppUsageEvent} into hourly time slots and reformat them into @@ -1073,20 +1062,15 @@ public final class DataProcessor { } @Nullable - private static List getBatteryHistListFromFromStatsService( - final Context context) { - List batteryHistEntryList = null; - try { - final BatteryUsageStats batteryUsageStats = getBatteryUsageStats(context); + private static List getBatteryHistListFromFromStatsService(Context context) { + try (BatteryUsageStats batteryUsageStats = getBatteryUsageStats(context)) { final List batteryEntryList = generateBatteryEntryListFromBatteryUsageStats(context, batteryUsageStats); - batteryHistEntryList = convertToBatteryHistEntry(batteryEntryList, batteryUsageStats); - closeBatteryUsageStats(batteryUsageStats); - } catch (RuntimeException e) { - Log.e(TAG, "load batteryUsageStats:", e); + return convertToBatteryHistEntry(batteryEntryList, batteryUsageStats); + } catch (Exception e) { + Log.e(TAG, "getBatteryHistListFromFromStatsService:", e); + return null; } - - return batteryHistEntryList; } @VisibleForTesting diff --git a/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java b/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java index 0998e2d3444..6cfe115f5c3 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java +++ b/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java @@ -38,6 +38,7 @@ import android.util.ArrayMap; import android.util.ArraySet; import android.util.Log; +import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import com.android.settings.fuelgauge.BatteryUsageHistoricalLogEntry.Action; @@ -676,7 +677,7 @@ public final class DatabaseUtils { static List sendBatteryEntryData( final Context context, final long snapshotTimestamp, - final List batteryEntryList, + @Nullable final List batteryEntryList, final BatteryUsageStats batteryUsageStats, final boolean isFullChargeStart) { final long startTime = System.currentTimeMillis();