diff --git a/res/xml/power_usage_summary.xml b/res/xml/power_usage_summary.xml
index 14d8eda..a981a9b 100644
--- a/res/xml/power_usage_summary.xml
+++ b/res/xml/power_usage_summary.xml
@@ -28,10 +28,9 @@
         android:layout="@layout/battery_header"
         settings:controller="com.android.settings.fuelgauge.BatteryHeaderPreferenceController" />
 
-    <PreferenceCategory
+    <com.android.settings.widget.CardPreference
         android:key="battery_tip"
         android:title="@string/summary_placeholder"
-        android:layout="@layout/preference_category_no_label"
         settings:controller="com.android.settings.fuelgauge.batterytip.BatteryTipPreferenceController" />
 
     <Preference
@@ -39,8 +38,7 @@
         android:key="battery_saver_summary"
         android:title="@string/battery_saver"
         settings:controller="com.android.settings.fuelgauge.BatterySaverController"
-        settings:platform_slice="true"
-        settings:allowDividerAbove="true" />
+        settings:platform_slice="true" />
 
     <Preference
         android:fragment="com.android.settings.fuelgauge.SmartBatterySettings"
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java
index 0d9b1c4..b0dc926 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java
@@ -21,7 +21,6 @@
 
 import androidx.annotation.VisibleForTesting;
 import androidx.preference.Preference;
-import androidx.preference.PreferenceGroup;
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.SettingsActivity;
@@ -32,6 +31,7 @@
 import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
 import com.android.settings.fuelgauge.batterytip.tips.SummaryTip;
 import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.widget.CardPreference;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 
 import java.util.HashMap;
@@ -56,7 +56,7 @@
     private MetricsFeatureProvider mMetricsFeatureProvider;
     private boolean mNeedUpdate;
     @VisibleForTesting
-    PreferenceGroup mPreferenceGroup;
+    CardPreference mCardPreference;
     @VisibleForTesting
     Context mPrefContext;
     InstrumentedPreferenceFragment mFragment;
@@ -89,12 +89,12 @@
     public void displayPreference(PreferenceScreen screen) {
         super.displayPreference(screen);
         mPrefContext = screen.getContext();
-        mPreferenceGroup = (PreferenceGroup) screen.findPreference(getPreferenceKey());
+        mCardPreference = screen.findPreference(getPreferenceKey());
 
         // Add summary tip in advance to avoid UI flakiness
         final SummaryTip summaryTip = new SummaryTip(BatteryTip.StateType.NEW,
                 Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN);
-        mPreferenceGroup.addPreference(summaryTip.buildPreference(mPrefContext));
+        summaryTip.updatePreference(mCardPreference);
     }
 
     public void updateBatteryTips(List<BatteryTip> batteryTips) {
@@ -110,14 +110,12 @@
             }
         }
 
-        mPreferenceGroup.removeAll();
         for (int i = 0, size = batteryTips.size(); i < size; i++) {
             final BatteryTip batteryTip = mBatteryTips.get(i);
             batteryTip.sanityCheck(mContext);
             if (batteryTip.getState() != BatteryTip.StateType.INVISIBLE) {
-                final Preference preference = batteryTip.buildPreference(mPrefContext);
-                mBatteryTipMap.put(preference.getKey(), batteryTip);
-                mPreferenceGroup.addPreference(preference);
+                batteryTip.updatePreference(mCardPreference);
+                mBatteryTipMap.put(mCardPreference.getKey(), batteryTip);
                 batteryTip.log(mContext, mMetricsFeatureProvider);
                 mNeedUpdate = batteryTip.needUpdate();
                 break;
diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java
index 64737a7..de71ab2 100644
--- a/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java
+++ b/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java
@@ -147,14 +147,11 @@
      */
     public abstract void log(Context context, MetricsFeatureProvider metricsFeatureProvider);
 
-    public Preference buildPreference(Context context) {
-        Preference preference = new CardPreference(context);
-
-        preference.setKey(getKey());
+    public void updatePreference(Preference preference) {
+        final Context context = preference.getContext();
         preference.setTitle(getTitle(context));
         preference.setSummary(getSummary(context));
         preference.setIcon(getIconId());
-        return preference;
     }
 
     public boolean shouldShowDialog() {
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceControllerTest.java
index 5d45045..b68a8f5 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceControllerTest.java
@@ -44,6 +44,7 @@
 import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
 import com.android.settings.fuelgauge.batterytip.tips.SummaryTip;
 import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settings.widget.CardPreference;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -72,17 +73,14 @@
     private BatteryTip mBatteryTip;
     @Mock
     private SettingsActivity mSettingsActivity;
-    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private PreferenceManager mPreferenceManager;
     @Mock
     private InstrumentedPreferenceFragment mFragment;
 
     private Context mContext;
-    private PreferenceGroup mPreferenceGroup;
+    private CardPreference mCardPreference;
     private BatteryTipPreferenceController mBatteryTipPreferenceController;
     private List<BatteryTip> mOldBatteryTips;
     private List<BatteryTip> mNewBatteryTips;
-    private Preference mPreference;
     private FakeFeatureFactory mFeatureFactory;
 
     @Before
@@ -90,12 +88,9 @@
         MockitoAnnotations.initMocks(this);
         mContext = RuntimeEnvironment.application;
 
-        mPreferenceGroup = spy(new PreferenceCategory(mContext));
+        mCardPreference = spy(new CardPreference(mContext));
         when(mPreferenceScreen.getContext()).thenReturn(mContext);
-        when(mPreferenceGroup.getPreferenceManager()).thenReturn(mPreferenceManager);
-        doReturn(mPreferenceGroup).when(mPreferenceScreen).findPreference(KEY_PREF);
-        mPreference = new Preference(mContext);
-        mPreference.setKey(KEY_TIP);
+        doReturn(mCardPreference).when(mPreferenceScreen).findPreference(KEY_PREF);
         mFeatureFactory = FakeFeatureFactory.setupForTest();
 
         mOldBatteryTips = new ArrayList<>();
@@ -104,7 +99,7 @@
         mNewBatteryTips.add(new SummaryTip(BatteryTip.StateType.INVISIBLE, AVERAGE_TIME_MS));
 
         mBatteryTipPreferenceController = buildBatteryTipPreferenceController();
-        mBatteryTipPreferenceController.mPreferenceGroup = mPreferenceGroup;
+        mBatteryTipPreferenceController.mCardPreference = mCardPreference;
         mBatteryTipPreferenceController.mPrefContext = mContext;
     }
 
@@ -112,18 +107,7 @@
     public void testDisplayPreference_addSummaryTip() {
         mBatteryTipPreferenceController.displayPreference(mPreferenceScreen);
 
-        assertOnlyContainsSummaryTip(mPreferenceGroup);
-    }
-
-    @Test
-    public void testUpdateBatteryTips_updateTwice_firstShowSummaryTipThenRemoveIt() {
-        // Display summary tip because its state is new
-        mBatteryTipPreferenceController.updateBatteryTips(mOldBatteryTips);
-        assertOnlyContainsSummaryTip(mPreferenceGroup);
-
-        // Remove summary tip because its new state is invisible
-        mBatteryTipPreferenceController.updateBatteryTips(mNewBatteryTips);
-        assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(0);
+        assertOnlyContainsSummaryTip(mCardPreference);
     }
 
     @Test
@@ -142,11 +126,11 @@
         mBatteryTipPreferenceController.saveInstanceState(bundle);
 
         final BatteryTipPreferenceController controller = buildBatteryTipPreferenceController();
-        controller.mPreferenceGroup = mPreferenceGroup;
+        controller.mCardPreference = mCardPreference;
         controller.mPrefContext = mContext;
         controller.restoreInstanceState(bundle);
 
-        assertOnlyContainsSummaryTip(mPreferenceGroup);
+        assertOnlyContainsSummaryTip(mCardPreference);
     }
 
     @Test
@@ -166,12 +150,11 @@
         when(mBatteryTip.getType()).thenReturn(SMART_BATTERY_MANAGER);
         List<BatteryTip> batteryTips = new ArrayList<>();
         batteryTips.add(mBatteryTip);
-        doReturn(mPreference).when(mBatteryTip).buildPreference(any());
         doReturn(false).when(mBatteryTip).shouldShowDialog();
         doReturn(KEY_TIP).when(mBatteryTip).getKey();
         mBatteryTipPreferenceController.updateBatteryTips(batteryTips);
 
-        mBatteryTipPreferenceController.handlePreferenceTreeClick(mPreference);
+        mBatteryTipPreferenceController.handlePreferenceTreeClick(mCardPreference);
 
         verify(mBatteryTipListener).onBatteryTipHandled(mBatteryTip);
     }
@@ -182,10 +165,7 @@
                 BasePreferenceController.AVAILABLE_UNSEARCHABLE);
     }
 
-    private void assertOnlyContainsSummaryTip(final PreferenceGroup preferenceGroup) {
-        assertThat(preferenceGroup.getPreferenceCount()).isEqualTo(1);
-
-        final Preference preference = preferenceGroup.getPreference(0);
+    private void assertOnlyContainsSummaryTip(CardPreference preference) {
         assertThat(preference.getTitle()).isEqualTo(
                 mContext.getString(R.string.battery_tip_summary_title));
         assertThat(preference.getSummary()).isEqualTo(
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTipTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTipTest.java
index 3e18bf0..87fc0dd 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTipTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTipTest.java
@@ -56,7 +56,8 @@
 
     @Test
     public void buildPreference() {
-        final Preference preference = mBatteryTip.buildPreference(mContext);
+        final Preference preference = new Preference(mContext);
+        mBatteryTip.updatePreference(preference);
 
         assertThat(preference.getTitle()).isEqualTo(TITLE);
         assertThat(preference.getSummary()).isEqualTo(SUMMARY);
