Merge "Fix battery percentage is inconsistent in settings" into udc-dev

This commit is contained in:
Treehugger Robot
2023-05-02 05:08:39 +00:00
committed by Android (Google) Code Review
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"; private static final String TAG = "TopLvBatteryPrefControl";
@VisibleForTesting
protected boolean mIsBatteryPresent = true;
@VisibleForTesting @VisibleForTesting
Preference mPreference; Preference mPreference;
@VisibleForTesting
protected boolean mIsBatteryPresent = true;
private final BatteryBroadcastReceiver mBatteryBroadcastReceiver; private final BatteryBroadcastReceiver mBatteryBroadcastReceiver;
private BatteryInfo mBatteryInfo; private BatteryInfo mBatteryInfo;
private BatteryStatusFeatureProvider mBatteryStatusFeatureProvider; private BatteryStatusFeatureProvider mBatteryStatusFeatureProvider;
private String mBatteryStatusLabel; private String mBatteryStatusLabel;
@@ -56,8 +58,11 @@ public class TopLevelBatteryPreferenceController extends BasePreferenceControlle
mIsBatteryPresent = false; mIsBatteryPresent = false;
} }
BatteryInfo.getBatteryInfo(mContext, info -> { BatteryInfo.getBatteryInfo(mContext, info -> {
Log.d(TAG, "getBatteryInfo: " + info);
mBatteryInfo = info; mBatteryInfo = info;
updateState(mPreference); updateState(mPreference);
// Update the preference summary text to the latest state.
setSummaryAsync(info);
}, true /* shortString */); }, true /* shortString */);
}); });
@@ -105,18 +110,19 @@ public class TopLevelBatteryPreferenceController extends BasePreferenceControlle
if (info == null || context == null) { if (info == null || context == null) {
return null; return null;
} }
Log.d(TAG, "getDashboardLabel: " + mBatteryStatusLabel + " batteryStatusUpdate="
Log.d(TAG, "getDashboardLabel: batteryStatusUpdate=" + batteryStatusUpdate); + batteryStatusUpdate);
if (batteryStatusUpdate) { if (batteryStatusUpdate) {
setSummaryAsync(info); setSummaryAsync(info);
} }
return mBatteryStatusLabel == null ? generateLabel(info) : mBatteryStatusLabel;
return (mBatteryStatusLabel == null) ? generateLabel(info) : mBatteryStatusLabel;
} }
private void setSummaryAsync(BatteryInfo info) { private void setSummaryAsync(BatteryInfo info) {
ThreadUtils.postOnBackgroundThread(() -> { 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 = final boolean triggerBatteryStatusUpdate =
mBatteryStatusFeatureProvider.triggerBatteryStatusUpdate(this, info); mBatteryStatusFeatureProvider.triggerBatteryStatusUpdate(this, info);
ThreadUtils.postOnMainThread(() -> { ThreadUtils.postOnMainThread(() -> {
@@ -124,14 +130,14 @@ public class TopLevelBatteryPreferenceController extends BasePreferenceControlle
mBatteryStatusLabel = null; // will generateLabel() mBatteryStatusLabel = null; // will generateLabel()
} }
mPreference.setSummary( mPreference.setSummary(
(mBatteryStatusLabel == null) ? generateLabel(info) : mBatteryStatusLabel); mBatteryStatusLabel == null ? generateLabel(info) : mBatteryStatusLabel);
}); });
}); });
} }
private CharSequence generateLabel(BatteryInfo info) { private CharSequence generateLabel(BatteryInfo info) {
if (Utils.containsIncompatibleChargers(mContext, TAG)) { 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) { if (!info.discharging && info.chargeLabel != null) {
return info.chargeLabel; return info.chargeLabel;
@@ -150,13 +156,13 @@ public class TopLevelBatteryPreferenceController extends BasePreferenceControlle
@Override @Override
public void updateBatteryStatus(String label, BatteryInfo info) { public void updateBatteryStatus(String label, BatteryInfo info) {
mBatteryStatusLabel = label; // Null if adaptive charging is not active mBatteryStatusLabel = label; // Null if adaptive charging is not active
if (mPreference == null) {
if (mPreference != null) { return;
// Do not triggerBatteryStatusUpdate(), otherwise there will be an infinite loop }
final CharSequence summary = getSummary(false /* batteryStatusUpdate */); // Do not triggerBatteryStatusUpdate() here to cause infinite loop
if (summary != null) { final CharSequence summary = getSummary(false /* batteryStatusUpdate */);
mPreference.setSummary(summary); if (summary != null) {
} mPreference.setSummary(summary);
} }
} }

View File

@@ -141,7 +141,7 @@ public class TopLevelBatteryPreferenceControllerTest {
BatteryInfo info = new BatteryInfo(); BatteryInfo info = new BatteryInfo();
assertThat(mController.getDashboardLabel(mContext, info, true)) 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 @Test