From 0cd29a70a4f26b4c6c82f17acb8ca6bd60e7dfbd Mon Sep 17 00:00:00 2001 From: "Wesley.CW Wang" Date: Thu, 30 Sep 2021 14:59:26 +0800 Subject: [PATCH] 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 --- .../TopLevelBatteryPreferenceController.java | 22 +++++++++++++++---- ...pLevelBatteryPreferenceControllerTest.java | 1 + 2 files changed, 19 insertions(+), 4 deletions(-) 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))