Merge "[S-QPR1] protect gettinng battery stats from DeadSystemException" into sc-qpr1-dev am: 36072e86ef

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/15919139

Change-Id: I92e32ec565c45d58b28c1430693f5fba11780844
This commit is contained in:
YUKAI HUNG
2021-09-28 07:30:26 +00:00
committed by Automerger Merge Worker
4 changed files with 40 additions and 5 deletions

View File

@@ -25,6 +25,7 @@ import android.os.BatteryStatsManager;
import android.os.BatteryUsageStats; import android.os.BatteryUsageStats;
import android.os.SystemClock; import android.os.SystemClock;
import android.text.format.Formatter; import android.text.format.Formatter;
import android.util.Log;
import android.util.SparseIntArray; import android.util.SparseIntArray;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@@ -42,6 +43,7 @@ import com.android.settingslib.utils.PowerUtil;
import com.android.settingslib.utils.StringUtil; import com.android.settingslib.utils.StringUtil;
public class BatteryInfo { public class BatteryInfo {
private static final String TAG = "BatteryInfo";
public CharSequence chargeLabel; public CharSequence chargeLabel;
public CharSequence remainingLabel; public CharSequence remainingLabel;
@@ -155,8 +157,15 @@ public class BatteryInfo {
if (batteryUsageStats != null) { if (batteryUsageStats != null) {
stats = batteryUsageStats; stats = batteryUsageStats;
} else { } else {
stats = context.getSystemService(BatteryStatsManager.class) try {
.getBatteryUsageStats(); 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); return getBatteryInfo(context, stats, shortString);
} }

View File

@@ -74,6 +74,14 @@ public class BatteryOptimizeUtils {
} }
public void setAppUsageState(AppUsageState state) { 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) { switch (state) {
case RESTRICTED: case RESTRICTED:
mBatteryUtils.setForceAppStandby(mUid, mPackageName, AppOpsManager.MODE_IGNORED); mBatteryUtils.setForceAppStandby(mUid, mPackageName, AppOpsManager.MODE_IGNORED);

View File

@@ -20,6 +20,7 @@ import android.content.Context;
import android.os.BatteryStatsManager; import android.os.BatteryStatsManager;
import android.os.BatteryUsageStats; import android.os.BatteryUsageStats;
import android.os.BatteryUsageStatsQuery; import android.os.BatteryUsageStatsQuery;
import android.util.Log;
import com.android.settingslib.utils.AsyncLoaderCompat; import com.android.settingslib.utils.AsyncLoaderCompat;
@@ -27,6 +28,7 @@ import com.android.settingslib.utils.AsyncLoaderCompat;
* Loader to get new {@link BatteryUsageStats} in the background * Loader to get new {@link BatteryUsageStats} in the background
*/ */
public class BatteryUsageStatsLoader extends AsyncLoaderCompat<BatteryUsageStats> { public class BatteryUsageStatsLoader extends AsyncLoaderCompat<BatteryUsageStats> {
private static final String TAG = "BatteryUsageStatsLoader";
private final BatteryStatsManager mBatteryStatsManager; private final BatteryStatsManager mBatteryStatsManager;
private final boolean mIncludeBatteryHistory; private final boolean mIncludeBatteryHistory;
@@ -42,7 +44,14 @@ public class BatteryUsageStatsLoader extends AsyncLoaderCompat<BatteryUsageStats
if (mIncludeBatteryHistory) { if (mIncludeBatteryHistory) {
builder.includeBatteryHistory(); 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 @Override

View File

@@ -368,8 +368,17 @@ public class BatteryUtils {
public BatteryInfo getBatteryInfo(final String tag) { public BatteryInfo getBatteryInfo(final String tag) {
final BatteryStatsManager systemService = mContext.getSystemService( final BatteryStatsManager systemService = mContext.getSystemService(
BatteryStatsManager.class); BatteryStatsManager.class);
final BatteryUsageStats batteryUsageStats = systemService.getBatteryUsageStats( BatteryUsageStats batteryUsageStats;
new BatteryUsageStatsQuery.Builder().includeBatteryHistory().build()); 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(); final long startTime = System.currentTimeMillis();