diff --git a/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java
index 06c3cee..8467b2f 100644
--- a/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java
@@ -86,13 +86,14 @@
             return mContext.getString(
                     com.android.settingslib.R.string.battery_info_status_charging_on_hold);
         }
+        if (info.remainingLabel != null
+                && mBatterySettingsFeatureProvider.isChargingOptimizationMode(mContext)) {
+            return info.remainingLabel;
+        }
         if (info.remainingLabel == null
                 || info.batteryStatus == BatteryManager.BATTERY_STATUS_NOT_CHARGING) {
             return info.statusLabel;
         }
-        if (mBatterySettingsFeatureProvider.isChargingOptimizationMode(mContext)) {
-            return info.remainingLabel;
-        }
         if (info.pluggedStatus == BatteryManager.BATTERY_PLUGGED_WIRELESS) {
             final CharSequence wirelessChargingLabel =
                     mBatterySettingsFeatureProvider.getWirelessChargingLabel(mContext, info);
diff --git a/src/com/android/settings/fuelgauge/BatteryInfo.java b/src/com/android/settings/fuelgauge/BatteryInfo.java
index c333a33..b54801a 100644
--- a/src/com/android/settings/fuelgauge/BatteryInfo.java
+++ b/src/com/android/settings/fuelgauge/BatteryInfo.java
@@ -390,12 +390,37 @@
             info.remainingLabel = null;
             int chargingLimitedResId = R.string.power_charging_limited;
             info.chargeLabel = context.getString(chargingLimitedResId, info.batteryPercentString);
-        } else if ((chargeTimeMs > 0
+            return;
+        }
+        final BatterySettingsFeatureProvider featureProvider =
+                FeatureFactory.getFeatureFactory().getBatterySettingsFeatureProvider();
+        if (featureProvider.isChargingOptimizationMode(context)) {
+            final CharSequence chargeLabel =
+                    featureProvider.getChargingOptimizationChargeLabel(
+                            context,
+                            info.batteryLevel,
+                            info.batteryPercentString,
+                            chargeTimeMs,
+                            currentTimeMs);
+            if (chargeLabel != null) {
+                final CharSequence remainingLabel =
+                        featureProvider.getChargingOptimizationRemainingLabel(
+                                context,
+                                info.batteryLevel,
+                                info.pluggedStatus,
+                                chargeTimeMs,
+                                currentTimeMs);
+                if (remainingLabel != null) {
+                    info.chargeLabel = chargeLabel;
+                    info.remainingLabel = remainingLabel;
+                    return;
+                }
+            }
+        }
+        if ((chargeTimeMs > 0
                         && status != BatteryManager.BATTERY_STATUS_FULL
                         && dockDefenderMode == BatteryUtils.DockDefenderMode.DISABLED)
                 || dockDefenderMode == BatteryUtils.DockDefenderMode.TEMPORARILY_BYPASSED) {
-            final BatterySettingsFeatureProvider featureProvider =
-                    FeatureFactory.getFeatureFactory().getBatterySettingsFeatureProvider();
             // Battery is charging to full
             info.remainingTimeUs = PowerUtil.convertMsToUs(chargeTimeMs);
             int resId = getChargingDurationResId(info.isFastCharging);
@@ -419,8 +444,7 @@
                                     info.batteryPercentString,
                                     chargeTimeMs,
                                     info.isFastCharging,
-                                    currentTimeMs,
-                                    featureProvider);
+                                    currentTimeMs);
         } else if (dockDefenderMode == BatteryUtils.DockDefenderMode.FUTURE_BYPASS) {
             // Dock defender will be triggered in the future, charging will be optimized.
             info.chargeLabel =
@@ -447,14 +471,6 @@
             int pluggedStatus,
             long currentTimeMs,
             BatterySettingsFeatureProvider featureProvider) {
-        if (featureProvider.isChargingOptimizationMode(context)) {
-            final CharSequence chargingOptimizationRemainingLabel =
-                    featureProvider.getChargingOptimizationRemainingLabel(
-                            context, chargeRemainingTimeMs, currentTimeMs);
-            if (chargingOptimizationRemainingLabel != null) {
-                return chargingOptimizationRemainingLabel;
-            }
-        }
         if (pluggedStatus == BatteryManager.BATTERY_PLUGGED_WIRELESS) {
             final CharSequence wirelessChargingRemainingLabel =
                     featureProvider.getWirelessChargingRemainingLabel(
@@ -488,16 +504,7 @@
             String batteryPercentString,
             long chargeTimeMs,
             boolean isFastCharging,
-            long currentTimeMs,
-            BatterySettingsFeatureProvider featureProvider) {
-        if (featureProvider.isChargingOptimizationMode(context)) {
-            final CharSequence chargingOptimizationChargeLabel =
-                    featureProvider.getChargingOptimizationChargeLabel(
-                            context, batteryPercentString, chargeTimeMs, currentTimeMs);
-            if (chargingOptimizationChargeLabel != null) {
-                return chargingOptimizationChargeLabel;
-            }
-        }
+            long currentTimeMs) {
         if (com.android.settingslib.fuelgauge.BatteryUtils.isChargingStringV2Enabled()) {
             var timeString =
                     PowerUtil.getTargetTimeShortString(context, chargeTimeMs, currentTimeMs);
diff --git a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java
index ab6d5ac..454a295 100644
--- a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java
+++ b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java
@@ -60,13 +60,18 @@
     /** Return a charging remaining time label for charging optimization mode. */
     @Nullable
     CharSequence getChargingOptimizationRemainingLabel(
-            @NonNull Context context, long chargeRemainingTimeMs, long currentTimeMs);
+            @NonNull Context context,
+            int batteryLevel,
+            int pluggedStatus,
+            long chargeRemainingTimeMs,
+            long currentTimeMs);
 
     /** Return a charge label for charging optimization mode. */
     @Nullable
     CharSequence getChargingOptimizationChargeLabel(
             @NonNull Context context,
-            @NonNull String batteryPercentageString,
+            int batteryLevel,
+            String batteryPercentageString,
             long chargeRemainingTimeMs,
             long currentTimeMs);
 }
diff --git a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java
index b2db347..40cfd0c 100644
--- a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java
+++ b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java
@@ -76,7 +76,11 @@
     @Nullable
     @Override
     public CharSequence getChargingOptimizationRemainingLabel(
-            @NonNull Context context, long chargeRemainingTimeMs, long currentTimeMs) {
+            @NonNull Context context,
+            int batteryLevel,
+            int pluggedStatus,
+            long chargeRemainingTimeMs,
+            long currentTimeMs) {
         return null;
     }
 
@@ -84,7 +88,8 @@
     @Override
     public CharSequence getChargingOptimizationChargeLabel(
             @NonNull Context context,
-            @NonNull String batteryPercentageString,
+            int batteryLevel,
+            String batteryPercentageString,
             long chargeRemainingTimeMs,
             long currentTimeMs) {
         return null;
diff --git a/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java b/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java
index 08d49f1..fd0d820 100644
--- a/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java
@@ -159,6 +159,11 @@
                     com.android.settingslib.R.string.power_charging_on_hold_settings_home_page,
                     info.batteryPercentString);
         }
+        final BatterySettingsFeatureProvider featureProvider =
+                FeatureFactory.getFeatureFactory().getBatterySettingsFeatureProvider();
+        if (info.chargeLabel != null && featureProvider.isChargingOptimizationMode(mContext)) {
+            return info.chargeLabel;
+        }
         if (info.batteryStatus == BatteryManager.BATTERY_STATUS_NOT_CHARGING) {
             // Present status only if no remaining time or status anomalous
             return info.statusLabel;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java
index bc6dadc..1899eab 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java
@@ -286,8 +286,9 @@
                         /* isFastCharging= */ true,
                         /* isChargingStringV2= */ true);
         batteryInfo.pluggedStatus = BatteryManager.BATTERY_PLUGGED_WIRELESS;
-        when(mFactory.batterySettingsFeatureProvider.getWirelessChargingLabel(eq(mContext),
-                any(BatteryInfo.class))).thenReturn(label);
+        when(mFactory.batterySettingsFeatureProvider.getWirelessChargingLabel(
+                        eq(mContext), any(BatteryInfo.class)))
+                .thenReturn(label);
 
         mController.updateBatteryStatus(/* label= */ null, batteryInfo);
 
@@ -326,14 +327,64 @@
         verify(mBatteryUsageProgressBarPref).setBottomSummary(expectedChargingString);
     }
 
+    @Test
+    public void updateBatteryStatus_chargingOptimizationMode_remainingLabel() {
+        var batteryInfo =
+                arrangeUpdateBatteryStatusTestWithRemainingLabel(
+                        /* remainingLabel= */ "Expected remaining label",
+                        /* statusLabel= */ "Fast Charging",
+                        /* isFastCharging= */ true,
+                        /* isChargingStringV2= */ true);
+        var expectedChargingString = batteryInfo.remainingLabel;
+        when(mFactory.batterySettingsFeatureProvider.isChargingOptimizationMode(mContext))
+                .thenReturn(true);
+
+        mController.updateBatteryStatus(/* label= */ null, batteryInfo);
+
+        verify(mBatteryUsageProgressBarPref).setBottomSummary(expectedChargingString);
+    }
+
+    @Test
+    public void updateBatteryStatus_chargingOptimizationModeNoRemainingLabel_statusLabel() {
+        var batteryInfo =
+                arrangeUpdateBatteryStatusTestWithRemainingLabel(
+                        /* remainingLabel= */ null,
+                        /* statusLabel= */ "Fast Charging",
+                        /* isFastCharging= */ true,
+                        /* isChargingStringV2= */ true);
+        var expectedChargingString = batteryInfo.statusLabel;
+        when(mFactory.batterySettingsFeatureProvider.isChargingOptimizationMode(mContext))
+                .thenReturn(true);
+
+        mController.updateBatteryStatus(/* label= */ null, batteryInfo);
+
+        verify(mBatteryUsageProgressBarPref).setBottomSummary(expectedChargingString);
+    }
+
+    @Test
+    public void updateBatteryStatus_notChargingOptimizationMode_statusWithRemainingLabel() {
+        var batteryInfo =
+                arrangeUpdateBatteryStatusTestWithRemainingLabel(
+                        /* remainingLabel= */ "Full by 1:30 PM",
+                        /* statusLabel= */ "Fast Charging",
+                        /* isFastCharging= */ true,
+                        /* isChargingStringV2= */ true);
+        var expectedChargingString = batteryInfo.statusLabel + " • " + batteryInfo.remainingLabel;
+        when(mFactory.batterySettingsFeatureProvider.isChargingOptimizationMode(mContext))
+                .thenReturn(false);
+
+        mController.updateBatteryStatus(/* label= */ null, batteryInfo);
+
+        verify(mBatteryUsageProgressBarPref).setBottomSummary(expectedChargingString);
+    }
+
     private BatteryInfo arrangeUpdateBatteryStatusTestWithRemainingLabel(
             String remainingLabel,
             String statusLabel,
             boolean isFastCharging,
             boolean isChargingStringV2) {
         SystemProperties.set(
-                BatteryUtils.PROPERTY_CHARGING_STRING_V2_KEY,
-                String.valueOf(isChargingStringV2));
+                BatteryUtils.PROPERTY_CHARGING_STRING_V2_KEY, String.valueOf(isChargingStringV2));
         mBatteryInfo.isBatteryDefender = false;
         mBatteryInfo.remainingLabel = remainingLabel;
         mBatteryInfo.statusLabel = statusLabel;
@@ -389,8 +440,11 @@
 
         mController.updateHeaderPreference(mBatteryInfo);
 
-        verify(mBatteryUsageProgressBarPref).setBottomSummary(mContext.getString(
-                com.android.settingslib.R.string.battery_info_status_charging_on_hold));
+        verify(mBatteryUsageProgressBarPref)
+                .setBottomSummary(
+                        mContext.getString(
+                                com.android.settingslib.R.string
+                                        .battery_info_status_charging_on_hold));
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java
index a1081f4..7bafc6d 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java
@@ -724,15 +724,15 @@
         Intent batteryIntent =
                 createIntentForGetBatteryInfoTest(
                         ChargingType.WIRED, ChargingSpeed.REGULAR, /* batteryLevel= */ 65);
-        var expectedRemainingLabel = "Done charging by";
+        var expectedRemainingLabel = "Expected remaining label";
         var expectedChargeLabel = "65% - " + expectedRemainingLabel;
         when(mFeatureFactory.batterySettingsFeatureProvider.isChargingOptimizationMode(mContext))
                 .thenReturn(true);
         when(mFeatureFactory.batterySettingsFeatureProvider.getChargingOptimizationRemainingLabel(
-                        eq(mContext), anyLong(), anyLong()))
+                        eq(mContext), anyInt(), anyInt(), anyLong(), anyLong()))
                 .thenReturn(expectedRemainingLabel);
         when(mFeatureFactory.batterySettingsFeatureProvider.getChargingOptimizationChargeLabel(
-                        eq(mContext), anyString(), anyLong(), anyLong()))
+                        eq(mContext), anyInt(), anyString(), anyLong(), anyLong()))
                 .thenReturn(expectedChargeLabel);
         var expectedStatusLabel = "Charging";
 
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImplTest.java
index c55a121..9f04892 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImplTest.java
@@ -19,6 +19,7 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import android.content.Context;
+import android.os.BatteryManager;
 
 import androidx.test.core.app.ApplicationProvider;
 
@@ -87,12 +88,15 @@
 
     @Test
     public void getChargingOptimizationRemainingLabel_default_returnNull() {
-        assertThat(mImpl.getChargingOptimizationRemainingLabel(mContext, 1000L, 1000L)).isNull();
+        assertThat(
+                        mImpl.getChargingOptimizationRemainingLabel(
+                                mContext, 75, BatteryManager.BATTERY_PLUGGED_AC, 1000L, 1000L))
+                .isNull();
     }
 
     @Test
     public void getChargingOptimizationChargeLabel_default_returnNull() {
-        assertThat(mImpl.getChargingOptimizationChargeLabel(mContext, "70%", 1000L, 1000L))
+        assertThat(mImpl.getChargingOptimizationChargeLabel(mContext, 70, "70%", 1000L, 1000L))
                 .isNull();
     }
 }
