Fix battery percentage is inconsistent in settings
Fix: 275217364
Test: make test RunSettingsRoboTests
Change-Id: I16dd772aacaea3f8ddb6da579adb033124e3dbb7
diff --git a/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java b/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java
index e7a18d0..d686594 100644
--- a/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java
@@ -39,10 +39,12 @@
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 @@
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 @@
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 @@
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 @@
@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 55fe8b8..5f825ae 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 @@
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