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

Commit d1114107 authored by pajacechen's avatar pajacechen
Browse files

Fix "Dock defend string and tips in settings are incorrectly" issue

Symptom: After the dock defend was triggered, the battery tips still
show "Future-Bypass" dock defend mode. It should be the "Active" dock
defend mode.

Root Cause: The original `BatteryInfo.isBatteryDefender` was implemented
by using `longlife`, due to the charging limit also reuse `longlife`
issue, we replace the implementation of `BatteryInfo.isBatteryDefender`
with HAL API call `isTempDefend` and `isDwellDefend`. However, the
dock defend also needs `longlife`, the original
`BatteryInfo.isBatteryDefender`. So the dock defend checking failed
after replacing the implementation of `BatteryInfo.isBatteryDefender`

Solution: Add new property isLonglife in BatteryInfo

Bug: 348563863
Test: Manual Test and robotest
Test: http://ab/I55100010289930405
Flag: EXEMPT bugfix
Change-Id: I180cde7a193d75243893471634bab5f354c1623b
parent 9bd19f46
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -53,7 +53,8 @@ public class BatteryInfo {
    public int batteryStatus;
    public int pluggedStatus;
    public boolean discharging = true;
    public boolean isBatteryDefender;
    public boolean isBatteryDefender = false;
    public boolean isLongLife = false;
    public boolean isFastCharging;
    public long remainingTimeUs = 0;
    public long averageTimeToDischarge = EstimateKt.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN;
@@ -306,7 +307,7 @@ public class BatteryInfo {
        info.pluggedStatus = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
        info.mCharging = info.pluggedStatus != 0;
        info.averageTimeToDischarge = estimate.getAverageDischargeTime();
        info.isBatteryDefender =
        info.isLongLife =
                batteryBroadcast.getIntExtra(
                                BatteryManager.EXTRA_CHARGING_STATUS,
                                BatteryManager.CHARGING_POLICY_DEFAULT)
@@ -319,7 +320,7 @@ public class BatteryInfo {
        info.isFastCharging =
                BatteryStatus.getChargingSpeed(context, batteryBroadcast)
                        == BatteryStatus.CHARGING_FAST;
        if (info.isBatteryDefender) {
        if (info.isLongLife) {
            info.isBatteryDefender =
                    FeatureFactory.getFeatureFactory()
                            .getPowerUsageFeatureProvider()
+1 −1
Original line number Diff line number Diff line
@@ -600,7 +600,7 @@ public class BatteryUtils {
                            context.getContentResolver(), SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, 0)
                    == 1) {
                return DockDefenderMode.TEMPORARILY_BYPASSED;
            } else if (batteryInfo.isBatteryDefender
            } else if (batteryInfo.isLongLife
                    && FeatureFactory.getFeatureFactory()
                            .getPowerUsageFeatureProvider()
                            .isExtraDefend()) {
+43 −0
Original line number Diff line number Diff line
@@ -789,6 +789,40 @@ public class BatteryInfoTest {
                expectedChargeLabel);
    }

    @Test
    public void getBatteryInfo_longlife_shouldSetLonglife() {
        var batteryIntent = createIntentForLongLifeTest(/* hasLongLife= */ true);

        var batteryInfo =
                BatteryInfo.getBatteryInfo(
                        mContext,
                        batteryIntent,
                        mBatteryUsageStats,
                        /* estimate= */ MOCK_ESTIMATE,
                        /* elapsedRealtimeUs= */ 0L,
                        /* shortString= */ false,
                        /* currentTimeMs= */ 0L);

        assertThat(batteryInfo.isLongLife).isTrue();
    }

    @Test
    public void getBatteryInfo_noLonglife_shouldNotLonglife() {
        var batteryIntent = createIntentForLongLifeTest(/* hasLongLife= */ false);

        var batteryInfo =
                BatteryInfo.getBatteryInfo(
                        mContext,
                        batteryIntent,
                        mBatteryUsageStats,
                        /* estimate= */ MOCK_ESTIMATE,
                        /* elapsedRealtimeUs= */ 0L,
                        /* shortString= */ false,
                        /* currentTimeMs= */ 0L);

        assertThat(batteryInfo.isLongLife).isFalse();
    }

    private enum ChargingSpeed {
        FAST,
        REGULAR,
@@ -801,6 +835,15 @@ public class BatteryInfoTest {
        DOCKED
    }

    private Intent createIntentForLongLifeTest(Boolean hasLongLife) {
        return new Intent(Intent.ACTION_BATTERY_CHANGED)
                .putExtra(
                        BatteryManager.EXTRA_CHARGING_STATUS,
                        hasLongLife
                                ? BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE
                                : BatteryManager.CHARGING_POLICY_DEFAULT);
    }

    private Intent createIntentForGetBatteryInfoTest(
            ChargingType chargingType, ChargingSpeed chargingSpeed, int batteryLevel) {
        return createBatteryIntent(