Fix battery percentage is inconsistent in settings
Fix: 275217364 Test: make test RunSettingsRoboTests Change-Id: I16dd772aacaea3f8ddb6da579adb033124e3dbb7
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user