Merge "[Robustness] protect get battery stats from DeadSystemException" into sc-v2-dev
diff --git a/src/com/android/settings/fuelgauge/BatteryInfo.java b/src/com/android/settings/fuelgauge/BatteryInfo.java
index 92151c0..4433da2 100644
--- a/src/com/android/settings/fuelgauge/BatteryInfo.java
+++ b/src/com/android/settings/fuelgauge/BatteryInfo.java
@@ -25,6 +25,7 @@
import android.os.BatteryUsageStats;
import android.os.SystemClock;
import android.text.format.Formatter;
+import android.util.Log;
import android.util.SparseIntArray;
import androidx.annotation.NonNull;
@@ -42,6 +43,7 @@
import com.android.settingslib.utils.StringUtil;
public class BatteryInfo {
+ private static final String TAG = "BatteryInfo";
public CharSequence chargeLabel;
public CharSequence remainingLabel;
@@ -155,8 +157,13 @@
if (batteryUsageStats != null) {
stats = batteryUsageStats;
} else {
- stats = context.getSystemService(BatteryStatsManager.class)
- .getBatteryUsageStats();
+ try {
+ stats = context.getSystemService(BatteryStatsManager.class)
+ .getBatteryUsageStats();
+ } catch (RuntimeException e) {
+ Log.e(TAG, "getBatteryInfo() from getBatteryUsageStats()", e);
+ return null;
+ }
}
return getBatteryInfo(context, stats, shortString);
}
diff --git a/src/com/android/settings/fuelgauge/BatteryUsageStatsLoader.java b/src/com/android/settings/fuelgauge/BatteryUsageStatsLoader.java
index d35ef82..0acc54e 100644
--- a/src/com/android/settings/fuelgauge/BatteryUsageStatsLoader.java
+++ b/src/com/android/settings/fuelgauge/BatteryUsageStatsLoader.java
@@ -20,6 +20,7 @@
import android.os.BatteryStatsManager;
import android.os.BatteryUsageStats;
import android.os.BatteryUsageStatsQuery;
+import android.util.Log;
import com.android.settingslib.utils.AsyncLoaderCompat;
@@ -27,6 +28,7 @@
* Loader to get new {@link BatteryUsageStats} in the background
*/
public class BatteryUsageStatsLoader extends AsyncLoaderCompat<BatteryUsageStats> {
+ private static final String TAG = "BatteryUsageStatsLoader";
private final BatteryStatsManager mBatteryStatsManager;
private final boolean mIncludeBatteryHistory;
@@ -42,7 +44,12 @@
if (mIncludeBatteryHistory) {
builder.includeBatteryHistory();
}
- return mBatteryStatsManager.getBatteryUsageStats(builder.build());
+ try {
+ return mBatteryStatsManager.getBatteryUsageStats(builder.build());
+ } catch (RuntimeException e) {
+ Log.e(TAG, "loadInBackground() for getBatteryUsageStats()", e);
+ return null;
+ }
}
@Override
diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java
index d521ed1..f8f01b9 100644
--- a/src/com/android/settings/fuelgauge/BatteryUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryUtils.java
@@ -368,8 +368,14 @@
public BatteryInfo getBatteryInfo(final String tag) {
final BatteryStatsManager systemService = mContext.getSystemService(
BatteryStatsManager.class);
- final BatteryUsageStats batteryUsageStats = systemService.getBatteryUsageStats(
- new BatteryUsageStatsQuery.Builder().includeBatteryHistory().build());
+ BatteryUsageStats batteryUsageStats;
+ try {
+ batteryUsageStats = systemService.getBatteryUsageStats(
+ new BatteryUsageStatsQuery.Builder().includeBatteryHistory().build());
+ } catch (RuntimeException e) {
+ Log.e(TAG, "getBatteryInfo() from getBatteryUsageStats()", e);
+ return null;
+ }
final long startTime = System.currentTimeMillis();
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 19a8011..638aaa5 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -25,6 +25,7 @@
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings.Global;
+import android.util.Log;
import androidx.annotation.VisibleForTesting;
import androidx.loader.app.LoaderManager;
@@ -103,6 +104,10 @@
@Override
public void onLoadFinished(Loader<BatteryInfo> loader, BatteryInfo batteryInfo) {
+ if (batteryInfo == null) {
+ Log.w(TAG, "mBatteryInfoLoaderCallbacks: batteryInfo = null");
+ return;
+ }
mBatteryHeaderPreferenceController.updateHeaderPreference(batteryInfo);
mBatteryHeaderPreferenceController.updateHeaderByBatteryTips(
mBatteryTipPreferenceController.getCurrentBatteryTip(), batteryInfo);
@@ -126,6 +131,10 @@
@Override
public void onLoadFinished(Loader<List<BatteryTip>> loader,
List<BatteryTip> 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 7d11ba5..b6806e8 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java
@@ -18,6 +18,7 @@
import android.content.Context;
import android.os.BatteryUsageStats;
+import android.util.Log;
import androidx.annotation.VisibleForTesting;
@@ -67,16 +68,17 @@
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());
- // Disable this feature now since it introduces false positive cases. We will try to improve
- // it in the future.
- // tips.add(new RestrictAppDetector(context, policy).detect());
-
Collections.sort(tips);
return tips;
}