diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java
index 623bd4f..7d11ba5 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java
@@ -89,8 +89,7 @@
         final List<BatteryTip> tips = new ArrayList<>();
         tips.add(new SummaryTip(BatteryTip.StateType.NEW,
                 EstimateKt.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN));
-        tips.add(new LowBatteryTip(BatteryTip.StateType.NEW, false /* powerSaveModeOn */,
-                "Fake data"));
+        tips.add(new LowBatteryTip(BatteryTip.StateType.NEW, false /* powerSaveModeOn */));
 
         return tips;
     }
diff --git a/src/com/android/settings/fuelgauge/batterytip/detectors/LowBatteryDetector.java b/src/com/android/settings/fuelgauge/batterytip/detectors/LowBatteryDetector.java
index 75f47a7..8d668fe 100644
--- a/src/com/android/settings/fuelgauge/batterytip/detectors/LowBatteryDetector.java
+++ b/src/com/android/settings/fuelgauge/batterytip/detectors/LowBatteryDetector.java
@@ -61,7 +61,6 @@
             state = BatteryTip.StateType.NEW;
         }
 
-        return new LowBatteryTip(
-                state, powerSaveModeOn, mBatteryInfo.suggestionLabel);
+        return new LowBatteryTip(state, powerSaveModeOn);
     }
 }
diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/LowBatteryTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/LowBatteryTip.java
index 7790b10..930a811 100644
--- a/src/com/android/settings/fuelgauge/batterytip/tips/LowBatteryTip.java
+++ b/src/com/android/settings/fuelgauge/batterytip/tips/LowBatteryTip.java
@@ -21,34 +21,36 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 
+import com.android.settings.R;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 
 /**
  * Tip to show current battery level is low or remaining time is less than a certain period
  */
 public class LowBatteryTip extends EarlyWarningTip {
-    private CharSequence mSummary;
 
-    public LowBatteryTip(@StateType int state, boolean powerSaveModeOn, CharSequence summary) {
+    public LowBatteryTip(@StateType int state, boolean powerSaveModeOn) {
         super(state, powerSaveModeOn);
         mType = TipType.LOW_BATTERY;
-        mSummary = summary;
     }
 
     public LowBatteryTip(Parcel in) {
         super(in);
-        mSummary = in.readCharSequence();
+    }
+
+    @Override
+    public CharSequence getTitle(Context context) {
+        return context.getString(R.string.battery_tip_low_battery_title);
     }
 
     @Override
     public CharSequence getSummary(Context context) {
-        return mSummary;
+        return context.getString(R.string.battery_tip_low_battery_summary);
     }
 
     @Override
     public void writeToParcel(Parcel dest, int flags) {
         super.writeToParcel(dest, flags);
-        dest.writeCharSequence(mSummary);
     }
 
     @Override
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtilsTest.java
index 6954f9a..29f4f14 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtilsTest.java
@@ -67,8 +67,7 @@
         mEarlyWarningTip = spy(
                 new EarlyWarningTip(BatteryTip.StateType.NEW, true /* powerSaveModeOn */));
         mLowBatteryTip = spy(
-                new LowBatteryTip(BatteryTip.StateType.NEW, false /* powerSaveModeOn */,
-                        "" /* summary */));
+                new LowBatteryTip(BatteryTip.StateType.NEW, false /* powerSaveModeOn */));
         mBatteryDefenderTip = spy(new BatteryDefenderTip(BatteryTip.StateType.NEW));
     }
 
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/LowBatteryTipTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/LowBatteryTipTest.java
index 244faea..ff96b5b 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/LowBatteryTipTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/LowBatteryTipTest.java
@@ -36,7 +36,7 @@
 @RunWith(RobolectricTestRunner.class)
 public class LowBatteryTipTest {
 
-    private static final CharSequence SUMMARY = "Only 15 minutes left";
+    private static final CharSequence SUMMARY = "Turn on Battery Saver to extend battery life";
 
     @Mock
     private MetricsFeatureProvider mMetricsFeatureProvider;
@@ -48,8 +48,7 @@
         MockitoAnnotations.initMocks(this);
 
         mContext = RuntimeEnvironment.application;
-        mLowBatteryTip = new LowBatteryTip(BatteryTip.StateType.NEW, false /* powerSaveModeOn */,
-                SUMMARY);
+        mLowBatteryTip = new LowBatteryTip(BatteryTip.StateType.NEW, false /* powerSaveModeOn */);
     }
 
     @Test
@@ -65,6 +64,13 @@
     }
 
     @Test
+    public void getSummary_tipNew_showTitle() {
+        mLowBatteryTip.mState = BatteryTip.StateType.NEW;
+
+        assertThat(mLowBatteryTip.getTitle(mContext)).isEqualTo("Battery level low");
+    }
+
+    @Test
     public void getSummary_tipNew_showSummary() {
         mLowBatteryTip.mState = BatteryTip.StateType.NEW;
 
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSliceTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSliceTest.java
index cffc4d1..e4fc9fa 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSliceTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSliceTest.java
@@ -85,7 +85,7 @@
     @Test
     public void refreshBatteryTips_hasImportantTip_shouldReturnTrue() {
         final List<BatteryTip> tips = new ArrayList<>();
-        tips.add(new LowBatteryTip(BatteryTip.StateType.INVISIBLE, false, ""));
+        tips.add(new LowBatteryTip(BatteryTip.StateType.INVISIBLE, false));
         tips.add(new EarlyWarningTip(BatteryTip.StateType.NEW, false));
         ShadowBatteryTipLoader.setBatteryTips(tips);
 
@@ -102,7 +102,7 @@
                 .setPackageName("com.android.settings")
                 .setScreenOnTimeMs(10000L)
                 .build());
-        tips.add(new LowBatteryTip(BatteryTip.StateType.INVISIBLE, false, ""));
+        tips.add(new LowBatteryTip(BatteryTip.StateType.INVISIBLE, false));
         tips.add(new EarlyWarningTip(BatteryTip.StateType.HANDLED, false));
         tips.add(new HighUsageTip(1000L, appList));
         ShadowBatteryTipLoader.setBatteryTips(tips);
