diff options
author | Roman Birg <roman@cyngn.com> | 2016-03-18 09:08:28 -0700 |
---|---|---|
committer | Roman Birg <roman@cyngn.com> | 2016-03-21 09:59:26 -0700 |
commit | 53ece467584f2d79cfca3767ba20ce501b2393d2 (patch) | |
tree | 16b440546ec61f9e429cdd1dcc6ca6f8e30faebd /packages/SystemUI/src/com/android/systemui/qs | |
parent | 9d474093528d5eeec6beed1eb330fa6b0648221d (diff) | |
download | frameworks_base-53ece467584f2d79cfca3767ba20ce501b2393d2.zip frameworks_base-53ece467584f2d79cfca3767ba20ce501b2393d2.tar.gz frameworks_base-53ece467584f2d79cfca3767ba20ce501b2393d2.tar.bz2 |
SystemUI: improve battery saver tile
- Fix the tile not showing, the javadoc states that it will return 0 if
profiles are not supported, but it was actually returning -1.
- Now disables itself when the device is plugged in to reflect to the user
that they cannot toggle it on right now.
- Don't wait for power manager to update its internal state before
updating the visual tile state.
Change-Id: I8ab6adb2bfa728a242368294c1f066d468a86f09
Signed-off-by: Roman Birg <roman@cyngn.com>
Diffstat (limited to 'packages/SystemUI/src/com/android/systemui/qs')
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/qs/QSTile.java | 2 | ||||
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java | 42 |
2 files changed, 33 insertions, 11 deletions
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); } } } |