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

Commit dc15b279 authored by Fabian Kozynski's avatar Fabian Kozynski Committed by Android (Google) Code Review
Browse files

Merge "Check power saver when plugged in state changes" into main

parents 78f735a9 18408aa0
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -250,6 +250,7 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
            mLevel = (int) (100f
                    * intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0)
                    / intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100));
            int previousPluggedChargingSource = mPluggedChargingSource;
            mPluggedChargingSource = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
            mPluggedIn = mPluggedChargingSource != 0;
            final int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS,
@@ -276,7 +277,9 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
                mIsBatteryDefender = isBatteryDefender;
                fireIsBatteryDefenderChanged();
            }

            if (mPluggedChargingSource != previousPluggedChargingSource) {
                updatePowerSave();
            }
            fireBatteryLevelChanged();
        } else if (action.equals(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED)) {
            updatePowerSave();
+63 −0
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSess
import static com.android.dx.mockito.inline.extended.ExtendedMockito.staticMockMarker;
import static com.android.settingslib.fuelgauge.BatterySaverLogging.SAVER_ENABLED_QS;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
@@ -308,6 +310,52 @@ public class BatteryControllerTest extends SysuiTestCase {
        mBatteryController.fireBatteryLevelChanged();
    }

    @Test
    public void plugAndUnplugWhenInBatterySaver_stateUpdatedWithoutBatterySaverBroadcast() {
        PowerSaveState state = new PowerSaveState.Builder()
                .setBatterySaverEnabled(false)
                .build();
        when(mPowerManager.getPowerSaveState(PowerManager.ServiceType.AOD)).thenReturn(state);

        // Set up on power save and not charging
        when(mPowerManager.isPowerSaveMode()).thenReturn(true);
        mBatteryController.onReceive(
                getContext(), new Intent(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED));
        mBatteryController.onReceive(getContext(), createChargingIntent(false));

        TestCallback callback = new TestCallback();
        mBatteryController.addCallback(callback);

        assertThat(callback.pluggedIn).isFalse();
        assertThat(callback.powerSaverOn).isTrue();

        // Plug in (battery saver turns off)
        when(mPowerManager.isPowerSaveMode()).thenReturn(false);
        mBatteryController.onReceive(getContext(), createChargingIntent(true));

        assertThat(callback.pluggedIn).isTrue();
        assertThat(callback.powerSaverOn).isFalse();

        // Unplug (battery saver turns back on)
        when(mPowerManager.isPowerSaveMode()).thenReturn(true);
        mBatteryController.onReceive(getContext(), createChargingIntent(false));

        assertThat(callback.pluggedIn).isFalse();
        assertThat(callback.powerSaverOn).isTrue();
    }

    private Intent createChargingIntent(boolean charging) {
        Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
        if (charging) {
            return intent
                .putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_CHARGING)
                .putExtra(BatteryManager.EXTRA_PLUGGED, BatteryManager.BATTERY_PLUGGED_AC);
        } else {
            return intent
                .putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_DISCHARGING);
        }
    }

    private void setupIncompatibleCharging() {
        final List<UsbPort> usbPorts = new ArrayList<>();
        usbPorts.add(mUsbPort);
@@ -318,4 +366,19 @@ public class BatteryControllerTest extends SysuiTestCase {
        when(mUsbPortStatus.getComplianceWarnings())
                .thenReturn(new int[]{UsbPortStatus.COMPLIANCE_WARNING_DEBUG_ACCESSORY});
    }

    private static class TestCallback
        implements BatteryController.BatteryStateChangeCallback {
        boolean pluggedIn = false;
        boolean powerSaverOn = false;
        @Override
        public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) {
            this.pluggedIn = pluggedIn;
        }

        @Override
        public void onPowerSaveChanged(boolean isPowerSave) {
            this.powerSaverOn = isPowerSave;
        }
    }
}