diff options
6 files changed, 46 insertions, 14 deletions
diff --git a/packages/SystemUI/res/values/cm_strings.xml b/packages/SystemUI/res/values/cm_strings.xml index 200a236..785e72a 100644 --- a/packages/SystemUI/res/values/cm_strings.xml +++ b/packages/SystemUI/res/values/cm_strings.xml @@ -104,6 +104,8 @@ <string name="quick_settings_profiles_off">Profiles disabled</string> <string name="quick_settings_heads_up_label">Heads up</string> <string name="quick_settings_battery_saver_label">Battery saver</string> + <!-- quick settings battery saver label to show when device is charging and tile is disabled --> + <string name="quick_settings_battery_saver_label_charging">Battery saver (charging)</string> <string name="quick_settings_caffeine_label">Caffeine</string> <!-- Content description of the sync tile in quick settings when off (not shown on the screen). [CHAR LIMIT=NONE] --> diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java index 2d62724..01a170f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java @@ -34,6 +34,7 @@ import android.view.ViewGroup; import android.widget.RemoteViews; import com.android.systemui.qs.QSTile.State; +import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.BluetoothController; import com.android.systemui.statusbar.policy.CastController; import com.android.systemui.statusbar.policy.FlashlightController; @@ -344,6 +345,7 @@ public abstract class QSTile<TState extends State> implements Listenable { CastController getCastController(); FlashlightController getFlashlightController(); KeyguardMonitor getKeyguardMonitor(); + BatteryController getBatteryController(); boolean isEditing(); void setEditing(boolean editing); void resetTiles(); diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java index 37d8d73..1a60fa9 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java @@ -25,6 +25,8 @@ import android.provider.Settings; import com.android.systemui.qs.QSTile; import com.android.systemui.R; +import com.android.systemui.statusbar.policy.BatteryController; +import com.android.systemui.statusbar.policy.BatteryStateRegistar; import cyanogenmod.power.PerformanceManager; @@ -36,13 +38,15 @@ public class BatterySaverTile extends QSTile<QSTile.BooleanState> { private static final Intent BATTERY_SETTINGS = new Intent(Intent.ACTION_POWER_USAGE_SUMMARY); private final PowerManager mPm; - private final PerformanceManager mPerformanceManager; + private final boolean mHasPowerProfiles; + private boolean mListening; + private boolean mPluggedIn; public BatterySaverTile(Host host) { super(host); mPm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); - mPerformanceManager = PerformanceManager.getInstance(mContext); + mHasPowerProfiles = PerformanceManager.getInstance(mContext).getNumberOfProfiles() > 0; } @Override @@ -53,7 +57,7 @@ public class BatterySaverTile extends QSTile<QSTile.BooleanState> { @Override public void handleClick() { mPm.setPowerSaveMode(!mState.value); - refreshState(); + refreshState(!mState.value); } @Override @@ -63,8 +67,8 @@ public class BatterySaverTile extends QSTile<QSTile.BooleanState> { @Override protected void handleUpdateState(BooleanState state, Object arg) { - state.value = mPm.isPowerSaveMode(); - state.visible = mPerformanceManager.getNumberOfProfiles() == 0; + state.value = arg instanceof Boolean ? (boolean) arg : mPm.isPowerSaveMode(); + state.visible = !mHasPowerProfiles; state.label = mContext.getString(R.string.quick_settings_battery_saver_label); if (state.value) { state.icon = ResourceIcon.get(R.drawable.ic_qs_battery_saver_on); @@ -75,6 +79,11 @@ public class BatterySaverTile extends QSTile<QSTile.BooleanState> { state.contentDescription = mContext.getString( R.string.accessibility_quick_settings_battery_saver_off); } + + state.enabled = !mPluggedIn; + if (mPluggedIn) { + state.label = mContext.getString(R.string.quick_settings_battery_saver_label_charging); + } } @Override @@ -93,11 +102,24 @@ public class BatterySaverTile extends QSTile<QSTile.BooleanState> { return CMMetricsLogger.TILE_BATTERY_SAVER; } - private ContentObserver mObserver = new ContentObserver(mHandler) { + private BatteryStateRegistar.BatteryStateChangeCallback mBatteryState + = new BatteryStateRegistar.BatteryStateChangeCallback() { + @Override + public void onBatteryLevelChanged(boolean present, int level, boolean pluggedIn, + boolean charging) { + mPluggedIn = pluggedIn || charging; + refreshState(); + } + @Override - public void onChange(boolean selfChange, Uri uri) { + public void onPowerSaveChanged() { refreshState(); } + + @Override + public void onBatteryStyleChanged(int style, int percentMode) { + // ignore + } }; @Override @@ -106,11 +128,9 @@ public class BatterySaverTile extends QSTile<QSTile.BooleanState> { mListening = listening; if (listening) { - mContext.getContentResolver().registerContentObserver( - Settings.Global.getUriFor(Settings.Global.LOW_POWER_MODE), - false, mObserver); + getHost().getBatteryController().addStateChangedCallback(mBatteryState); } else { - mContext.getContentResolver().unregisterContentObserver(mObserver); + getHost().getBatteryController().removeStateChangedCallback(mBatteryState); } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index adff973..c99e4e7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -1181,7 +1181,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, mNetworkController, mZenModeController, mHotspotController, mCastController, mFlashlightController, mUserSwitcherController, mKeyguardMonitor, - mSecurityController); + mSecurityController, mBatteryController); } mQSPanel.setHost(mQSTileHost); if (mBrightnessMirrorController == null) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java index b776a9f..a426f71 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java @@ -67,6 +67,7 @@ import com.android.systemui.qs.tiles.UsbTetherTile; import com.android.systemui.qs.tiles.VolumeTile; import com.android.systemui.qs.tiles.WifiTile; import com.android.systemui.statusbar.CustomTileData; +import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.BluetoothController; import com.android.systemui.statusbar.policy.CastController; import com.android.systemui.statusbar.policy.FlashlightController; @@ -115,6 +116,7 @@ public class QSTileHost implements QSTile.Host, Tunable { private final UserSwitcherController mUserSwitcherController; private final KeyguardMonitor mKeyguard; private final SecurityController mSecurity; + private final BatteryController mBattery; private CustomTileData mCustomTileData; private CustomTileListenerService mCustomTileListenerService; @@ -127,7 +129,7 @@ public class QSTileHost implements QSTile.Host, Tunable { ZenModeController zen, HotspotController hotspot, CastController cast, FlashlightController flashlight, UserSwitcherController userSwitcher, KeyguardMonitor keyguard, - SecurityController security) { + SecurityController security, BatteryController battery) { mContext = context; mStatusBar = statusBar; mBluetooth = bluetooth; @@ -141,6 +143,7 @@ public class QSTileHost implements QSTile.Host, Tunable { mUserSwitcherController = userSwitcher; mKeyguard = keyguard; mSecurity = security; + mBattery = battery; mCustomTileData = new CustomTileData(); final HandlerThread ht = new HandlerThread(QSTileHost.class.getSimpleName(), @@ -281,6 +284,11 @@ public class QSTileHost implements QSTile.Host, Tunable { return mKeyguard; } + @Override + public BatteryController getBatteryController() { + return mBattery; + } + public UserSwitcherController getUserSwitcherController() { return mUserSwitcherController; } diff --git a/packages/SystemUI/src/com/android/systemui/tuner/QsTuner.java b/packages/SystemUI/src/com/android/systemui/tuner/QsTuner.java index 9d63d08..53fbef7 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/QsTuner.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/QsTuner.java @@ -163,7 +163,7 @@ public class QsTuner extends Fragment implements Callback { public CustomHost(Context context) { super(context, null, null, null, null, null, null, null, null, null, - null, null, new BlankSecurityController()); + null, null, new BlankSecurityController(), null); } @Override |
