BatteryDefender: Add trigger SOC to Google HAL control

Test: atest HealthTestCases
Bug: 173080734
Change-Id: I8f9c30e73f0535509f67d0f9a4e0054e30056031
(cherry picked from commit 89c0fe1d0035ad11eba31bde36151f123ba386b1)
diff --git a/health/BatteryDefender.cpp b/health/BatteryDefender.cpp
index 37d24e5..5873567 100644
--- a/health/BatteryDefender.cpp
+++ b/health/BatteryDefender.cpp
@@ -213,12 +213,15 @@
             clearStateData();
             break;
 
-        case STATE_CONNECTED:
+        case STATE_CONNECTED: {
             addTimeToChargeTimers();
-            if (props->batteryLevel == kChargeHighCapacityLevel) {
+
+            const int triggerLevel = android::base::GetIntProperty(
+                    kPropBatteryDefenderCtrlTriggerSOC, kChargeHighCapacityLevel, 0, 100);
+            if (props->batteryLevel >= triggerLevel) {
                 mHasReachedHighCapacityLevel = true;
             }
-            break;
+        } break;
 
         case STATE_ACTIVE:
             addTimeToChargeTimers();
diff --git a/health/include/pixelhealth/BatteryDefender.h b/health/include/pixelhealth/BatteryDefender.h
index d6ad0cc..bf3c492 100644
--- a/health/include/pixelhealth/BatteryDefender.h
+++ b/health/include/pixelhealth/BatteryDefender.h
@@ -99,6 +99,8 @@
             "vendor.battery.defender.ctrl.recharge_soc_start";
     const char *const kPropBatteryDefenderCtrlStopSOC =
             "vendor.battery.defender.ctrl.recharge_soc_stop";
+    const char *const kPropBatteryDefenderCtrlTriggerSOC =
+            "vendor.battery.defender.ctrl.trigger_soc";
 
     // Default thresholds
     const bool kDefaultEnable = true;
diff --git a/health/test/TestBatteryDefender.cpp b/health/test/TestBatteryDefender.cpp
index 1894982..f050ccc 100644
--- a/health/test/TestBatteryDefender.cpp
+++ b/health/test/TestBatteryDefender.cpp
@@ -150,6 +150,7 @@
 const char *kPropBatteryDefenderCtrlResumeTime = "vendor.battery.defender.ctrl.resume_time";
 const char *kPropBatteryDefenderCtrlStartSOC = "vendor.battery.defender.ctrl.recharge_soc_start";
 const char *kPropBatteryDefenderCtrlStopSOC = "vendor.battery.defender.ctrl.recharge_soc_stop";
+const char *kPropBatteryDefenderCtrlTriggerSOC = "vendor.battery.defender.ctrl.trigger_soc";
 
 static void enableDefender(void) {
     ON_CALL(*mock, GetIntProperty(kPropChargeLevelVendorStart, _, _, _)).WillByDefault(Return(0));
@@ -182,6 +183,9 @@
             .WillByDefault(Return(70));
     ON_CALL(*mock, GetIntProperty(kPropBatteryDefenderCtrlStopSOC, _, _, _))
             .WillByDefault(Return(80));
+
+    ON_CALL(*mock, GetIntProperty(kPropBatteryDefenderCtrlTriggerSOC, _, _, _))
+            .WillByDefault(Return(100));
 }
 
 static void capacityReached(void) {
@@ -262,7 +266,7 @@
     battDefender.update(&props);
 
     testvar_systemTimeSecs += MIN_TIME_BETWEEN_FILE_UPDATES;
-    time_expected = DEFAULT_TIME_TO_ACTIVATE_SECONDS - 1 + MIN_TIME_BETWEEN_FILE_UPDATES;
+    time_expected += MIN_TIME_BETWEEN_FILE_UPDATES;
     EXPECT_CALL(*mock, WriteStringToFile(std::to_string(time_expected),
                                          kPathPersistChargerPresentTime, _));
     EXPECT_CALL(*mock, SetProperty(kPropBatteryDefenderState, "ACTIVE"));
@@ -287,6 +291,11 @@
     testvar_systemTimeSecs += DEFAULT_TIME_TO_ACTIVATE_SECONDS + 1;
     EXPECT_CALL(*mock, SetProperty(kPropBatteryDefenderState, "CONNECTED"));
     battDefender.update(&props);
+
+    // Would be active if mHasReachedHighCapacityLevel was true
+    testvar_systemTimeSecs += DEFAULT_TIME_TO_ACTIVATE_SECONDS + 1;
+    EXPECT_CALL(*mock, SetProperty(kPropBatteryDefenderState, "CONNECTED"));
+    battDefender.update(&props);
 }
 
 TEST_F(BatteryDefenderTest, TriggerTime) {