String change to highlight calculation stopped at last even hour

Bug: 278022447
Fix: 278022447
Test: manual
Change-Id: Ia04ae7c7cb4c7ebdd40f4aa3df05b34d2ce66628
Merged-In: Ia08dea791bb72113719fd1316e8e9587a96eaef1
diff --git a/res/values/strings.xml b/res/values/strings.xml
index ccf4af7..1e48a97 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -7004,6 +7004,10 @@
     <string name="battery_system_usage_for">System usage for <xliff:g id="slot">%s</xliff:g></string>
     <!-- [CHAR_LIMIT=NONE] Battery app usage section header -->
     <string name="battery_app_usage_for">App usage for <xliff:g id="slot">%s</xliff:g></string>
+    <!-- [CHAR_LIMIT=NONE] Battery system usage section header since last full charge to slot_timestamp. Please use similar text with tc/3248552137819897140 -->
+    <string name="battery_system_usage_since_last_full_charge_to">System usage since last full charge to <xliff:g id="slot_timestamp" example="Friday 10 am">%s</xliff:g></string>
+    <!-- [CHAR_LIMIT=NONE] Battery app usage section header since last full charge to slot_timestamp. Please use similar text with tc/7309909074935858949 -->
+    <string name="battery_app_usage_since_last_full_charge_to">App usage since last full charge to <xliff:g id="slot_timestamp" example="Friday 10 am">%s</xliff:g></string>
     <!-- [CHAR_LIMIT=NONE] Battery usage item for total usage time less than a minute -->
     <string name="battery_usage_total_less_than_one_minute">Total: less than a min</string>
     <!-- [CHAR_LIMIT=NONE] Battery usage item for total background time less than a minute -->
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java
index 56da0f4..7ce8b3a 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java
@@ -593,8 +593,19 @@
 
     private String getSlotInformation(boolean isApp, String slotInformation) {
         // TODO: Updates the right slot information from daily and hourly chart selection.
-        // Null means we show all information without a specific time slot.
-        if (slotInformation == null) {
+        if (mDailyViewModel != null && mHourlyViewModels != null && isAllSelected()) {
+            int lastDailyChartIndex = mDailyViewModel.size() - 2;
+            int lastHourlyChartIndex = mHourlyViewModels.get(lastDailyChartIndex).size() - 1;
+            String lastSlotInformation = getSlotInformation(
+                    lastDailyChartIndex, lastHourlyChartIndex, /*isDayTextOnly=*/ false);
+            return isApp
+                    ? mPrefContext.getString(
+                            R.string.battery_app_usage_since_last_full_charge_to,
+                            lastSlotInformation)
+                    : mPrefContext.getString(
+                            R.string.battery_system_usage_since_last_full_charge_to,
+                            lastSlotInformation);
+        } else if (slotInformation == null) {
             return isApp
                     ? mPrefContext.getString(R.string.battery_app_usage)
                     : mPrefContext.getString(R.string.battery_system_usage);
@@ -614,14 +625,19 @@
         if (isAllSelected()) {
             return null;
         }
+        return getSlotInformation(mDailyChartIndex, mHourlyChartIndex,
+                /*isDayTextOnly=*/ mHourlyChartIndex == BatteryChartViewModel.SELECTED_INDEX_ALL);
+    }
 
-        final String selectedDayText = mDailyViewModel.getFullText(mDailyChartIndex);
-        if (mHourlyChartIndex == BatteryChartViewModel.SELECTED_INDEX_ALL) {
+    private String getSlotInformation(
+            int dailyChartIndex, int hourlyChartIndex, boolean isDayTextOnly) {
+        final String selectedDayText = mDailyViewModel.getFullText(dailyChartIndex);
+        if (isDayTextOnly) {
             return selectedDayText;
         }
 
-        final String selectedHourText = mHourlyViewModels.get(mDailyChartIndex).getFullText(
-                mHourlyChartIndex);
+        final String selectedHourText = mHourlyViewModels.get(dailyChartIndex).getFullText(
+                hourlyChartIndex);
         if (isBatteryLevelDataInOneDay()) {
             return selectedHourText;
         }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerTest.java
index 9fbcb16..10b957b 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerTest.java
@@ -571,12 +571,13 @@
     }
 
     @Test
-    public void refreshCategoryTitle_setLastFullChargeIntoBothTitleTextView() {
+    public void refreshCategoryTitle_singleDayData_setLastFullChargeIntoBothTitleTextView() {
         mBatteryChartPreferenceController = createController();
         mBatteryChartPreferenceController.mAppListPrefGroup =
                 spy(new PreferenceCategory(mContext));
         mBatteryChartPreferenceController.mExpandDividerPreference =
                 spy(new ExpandDividerPreference(mContext));
+        mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(6));
         // Simulates select all condition.
         mBatteryChartPreferenceController.mDailyChartIndex =
                 BatteryChartViewModel.SELECTED_INDEX_ALL;
@@ -590,13 +591,43 @@
         verify(mBatteryChartPreferenceController.mAppListPrefGroup)
                 .setTitle(captor.capture());
         assertThat(captor.getValue())
-                .isEqualTo("App usage since last full charge");
+                .isEqualTo("App usage since last full charge to 12 PM");
         // Verifies the title in the expandable divider.
         captor = ArgumentCaptor.forClass(String.class);
         verify(mBatteryChartPreferenceController.mExpandDividerPreference)
                 .setTitle(captor.capture());
         assertThat(captor.getValue())
-                .isEqualTo("System usage since last full charge");
+                .isEqualTo("System usage since last full charge to 12 PM");
+    }
+
+    @Test
+    public void refreshCategoryTitle_multiDaysData_setLastFullChargeIntoBothTitleTextView() {
+        mBatteryChartPreferenceController = createController();
+        mBatteryChartPreferenceController.mAppListPrefGroup =
+                spy(new PreferenceCategory(mContext));
+        mBatteryChartPreferenceController.mExpandDividerPreference =
+                spy(new ExpandDividerPreference(mContext));
+        mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(60));
+        // Simulates select all condition.
+        mBatteryChartPreferenceController.mDailyChartIndex =
+                BatteryChartViewModel.SELECTED_INDEX_ALL;
+        mBatteryChartPreferenceController.mHourlyChartIndex =
+                BatteryChartViewModel.SELECTED_INDEX_ALL;
+
+        mBatteryChartPreferenceController.refreshCategoryTitle();
+
+        ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
+        // Verifies the title in the preference group.
+        verify(mBatteryChartPreferenceController.mAppListPrefGroup)
+                .setTitle(captor.capture());
+        assertThat(captor.getValue())
+                .isEqualTo("App usage since last full charge to Monday 6 PM");
+        // Verifies the title in the expandable divider.
+        captor = ArgumentCaptor.forClass(String.class);
+        verify(mBatteryChartPreferenceController.mExpandDividerPreference)
+                .setTitle(captor.capture());
+        assertThat(captor.getValue())
+                .isEqualTo("System usage since last full charge to Monday 6 PM");
     }
 
     @Test