diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java index 825686829e9..2c8f9611bcd 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java +++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java @@ -105,6 +105,8 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList SparseArray> mAnomalySparseArray; @VisibleForTesting BatteryHeaderPreferenceController mBatteryHeaderPreferenceController; + @VisibleForTesting + boolean mNeedUpdateBatteryTip; private BatteryTipPreferenceController mBatteryTipPreferenceController; private int mStatsType = BatteryStats.STATS_SINCE_CHARGED; @@ -211,6 +213,8 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList mAnomalySparseArray = new SparseArray<>(); restartBatteryInfoLoader(); + mNeedUpdateBatteryTip = icicle == null; + mBatteryTipPreferenceController.restoreInstanceState(icicle); } @Override @@ -291,7 +295,12 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList return; } - restartBatteryTipLoader(); + // Only skip BatteryTipLoader for the first time when device is rotated + if (mNeedUpdateBatteryTip) { + restartBatteryTipLoader(); + } else { + mNeedUpdateBatteryTip = true; + } // reload BatteryInfo and updateUI restartBatteryInfoLoader(); @@ -385,6 +394,12 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList restartBatteryStatsLoader(true /* clearHeader */); } + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + mBatteryTipPreferenceController.saveInstanceState(outState); + } + void restartBatteryStatsLoader(boolean clearHeader) { super.restartBatteryStatsLoader(); if (clearHeader) { diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java index 76c65e011d5..69fc0f1a2c9 100644 --- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java +++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java @@ -17,8 +17,8 @@ package com.android.settings.fuelgauge.batterytip; import android.content.Context; +import android.os.Bundle; import android.support.annotation.VisibleForTesting; -import android.support.v14.preference.PreferenceFragment; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceGroup; import android.support.v7.preference.PreferenceScreen; @@ -34,6 +34,7 @@ import com.android.settings.fuelgauge.batterytip.tips.SummaryTip; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -44,6 +45,7 @@ import java.util.Map; public class BatteryTipPreferenceController extends BasePreferenceController { private static final String TAG = "BatteryTipPreferenceController"; private static final int REQUEST_ANOMALY_ACTION = 0; + private static final String KEY_BATTERY_TIPS = "key_battery_tips"; private BatteryTipListener mBatteryTipListener; private List mBatteryTips; @@ -138,6 +140,17 @@ public class BatteryTipPreferenceController extends BasePreferenceController { return super.handlePreferenceTreeClick(preference); } + public void restoreInstanceState(Bundle bundle) { + if (bundle != null) { + List batteryTips = bundle.getParcelableArrayList(KEY_BATTERY_TIPS); + updateBatteryTips(batteryTips); + } + } + + public void saveInstanceState(Bundle outState) { + outState.putParcelableList(KEY_BATTERY_TIPS, mBatteryTips); + } + /** * Listener to give the control back to target fragment */ diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTip.java index ed2f6b6031b..8b161661b55 100644 --- a/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTip.java +++ b/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTip.java @@ -98,6 +98,9 @@ public class RestrictAppTip extends BatteryTip { // If anomaly becomes invisible, show it as handled mState = StateType.HANDLED; mShowDialog = false; + } else { + mState = tip.getState(); + mShowDialog = tip.shouldShowDialog(); } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java index 5179ca67f02..989c0332371 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java @@ -352,6 +352,14 @@ public class PowerUsageSummaryTest { R.string.advanced_battery_title); } + @Test + public void testRefreshUi_deviceRotate_doNotUpdateBatteryTip() { + mFragment.mNeedUpdateBatteryTip = false; + mFragment.refreshUi(); + + verify(mFragment, never()).restartBatteryTipLoader(); + } + public static class TestFragment extends PowerUsageSummary { private Context mContext; @@ -364,12 +372,6 @@ public class PowerUsageSummaryTest { return mContext; } - - @Override - protected void refreshUi() { - // Leave it empty for toggle apps menu test - } - @Override void showBothEstimates() { List fakeBatteryInfo = new ArrayList<>(2); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceControllerTest.java index 1e754c8ff3f..8a189e2e9c1 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceControllerTest.java @@ -28,6 +28,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; +import android.os.Bundle; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceCategory; import android.support.v7.preference.PreferenceGroup; @@ -133,6 +134,21 @@ public class BatteryTipPreferenceControllerTest { BatteryTip.StateType.NEW); } + @Test + public void testSaveAndRestore() { + mBatteryTipPreferenceController.updateBatteryTips(mOldBatteryTips); + final Bundle bundle = new Bundle(); + mBatteryTipPreferenceController.saveInstanceState(bundle); + + final BatteryTipPreferenceController controller = new BatteryTipPreferenceController( + mContext, KEY_PREF, mSettingsActivity, mFragment, mBatteryTipListener); + controller.mPreferenceGroup = mPreferenceGroup; + controller.mPrefContext = mContext; + controller.restoreInstanceState(bundle); + + assertOnlyContainsSummaryTip(mPreferenceGroup); + } + @Test public void testHandlePreferenceTreeClick_noDialog_invokeCallback() { when(mBatteryTip.getType()).thenReturn(SMART_BATTERY_MANAGER); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTipTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTipTest.java index c23311bca63..a5a6602950a 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTipTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTipTest.java @@ -148,6 +148,13 @@ public class RestrictAppTipTest { assertThat(mNewBatteryTip.getState()).isEqualTo(BatteryTip.StateType.HANDLED); } + @Test + public void update_handledAnomlayBecomeInvisible_stateInvisible() { + mHandledBatteryTip.updateState(mInvisibleBatteryTip); + + assertThat(mHandledBatteryTip.getState()).isEqualTo(BatteryTip.StateType.INVISIBLE); + } + @Test public void update_newAnomalyComes_stateNew() { mInvisibleBatteryTip.updateState(mNewBatteryTip);