Punt battery status action when entering Settings main page
- Checking battery sharing states at the beging may have some performance issue, post battery status update to background thread to avoid ANR
Bug: 193600924
Test: make SettingsRoboTests
Change-Id: I3b73e6bd4f952bc832783b9b3b5d45db560d088c
diff --git a/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java b/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java
index 2eb7cf4..0947938 100644
--- a/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java
@@ -30,6 +30,7 @@
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;
+import com.android.settingslib.utils.ThreadUtils;
import java.util.HashMap;
@@ -38,8 +39,9 @@
@VisibleForTesting
protected boolean mIsBatteryPresent = true;
+ @VisibleForTesting
+ Preference mPreference;
private final BatteryBroadcastReceiver mBatteryBroadcastReceiver;
- private Preference mPreference;
private BatteryInfo mBatteryInfo;
private BatterySettingsFeatureProvider mBatterySettingsFeatureProvider;
private BatteryStatusFeatureProvider mBatteryStatusFeatureProvider;
@@ -140,14 +142,26 @@
}
if (batteryStatusUpdate) {
- if (!mBatteryStatusFeatureProvider.triggerBatteryStatusUpdate(this, info)) {
- mBatteryStatusLabel = null; // will generateLabel()
- }
+ setSummaryAsync(info);
}
return (mBatteryStatusLabel == null) ? generateLabel(info) : mBatteryStatusLabel;
}
+ private void setSummaryAsync(BatteryInfo info) {
+ ThreadUtils.postOnBackgroundThread(() -> {
+ final boolean triggerBatteryStatusUpdate =
+ mBatteryStatusFeatureProvider.triggerBatteryStatusUpdate(this, info);
+ ThreadUtils.postOnMainThread(() -> {
+ if (!triggerBatteryStatusUpdate) {
+ mBatteryStatusLabel = null; // will generateLabel()
+ }
+ mPreference.setSummary(
+ (mBatteryStatusLabel == null) ? generateLabel(info) : mBatteryStatusLabel);
+ });
+ });
+ }
+
private CharSequence generateLabel(BatteryInfo info) {
if (!info.discharging && info.chargeLabel != null) {
return info.chargeLabel;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceControllerTest.java
index 3201d82..eef6988 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceControllerTest.java
@@ -156,6 +156,7 @@
@Test
public void getDashboardLabel_returnsCorrectLabel() {
+ mController.mPreference = new Preference(mContext);
BatteryInfo info = new BatteryInfo();
info.batteryPercentString = "3%";
assertThat(mController.getDashboardLabel(mContext, info, true))