From bdd215312fab785110143087fde7ba6f73663f3b Mon Sep 17 00:00:00 2001 From: Firefly Date: Tue, 2 Jun 2015 13:25:18 +0800 Subject: [PATCH] [packages/apps/Settings] Settings: enhance power save mode add sub items to control if limit cpu frequency, lcd brightness, etc. Issue: GRANITEFLY-749 Change-Id: Iedd9b7fce8f2fcf01a35a4ef93365a83e9d49976 --- .../ic_settings_battery_power_save.png | Bin 0 -> 786 bytes .../ic_settings_battery_power_save.png | Bin 0 -> 663 bytes .../ic_settings_battery_power_save.png | Bin 0 -> 895 bytes .../ic_settings_battery_power_save.png | Bin 0 -> 1087 bytes .../ic_settings_power_save.png | Bin 0 -> 1237 bytes .../res/values-zh-rCN/strings_intel.xml | 19 ++ .../res/values-zh-rTW/strings_intel.xml | 19 ++ .../Settings/res/values/strings_intel.xml | 19 ++ .../res/xml/battery_saver_settings.xml | 52 +++- .../Settings/res/xml/dashboard_categories.xml | 8 + .../android/settings/SettingsActivity.java | 1 + .../fuelgauge/BatterySaverSettings.java | 245 ++++++++++++++++-- 12 files changed, 337 insertions(+), 26 deletions(-) create mode 100644 packages/apps/Settings/res/drawable-hdpi/ic_settings_battery_power_save.png create mode 100644 packages/apps/Settings/res/drawable-mdpi/ic_settings_battery_power_save.png create mode 100644 packages/apps/Settings/res/drawable-xhdpi/ic_settings_battery_power_save.png create mode 100644 packages/apps/Settings/res/drawable-xxhdpi/ic_settings_battery_power_save.png create mode 100644 packages/apps/Settings/res/drawable-xxxhdpi/ic_settings_power_save.png diff --git a/packages/apps/Settings/res/drawable-hdpi/ic_settings_battery_power_save.png b/packages/apps/Settings/res/drawable-hdpi/ic_settings_battery_power_save.png new file mode 100644 index 0000000000000000000000000000000000000000..75a2af996725db38f3b321a79be13ff82bad319e GIT binary patch literal 786 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBSkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+eS5K)hhiu0R{01Y44~ zy9>jA5L~c#`DCC7XMsm#F_88EW4Dvpc0l7FdAc};L>zv5!@En^QRetZe}5xBi)I1+ z2VSo0ALxEzXj0(V*-&V{x}xzw&YcRDqud?Ztk?DKzRc?3`5{qlrMD|9NchsXWFvmX zdXE3E&h1~d@9*#Hi+3C4<{0%Y<=H#yh0-61zNpgTl{(p?wvy>H9!klze7ZR4#Ofan z{WlyghAhomP+8UDw)lLZ^n9(XXD^a_(su~G{Ehu*3QV$>2XI;+=DU|9 zu%aaI@38Wy-*Qjqy#=!DrGkITQ+MrCeVczh zZHa0?$P>GJ>{lN#+~xo8dSUqu-&Zn^c;7|ZDO)ohRiFKcy-u>PtLp}{OpBq!<=OgM zinA8DZqQldxw5L;P%|Joo7=?to9N~z7SEnom8ChH7FpH3zo2!_awq1eBKHg>#d#kY zKh?QyqrD*f)YoNqm&NFHow>ewDr0VW!@{J{IM#sGjJJ;NI>usqQ`YeY#(Vo9o1a#1RfVlXl=G|@FM)ip8< zF*LI>GPE)@(={-+GBDuT=2VWNAvZrIGp!Q0hT7M^P6IVaf@}!RPb(=;EJ|f?Ovz75 eRq)JBOiv9;O-!jQJedkgn+%?=elF{r5}E+>qB->d literal 0 HcmV?d00001 diff --git a/packages/apps/Settings/res/drawable-mdpi/ic_settings_battery_power_save.png b/packages/apps/Settings/res/drawable-mdpi/ic_settings_battery_power_save.png new file mode 100644 index 0000000000000000000000000000000000000000..7a001fc878e2cf99fbec2d589f0c5142d06b760c GIT binary patch literal 663 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPV z+ueoXKL{?^yL>WGgtNdSvKUBvfU(=jY&)Rw>7Fi*As)xyUbW8_ag;dz@%+135s{{Z zOWb8)jeD5xcT70+${~lp`n~8K?F}2Z32fw;);J-~QE0-If4WW2z8!lsukoy!b)jqS zBW7;v&$DayozG88Z`&_(b>_92Yk5}}n%_8-tFvhRA=8Fq{sNI`w=g_B`_t0`)B6GX$Us1US+V37_-Y@yiD0FSnq3IH{eZ+PD&i(nO zHl#|X!Gz_))$2*Mo4#6cWke;jS)Q0EJg-c~WUYKspjUz9gS3#{iFU8mR((91wU&+9 z?MIV(g~&<0u8<2|4X0lDOS!j(Djxq-&aiT-iKcs?zNN?7?~|G*h0WV9~19K|_1D?hh{5Svr literal 0 HcmV?d00001 diff --git a/packages/apps/Settings/res/drawable-xhdpi/ic_settings_battery_power_save.png b/packages/apps/Settings/res/drawable-xhdpi/ic_settings_battery_power_save.png new file mode 100644 index 0000000000000000000000000000000000000000..6825b7147d94cdc5cb20f4b926abd741eef59130 GIT binary patch literal 895 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCmUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)pVryh>nTu$sZZAYL$MSD+10f-TA0 z-G$*l2rk&Wd@@jkv%n*=7)X17vD?XPI|c?Oe@_?3kc@k8XBy@U8;TsSFTWnp$;6%X z_RtY_4Oy!LXWA2z7Fh?0hb%iIyUDO5wS}|Hj@ik>$HT`!LFvk*J2MZSx4geJQ08{0 z^ppJ}PbY1@|MUC3&(`z#x5c<_XuWtrW~#$hr}HP@y!fHARsNEu8;jQhMma|R216^U z?hq#N1Ck%uH7x7`_f5aw`Jly%L5^Af!b-!43t^p?j~&Qn-}K;f(H=@)ZOF4)8wE{=j>D=R+%YuAK+uJ}~Y` zuDs^KIQ@WLuBGY9D;IoMGk(~XzJJ<(|Hkl3b%%sneI7Oa{F%U(@y2g0#}uaYbKieo zvupmqXb|_m_1x!MQWeefnCGwEwyc(S53}7u<uc}Hdnfm%aOWtyZ9sD&P_ij*ajbrw$ zJtjQKNwum_+}m3`ZzH3ELV2>Lh{B(lRsqrV@+TNpP6Zmvyd;dxV=d2wC`pB_Mh;o2 z4OebeHB5N>^~U+bao?P_h5m|uy71Gcty&FCb(i<;@8UFIe7DH_)FS2?ANnq?Z@#uw zI&i`LN74)a$LGy^^Uh{{wf>5^XZZ48{b&4E*L8Yh<&=}aG^SeO8c~vxSdwa$T$Bo= z7>o=IO>_-Rb&U)|49%>J46O{!bPdd{3=DX-IhCVm$jwj5OsmALq4xE!(?AW9ARB`7 q(@M${i&7aJQ}UBi6+Ckj(^G>|6H_V+Po{!00)wZkpUXO@geCy%!)_7) literal 0 HcmV?d00001 diff --git a/packages/apps/Settings/res/drawable-xxhdpi/ic_settings_battery_power_save.png b/packages/apps/Settings/res/drawable-xxhdpi/ic_settings_battery_power_save.png new file mode 100644 index 0000000000000000000000000000000000000000..1648ee44dcca4fea155aa191ff960835887c85d1 GIT binary patch literal 1087 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPV z+ueoXKL{?^yL>WGgtNdSvKUB%?PPE}nQh0wz|8OI;uunK>+PKVd6yj|4%GVv|5LuT zR9RcvhCyNDCDx4wUwQv9xg@#DNzB+|)N~}6;gRix2@|+pF}Q~0zPiCv-mbrH@_CbT zKdIXNOG}gL%fElVTbr)Vr_m)eamnA-pl@9z2_lE1z*kV;x~F9X1tvI(_KSfVj&A} zgZh=j%isP@elTx)Z|)bd4gPaq{@EpZpm$ot`4yWZCUY5gzGs$?dZg!iA@zZ7!P3Y7 z{@EBQ%KDzz+*J}{u5w=J_pbXpxQtEipXrQ^(wyJezFO%-=)Rq?hPBhQ-{)W2_-N`~ z{mdiT$7D-7wuU(R3Z3I?eD*E$iHo7jxtLsaMGiw&Sq6JU=S6GFRS)F*sAV6PE#|0s zn8W{RCWG~Xvln_h6i=8wQvJZUBTf2(TjxxlyZ_I+G1sujoz*sCKe8KEl*)g#~d!0K6?uhQl+ur=`nnY6!Ykcy$4ZmkRzcbfu z{~v`TZyaaGE!EeVb(96obVgB?1x=I+I@KM{@j1``_xu4{DbXj@6Bn|m9$1?yIrE@j zhr&XZ-bQi8$GT0`Dpzcm?znKh+1Yf(0h`6Uy4JKPy!fb|Z532>u?)FK#IZ0z|ch3z*N`BFvQTz%E-{l&`j6B+{(a!XPZ+w ziiX_$l+3hB+!|_M|2hrSAPKS|I6tkVJh3R1!7(L2DOJHUH!(dmC^a#qvhZXoC?hj? My85}Sb4q9e0PFR&F#rGn literal 0 HcmV?d00001 diff --git a/packages/apps/Settings/res/drawable-xxxhdpi/ic_settings_power_save.png b/packages/apps/Settings/res/drawable-xxxhdpi/ic_settings_power_save.png new file mode 100644 index 0000000000000000000000000000000000000000..d45c6ef9053a04a3315628407ea0e65830b7f92e GIT binary patch literal 1237 zcmah}ZD<@t7@jmA#Dvh&4@#ue>7G9fuX*Ro)WKDKw z-JN)wLnJ5)hSDO{5U3w07AtCn3jWYS>W>DjDfyvoP+C$-DYS-&pVjyy&ZfCU(9?z8 znRn)Sp7)t~U-so(_mQTC2O9tYP1%f+XX8Nd*4MG`&6#414b8NxkM@uuTGU(&QU)2s zFl%YUIFB`B;^{AOI{?)ov(QKT)W>9WUucSs*CyhtUOv%MPrS5`W8r9c6rxDvqau&QFcRcwTt*VycsQ2LHHPH8 za(E*bixS)jrH;(=#bPm16eGkP=21Kz=c58I2w{c@dlNR*{IKnX$_fhhbk}sKNo*J> zYJ+5)COGEw{t+x^Q`Yu2u8Cb3?`sZ^BGKSTWuU75H`KB=(H_m?Ex-RN>=h;)%;&L3 z#$BBiZYUI_a^$p&HA>t9A!FrR%#9FAyb)g0qnfSbtdiiE zM8q@=86idJ>J-})NsJ@ZC8pY1k&=!{LQ3q6b+)21S0Vbig>72q8e800MQ+dwmcueD z*fpQQ#$lIOaQ)1(S=ozJQE!85RQA$Zk;^kPd{EiHRl2;y+9#N9_ALuGJ0IJu-Cfq# zYaiD315lO8Dyf41-SV{q_O{gSNp0EznNt13=k}htx%14_)Kk0PX?WtwyRnw(5PW4% zqQ*=fc<)4G@}(6aIomN|4?pnp7s(xkgQur2UHP;YfO-I4d;jZOmp?dh=lWQo)V#F+ z!qGR$3-?y$miMK$fh1U2?ay7d^sCK_+Xwf9Zx(y!d**)qYUb@w=HgP-Lho;{A3=Z4 zOP}=D{eE7UyeD35sk>4CQ!^tz+xQt>LMP{?Q}f?%pM7ybTs(jAm$m8(nz*;AWA5%T z>Eq+@t*RhJV4?~@0BXP_0J-bq4TtQ7=U%P$kNxrEYO!W(YX<=T#Q)#o8_PS_W*-0c ncIec}{JF;CFp#KS-7^55+_mqak4S2Y{bxY7t6MqSIq>{nH57>M literal 0 HcmV?d00001 diff --git a/packages/apps/Settings/res/values-zh-rCN/strings_intel.xml b/packages/apps/Settings/res/values-zh-rCN/strings_intel.xml index 996a8c0851..6229d9386a 100644 --- a/packages/apps/Settings/res/values-zh-rCN/strings_intel.xml +++ b/packages/apps/Settings/res/values-zh-rCN/strings_intel.xml @@ -19,4 +19,23 @@ 自动确定语言 根据SIM卡国家码自动确定系统语言 根据SIM卡国家码自动确定系统语言 + + + 基本设置 + 显示省电模式 + 省电模式启动后在状态栏显示省电模式 + 电池电量低时启动省电模式 + 不管省电模式是否开启,当电池电量低于15%时自动启动省电模式 + 功能设置 + 限制CPU性能 + 限制CPU最高频率 + 降低屏幕亮度 + 降低屏幕亮度省电 + 限制定位服务 + GPS定位服务不能使用 + 限制网络访问 + 大部分后台应用不能使用网络 + 限制窗口动画效果 + 不显示窗口切换的动画效果 + 提示 diff --git a/packages/apps/Settings/res/values-zh-rTW/strings_intel.xml b/packages/apps/Settings/res/values-zh-rTW/strings_intel.xml index c3be6abb35..75b26f5d14 100644 --- a/packages/apps/Settings/res/values-zh-rTW/strings_intel.xml +++ b/packages/apps/Settings/res/values-zh-rTW/strings_intel.xml @@ -19,4 +19,23 @@ 自動確定語言 根據SIM卡國家碼自動確定系統語言 根據SIM卡國家碼自動確定系統語言 + + + 基本設置 + 顯示省電模式 + 省電模式啟動後在狀態列顯示省電模式 + 電池計量低時啟動省電模式 + 不管省電模式是否開啟,當電池計量低於15%時自動啟動省電模式 + 功能設置 + 限制CPU性能 + 限制CPU最高頻率 + 降低螢幕亮度 + 降低螢幕亮度省電 + 限制定位服務 + GPS定位服務不能使用 + 限制網路訪問 + 大部分後臺應用不能使用網路 + 限制視窗動畫效果 + 不顯示視窗切換的動畫效果 + 提示 diff --git a/packages/apps/Settings/res/values/strings_intel.xml b/packages/apps/Settings/res/values/strings_intel.xml index d40c5b06ef..f7e419aab5 100644 --- a/packages/apps/Settings/res/values/strings_intel.xml +++ b/packages/apps/Settings/res/values/strings_intel.xml @@ -19,4 +19,23 @@ Automatic Language Auto set language according to SIM card country code info Auto set language according to SIM card country code info + + + Basic controls + Show indicator + Show power save mode enabled indicator on status bar + Turn on power save mode automatically + When battery is less than 15%, turn on power save mode + Feature controls + Limit CPU performance + Limit CPU maximum frequency + Reduce backlight brightness + Reduce brightness of backlight to save power + Disable location services + GPS location services will be disabled + Restrict network access + Most background data will be disabled + No animation transaction + Window animation transaction will be disabled + Tips diff --git a/packages/apps/Settings/res/xml/battery_saver_settings.xml b/packages/apps/Settings/res/xml/battery_saver_settings.xml index cb923c8bd9..8c6debd9e5 100644 --- a/packages/apps/Settings/res/xml/battery_saver_settings.xml +++ b/packages/apps/Settings/res/xml/battery_saver_settings.xml @@ -18,17 +18,53 @@ android:title="@string/battery_saver" android:key="battery_saver"> - - + + - - + + + + + + + + + + + + + + + - + diff --git a/packages/apps/Settings/res/xml/dashboard_categories.xml b/packages/apps/Settings/res/xml/dashboard_categories.xml index 20538efeed..4cd437ed57 100755 --- a/packages/apps/Settings/res/xml/dashboard_categories.xml +++ b/packages/apps/Settings/res/xml/dashboard_categories.xml @@ -124,6 +124,14 @@ android:icon="@drawable/ic_settings_battery" /> + + + 0 && value < 100) { - return res.getString(R.string.battery_saver_turn_on_automatically_pct, - Utils.formatPercentage(value)); - } - return res.getString(R.string.battery_saver_turn_on_automatically_never); - } - }; - mTriggerPref.init(this); - mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); + + mShowIndicatorPref = (SwitchPreference) findPreference(KEY_SHOW_INDICATOR); + mShowIndicatorPref.setOnPreferenceChangeListener(this); + mEnableWhenLowBatteryPref = (SwitchPreference) findPreference(KEY_TURN_ON_AUTOMATICALLY); + mEnableWhenLowBatteryPref.setOnPreferenceChangeListener(this); + mLimitCPU = (SwitchPreference) findPreference(KEY_LIMIT_CPU); + mLimitCPU.setOnPreferenceChangeListener(this); + if (!SystemProperties.getBoolean(PROPERTY_THERMAL_ENABLED, false)) { + final PreferenceCategory parent = (PreferenceCategory) findPreference(KEY_SUB_ITEMS); + parent.removePreference(mLimitCPU); + mLimitCPU = null; + } + mLimitBrightness = (SwitchPreference) findPreference(KEY_LIMIT_BRIGHTNESS); + mLimitBrightness.setOnPreferenceChangeListener(this); + mLimitLocation = (SwitchPreference) findPreference(KEY_LIMIT_LOCATION); + mLimitLocation.setOnPreferenceChangeListener(this); + mLimitNetwork = (SwitchPreference) findPreference(KEY_LIMIT_NETWORK); + mLimitNetwork.setOnPreferenceChangeListener(this); + mLimitAnimation = (SwitchPreference) findPreference(KEY_LIMIT_ANIMATION); + mLimitAnimation.setOnPreferenceChangeListener(this); } @Override @@ -109,6 +136,35 @@ public class BatterySaverSettings extends SettingsPreferenceFragment mValidListener = true; } updateSwitch(); + updateBasicItems(); + updateSubItems(); + } + + private void updateBasicItems() { + if (mShowIndicatorPref != null) { + mShowIndicatorPref.setChecked(isShowPowerSaveModeIndicator()); + } + if (mEnableWhenLowBatteryPref != null) { + mEnableWhenLowBatteryPref.setChecked(getLowPowerModeTriggerLevel() > 0); + } + } + + private void updateSubItems() { + if (mLimitCPU != null) { + mLimitCPU.setChecked(getLimitOnPowerSaveMode(KEY_LIMIT_CPU)); + } + if (mLimitBrightness != null) { + mLimitBrightness.setChecked(getLimitOnPowerSaveMode(KEY_LIMIT_BRIGHTNESS)); + } + if (mLimitLocation != null) { + mLimitLocation.setChecked(getLimitOnPowerSaveMode(KEY_LIMIT_LOCATION)); + } + if (mLimitNetwork != null) { + mLimitNetwork.setChecked(getLimitOnPowerSaveMode(KEY_LIMIT_NETWORK)); + } + if (mLimitAnimation != null) { + mLimitAnimation.setChecked(getLimitOnPowerSaveMode(KEY_LIMIT_ANIMATION)); + } } @Override @@ -121,6 +177,42 @@ public class BatterySaverSettings extends SettingsPreferenceFragment mValidListener = false; } } + @Override + public boolean onPreferenceChange(Preference preference, Object objValue) { + final String key = preference.getKey(); + + if (KEY_SHOW_INDICATOR.equals(key)) { + boolean show = (Boolean) objValue; + showPowerSaveModeIndicator(show); + } else if (KEY_TURN_ON_AUTOMATICALLY.equals(key)) { + boolean auto = (Boolean) objValue; + setLowPowerModeTriggerLevel(auto ? 15 : 0); + + if (auto) { + if (isAllSubItemDisabled()) { + enableAllSubItem(); + mHandler.post(mUpdateSubItems); + } + } + } else if (KEY_LIMIT_CPU.equals(key) + || KEY_LIMIT_BRIGHTNESS.equals(key) + || KEY_LIMIT_LOCATION.equals(key) + || KEY_LIMIT_NETWORK.equals(key) + || KEY_LIMIT_ANIMATION.equals(key)) { + boolean limit = (Boolean) objValue; + setLimitOnPowerSaveMode(key, limit); + + if (isAllSubItemDisabled()) { + onSwitchChanged(mSwitch, false); + setLowPowerModeTriggerLevel(0); + if (mEnableWhenLowBatteryPref != null) { + mEnableWhenLowBatteryPref.setChecked(false); + } + } + } + + return true; + } @Override public void onSwitchChanged(Switch switchView, boolean isChecked) { @@ -137,6 +229,13 @@ public class BatterySaverSettings extends SettingsPreferenceFragment if (!mPowerManager.setPowerSaveMode(mode)) { if (DEBUG) Log.d(TAG, "Setting mode failed, fallback to current value"); mHandler.post(mUpdateSwitch); + } else { + if (mode) { + if (isAllSubItemDisabled()) { + enableAllSubItem(); + mHandler.post(mUpdateSubItems); + } + } } } @@ -206,7 +305,8 @@ public class BatterySaverSettings extends SettingsPreferenceFragment @Override public void onChange(boolean selfChange, Uri uri) { if (LOW_POWER_MODE_TRIGGER_LEVEL_URI.equals(uri)) { - mTriggerPref.update(mContext); + int level = getLowPowerModeTriggerLevel(); + mEnableWhenLowBatteryPref.setChecked(level > 0); } } @@ -219,4 +319,113 @@ public class BatterySaverSettings extends SettingsPreferenceFragment } } } + + private boolean isShowPowerSaveModeIndicator() { + final ContentResolver cr = getContentResolver(); + final boolean val = Global.getInt(cr, Global.SHOW_LOW_POWER_MODE_INDICATOR, 1) != 0; + return val; + } + + private void showPowerSaveModeIndicator(boolean show) { + final ContentResolver cr = getContentResolver(); + Settings.Global.putInt(cr, Global.SHOW_LOW_POWER_MODE_INDICATOR, show ? 1 : 0); + } + + private int getLowPowerModeTriggerLevel() { + final ContentResolver cr = getContentResolver(); + final int val = Global.getInt(cr, Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0); + return val; + } + + private void setLowPowerModeTriggerLevel(int val) { + final ContentResolver cr = getContentResolver(); + Settings.Global.putInt(cr, Global.LOW_POWER_MODE_TRIGGER_LEVEL, val); + } + + private boolean getLimitOnPowerSaveMode(String key) { + final ContentResolver cr = getContentResolver(); + final boolean val; + switch (key) { + case KEY_LIMIT_CPU: + val = Settings.Global.getInt(cr, Settings.Global.LOW_POWER_MODE_LIMIT_CPU, 1) != 0; + break; + case KEY_LIMIT_BRIGHTNESS: + val = Settings.Global.getInt(cr, Settings.Global.LOW_POWER_MODE_LIMIT_BRIGHTNESS, 1) != 0; + break; + case KEY_LIMIT_LOCATION: + val = Settings.Secure.getInt(cr, Settings.Secure.LOW_POWER_MODE_LIMIT_LOCATION, 1) != 0; + break; + case KEY_LIMIT_NETWORK: + val = Settings.Global.getInt(cr, Settings.Global.LOW_POWER_MODE_LIMIT_NETWORK, 1) != 0; + break; + case KEY_LIMIT_ANIMATION: + val = Settings.Global.getInt(cr, Settings.Global.LOW_POWER_MODE_LIMIT_ANIMATION, 1) != 0; + break; + default: + Log.e(TAG, "Not found settings for " + key); + val = false; + break; + } + return val; + } + + private void setLimitOnPowerSaveMode(String key, boolean limit) { + final ContentResolver cr = getContentResolver(); + switch (key) { + case KEY_LIMIT_CPU: + Settings.Global.putInt(cr, Settings.Global.LOW_POWER_MODE_LIMIT_CPU, limit ? 1 : 0); + break; + case KEY_LIMIT_BRIGHTNESS: + Settings.Global.putInt(cr, Settings.Global.LOW_POWER_MODE_LIMIT_BRIGHTNESS, limit ? 1 : 0); + break; + case KEY_LIMIT_LOCATION: + Settings.Secure.putInt(cr, Settings.Secure.LOW_POWER_MODE_LIMIT_LOCATION, limit ? 1 : 0); + break; + case KEY_LIMIT_NETWORK: + Settings.Global.putInt(cr, Settings.Global.LOW_POWER_MODE_LIMIT_NETWORK, limit ? 1 : 0); + break; + case KEY_LIMIT_ANIMATION: + Settings.Global.putInt(cr, Settings.Global.LOW_POWER_MODE_LIMIT_ANIMATION, limit ? 1 : 0); + break; + default: + Log.e(TAG, "Not found settings for " + key); + break; + } + } + + private boolean isAllSubItemDisabled() { + if ((mLimitCPU == null || !getLimitOnPowerSaveMode(KEY_LIMIT_CPU)) + && !getLimitOnPowerSaveMode(KEY_LIMIT_BRIGHTNESS) + && !getLimitOnPowerSaveMode(KEY_LIMIT_LOCATION) + && !getLimitOnPowerSaveMode(KEY_LIMIT_NETWORK) + && !getLimitOnPowerSaveMode(KEY_LIMIT_ANIMATION)) { + return true; + } + return false; + } + + private void enableAllSubItem() { + if (mLimitCPU != null) { + setLimitOnPowerSaveMode(KEY_LIMIT_CPU, true); + } + if (mLimitBrightness != null) { + setLimitOnPowerSaveMode(KEY_LIMIT_BRIGHTNESS, true); + } + if (mLimitLocation != null) { + setLimitOnPowerSaveMode(KEY_LIMIT_LOCATION, true); + } + if (mLimitNetwork != null) { + setLimitOnPowerSaveMode(KEY_LIMIT_NETWORK, true); + } + if (mLimitAnimation != null) { + setLimitOnPowerSaveMode(KEY_LIMIT_ANIMATION, true); + } + } + + private final Runnable mUpdateSubItems = new Runnable() { + @Override + public void run() { + updateSubItems(); + } + }; }