From a2df26e9b358086224d587b6da45c59da6098fe2 Mon Sep 17 00:00:00 2001 From: jackqdyulei Date: Tue, 6 Feb 2018 14:03:30 -0800 Subject: [PATCH] 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 --- .../fuelgauge/BatterySaverReceiver.java | 2 +- ...atterySaverButtonPreferenceController.java | 33 ++++++++++--------- .../TwoStateButtonPreferenceController.java | 7 +++- ...woStateButtonPreferenceControllerTest.java | 24 +++++++++++--- 4 files changed, 45 insertions(+), 21 deletions(-) diff --git a/src/com/android/settings/fuelgauge/BatterySaverReceiver.java b/src/com/android/settings/fuelgauge/BatterySaverReceiver.java index 22544389cf4..300dc0f01d8 100644 --- a/src/com/android/settings/fuelgauge/BatterySaverReceiver.java +++ b/src/com/android/settings/fuelgauge/BatterySaverReceiver.java @@ -69,7 +69,7 @@ public class BatterySaverReceiver extends BroadcastReceiver { mBatterySaverListener = lsn; } - interface BatterySaverListener { + public interface BatterySaverListener { void onPowerSaveModeChanged(); void onBatteryChanged(boolean pluggedIn); } diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java index 17b42b80f69..1d427c9f953 100644 --- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java +++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java @@ -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 @@ -72,14 +71,18 @@ public class BatterySaverButtonPreferenceController extends return AVAILABLE; } - @Override - public void onBatteryChanged() { - final boolean lowPowerModeOn = mPowerManager.isPowerSaveMode(); - updateButton(!lowPowerModeOn); - } - @Override public void onButtonClicked(boolean stateOn) { mPowerManager.setPowerSaveMode(stateOn); } + + @Override + public void onPowerSaveModeChanged() { + setButtonVisibility(!mPowerManager.isPowerSaveMode()); + } + + @Override + public void onBatteryChanged(boolean pluggedIn) { + setButtonEnabled(!pluggedIn); + } } \ No newline at end of file diff --git a/src/com/android/settings/widget/TwoStateButtonPreferenceController.java b/src/com/android/settings/widget/TwoStateButtonPreferenceController.java index 5f5e0984699..47699ef0a7b 100644 --- a/src/com/android/settings/widget/TwoStateButtonPreferenceController.java +++ b/src/com/android/settings/widget/TwoStateButtonPreferenceController.java @@ -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; diff --git a/tests/robotests/src/com/android/settings/widget/TwoStateButtonPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/widget/TwoStateButtonPreferenceControllerTest.java index b1608889935..a28981513fe 100644 --- a/tests/robotests/src/com/android/settings/widget/TwoStateButtonPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/widget/TwoStateButtonPreferenceControllerTest.java @@ -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} */