diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
index 30eabfa..4253ca6 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
@@ -44,11 +44,6 @@
     boolean isBatteryTipsEnabled();
 
     /**
-     * Check whether the feedback card is enabled in the battery tips card
-     */
-    boolean isBatteryTipsFeedbackEnabled();
-
-    /**
      * Returns a threshold (in milliseconds) for the minimal screen on time in battery usage list
      */
     double getBatteryUsageListScreenOnTimeThresholdInMs();
diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
index 127178a..5931e206 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
@@ -81,11 +81,6 @@
     }
 
     @Override
-    public boolean isBatteryTipsFeedbackEnabled() {
-        return false;
-    }
-
-    @Override
     public double getBatteryUsageListScreenOnTimeThresholdInMs() {
         return 0;
     }
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java
index 1720f0d..5294dd5 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java
@@ -374,9 +374,6 @@
             }
             mOnBatteryUsageUpdatedListener.onBatteryUsageUpdated(
                     slotUsageData, getSlotInformation(), isBatteryUsageMapNullOrEmpty());
-
-            Log.d(TAG, "isBatteryTipsEnabled = "
-                    + mPowerUsageFeatureProvider.isBatteryTipsEnabled());
             if (mOnBatteryTipsUpdatedListener != null) {
                 mExecutor.execute(() -> {
                     final PowerAnomalyEventList anomalyEventList = mPowerUsageFeatureProvider
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryTipsCardPreference.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryTipsCardPreference.java
index ea5534d..763a0f8 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryTipsCardPreference.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryTipsCardPreference.java
@@ -22,7 +22,6 @@
 import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.view.View;
-import android.widget.ImageButton;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
@@ -34,7 +33,6 @@
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.core.SubSettingLauncher;
-import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 
@@ -47,7 +45,6 @@
 
     private static final String TAG = "BatteryTipsCardPreference";
 
-    private final PowerUsageFeatureProvider mPowerUsageFeatureProvider;
     private final MetricsFeatureProvider mMetricsFeatureProvider;
 
     private String mAnomalyEventId;
@@ -71,7 +68,6 @@
         setLayoutResource(R.layout.battery_tips_card);
         setSelectable(false);
         final FeatureFactory featureFactory = FeatureFactory.getFactory(context);
-        mPowerUsageFeatureProvider =  featureFactory.getPowerUsageFeatureProvider(context);
         mMetricsFeatureProvider = featureFactory.getMetricsFeatureProvider();
         mPowerAnomalyKey = null;
     }
@@ -191,17 +187,5 @@
         if (mIconResourceId != 0) {
             ((ImageView) view.findViewById(R.id.icon)).setImageResource(mIconResourceId);
         }
-
-        if (!mPowerUsageFeatureProvider.isBatteryTipsFeedbackEnabled()) {
-            return;
-        }
-        view.findViewById(R.id.tips_card)
-                .setBackgroundResource(R.drawable.battery_tips_half_rounded_top_bg);
-        view.findViewById(R.id.feedback_card).setVisibility(View.VISIBLE);
-
-        ImageButton thumbUpButton = (ImageButton) view.findViewById(R.id.thumb_up);
-        thumbUpButton.setOnClickListener(this);
-        ImageButton thumbDownButton = (ImageButton) view.findViewById(R.id.thumb_down);
-        thumbDownButton.setOnClickListener(this);
     }
 }
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryTipsController.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryTipsController.java
index 80b2695..fd81e9b 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryTipsController.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryTipsController.java
@@ -25,7 +25,6 @@
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
-import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 
@@ -38,7 +37,6 @@
     private static final String ROOT_PREFERENCE_KEY = "battery_tips_category";
     private static final String CARD_PREFERENCE_KEY = "battery_tips_card";
 
-    private final PowerUsageFeatureProvider mPowerUsageFeatureProvider;
     private final MetricsFeatureProvider mMetricsFeatureProvider;
 
     @VisibleForTesting
@@ -47,14 +45,9 @@
     public BatteryTipsController(Context context) {
         super(context, ROOT_PREFERENCE_KEY);
         final FeatureFactory featureFactory = FeatureFactory.getFactory(context);
-        mPowerUsageFeatureProvider =  featureFactory.getPowerUsageFeatureProvider(context);
         mMetricsFeatureProvider = featureFactory.getMetricsFeatureProvider();
     }
 
-    private boolean isTipsCardVisible() {
-        return mPowerUsageFeatureProvider.isBatteryTipsEnabled();
-    }
-
     @Override
     public int getAvailabilityStatus() {
         return AVAILABLE;
@@ -102,12 +95,7 @@
                 : getStringFromResource(resourceId, resourceIndex);
     }
 
-    @VisibleForTesting
     void handleBatteryTipsCardUpdated(PowerAnomalyEvent powerAnomalyEvent) {
-        if (!isTipsCardVisible()) {
-            mCardPreference.setVisible(false);
-            return;
-        }
         if (powerAnomalyEvent == null) {
             mCardPreference.setVisible(false);
             return;
diff --git a/src/com/android/settings/fuelgauge/batteryusage/PowerUsageAdvanced.java b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageAdvanced.java
index e4f8b39..ae74689 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/PowerUsageAdvanced.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageAdvanced.java
@@ -35,8 +35,6 @@
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.fuelgauge.BatteryBroadcastReceiver;
-import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
-import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.search.SearchIndexable;
@@ -138,30 +136,25 @@
         mBatteryChartPreferenceController =
                 new BatteryChartPreferenceController(
                         context, getSettingsLifecycle(), (SettingsActivity) getActivity());
-        ScreenOnTimeController screenOnTimeController = new ScreenOnTimeController(context);
-        BatteryUsageBreakdownController batteryUsageBreakdownController =
+        final ScreenOnTimeController screenOnTimeController = new ScreenOnTimeController(context);
+        final BatteryUsageBreakdownController batteryUsageBreakdownController =
                 new BatteryUsageBreakdownController(
                         context, getSettingsLifecycle(), (SettingsActivity) getActivity(), this);
+        final BatteryTipsController batteryTipsController = new BatteryTipsController(context);
 
         mBatteryChartPreferenceController.setOnScreenOnTimeUpdatedListener(
                 screenOnTimeController::handleSceenOnTimeUpdated);
         mBatteryChartPreferenceController.setOnBatteryUsageUpdatedListener(
                 batteryUsageBreakdownController::handleBatteryUsageUpdated);
+        mBatteryChartPreferenceController.setOnBatteryTipsUpdatedListener(
+                batteryTipsController::handleBatteryTipsCardUpdated);
 
         controllers.add(mBatteryChartPreferenceController);
         controllers.add(screenOnTimeController);
         controllers.add(batteryUsageBreakdownController);
+        controllers.add(batteryTipsController);
         setBatteryChartPreferenceController();
 
-        final PowerUsageFeatureProvider powerUsageFeatureProvider =
-                FeatureFactory.getFactory(context).getPowerUsageFeatureProvider(context);
-        if (powerUsageFeatureProvider.isBatteryTipsEnabled()) {
-            BatteryTipsController batteryTipsController = new BatteryTipsController(context);
-            mBatteryChartPreferenceController.setOnBatteryTipsUpdatedListener(
-                    batteryTipsController::handleBatteryTipsCardUpdated);
-            controllers.add(batteryTipsController);
-        }
-
         return controllers;
     }
 
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java
index bf4e893..a0b449a 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java
@@ -73,10 +73,6 @@
     }
 
     @Test
-    public void testIsBatteryTipsFeedbackEnabled_returnFalse() {
-        assertThat(mPowerFeatureProvider.isBatteryTipsFeedbackEnabled()).isFalse();
-    }
-    @Test
     public void testGetBatteryUsageListConsumePowerThreshold_return0() {
         assertThat(mPowerFeatureProvider.getBatteryUsageListConsumePowerThreshold()).isEqualTo(0.0);
     }
