From 2e0bdc34f2a305b9bca26b95bafa5c49bb7f501f Mon Sep 17 00:00:00 2001 From: jackqdyulei Date: Wed, 10 Jan 2018 18:21:11 -0800 Subject: [PATCH] Only show one tip at a time 1. Update the order for each tip. 2. Change BatteryTipPreferenceController and only show one precedent tip. 3. Update the SummaryDetector since now it doesn't need visibleTips Bug: 70570352 Test: RunSettingsRoboTests Change-Id: I9e2b8e72aad263f8a210c9320e0ea1eaaf8d5042 --- .../batterytip/BatteryTipLoader.java | 26 ++------- .../BatteryTipPreferenceController.java | 1 + .../batterytip/detectors/SummaryDetector.java | 6 +- .../fuelgauge/batterytip/tips/BatteryTip.java | 12 ++-- .../batterytip/BatteryTipLoaderTest.java | 55 ++++++++++--------- .../detectors/SummaryDetectorTest.java | 13 +---- 6 files changed, 48 insertions(+), 65 deletions(-) diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java index 8c0f54afc73..ced34616879 100644 --- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java +++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java @@ -22,7 +22,6 @@ import android.support.annotation.VisibleForTesting; import com.android.internal.os.BatteryStatsHelper; import com.android.settings.fuelgauge.BatteryInfo; import com.android.settings.fuelgauge.BatteryUtils; -import com.android.settings.fuelgauge.batterytip.detectors.BatteryTipDetector; import com.android.settings.fuelgauge.batterytip.detectors.EarlyWarningDetector; import com.android.settings.fuelgauge.batterytip.detectors.HighUsageDetector; import com.android.settings.fuelgauge.batterytip.detectors.LowBatteryDetector; @@ -47,9 +46,8 @@ public class BatteryTipLoader extends AsyncLoader> { private static final boolean USE_FAKE_DATA = false; private BatteryStatsHelper mBatteryStatsHelper; - private BatteryUtils mBatteryUtils; @VisibleForTesting - int mVisibleTips; + BatteryUtils mBatteryUtils; public BatteryTipLoader(Context context, BatteryStatsHelper batteryStatsHelper) { super(context); @@ -66,16 +64,12 @@ public class BatteryTipLoader extends AsyncLoader> { final BatteryTipPolicy policy = new BatteryTipPolicy(getContext()); final BatteryInfo batteryInfo = mBatteryUtils.getBatteryInfo(mBatteryStatsHelper, TAG); final Context context = getContext(); - mVisibleTips = 0; - addBatteryTipFromDetector(tips, new LowBatteryDetector(policy, batteryInfo)); - addBatteryTipFromDetector(tips, - new HighUsageDetector(context, policy, mBatteryStatsHelper)); - addBatteryTipFromDetector(tips, - new SmartBatteryDetector(policy, context.getContentResolver())); - addBatteryTipFromDetector(tips, new EarlyWarningDetector(policy, context)); - // Add summary detector at last since it need other detectors to update the mVisibleTips - addBatteryTipFromDetector(tips, new SummaryDetector(policy, mVisibleTips)); + tips.add(new LowBatteryDetector(policy, batteryInfo).detect()); + tips.add(new HighUsageDetector(context, policy, mBatteryStatsHelper).detect()); + tips.add(new SmartBatteryDetector(policy, context.getContentResolver()).detect()); + tips.add(new EarlyWarningDetector(policy, context).detect()); + tips.add(new SummaryDetector(policy).detect()); Collections.sort(tips); return tips; @@ -93,12 +87,4 @@ public class BatteryTipLoader extends AsyncLoader> { return tips; } - @VisibleForTesting - void addBatteryTipFromDetector(final List tips, - final BatteryTipDetector detector) { - final BatteryTip batteryTip = detector.detect(); - mVisibleTips += batteryTip.isVisible() ? 1 : 0; - tips.add(batteryTip); - } - } diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java index 9f5209fdd69..9ab4c517dfd 100644 --- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java +++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java @@ -98,6 +98,7 @@ public class BatteryTipPreferenceController extends BasePreferenceController { final Preference preference = batteryTip.buildPreference(mPrefContext); mBatteryTipMap.put(preference.getKey(), batteryTip); mPreferenceGroup.addPreference(preference); + break; } } } diff --git a/src/com/android/settings/fuelgauge/batterytip/detectors/SummaryDetector.java b/src/com/android/settings/fuelgauge/batterytip/detectors/SummaryDetector.java index 8c1783bd662..a45dc0955fe 100644 --- a/src/com/android/settings/fuelgauge/batterytip/detectors/SummaryDetector.java +++ b/src/com/android/settings/fuelgauge/batterytip/detectors/SummaryDetector.java @@ -26,17 +26,15 @@ import com.android.settings.fuelgauge.batterytip.tips.SummaryTip; */ public class SummaryDetector implements BatteryTipDetector { private BatteryTipPolicy mPolicy; - private int mVisibleTips; - public SummaryDetector(BatteryTipPolicy policy, int visibleTips) { + public SummaryDetector(BatteryTipPolicy policy) { mPolicy = policy; - mVisibleTips = visibleTips; } @Override public BatteryTip detect() { // Show it if there is no other tips shown - final int state = mPolicy.summaryEnabled && mVisibleTips == 0 + final int state = mPolicy.summaryEnabled ? BatteryTip.StateType.NEW : BatteryTip.StateType.INVISIBLE; return new SummaryTip(state); diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java index 292849d0210..09ebc4b5b14 100644 --- a/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java +++ b/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java @@ -52,13 +52,13 @@ public abstract class BatteryTip implements Comparable, Parcelable { TipType.REDUCED_BATTERY, TipType.LOW_BATTERY}) public @interface TipType { - int SUMMARY = 0; - int BATTERY_SAVER = 1; + int SMART_BATTERY_MANAGER = 0; + int APP_RESTRICTION = 1; int HIGH_DEVICE_USAGE = 2; - int SMART_BATTERY_MANAGER = 3; - int APP_RESTRICTION = 4; - int REDUCED_BATTERY = 5; - int LOW_BATTERY = 6; + int BATTERY_SAVER = 3; + int REDUCED_BATTERY = 4; + int LOW_BATTERY = 5; + int SUMMARY = 6; } private static final String KEY_PREFIX = "key_battery_tip"; diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoaderTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoaderTest.java index e4e8eef5721..53c9766ad55 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoaderTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoaderTest.java @@ -18,12 +18,18 @@ package com.android.settings.fuelgauge.batterytip; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.any; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.spy; import android.content.Context; +import android.content.Intent; +import android.os.PowerManager; import com.android.internal.os.BatteryStatsHelper; import com.android.settings.TestConfig; +import com.android.settings.fuelgauge.BatteryInfo; +import com.android.settings.fuelgauge.BatteryUtils; import com.android.settings.fuelgauge.batterytip.detectors.BatteryTipDetector; import com.android.settings.fuelgauge.batterytip.tips.BatteryTip; import com.android.settings.testutils.SettingsRobolectricTestRunner; @@ -42,46 +48,45 @@ import java.util.List; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class BatteryTipLoaderTest { + private static final int[] TIP_ORDER = { + BatteryTip.TipType.SMART_BATTERY_MANAGER, + BatteryTip.TipType.HIGH_DEVICE_USAGE, + BatteryTip.TipType.BATTERY_SAVER, + BatteryTip.TipType.LOW_BATTERY, + BatteryTip.TipType.SUMMARY}; @Mock private BatteryStatsHelper mBatteryStatsHelper; @Mock - private BatteryTipDetector mBatteryTipDetector; + private PowerManager mPowerManager; @Mock - private BatteryTip mBatteryTip; + private Intent mIntent; + @Mock + private BatteryUtils mBatteryUtils; + @Mock + private BatteryInfo mBatteryInfo; private Context mContext; private BatteryTipLoader mBatteryTipLoader; - private List mBatteryTips; @Before public void setUp() { MockitoAnnotations.initMocks(this); - mContext = RuntimeEnvironment.application; - doReturn(mBatteryTip).when(mBatteryTipDetector).detect(); + mContext = spy(RuntimeEnvironment.application); + doReturn(mContext).when(mContext).getApplicationContext(); + doReturn(mPowerManager).when(mContext).getSystemService(Context.POWER_SERVICE); + doReturn(mIntent).when(mContext).registerReceiver(any(), any()); + doReturn(mBatteryInfo).when(mBatteryUtils).getBatteryInfo(any(), any()); mBatteryTipLoader = new BatteryTipLoader(mContext, mBatteryStatsHelper); - mBatteryTips = new ArrayList<>(); + mBatteryTipLoader.mBatteryUtils = mBatteryUtils; } @Test - public void testAddBatteryTipFromDetector_tipVisible_addAndUpdateCount() { - doReturn(true).when(mBatteryTip).isVisible(); - mBatteryTipLoader.mVisibleTips = 0; + public void testLoadBackground_containsAllTipsWithOrder() { + final List batteryTips = mBatteryTipLoader.loadInBackground(); - mBatteryTipLoader.addBatteryTipFromDetector(mBatteryTips, mBatteryTipDetector); - - assertThat(mBatteryTips.contains(mBatteryTip)).isTrue(); - assertThat(mBatteryTipLoader.mVisibleTips).isEqualTo(1); + assertThat(batteryTips.size()).isEqualTo(TIP_ORDER.length); + for (int i = 0, size = batteryTips.size(); i < size; i++) { + assertThat(batteryTips.get(i).getType()).isEqualTo(TIP_ORDER[i]); + } } - - @Test - public void testAddBatteryTipFromDetector_tipInvisible_doNotAddCount() { - doReturn(false).when(mBatteryTip).isVisible(); - mBatteryTipLoader.mVisibleTips = 0; - - mBatteryTipLoader.addBatteryTipFromDetector(mBatteryTips, mBatteryTipDetector); - - assertThat(mBatteryTips.contains(mBatteryTip)).isTrue(); - assertThat(mBatteryTipLoader.mVisibleTips).isEqualTo(0); - } - } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/SummaryDetectorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/SummaryDetectorTest.java index 389a6c3fc2a..12e98e92a89 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/SummaryDetectorTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/SummaryDetectorTest.java @@ -51,22 +51,15 @@ public class SummaryDetectorTest { @Test public void testDetect_disabledByPolicy_tipInvisible() { ReflectionHelpers.setField(mPolicy, "summaryEnabled", false); - SummaryDetector detector = new SummaryDetector(mPolicy, 0 /* visibleTips */); + SummaryDetector detector = new SummaryDetector(mPolicy); assertThat(detector.detect().isVisible()).isFalse(); } @Test - public void testDetect_noOtherTips_tipVisible() { - SummaryDetector detector = new SummaryDetector(mPolicy, 0 /* visibleTips */); + public void testDetect_notDisabled_tipVisible() { + SummaryDetector detector = new SummaryDetector(mPolicy); assertThat(detector.detect().isVisible()).isTrue(); } - - @Test - public void testDetect_hasOtherTips_tipInVisible() { - SummaryDetector detector = new SummaryDetector(mPolicy, 1 /* visibleTips */); - - assertThat(detector.detect().isVisible()).isFalse(); - } }