diff options
Diffstat (limited to 'packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java')
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java | 42 |
1 files changed, 31 insertions, 11 deletions
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); } } } |