1、打开/packages/apps/Settings/res/xml/battery_saver_settings.xml,找到
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/battery_saver"
settings:keywords="@string/keywords_battery_saver">
<com.android.settingslib.widget.MainSwitchPreference
android:order="-100"
android:key="battery_saver"
android:title="@string/battery_saver_master_switch_title"
settings:controller="com.android.settings.fuelgauge.batterysaver.BatterySaverButtonPreferenceController"/>
.......................................
</PreferenceScreen>
2、找到com.android.settings.fuelgauge.batterysaver.BatterySaverButtonPreferenceController对应的文件
/packages/apps/Settings/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java
在displayPreference方法最后增加代码:
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
mPreference = screen.findPreference(getPreferenceKey());
mPreference.addOnSwitchChangeListener(this);
mPreference.updateStatus(isChecked());
//add code .....
String custom=SystemProperties.get("persist.sys.custom","").trim();
if (custom.length()!=0){
switch (custom){
case "XXX1":
case "XXX2":
if(preference != null ){
preference.setEnabled(false);
}
return;
default:
break;
}
//add end
}
persist.sys.custom是客制化用户名称,根据名称判断是否enable省电开关。
3、省电开关在在充电状态也会修改开关状态,原因是BatterySaverButtonPreferenceController继承了一个广播回调BatterySaverReceiver.BatterySaverListener:
public class BatterySaverButtonPreferenceController extends
TogglePreferenceController implements OnMainSwitchChangeListener, LifecycleObserver,
OnStart, OnStop, BatterySaverReceiver.BatterySaverListener {
....................................
}
打开BatterySaverReceiver,找到广播接收方法:
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (PowerManager.ACTION_POWER_SAVE_MODE_CHANGED.equals(action)) {
if (mBatterySaverListener != null) {
mBatterySaverListener.onPowerSaveModeChanged();
}
} else if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
if (mBatterySaverListener != null) {
final boolean pluggedIn = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) != 0;
mBatterySaverListener.onBatteryChanged(pluggedIn);
}
} else if (PowerManagerEx.ACTION_POWEREX_SAVE_MODE_CHANGED.equals(action)) {
if (mBatterySaverListener != null) {
final boolean isUltraPowerSaveMode = intent.getIntExtra(PowerManagerEx.EXTRA_POWEREX_SAVE_MODE,
MODE_PERFORMANCE) == MODE_ULTRASAVING;
mBatterySaverListener.onUltraPowerSaveModeChanged(isUltraPowerSaveMode);
}
}
}
..................................
public interface BatterySaverListener {
void onPowerSaveModeChanged();
void onBatteryChanged(boolean pluggedIn);
void onUltraPowerSaveModeChanged(boolean isUltraPowerSaveMode);
}
当插拔充电线时,mBatterySaverListener.onBatteryChanged(pluggedIn)通知子类,修改BatterySaverButtonPreferenceController的onBatteryChanged方法,在方法前面增加:
public void onBatteryChanged(boolean pluggedIn) {
//add code .....
String custom=SystemProperties.get("persist.sys.custom","").trim();
if (custom.length()!=0){
switch (custom){
case "XXX1":
case "XXX2":
if(preference != null ){
preference.setEnabled(false);
}
return;
default:
break;
}
//add end
if (mPreference != null) {
mPreference.setEnabled(!pluggedIn);
}
}
4、打开
/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java
参考
修改SuperBatteryTile.java的方法,修改BatterySaverTile.java,在下拉状态栏也禁用省电状态。