Merge "[S-QPR1] protect gettinng battery stats from DeadSystemException" into sc-qpr1-dev
diff --git a/src/com/android/settings/fuelgauge/BatteryInfo.java b/src/com/android/settings/fuelgauge/BatteryInfo.java
index 92151c0..d641e7b 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,15 @@
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);
+ // 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/BatteryOptimizeUtils.java b/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
index 4a56040..21d2023 100644
--- a/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
@@ -74,6 +74,14 @@
}
public void setAppUsageState(AppUsageState state) {
+ try {
+ setAppUsageStateInternal(state);
+ } catch (Exception e) {
+ Log.e(TAG, "setAppUsageState() is failed for " + mPackageName, e);
+ }
+ }
+
+ private void setAppUsageStateInternal(AppUsageState state) {
switch (state) {
case RESTRICTED:
mBatteryUtils.setForceAppStandby(mUid, mPackageName, AppOpsManager.MODE_IGNORED);
diff --git a/src/com/android/settings/fuelgauge/BatteryUsageStatsLoader.java b/src/com/android/settings/fuelgauge/BatteryUsageStatsLoader.java
index d35ef82..2e3200d 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,14 @@
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);
+ // Use default BatteryUsageStats.
+ return new BatteryUsageStats.Builder(
+ new String[0], /* includePowerModels */ false).build();
+ }
}
@Override
diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java
index d521ed1..1c458e1 100644
--- a/src/com/android/settings/fuelgauge/BatteryUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryUtils.java
@@ -368,8 +368,17 @@
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() error for getBatteryUsageStats()", e);
+ // Use default BatteryUsageStats.
+ batteryUsageStats =
+ new BatteryUsageStats.Builder(new String[0], /* includePowerModels */ false)
+ .build();
+ }
final long startTime = System.currentTimeMillis();