From e893a890ca47653dc47331bd139d8c86f58b7a2b Mon Sep 17 00:00:00 2001 From: ykhung Date: Tue, 28 Sep 2021 17:30:04 +0800 Subject: [PATCH] [Robustness] protect get battery stats from DeadSystemException Refine the original workaround patch in the ag/15527095 from NPE to return default BatteryUsageStats instance as we merged in the ag/15919139 (align the same solution). Bug: 195306545 Test: make SettingsRoboTests Change-Id: Ic03e8296d16ecb8629155f75727e9cde48c303eb --- src/com/android/settings/fuelgauge/BatteryInfo.java | 4 +++- .../settings/fuelgauge/BatteryUsageStatsLoader.java | 4 +++- src/com/android/settings/fuelgauge/BatteryUtils.java | 7 +++++-- .../android/settings/fuelgauge/PowerUsageSummary.java | 9 --------- .../settings/fuelgauge/batterytip/BatteryTipLoader.java | 8 +------- 5 files changed, 12 insertions(+), 20 deletions(-) diff --git a/src/com/android/settings/fuelgauge/BatteryInfo.java b/src/com/android/settings/fuelgauge/BatteryInfo.java index 4433da2c9cc..d641e7bef3c 100644 --- a/src/com/android/settings/fuelgauge/BatteryInfo.java +++ b/src/com/android/settings/fuelgauge/BatteryInfo.java @@ -162,7 +162,9 @@ public class BatteryInfo { .getBatteryUsageStats(); } catch (RuntimeException e) { Log.e(TAG, "getBatteryInfo() from getBatteryUsageStats()", e); - return null; + // Use default BatteryUsageStats. + stats = new BatteryUsageStats.Builder( + new String[0], /* includePowerModels */ false).build(); } } return getBatteryInfo(context, stats, shortString); diff --git a/src/com/android/settings/fuelgauge/BatteryUsageStatsLoader.java b/src/com/android/settings/fuelgauge/BatteryUsageStatsLoader.java index 0acc54e758b..2e3200d5835 100644 --- a/src/com/android/settings/fuelgauge/BatteryUsageStatsLoader.java +++ b/src/com/android/settings/fuelgauge/BatteryUsageStatsLoader.java @@ -48,7 +48,9 @@ public class BatteryUsageStatsLoader extends AsyncLoaderCompat loader, BatteryInfo batteryInfo) { - if (batteryInfo == null) { - Log.w(TAG, "mBatteryInfoLoaderCallbacks: batteryInfo = null"); - return; - } mBatteryHeaderPreferenceController.updateHeaderPreference(batteryInfo); mBatteryHeaderPreferenceController.updateHeaderByBatteryTips( mBatteryTipPreferenceController.getCurrentBatteryTip(), batteryInfo); @@ -131,10 +126,6 @@ public class PowerUsageSummary extends PowerUsageBase implements @Override public void onLoadFinished(Loader> loader, List data) { - if (mBatteryInfo == null) { - Log.w(TAG, "mBatteryTipsCallbacks: batteryInfo = null"); - return; - } mBatteryTipPreferenceController.updateBatteryTips(data); mBatteryHeaderPreferenceController.updateHeaderByBatteryTips( mBatteryTipPreferenceController.getCurrentBatteryTip(), mBatteryInfo); diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java index b6806e8573a..4b9858753da 100644 --- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java +++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java @@ -18,7 +18,6 @@ package com.android.settings.fuelgauge.batterytip; import android.content.Context; import android.os.BatteryUsageStats; -import android.util.Log; import androidx.annotation.VisibleForTesting; @@ -68,16 +67,11 @@ public class BatteryTipLoader extends AsyncLoaderCompat> { final BatteryInfo batteryInfo = mBatteryUtils.getBatteryInfo(TAG); final Context context = getContext(); - tips.add(new EarlyWarningDetector(policy, context).detect()); - if (batteryInfo == null) { - Log.w(TAG, "loadInBackground() batteryInfo = null"); - return tips; - } - tips.add(new LowBatteryDetector(context, policy, batteryInfo).detect()); tips.add(new HighUsageDetector(context, policy, mBatteryUsageStats, batteryInfo).detect()); tips.add(new SmartBatteryDetector( context, policy, batteryInfo, context.getContentResolver()).detect()); + tips.add(new EarlyWarningDetector(policy, context).detect()); tips.add(new BatteryDefenderDetector(batteryInfo).detect()); Collections.sort(tips); return tips;