diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTip.java index f8d8fa19079..7b8f624fe3e 100644 --- a/src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTip.java +++ b/src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTip.java @@ -62,13 +62,17 @@ public class EarlyWarningTip extends BatteryTip { @Override public void updateState(BatteryTip tip) { - final EarlyWarningTip earlyHeadsUpTip = (EarlyWarningTip) tip; - if (mPowerSaveModeOn != earlyHeadsUpTip.mPowerSaveModeOn) { - mPowerSaveModeOn = earlyHeadsUpTip.mPowerSaveModeOn; - mState = earlyHeadsUpTip.mPowerSaveModeOn ? StateType.HANDLED : StateType.NEW; - } else if (mState != StateType.HANDLED) { - mState = earlyHeadsUpTip.getState(); + final EarlyWarningTip earlyWarningTip = (EarlyWarningTip) tip; + if (earlyWarningTip.mState == StateType.NEW) { + // Display it if there is early warning + mState = StateType.NEW; + } else if (mState == StateType.NEW && earlyWarningTip.mState == StateType.INVISIBLE) { + // If powerSaveMode is really on, show it as handled, otherwise just dismiss it. + mState = earlyWarningTip.mPowerSaveModeOn ? StateType.HANDLED : StateType.INVISIBLE; + } else { + mState = earlyWarningTip.getState(); } + mPowerSaveModeOn = earlyWarningTip.mPowerSaveModeOn; } @Override diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTipTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTipTest.java index 66d5f810826..7dfe42e2d82 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTipTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTipTest.java @@ -83,4 +83,38 @@ public class EarlyWarningTipTest { assertThat(mEarlyWarningTip.getState()).isEqualTo(BatteryTip.StateType.HANDLED); } + + @Test + public void testUpdate_devicePluggedIn_typeBecomeInvisible() { + final EarlyWarningTip nextTip = new EarlyWarningTip(BatteryTip.StateType.INVISIBLE, + false /* powerModeOn */); + + mEarlyWarningTip.updateState(nextTip); + + assertThat(mEarlyWarningTip.getState()).isEqualTo(BatteryTip.StateType.INVISIBLE); + } + + @Test + public void testUpdate_turnOnLowPowerModeExplicitly_typeStillInvisible() { + final EarlyWarningTip earlyWarningTip = new EarlyWarningTip(BatteryTip.StateType.INVISIBLE, + false /* powerModeOn */); + final EarlyWarningTip nextTip = new EarlyWarningTip(BatteryTip.StateType.INVISIBLE, + true /* powerModeOn */); + + earlyWarningTip.updateState(nextTip); + + assertThat(earlyWarningTip.getState()).isEqualTo(BatteryTip.StateType.INVISIBLE); + } + + @Test + public void testUpdate_turnOffLowPowerModeExplicitly_typeBecomeInvisible() { + final EarlyWarningTip earlyWarningTip = new EarlyWarningTip(BatteryTip.StateType.HANDLED, + true /* powerModeOn */); + final EarlyWarningTip nextTip = new EarlyWarningTip(BatteryTip.StateType.INVISIBLE, + false /* powerModeOn */); + + earlyWarningTip.updateState(nextTip); + + assertThat(earlyWarningTip.getState()).isEqualTo(BatteryTip.StateType.INVISIBLE); + } }