Home | History | Annotate | Download | only in batterysaver
      1 /*
      2  * Copyright (C) 2018 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.settings.fuelgauge.batterysaver;
     18 
     19 import android.content.Context;
     20 import android.os.PowerManager;
     21 import android.support.v7.preference.Preference;
     22 import android.support.v7.preference.PreferenceScreen;
     23 
     24 import com.android.settings.core.TogglePreferenceController;
     25 import com.android.settings.fuelgauge.BatterySaverReceiver;
     26 import com.android.settings.widget.TwoStateButtonPreference;
     27 import com.android.settingslib.core.lifecycle.LifecycleObserver;
     28 import com.android.settingslib.core.lifecycle.events.OnStart;
     29 import com.android.settingslib.core.lifecycle.events.OnStop;
     30 import com.android.settingslib.fuelgauge.BatterySaverUtils;
     31 
     32 /**
     33  * Controller to update the battery saver button
     34  */
     35 public class BatterySaverButtonPreferenceController extends
     36         TogglePreferenceController implements
     37         LifecycleObserver, OnStart, OnStop, BatterySaverReceiver.BatterySaverListener {
     38 
     39     private final BatterySaverReceiver mBatterySaverReceiver;
     40     private final PowerManager mPowerManager;
     41 
     42     private TwoStateButtonPreference mPreference;
     43 
     44     public BatterySaverButtonPreferenceController(Context context, String key) {
     45         super(context, key);
     46         mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
     47         mBatterySaverReceiver = new BatterySaverReceiver(context);
     48         mBatterySaverReceiver.setBatterySaverListener(this);
     49     }
     50 
     51     @Override
     52     public int getAvailabilityStatus() {
     53         return AVAILABLE;
     54     }
     55 
     56     @Override
     57     public boolean isSliceable() {
     58         return true;
     59     }
     60 
     61     @Override
     62     public void onStart() {
     63         mBatterySaverReceiver.setListening(true);
     64     }
     65 
     66     @Override
     67     public void onStop() {
     68         mBatterySaverReceiver.setListening(false);
     69     }
     70 
     71     @Override
     72     public void displayPreference(PreferenceScreen screen) {
     73         super.displayPreference(screen);
     74         mPreference = (TwoStateButtonPreference) screen.findPreference(getPreferenceKey());
     75     }
     76 
     77     @Override
     78     public boolean isChecked() {
     79         return mPowerManager.isPowerSaveMode();
     80     }
     81 
     82     @Override
     83     public boolean setChecked(boolean stateOn) {
     84         // This screen already shows a warning, so we don't need another warning.
     85         return BatterySaverUtils.setPowerSaveMode(mContext, stateOn,
     86                 false /* needFirstTimeWarning */);
     87     }
     88 
     89     @Override
     90     public void updateState(Preference preference) {
     91         super.updateState(preference);
     92         if (mPreference != null) {
     93             mPreference.setChecked(isChecked());
     94         }
     95     }
     96 
     97     @Override
     98     public void onPowerSaveModeChanged() {
     99         final boolean isChecked = isChecked();
    100         if (mPreference != null && mPreference.isChecked() != isChecked) {
    101             mPreference.setChecked(isChecked);
    102         }
    103     }
    104 
    105     @Override
    106     public void onBatteryChanged(boolean pluggedIn) {
    107         if (mPreference != null) {
    108             mPreference.setButtonEnabled(!pluggedIn);
    109         }
    110     }
    111 }
    112