diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettings.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettings.java
index ead6fc6..05a1e8f 100644
--- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettings.java
+++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettings.java
@@ -29,7 +29,6 @@
 import android.provider.Settings;
 import android.text.TextUtils;
 import android.view.View;
-import android.util.Pair;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -184,35 +183,18 @@
     }
 
     private void logPowerSaver() {
-        int currentSaverPercentage = getSaverPercentage();
-        String currentSaverScheduleKey = mRadioButtonController.getDefaultKey();
+        final int currentSaverPercentage = getSaverPercentage();
+        final String currentSaverScheduleKey = mRadioButtonController.getDefaultKey();
         if (mSaverScheduleKey.equals(currentSaverScheduleKey)
                 && mSaverPercentage == currentSaverPercentage) {
             return;
         }
-        int scheduleType = -1;
-        int schedulePercentage = -1;
-        switch (currentSaverScheduleKey) {
-            case BatterySaverScheduleRadioButtonsController.KEY_NO_SCHEDULE:
-                scheduleType = SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_NO_SCHEDULE;
-                break;
-            case BatterySaverScheduleRadioButtonsController.KEY_ROUTINE:
-                scheduleType = SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_ROUTINE;
-                break;
-            case BatterySaverScheduleRadioButtonsController.KEY_PERCENTAGE:
-                scheduleType = SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_PERCENTAGE;
-                schedulePercentage = currentSaverPercentage;
-                break;
-            // Unknown schedule type.
-            default:
-                return;
-        }
         FeatureFactory.getFactory(mContext).getMetricsFeatureProvider()
-                .action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER,
-                        Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
-                                scheduleType),
-                        Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE,
-                                schedulePercentage));
+                .action(SettingsEnums.FUELGAUGE_BATTERY_SAVER,
+                        SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
+                        SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE,
+                        currentSaverScheduleKey,
+                        currentSaverPercentage);
     }
 
     private int getSaverPercentage() {
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettingsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettingsTest.java
index afd7f66..5c24da9 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettingsTest.java
@@ -43,22 +43,22 @@
 
     @Test
     public void onPause_withNoScheduleType_logExpectedData() {
-        setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE, 0);
+        int expectedPercentage = 0;
+        setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE, expectedPercentage);
 
         mBatterySaverScheduleSettings.onPause();
 
-        verifySchedule(SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_NO_SCHEDULE,
-                /* schedulePercentage= */ -1);
+        verifySchedule("key_battery_saver_no_schedule", expectedPercentage);
     }
 
     @Test
     public void onPause_withRoutineScheduleType_logExpectedData() {
-        setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC, 0);
+        int expectedPercentage = 0;
+        setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC, expectedPercentage);
 
         mBatterySaverScheduleSettings.onPause();
 
-        verifySchedule(SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_ROUTINE,
-                /* schedulePercentage= */ -1);
+        verifySchedule("key_battery_saver_routine", expectedPercentage);
     }
 
     @Test
@@ -68,8 +68,7 @@
 
         mBatterySaverScheduleSettings.onPause();
 
-        verifySchedule(SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_PERCENTAGE,
-                expectedPercentage);
+        verifySchedule("key_battery_saver_percentage", expectedPercentage);
     }
 
     @Test
@@ -90,8 +89,7 @@
 
         mBatterySaverScheduleSettings.onPause();
 
-        verifySchedule(SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_PERCENTAGE,
-                expectedPercentage);
+        verifySchedule("key_battery_saver_percentage", expectedPercentage);
     }
 
     private void setSchedule(int scheduleType, int schedulePercentage) {
@@ -101,13 +99,12 @@
                 Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, schedulePercentage);
     }
 
-    private void verifySchedule(int scheduleType, int schedulePercentage) {
+    private void verifySchedule(String scheduleTypeKey, int schedulePercentage) {
         waitAWhile();
-        verify(mMetricsFeatureProvider).action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER,
-                Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
-                        scheduleType),
-                Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE,
-                        schedulePercentage));
+        verify(mMetricsFeatureProvider).action(SettingsEnums.FUELGAUGE_BATTERY_SAVER,
+                SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
+                SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE,
+                scheduleTypeKey, schedulePercentage);
     }
 
     private void waitAWhile() {
