Convert BatterySaverButton controller to Slice compatible.

- Update preference key to match the key defined in SettingsSlicesContract
- Model TwoStateButtonPreference similar to TwoStatePreference (add
  setChecked, isChecked method)
- Remove TwoStateButtonPreferenceController entirely because all methods
  are moved into Preference directly for better encapsulation.
- Make BatterySaverButtonPrefController direclty implement
  TogglePreferenceController. It was not possible before because the
  interface between TwoStateButtonPreferene is too different from
  TwoStatePreference.

Bug: 80106671
Test: robotests
Change-Id: Ib72807dcf1b36e959e08df8d80538c3f9f79b76d
This commit is contained in:
Fan Zhang
2018-05-22 14:12:32 -07:00
committed by Matthew Fritze
parent c4a3393b45
commit ddc6c646c0
7 changed files with 159 additions and 198 deletions

View File

@@ -18,36 +18,45 @@ package com.android.settings.fuelgauge.batterysaver;
import android.content.Context;
import android.os.PowerManager;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import com.android.settings.core.TogglePreferenceController;
import com.android.settings.fuelgauge.BatterySaverReceiver;
import com.android.settings.widget.TwoStateButtonPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settings.widget.TwoStateButtonPreference;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;
import com.android.settingslib.fuelgauge.BatterySaverUtils;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
/**
* Controller to update the battery saver button
*/
public class BatterySaverButtonPreferenceController extends
TwoStateButtonPreferenceController implements
TogglePreferenceController implements
LifecycleObserver, OnStart, OnStop, BatterySaverReceiver.BatterySaverListener {
private static final String KEY = "battery_saver_button_container";
private BatterySaverReceiver mBatterySaverReceiver;
@VisibleForTesting
PowerManager mPowerManager;
public BatterySaverButtonPreferenceController(Context context, Lifecycle lifecycle) {
super(context, KEY);
private final BatterySaverReceiver mBatterySaverReceiver;
private final PowerManager mPowerManager;
private TwoStateButtonPreference mPreference;
public BatterySaverButtonPreferenceController(Context context, String key) {
super(context, key);
mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
mBatterySaverReceiver = new BatterySaverReceiver(context);
mBatterySaverReceiver.setBatterySaverListener(this);
if (lifecycle != null) {
lifecycle.addObserver(this);
}
}
@Override
public int getAvailabilityStatus() {
return AVAILABLE;
}
@Override
public boolean isSliceable() {
return true;
}
@Override
@@ -60,30 +69,44 @@ public class BatterySaverButtonPreferenceController extends
mBatterySaverReceiver.setListening(false);
}
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
mPreference = (TwoStateButtonPreference) screen.findPreference(getPreferenceKey());
}
@Override
public boolean isChecked() {
return mPowerManager.isPowerSaveMode();
}
@Override
public boolean setChecked(boolean stateOn) {
// This screen already shows a warning, so we don't need another warning.
return BatterySaverUtils.setPowerSaveMode(mContext, stateOn,
false /* needFirstTimeWarning */);
}
@Override
public void updateState(Preference preference) {
super.updateState(preference);
setButtonVisibility(!mPowerManager.isPowerSaveMode());
}
@Override
public int getAvailabilityStatus() {
return AVAILABLE;
}
@Override
public void onButtonClicked(boolean stateOn) {
// This screen already shows a warning, so we don't need another warning.
BatterySaverUtils.setPowerSaveMode(mContext, stateOn, /*needFirstTimeWarning*/ false);
if (mPreference != null) {
mPreference.setChecked(isChecked());
}
}
@Override
public void onPowerSaveModeChanged() {
setButtonVisibility(!mPowerManager.isPowerSaveMode());
final boolean isChecked = isChecked();
if (mPreference != null && mPreference.isChecked() != isChecked) {
mPreference.setChecked(isChecked);
}
}
@Override
public void onBatteryChanged(boolean pluggedIn) {
setButtonEnabled(!pluggedIn);
if (mPreference != null) {
mPreference.setButtonEnabled(!pluggedIn);
}
}
}