Loading src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java +6 −20 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -47,9 +46,8 @@ public class BatteryTipLoader extends AsyncLoader<List<BatteryTip>> { 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); Loading @@ -66,16 +64,12 @@ public class BatteryTipLoader extends AsyncLoader<List<BatteryTip>> { 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; Loading @@ -93,12 +87,4 @@ public class BatteryTipLoader extends AsyncLoader<List<BatteryTip>> { return tips; } @VisibleForTesting void addBatteryTipFromDetector(final List<BatteryTip> tips, final BatteryTipDetector detector) { final BatteryTip batteryTip = detector.detect(); mVisibleTips += batteryTip.isVisible() ? 1 : 0; tips.add(batteryTip); } } src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java +1 −0 Original line number Diff line number Diff line Loading @@ -98,6 +98,7 @@ public class BatteryTipPreferenceController extends BasePreferenceController { final Preference preference = batteryTip.buildPreference(mPrefContext); mBatteryTipMap.put(preference.getKey(), batteryTip); mPreferenceGroup.addPreference(preference); break; } } } Loading src/com/android/settings/fuelgauge/batterytip/detectors/SummaryDetector.java +2 −4 Original line number Diff line number Diff line Loading @@ -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); Loading src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java +6 −6 Original line number Diff line number Diff line Loading @@ -52,13 +52,13 @@ public abstract class BatteryTip implements Comparable<BatteryTip>, 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"; Loading tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoaderTest.java +30 −25 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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<BatteryTip> 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<BatteryTip> 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); } } Loading
src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java +6 −20 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -47,9 +46,8 @@ public class BatteryTipLoader extends AsyncLoader<List<BatteryTip>> { 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); Loading @@ -66,16 +64,12 @@ public class BatteryTipLoader extends AsyncLoader<List<BatteryTip>> { 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; Loading @@ -93,12 +87,4 @@ public class BatteryTipLoader extends AsyncLoader<List<BatteryTip>> { return tips; } @VisibleForTesting void addBatteryTipFromDetector(final List<BatteryTip> tips, final BatteryTipDetector detector) { final BatteryTip batteryTip = detector.detect(); mVisibleTips += batteryTip.isVisible() ? 1 : 0; tips.add(batteryTip); } }
src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java +1 −0 Original line number Diff line number Diff line Loading @@ -98,6 +98,7 @@ public class BatteryTipPreferenceController extends BasePreferenceController { final Preference preference = batteryTip.buildPreference(mPrefContext); mBatteryTipMap.put(preference.getKey(), batteryTip); mPreferenceGroup.addPreference(preference); break; } } } Loading
src/com/android/settings/fuelgauge/batterytip/detectors/SummaryDetector.java +2 −4 Original line number Diff line number Diff line Loading @@ -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); Loading
src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java +6 −6 Original line number Diff line number Diff line Loading @@ -52,13 +52,13 @@ public abstract class BatteryTip implements Comparable<BatteryTip>, 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"; Loading
tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoaderTest.java +30 −25 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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<BatteryTip> 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<BatteryTip> 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); } }