From 0ae2cd68f2409ce981d7ba8012c55bfab66e0d6b Mon Sep 17 00:00:00 2001 From: Lei Yu Date: Mon, 12 Mar 2018 16:13:35 -0700 Subject: [PATCH] Refine the update process of battery tip 1. When device is rotated, don't update the battery tip 2. When user go back to battery main page from other page, start battery tip update process 3. In RestrictAppTip, if there aren't restricted apps anymore, hide the tip. Bug: 74467010 Test: RunSettingsRobotests Change-Id: I300bcc5b487d587f6618e340ac074fe416dcc1b2 --- .../settings/fuelgauge/PowerUsageSummary.java | 17 ++++++++++++++++- .../BatteryTipPreferenceController.java | 15 ++++++++++++++- .../batterytip/tips/RestrictAppTip.java | 3 +++ .../fuelgauge/PowerUsageSummaryTest.java | 14 ++++++++------ .../BatteryTipPreferenceControllerTest.java | 16 ++++++++++++++++ .../batterytip/tips/RestrictAppTipTest.java | 7 +++++++ 6 files changed, 64 insertions(+), 8 deletions(-) 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 d021c5d857f..1a4692b04b7 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);