Fix battery percentage is inconsistent in settings

Fix: 275217364
Test: make test RunSettingsRoboTests
Change-Id: I16dd772aacaea3f8ddb6da579adb033124e3dbb7
This commit is contained in:
ykhung
2023-05-02 09:59:28 +08:00
parent 65efc1f45e
commit 0288b6d4af
2 changed files with 22 additions and 16 deletions

View File

@@ -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);
}
}

View File

@@ -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