diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java index 17284a0de26..5520bf3f3dd 100644 --- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java +++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java @@ -47,6 +47,10 @@ public class BatteryTipPolicy { private static final String KEY_DATA_HISTORY_RETAIN_DAY = "data_history_retain_day"; private static final String KEY_EXCESSIVE_BG_DRAIN_PERCENTAGE = "excessive_bg_drain_percentage"; + private static final String KEY_TEST_BATTERY_SAVER_TIP = "test_battery_saver_tip"; + private static final String KEY_TEST_HIGH_USAGE_TIP = "test_high_usage_tip"; + private static final String KEY_TEST_SMART_BATTERY_TIP = "test_smart_battery_tip"; + /** * {@code true} if general battery tip is enabled * @@ -164,6 +168,30 @@ public class BatteryTipPolicy { */ public final int excessiveBgDrainPercentage; + /** + * {@code true} if we want to test battery saver tip. + * + * @see Settings.Global#BATTERY_TIP_CONSTANTS + * @see #KEY_TEST_BATTERY_SAVER_TIP + */ + public final boolean testBatterySaverTip; + + /** + * {@code true} if we want to test high usage tip. + * + * @see Settings.Global#BATTERY_TIP_CONSTANTS + * @see #KEY_TEST_HIGH_USAGE_TIP + */ + public final boolean testHighUsageTip; + + /** + * {@code true} if we want to test smart battery tip. + * + * @see Settings.Global#BATTERY_TIP_CONSTANTS + * @see #KEY_TEST_SMART_BATTERY_TIP + */ + public final boolean testSmartBatteryTip; + private final KeyValueListParser mParser; public BatteryTipPolicy(Context context) { @@ -197,6 +225,10 @@ public class BatteryTipPolicy { lowBatteryHour = mParser.getInt(KEY_LOW_BATTERY_HOUR, 16); dataHistoryRetainDay = mParser.getInt(KEY_DATA_HISTORY_RETAIN_DAY, 30); excessiveBgDrainPercentage = mParser.getInt(KEY_EXCESSIVE_BG_DRAIN_PERCENTAGE, 10); + + testBatterySaverTip = mParser.getBoolean(KEY_TEST_BATTERY_SAVER_TIP, false); + testHighUsageTip = mParser.getBoolean(KEY_TEST_HIGH_USAGE_TIP, false); + testSmartBatteryTip = mParser.getBoolean(KEY_TEST_SMART_BATTERY_TIP, false); } } diff --git a/src/com/android/settings/fuelgauge/batterytip/detectors/EarlyWarningDetector.java b/src/com/android/settings/fuelgauge/batterytip/detectors/EarlyWarningDetector.java index a10c8f1daf1..9b6b9b5d969 100644 --- a/src/com/android/settings/fuelgauge/batterytip/detectors/EarlyWarningDetector.java +++ b/src/com/android/settings/fuelgauge/batterytip/detectors/EarlyWarningDetector.java @@ -53,7 +53,7 @@ public class EarlyWarningDetector implements BatteryTipDetector { batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) == 0; final boolean powerSaveModeOn = mPowerManager.isPowerSaveMode(); final boolean earlyWarning = mPowerUsageFeatureProvider.getEarlyWarningSignal(mContext, - EarlyWarningDetector.class.getName()); + EarlyWarningDetector.class.getName()) || mPolicy.testBatterySaverTip; final int state = powerSaveModeOn ? BatteryTip.StateType.HANDLED diff --git a/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetector.java b/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetector.java index 1b6e2f03ae3..8435c52671d 100644 --- a/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetector.java +++ b/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetector.java @@ -34,6 +34,7 @@ import com.android.settings.fuelgauge.batterytip.tips.HighUsageTip; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.concurrent.TimeUnit; /** * Detector whether to show summary tip. This detector should be executed as the last @@ -65,7 +66,7 @@ public class HighUsageDetector implements BatteryTipDetector { final long screenUsageTimeMs = mBatteryUtils.calculateScreenUsageTime(mBatteryStatsHelper); if (mPolicy.highUsageEnabled) { parseBatteryData(); - if (mDataParser.isDeviceHeavilyUsed()) { + if (mDataParser.isDeviceHeavilyUsed() || mPolicy.testHighUsageTip) { final List batterySippers = mBatteryStatsHelper.getUsageList(); for (int i = 0, size = batterySippers.size(); i < size; i++) { final BatterySipper batterySipper = batterySippers.get(i); @@ -84,6 +85,14 @@ public class HighUsageDetector implements BatteryTipDetector { } } + // When in test mode, add an app if necessary + if (mPolicy.testHighUsageTip && mHighUsageAppList.isEmpty()) { + mHighUsageAppList.add(new AppInfo.Builder() + .setPackageName("com.android.settings") + .setScreenOnTimeMs(TimeUnit.HOURS.toMillis(3)) + .build()); + } + Collections.sort(mHighUsageAppList, Collections.reverseOrder()); mHighUsageAppList = mHighUsageAppList.subList(0, Math.min(mPolicy.highUsageAppCount, mHighUsageAppList.size())); diff --git a/src/com/android/settings/fuelgauge/batterytip/detectors/SmartBatteryDetector.java b/src/com/android/settings/fuelgauge/batterytip/detectors/SmartBatteryDetector.java index bff324d3633..ecd595e1ce6 100644 --- a/src/com/android/settings/fuelgauge/batterytip/detectors/SmartBatteryDetector.java +++ b/src/com/android/settings/fuelgauge/batterytip/detectors/SmartBatteryDetector.java @@ -38,10 +38,10 @@ public class SmartBatteryDetector implements BatteryTipDetector { @Override public BatteryTip detect() { // Show it if there is no other tips shown - final boolean smartBatteryOn = Settings.Global.getInt(mContentResolver, - Settings.Global.APP_STANDBY_ENABLED, 1) != 0; + final boolean smartBatteryOff = Settings.Global.getInt(mContentResolver, + Settings.Global.APP_STANDBY_ENABLED, 1) == 0 || mPolicy.testSmartBatteryTip; final int state = - smartBatteryOn ? BatteryTip.StateType.INVISIBLE : BatteryTip.StateType.NEW; + smartBatteryOff ? BatteryTip.StateType.NEW : BatteryTip.StateType.INVISIBLE; return new SmartBatteryTip(state); } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java index c52b73e2336..654b247d9df 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java @@ -45,7 +45,10 @@ public class BatteryTipPolicyTest { + ",low_battery_enabled=false" + ",low_battery_hour=10" + ",data_history_retain_day=24" - + ",excessive_bg_drain_percentage=25"; + + ",excessive_bg_drain_percentage=25" + + ",test_battery_saver_tip=true" + + ",test_high_usage_tip=false" + + ",test_smart_battery_tip=true"; private Context mContext; @Before @@ -74,6 +77,9 @@ public class BatteryTipPolicyTest { assertThat(batteryTipPolicy.lowBatteryHour).isEqualTo(10); assertThat(batteryTipPolicy.dataHistoryRetainDay).isEqualTo(24); assertThat(batteryTipPolicy.excessiveBgDrainPercentage).isEqualTo(25); + assertThat(batteryTipPolicy.testBatterySaverTip).isTrue(); + assertThat(batteryTipPolicy.testHighUsageTip).isFalse(); + assertThat(batteryTipPolicy.testSmartBatteryTip).isTrue(); } @Test @@ -97,5 +103,8 @@ public class BatteryTipPolicyTest { assertThat(batteryTipPolicy.lowBatteryHour).isEqualTo(16); assertThat(batteryTipPolicy.dataHistoryRetainDay).isEqualTo(30); assertThat(batteryTipPolicy.excessiveBgDrainPercentage).isEqualTo(10); + assertThat(batteryTipPolicy.testBatterySaverTip).isFalse(); + assertThat(batteryTipPolicy.testHighUsageTip).isFalse(); + assertThat(batteryTipPolicy.testSmartBatteryTip).isFalse(); } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/EarlyWarningDetectorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/EarlyWarningDetectorTest.java index 21ef8a358d1..c4c3d021b18 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/EarlyWarningDetectorTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/EarlyWarningDetectorTest.java @@ -74,6 +74,16 @@ public class EarlyWarningDetectorTest { assertThat(mEarlyWarningDetector.detect().isVisible()).isFalse(); } + @Test + public void testDetect_testFeatureOn_tipNew() { + doReturn(false).when(mFakeFeatureFactory.powerUsageFeatureProvider) + .getEarlyWarningSignal(any(), any()); + ReflectionHelpers.setField(mPolicy, "testBatterySaverTip", true); + + assertThat(mEarlyWarningDetector.detect().getState()) + .isEqualTo(BatteryTip.StateType.NEW); + } + @Test public void testDetect_batterySaverOn_tipHandled() { doReturn(true).when(mPowerManager).isPowerSaveMode(); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetectorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetectorTest.java index d983dfc7eed..2a2420d7f0c 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetectorTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetectorTest.java @@ -34,6 +34,7 @@ import com.android.settings.fuelgauge.BatteryUtils; import com.android.settings.fuelgauge.batterytip.AppInfo; import com.android.settings.fuelgauge.batterytip.BatteryTipPolicy; import com.android.settings.fuelgauge.batterytip.HighUsageDataParser; +import com.android.settings.fuelgauge.batterytip.tips.BatteryTip; import com.android.settings.fuelgauge.batterytip.tips.HighUsageTip; import com.android.settings.testutils.SettingsRobolectricTestRunner; @@ -108,6 +109,14 @@ public class HighUsageDetectorTest { assertThat(mHighUsageDetector.detect().isVisible()).isFalse(); } + @Test + public void testDetect_testFeatureOn_tipNew() { + doReturn(false).when(mDataParser).isDeviceHeavilyUsed(); + ReflectionHelpers.setField(mPolicy, "testHighUsageTip", true); + + assertThat(mHighUsageDetector.detect().getState()).isEqualTo(BatteryTip.StateType.NEW); + } + @Test public void testDetect_containsHighUsageApp_tipVisible() { doReturn(true).when(mDataParser).isDeviceHeavilyUsed(); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/SmartBatteryDetectorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/SmartBatteryDetectorTest.java index 91343191e52..ad08a22cda5 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/SmartBatteryDetectorTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/SmartBatteryDetectorTest.java @@ -24,6 +24,7 @@ import android.content.Context; import android.provider.Settings; import com.android.settings.fuelgauge.batterytip.BatteryTipPolicy; +import com.android.settings.fuelgauge.batterytip.tips.BatteryTip; import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; @@ -31,6 +32,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; +import org.robolectric.util.ReflectionHelpers; @RunWith(SettingsRobolectricTestRunner.class) public class SmartBatteryDetectorTest { @@ -38,6 +40,7 @@ public class SmartBatteryDetectorTest { private Context mContext; private ContentResolver mContentResolver; private SmartBatteryDetector mSmartBatteryDetector; + private BatteryTipPolicy mPolicy; @Before public void setUp() { @@ -45,8 +48,15 @@ public class SmartBatteryDetectorTest { mContext = RuntimeEnvironment.application; mContentResolver = mContext.getContentResolver(); - final BatteryTipPolicy policy = spy(new BatteryTipPolicy(mContext)); - mSmartBatteryDetector = new SmartBatteryDetector(policy, mContentResolver); + mPolicy = spy(new BatteryTipPolicy(mContext)); + mSmartBatteryDetector = new SmartBatteryDetector(mPolicy, mContentResolver); + } + + @Test + public void testDetect_testFeatureOn_tipNew() { + ReflectionHelpers.setField(mPolicy, "testSmartBatteryTip", true); + + assertThat(mSmartBatteryDetector.detect().getState()).isEqualTo(BatteryTip.StateType.NEW); } @Test