• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
BatterySaverButtonPreferenceController(Context context, String key)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
getAvailabilityStatus()52     public int getAvailabilityStatus() {
53         return AVAILABLE;
54     }
55 
56     @Override
isSliceable()57     public boolean isSliceable() {
58         return true;
59     }
60 
61     @Override
onStart()62     public void onStart() {
63         mBatterySaverReceiver.setListening(true);
64     }
65 
66     @Override
onStop()67     public void onStop() {
68         mBatterySaverReceiver.setListening(false);
69     }
70 
71     @Override
displayPreference(PreferenceScreen screen)72     public void displayPreference(PreferenceScreen screen) {
73         super.displayPreference(screen);
74         mPreference = (TwoStateButtonPreference) screen.findPreference(getPreferenceKey());
75     }
76 
77     @Override
isChecked()78     public boolean isChecked() {
79         return mPowerManager.isPowerSaveMode();
80     }
81 
82     @Override
setChecked(boolean stateOn)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
updateState(Preference preference)90     public void updateState(Preference preference) {
91         super.updateState(preference);
92         if (mPreference != null) {
93             mPreference.setChecked(isChecked());
94         }
95     }
96 
97     @Override
onPowerSaveModeChanged()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
onBatteryChanged(boolean pluggedIn)106     public void onBatteryChanged(boolean pluggedIn) {
107         if (mPreference != null) {
108             mPreference.setButtonEnabled(!pluggedIn);
109         }
110     }
111 }
112