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

Commit e8854ec3 authored by Matthew Fritze's avatar Matthew Fritze
Browse files

Add BatterySaver as SettingSlice

Convert BatterySaverController to TogglePrefController.
This was the first MasterSwitchController, so we needed
to add the preference case to updateState.

Test: Robotests
Change-Id: I32f3dee0b183807c66c19513b8b064af8f369c2a
Fixes: 67996992
parent 956dd945
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -36,7 +36,8 @@
        <com.android.settings.widget.MasterSwitchPreference
            android:fragment="com.android.settings.fuelgauge.batterysaver.BatterySaverSettings"
            android:key="battery_saver_summary"
            android:title="@string/battery_saver"/>
            android:title="@string/battery_saver"
            settings:controller="com.android.settings.fuelgauge.BatterySaverController"/>

        <Preference
            android:fragment="com.android.settings.fuelgauge.SmartBatterySettings"
+7 −1
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@ import android.content.Context;
import android.support.v7.preference.Preference;
import android.support.v7.preference.TwoStatePreference;

import com.android.settings.widget.MasterSwitchPreference;

/**
 * Abstract class that consolidates logic for updating toggle controllers.
 * It automatically handles the getting and setting of the switch UI element.
@@ -46,7 +48,11 @@ public abstract class TogglePreferenceController extends BasePreferenceControlle

    @Override
    public final void updateState(Preference preference) {
        if (preference instanceof TwoStatePreference) {
            ((TwoStatePreference) preference).setChecked(isChecked());
        } if (preference instanceof MasterSwitchPreference) {
            ((MasterSwitchPreference) preference).setChecked(isChecked());
        }
    }

    @Override
+22 −28
Original line number Diff line number Diff line
@@ -21,42 +21,36 @@ import android.os.Handler;
import android.os.PowerManager;
import android.provider.Settings;
import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;

import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.TogglePreferenceController;
import com.android.settings.dashboard.conditional.BatterySaverCondition;
import com.android.settings.dashboard.conditional.ConditionManager;
import com.android.settings.widget.MasterSwitchPreference;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;

import static android.os.PowerManager.ACTION_POWER_SAVE_MODE_CHANGING;

public class BatterySaverController extends AbstractPreferenceController
        implements PreferenceControllerMixin, Preference.OnPreferenceChangeListener,
        LifecycleObserver, OnStart, OnStop, BatterySaverReceiver.BatterySaverListener {
public class BatterySaverController extends TogglePreferenceController
        implements LifecycleObserver, OnStart, OnStop, BatterySaverReceiver.BatterySaverListener {
    private static final String KEY_BATTERY_SAVER = "battery_saver_summary";
    private final BatterySaverReceiver mBatteryStateChangeReceiver;
    private final PowerManager mPowerManager;
    private MasterSwitchPreference mBatterySaverPref;

    public BatterySaverController(Context context, Lifecycle lifecycle) {
        super(context);
    public BatterySaverController(Context context) {
        super(context, KEY_BATTERY_SAVER);

        lifecycle.addObserver(this);
        mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
        mBatteryStateChangeReceiver = new BatterySaverReceiver(context);
        mBatteryStateChangeReceiver.setBatterySaverListener(this);
    }

    @Override
    public boolean isAvailable() {
        return true;
    public int getAvailabilityStatus() {
        return AVAILABLE;
    }

    @Override
@@ -71,17 +65,9 @@ public class BatterySaverController extends AbstractPreferenceController
    }

    @Override
    public void updateState(Preference preference) {
        mBatterySaverPref.setChecked(mPowerManager.isPowerSaveMode());
        updateSummary();
    }

    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        final boolean saverOn = (Boolean) newValue;
        if (saverOn != mPowerManager.isPowerSaveMode()
                && !mPowerManager.setPowerSaveMode(saverOn)) {
            // Do nothing if power save mode doesn't set correctly
    public boolean setChecked(boolean isChecked) {
        mBatterySaverPref.setChecked(isChecked);
        if (!mPowerManager.setPowerSaveMode(isChecked)) {
            return false;
        }

@@ -90,6 +76,11 @@ public class BatterySaverController extends AbstractPreferenceController
        return true;
    }

    @Override
    public boolean isChecked() {
        return mPowerManager.isPowerSaveMode();
    }

    @Override
    public void onStart() {
        mContext.getContentResolver().registerContentObserver(
@@ -110,7 +101,8 @@ public class BatterySaverController extends AbstractPreferenceController
        ConditionManager.get(mContext).getCondition(BatterySaverCondition.class).refreshState();
    }

    private void updateSummary() {
    @Override
    public String getSummary() {
        final boolean mode = mPowerManager.isPowerSaveMode();
        final int format = mode ? R.string.battery_saver_on_summary
                : R.string.battery_saver_off_summary;
@@ -119,10 +111,12 @@ public class BatterySaverController extends AbstractPreferenceController
        final int percentFormat = percent > 0 ? R.string.battery_saver_desc_turn_on_auto_pct
                : R.string.battery_saver_desc_turn_on_auto_never;

        final String summary = mContext.getString(format, mContext.getString(percentFormat,
        return mContext.getString(format, mContext.getString(percentFormat,
                Utils.formatPercentage(percent)));
    }

        mBatterySaverPref.setSummary(summary);
    private void updateSummary() {
        mBatterySaverPref.setSummary(getSummary());
    }

    private final ContentObserver mObserver = new ContentObserver(new Handler()) {
+9 −4
Original line number Diff line number Diff line
@@ -59,6 +59,7 @@ import com.android.settingslib.core.lifecycle.Lifecycle;

import com.android.settingslib.utils.PowerUtil;
import com.android.settingslib.utils.StringUtil;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -232,17 +233,20 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList
        final SettingsActivity activity = (SettingsActivity) getActivity();
        final List<AbstractPreferenceController> controllers = new ArrayList<>();
        mBatteryHeaderPreferenceController = new BatteryHeaderPreferenceController(
                context, activity, this /* host */, getLifecycle());
                context, activity, this /* host */, lifecycle);
        controllers.add(mBatteryHeaderPreferenceController);
        mBatteryAppListPreferenceController = new BatteryAppListPreferenceController(context,
                KEY_APP_LIST, lifecycle, activity, this);
        controllers.add(mBatteryAppListPreferenceController);
        mBatteryTipPreferenceController = new BatteryTipPreferenceController(context,
                KEY_BATTERY_TIP, (SettingsActivity) getActivity(), this, this);
                KEY_BATTERY_TIP, (SettingsActivity) getActivity(), this /* fragment */, this /*
                BatteryTipListener */);
        controllers.add(mBatteryTipPreferenceController);
        controllers.add(new BatterySaverController(context, getLifecycle()));
        BatterySaverController batterySaverController = new BatterySaverController(context);
        controllers.add(batterySaverController);
        controllers.add(new BatteryPercentagePreferenceController(context));

        lifecycle.addObserver(batterySaverController);
        return controllers;
    }

@@ -322,7 +326,8 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList

    @VisibleForTesting
    void updateLastFullChargePreference(long timeMs) {
        final CharSequence timeSequence = StringUtil.formatRelativeTime(getContext(), timeMs, false);
        final CharSequence timeSequence = StringUtil.formatRelativeTime(getContext(), timeMs,
                false);
        mLastFullChargePref.setSubtitle(timeSequence);
    }

+3 −1
Original line number Diff line number Diff line
@@ -313,12 +313,14 @@ public class PowerUsageSummaryLegacy extends PowerUsageBase implements
        controllers.add(mBatteryHeaderPreferenceController);
        controllers.add(new AutoBrightnessPreferenceController(context, KEY_AUTO_BRIGHTNESS));
        controllers.add(new TimeoutPreferenceController(context, KEY_SCREEN_TIMEOUT));
        controllers.add(new BatterySaverController(context, getLifecycle()));
        controllers.add(new BatteryPercentagePreferenceController(context));
        controllers.add(new AmbientDisplayPreferenceController(
                context,
                new AmbientDisplayConfiguration(context),
                KEY_AMBIENT_DISPLAY));
        BatterySaverController batterySaverController = new BatterySaverController(context);
        controllers.add(batterySaverController);
        getLifecycle().addObserver(batterySaverController);
        return controllers;
    }

Loading