Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0288b6d4 authored by ykhung's avatar ykhung
Browse files

Fix battery percentage is inconsistent in settings

Fix: 275217364
Test: make test RunSettingsRoboTests
Change-Id: I16dd772aacaea3f8ddb6da579adb033124e3dbb7
parent 65efc1f4
Loading
Loading
Loading
Loading
+21 −15
Original line number Diff line number Diff line
@@ -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,15 +156,15 @@ 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
        if (mPreference == null) {
            return;
        }
        // Do not triggerBatteryStatusUpdate() here to cause infinite loop
        final CharSequence summary = getSummary(false /* batteryStatusUpdate */);
        if (summary != null) {
            mPreference.setSummary(summary);
        }
    }
    }

    @VisibleForTesting
    protected static ComponentName convertClassPathToComponentName(String classPath) {
+1 −1
Original line number Diff line number Diff line
@@ -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