Update the BatteryTipPolicy

1. Add "testLowBatteryTip"
2. Update default value for low battery threshold

Change-Id: Ifa91ad93f484dc806dfc176ad5ffd912824f5063
Bug: 76113067
Test: RunSettingsRoboTests
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java
index 5520bf3..1c7c760 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java
@@ -50,6 +50,7 @@
     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";
+    private static final String KEY_TEST_LOW_BATTERY_TIP = "test_low_battery_tip";
 
     /**
      * {@code true} if general battery tip is enabled
@@ -192,6 +193,14 @@
      */
     public final boolean testSmartBatteryTip;
 
+    /**
+     * {@code true} if we want to test low battery tip.
+     *
+     * @see Settings.Global#BATTERY_TIP_CONSTANTS
+     * @see #KEY_TEST_LOW_BATTERY_TIP
+     */
+    public final boolean testLowBatteryTip;
+
     private final KeyValueListParser mParser;
 
     public BatteryTipPolicy(Context context) {
@@ -222,13 +231,14 @@
         reducedBatteryEnabled = mParser.getBoolean(KEY_REDUCED_BATTERY_ENABLED, false);
         reducedBatteryPercent = mParser.getInt(KEY_REDUCED_BATTERY_PERCENT, 50);
         lowBatteryEnabled = mParser.getBoolean(KEY_LOW_BATTERY_ENABLED, false);
-        lowBatteryHour = mParser.getInt(KEY_LOW_BATTERY_HOUR, 16);
+        lowBatteryHour = mParser.getInt(KEY_LOW_BATTERY_HOUR, 3);
         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);
+        testLowBatteryTip = mParser.getBoolean(KEY_TEST_LOW_BATTERY_TIP, false);
     }
 
 }
diff --git a/src/com/android/settings/fuelgauge/batterytip/detectors/LowBatteryDetector.java b/src/com/android/settings/fuelgauge/batterytip/detectors/LowBatteryDetector.java
index 7d52a51..c3f9b07 100644
--- a/src/com/android/settings/fuelgauge/batterytip/detectors/LowBatteryDetector.java
+++ b/src/com/android/settings/fuelgauge/batterytip/detectors/LowBatteryDetector.java
@@ -46,17 +46,17 @@
     @Override
     public BatteryTip detect() {
         final boolean powerSaveModeOn = mPowerManager.isPowerSaveMode();
-        //TODO(jackqdyulei): hook up this 3 hours to server side
         final boolean lowBattery = mBatteryInfo.batteryLevel <= mWarningLevel
                 || (mBatteryInfo.discharging
-                && mBatteryInfo.remainingTimeUs < TimeUnit.HOURS.toMicros(3));
+                && mBatteryInfo.remainingTimeUs < TimeUnit.HOURS.toMicros(mPolicy.lowBatteryHour));
 
         int state = BatteryTip.StateType.INVISIBLE;
         if (mPolicy.lowBatteryEnabled) {
             if (powerSaveModeOn) {
                 // Show it is handled if battery saver is on
                 state = BatteryTip.StateType.HANDLED;
-            } else if (mBatteryInfo.discharging && lowBattery) {
+            } else if (mPolicy.testLowBatteryTip || (mBatteryInfo.discharging && lowBattery)) {
+                // Show it is new if in test or in discharging low battery state
                 state = BatteryTip.StateType.NEW;
             }
         }
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 654b247..350326a 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java
@@ -48,7 +48,8 @@
             + ",excessive_bg_drain_percentage=25"
             + ",test_battery_saver_tip=true"
             + ",test_high_usage_tip=false"
-            + ",test_smart_battery_tip=true";
+            + ",test_smart_battery_tip=true"
+            + ",test_low_battery_tip=true";
     private Context mContext;
 
     @Before
@@ -80,6 +81,7 @@
         assertThat(batteryTipPolicy.testBatterySaverTip).isTrue();
         assertThat(batteryTipPolicy.testHighUsageTip).isFalse();
         assertThat(batteryTipPolicy.testSmartBatteryTip).isTrue();
+        assertThat(batteryTipPolicy.testLowBatteryTip).isTrue();
     }
 
     @Test
@@ -100,11 +102,12 @@
         assertThat(batteryTipPolicy.reducedBatteryEnabled).isFalse();
         assertThat(batteryTipPolicy.reducedBatteryPercent).isEqualTo(50);
         assertThat(batteryTipPolicy.lowBatteryEnabled).isFalse();
-        assertThat(batteryTipPolicy.lowBatteryHour).isEqualTo(16);
+        assertThat(batteryTipPolicy.lowBatteryHour).isEqualTo(3);
         assertThat(batteryTipPolicy.dataHistoryRetainDay).isEqualTo(30);
         assertThat(batteryTipPolicy.excessiveBgDrainPercentage).isEqualTo(10);
         assertThat(batteryTipPolicy.testBatterySaverTip).isFalse();
         assertThat(batteryTipPolicy.testHighUsageTip).isFalse();
         assertThat(batteryTipPolicy.testSmartBatteryTip).isFalse();
+        assertThat(batteryTipPolicy.testLowBatteryTip).isFalse();
     }
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/LowBatteryDetectorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/LowBatteryDetectorTest.java
index 9863634..9764559 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/LowBatteryDetectorTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/LowBatteryDetectorTest.java
@@ -58,6 +58,7 @@
         mContext = RuntimeEnvironment.application;
         mShadowPowerManager = Shadows.shadowOf(mContext.getSystemService(PowerManager.class));
         ReflectionHelpers.setField(mPolicy, "lowBatteryEnabled", true);
+        ReflectionHelpers.setField(mPolicy, "lowBatteryHour", 3);
         mBatteryInfo.discharging = true;
 
         mLowBatteryDetector = new LowBatteryDetector(mContext, mPolicy, mBatteryInfo);
@@ -72,6 +73,13 @@
     }
 
     @Test
+    public void testDetect_enabledByTest_tipNew() {
+        ReflectionHelpers.setField(mPolicy, "testLowBatteryTip", true);
+
+        assertThat(mLowBatteryDetector.detect().getState()).isEqualTo(BatteryTip.StateType.NEW);
+    }
+
+    @Test
     public void testDetect_lowBattery_tipNew() {
         mBatteryInfo.batteryLevel = 3;
         mBatteryInfo.remainingTimeUs = TimeUnit.DAYS.toMillis(1);