From c12b9500e6f64ccef372ce888e2c0cd0ae483012 Mon Sep 17 00:00:00 2001 From: ykhung Date: Thu, 28 Apr 2022 22:41:24 +0800 Subject: [PATCH] Refine the BatteryUsageStats close() method invoke timing Refine invoke batteryUsageStats.close() timing to 1) avoid closing it before the UI is ready to ignore showing the battery usage app list data for AOSP version, and 2) avoid close the BatteryUsageStats which is passed from caller components in the BatteryInfo with unexpected behavior. Bug: 220717612 Test: make RunSettingsRoboTests -j56 ROBOTEST_FILTER="com.android.settings.fuelgauge" Change-Id: I0f75580ac68d72b41fa9a7f43aa6ea694f0992ff --- .../settings/fuelgauge/BatteryInfo.java | 12 ++++++--- .../settings/fuelgauge/PowerUsageBase.java | 25 +++++++++++-------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/com/android/settings/fuelgauge/BatteryInfo.java b/src/com/android/settings/fuelgauge/BatteryInfo.java index 98f19fedb3d..b1e4c34e6ea 100644 --- a/src/com/android/settings/fuelgauge/BatteryInfo.java +++ b/src/com/android/settings/fuelgauge/BatteryInfo.java @@ -153,6 +153,7 @@ public class BatteryInfo { new AsyncTask() { @Override protected BatteryInfo doInBackground(Void... params) { + boolean shouldCloseBatteryUsageStats = false; BatteryUsageStats stats; if (batteryUsageStats != null) { stats = batteryUsageStats; @@ -160,6 +161,7 @@ public class BatteryInfo { try { stats = context.getSystemService(BatteryStatsManager.class) .getBatteryUsageStats(); + shouldCloseBatteryUsageStats = true; } catch (RuntimeException e) { Log.e(TAG, "getBatteryInfo() from getBatteryUsageStats()", e); // Use default BatteryUsageStats. @@ -168,10 +170,12 @@ public class BatteryInfo { } final BatteryInfo batteryInfo = getBatteryInfo(context, stats, shortString); - try { - stats.close(); - } catch (Exception e) { - Log.e(TAG, "BatteryUsageStats.close() failed", e); + if (shouldCloseBatteryUsageStats) { + try { + stats.close(); + } catch (Exception e) { + Log.e(TAG, "BatteryUsageStats.close() failed", e); + } } return batteryInfo; } diff --git a/src/com/android/settings/fuelgauge/PowerUsageBase.java b/src/com/android/settings/fuelgauge/PowerUsageBase.java index e95067936d6..6563155fb75 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageBase.java +++ b/src/com/android/settings/fuelgauge/PowerUsageBase.java @@ -83,6 +83,7 @@ public abstract class PowerUsageBase extends DashboardFragment { public void onStop() { super.onStop(); mBatteryBroadcastReceiver.unRegister(); + closeBatteryUsageStatsIfNeeded(); } protected void restartBatteryStatsLoader(int refreshType) { @@ -104,16 +105,6 @@ public abstract class PowerUsageBase extends DashboardFragment { final long startTime = System.currentTimeMillis(); historyPref.setBatteryUsageStats(mBatteryUsageStats); BatteryUtils.logRuntime(TAG, "updatePreference", startTime); - if (mBatteryUsageStats == null) { - return; - } - try { - mBatteryUsageStats.close(); - } catch (Exception e) { - Log.e(TAG, "BatteryUsageStats.close() failed", e); - } finally { - mBatteryUsageStats = null; - } } private class BatteryUsageStatsLoaderCallbacks @@ -130,6 +121,7 @@ public abstract class PowerUsageBase extends DashboardFragment { @Override public void onLoadFinished(Loader loader, BatteryUsageStats batteryUsageStats) { + closeBatteryUsageStatsIfNeeded(); mBatteryUsageStats = batteryUsageStats; PowerUsageBase.this.onLoadFinished(mRefreshType); } @@ -138,4 +130,17 @@ public abstract class PowerUsageBase extends DashboardFragment { public void onLoaderReset(Loader loader) { } } + + private void closeBatteryUsageStatsIfNeeded() { + if (mBatteryUsageStats == null) { + return; + } + try { + mBatteryUsageStats.close(); + } catch (Exception e) { + Log.e(TAG, "BatteryUsageStats.close() failed", e); + } finally { + mBatteryUsageStats = null; + } + } }