From 0288b6d4afa36d4a2dec2209099992ee3a1c6e15 Mon Sep 17 00:00:00 2001 From: ykhung Date: Tue, 2 May 2023 09:59:28 +0800 Subject: [PATCH] Fix battery percentage is inconsistent in settings Fix: 275217364 Test: make test RunSettingsRoboTests Change-Id: I16dd772aacaea3f8ddb6da579adb033124e3dbb7 --- .../TopLevelBatteryPreferenceController.java | 36 +++++++++++-------- ...pLevelBatteryPreferenceControllerTest.java | 2 +- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java b/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java index e7a18d0e6aa..d686594275b 100644 --- a/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java +++ b/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java @@ -38,11 +38,13 @@ public class TopLevelBatteryPreferenceController extends BasePreferenceControlle private static final String TAG = "TopLvBatteryPrefControl"; - @VisibleForTesting - protected boolean mIsBatteryPresent = true; @VisibleForTesting Preference mPreference; + @VisibleForTesting + protected boolean mIsBatteryPresent = true; + private final BatteryBroadcastReceiver mBatteryBroadcastReceiver; + private BatteryInfo mBatteryInfo; private BatteryStatusFeatureProvider mBatteryStatusFeatureProvider; private String mBatteryStatusLabel; @@ -56,8 +58,11 @@ public class TopLevelBatteryPreferenceController extends BasePreferenceControlle mIsBatteryPresent = false; } BatteryInfo.getBatteryInfo(mContext, info -> { + Log.d(TAG, "getBatteryInfo: " + info); mBatteryInfo = info; updateState(mPreference); + // Update the preference summary text to the latest state. + setSummaryAsync(info); }, true /* shortString */); }); @@ -105,18 +110,19 @@ public class TopLevelBatteryPreferenceController extends BasePreferenceControlle if (info == null || context == null) { return null; } - - Log.d(TAG, "getDashboardLabel: batteryStatusUpdate=" + batteryStatusUpdate); + Log.d(TAG, "getDashboardLabel: " + mBatteryStatusLabel + " batteryStatusUpdate=" + + batteryStatusUpdate); if (batteryStatusUpdate) { setSummaryAsync(info); } - - return (mBatteryStatusLabel == null) ? generateLabel(info) : mBatteryStatusLabel; + return mBatteryStatusLabel == null ? generateLabel(info) : mBatteryStatusLabel; } private void setSummaryAsync(BatteryInfo info) { ThreadUtils.postOnBackgroundThread(() -> { + // Return false if built-in status should be used, will use updateBatteryStatus() + // method to inject the customized battery status label. final boolean triggerBatteryStatusUpdate = mBatteryStatusFeatureProvider.triggerBatteryStatusUpdate(this, info); ThreadUtils.postOnMainThread(() -> { @@ -124,14 +130,14 @@ public class TopLevelBatteryPreferenceController extends BasePreferenceControlle mBatteryStatusLabel = null; // will generateLabel() } mPreference.setSummary( - (mBatteryStatusLabel == null) ? generateLabel(info) : mBatteryStatusLabel); + mBatteryStatusLabel == null ? generateLabel(info) : mBatteryStatusLabel); }); }); } private CharSequence generateLabel(BatteryInfo info) { if (Utils.containsIncompatibleChargers(mContext, TAG)) { - return mContext.getString(R.string.battery_tip_incompatible_charging_title); + return mContext.getString(R.string.battery_info_status_not_charging); } if (!info.discharging && info.chargeLabel != null) { return info.chargeLabel; @@ -150,13 +156,13 @@ public class TopLevelBatteryPreferenceController extends BasePreferenceControlle @Override public void updateBatteryStatus(String label, BatteryInfo info) { mBatteryStatusLabel = label; // Null if adaptive charging is not active - - if (mPreference != null) { - // Do not triggerBatteryStatusUpdate(), otherwise there will be an infinite loop - final CharSequence summary = getSummary(false /* batteryStatusUpdate */); - if (summary != null) { - mPreference.setSummary(summary); - } + if (mPreference == null) { + return; + } + // Do not triggerBatteryStatusUpdate() here to cause infinite loop + final CharSequence summary = getSummary(false /* batteryStatusUpdate */); + if (summary != null) { + mPreference.setSummary(summary); } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceControllerTest.java index 55fe8b8f0e9..5f825ae2cef 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceControllerTest.java @@ -141,7 +141,7 @@ public class TopLevelBatteryPreferenceControllerTest { BatteryInfo info = new BatteryInfo(); assertThat(mController.getDashboardLabel(mContext, info, true)) - .isEqualTo(mContext.getString(R.string.battery_tip_incompatible_charging_title)); + .isEqualTo(mContext.getString(R.string.battery_info_status_not_charging)); } @Test