Merge "Add test flags for battery tips." into pi-dev
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java
index 17284a0..5520bf3 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java
@@ -47,6 +47,10 @@
     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 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 @@
         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 a10c8f1..9b6b9b5 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 @@
                 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 1b6e2f0..8435c52 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 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 @@
         final long screenUsageTimeMs = mBatteryUtils.calculateScreenUsageTime(mBatteryStatsHelper);
         if (mPolicy.highUsageEnabled) {
             parseBatteryData();
-            if (mDataParser.isDeviceHeavilyUsed()) {
+            if (mDataParser.isDeviceHeavilyUsed() || mPolicy.testHighUsageTip) {
                 final List<BatterySipper> batterySippers = mBatteryStatsHelper.getUsageList();
                 for (int i = 0, size = batterySippers.size(); i < size; i++) {
                     final BatterySipper batterySipper = batterySippers.get(i);
@@ -84,6 +85,14 @@
                     }
                 }
 
+                // 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 bff324d..ecd595e 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 @@
     @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 c52b73e..654b247 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 @@
             + ",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 @@
         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 @@
         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 21ef8a3..c4c3d02 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
@@ -75,6 +75,16 @@
     }
 
     @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 d983dfc..2a2420d 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.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;
 
@@ -109,6 +110,14 @@
     }
 
     @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 9134319..ad08a22 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.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.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 @@
     private Context mContext;
     private ContentResolver mContentResolver;
     private SmartBatteryDetector mSmartBatteryDetector;
+    private BatteryTipPolicy mPolicy;
 
     @Before
     public void setUp() {
@@ -45,8 +48,15 @@
 
         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