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

Commit a2df26e9 authored by jackqdyulei's avatar jackqdyulei
Browse files

Use BatterySaverReceiver in battery saver settings

Use this receiver to listen to following updates:
1. Plug state: if it is plugged in, disable this two state
button, otherwise make it enabled
2. low power mode: If mode on, show "turn off" otherwise show
"turn on"

Bug: 72228477
Test: RunSettingsRoboTests
Change-Id: Ib3d3df9f9a5fbac8b1b876c9e193beb75f522ebd
parent 92757b24
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -69,7 +69,7 @@ public class BatterySaverReceiver extends BroadcastReceiver {
        mBatterySaverListener = lsn;
    }

    interface BatterySaverListener {
    public interface BatterySaverListener {
        void onPowerSaveModeChanged();
        void onBatteryChanged(boolean pluggedIn);
    }
+17 −14
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference;

import com.android.settings.fuelgauge.BatteryBroadcastReceiver;
import com.android.settings.fuelgauge.BatterySaverReceiver;
import com.android.settings.widget.TwoStateButtonPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
@@ -31,20 +32,19 @@ import com.android.settingslib.core.lifecycle.events.OnStop;
/**
 * Controller to update the battery saver button
 */
//TODO(b/72228477): disable the button if device is charging.
public class BatterySaverButtonPreferenceController extends
        TwoStateButtonPreferenceController implements
        LifecycleObserver, OnStart, OnStop, BatteryBroadcastReceiver.OnBatteryChangedListener {
        LifecycleObserver, OnStart, OnStop, BatterySaverReceiver.BatterySaverListener {
    private static final String KEY = "battery_saver_button_container";
    private BatteryBroadcastReceiver mBatteryBroadcastReceiver;
    private BatterySaverReceiver mBatterySaverReceiver;
    @VisibleForTesting
    PowerManager mPowerManager;

    public BatterySaverButtonPreferenceController(Context context, Lifecycle lifecycle) {
        super(context, KEY);
        mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        mBatteryBroadcastReceiver = new BatteryBroadcastReceiver(context);
        mBatteryBroadcastReceiver.setBatteryChangedListener(this);
        mBatterySaverReceiver = new BatterySaverReceiver(context);
        mBatterySaverReceiver.setBatterySaverListener(this);
        if (lifecycle != null) {
            lifecycle.addObserver(this);
        }
@@ -52,19 +52,18 @@ public class BatterySaverButtonPreferenceController extends

    @Override
    public void onStart() {
        mBatteryBroadcastReceiver.register();
        mBatterySaverReceiver.setListening(true);
    }

    @Override
    public void onStop() {
        mBatteryBroadcastReceiver.unRegister();
        mBatterySaverReceiver.setListening(false);
    }

    @Override
    public void updateState(Preference preference) {
        super.updateState(preference);
        final boolean lowPowerModeOn = mPowerManager.isPowerSaveMode();
        updateButton(!lowPowerModeOn);
        setButtonVisibility(!mPowerManager.isPowerSaveMode());
    }

    @Override
@@ -73,13 +72,17 @@ public class BatterySaverButtonPreferenceController extends
    }

    @Override
    public void onBatteryChanged() {
        final boolean lowPowerModeOn = mPowerManager.isPowerSaveMode();
        updateButton(!lowPowerModeOn);
    public void onButtonClicked(boolean stateOn) {
        mPowerManager.setPowerSaveMode(stateOn);
    }

    @Override
    public void onButtonClicked(boolean stateOn) {
        mPowerManager.setPowerSaveMode(stateOn);
    public void onPowerSaveModeChanged() {
        setButtonVisibility(!mPowerManager.isPowerSaveMode());
    }

    @Override
    public void onBatteryChanged(boolean pluggedIn) {
        setButtonEnabled(!pluggedIn);
    }
}
 No newline at end of file
+6 −1
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ public abstract class TwoStateButtonPreferenceController extends BasePreferenceC
        mButtonOff.setOnClickListener(this);
    }

    protected void updateButton(boolean stateOn) {
    protected void setButtonVisibility(boolean stateOn) {
        if (stateOn) {
            mButtonOff.setVisibility(View.GONE);
            mButtonOn.setVisibility(View.VISIBLE);
@@ -57,6 +57,11 @@ public abstract class TwoStateButtonPreferenceController extends BasePreferenceC
        }
    }

    protected void setButtonEnabled(boolean enabled) {
        mButtonOn.setEnabled(enabled);
        mButtonOff.setEnabled(enabled);
    }

    @Override
    public void onClick(View v) {
        final boolean stateOn = v.getId() == R.id.state_on_button;
+20 −4
Original line number Diff line number Diff line
@@ -67,21 +67,37 @@ public class TwoStateButtonPreferenceControllerTest {
    }

    @Test
    public void testUpdateButtons_stateOn_onlyShowButtonOn() {
        mController.updateButton(true /* stateOn */);
    public void testSetButtonVisibility_stateOn_onlyShowButtonOn() {
        mController.setButtonVisibility(true /* stateOn */);

        assertThat(mButtonOn.getVisibility()).isEqualTo(View.VISIBLE);
        assertThat(mButtonOff.getVisibility()).isEqualTo(View.GONE);
    }

    @Test
    public void testUpdateButtons_stateOff_onlyShowButtonOff() {
        mController.updateButton(false /* stateOn */);
    public void testSetButtonVisibility_stateOff_onlyShowButtonOff() {
        mController.setButtonVisibility(false /* stateOn */);

        assertThat(mButtonOn.getVisibility()).isEqualTo(View.GONE);
        assertThat(mButtonOff.getVisibility()).isEqualTo(View.VISIBLE);
    }

    @Test
    public void testSetButtonEnabled_enabled_buttonEnabled() {
        mController.setButtonEnabled(true /* enabled */);

        assertThat(mButtonOn.isEnabled()).isTrue();
        assertThat(mButtonOff.isEnabled()).isTrue();
    }

    @Test
    public void testSetButtonEnabled_disabled_buttonDisabled() {
        mController.setButtonEnabled(false /* enabled */);

        assertThat(mButtonOn.isEnabled()).isFalse();
        assertThat(mButtonOff.isEnabled()).isFalse();
    }

    /**
     * Controller to test methods in {@link TwoStateButtonPreferenceController}
     */