diff --git a/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java b/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java index 2eb7cf413fc..094793884f3 100644 --- a/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java +++ b/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java @@ -30,6 +30,7 @@ import com.android.settings.overlay.FeatureFactory; 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 @@ public class TopLevelBatteryPreferenceController extends BasePreferenceControlle @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 @@ public class TopLevelBatteryPreferenceController extends BasePreferenceControlle } 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 3201d82c12a..eef69884432 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 @@ public class TopLevelBatteryPreferenceControllerTest { @Test public void getDashboardLabel_returnsCorrectLabel() { + mController.mPreference = new Preference(mContext); BatteryInfo info = new BatteryInfo(); info.batteryPercentString = "3%"; assertThat(mController.getDashboardLabel(mContext, info, true))