diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index f7ba017..f1c1191 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -326,8 +326,8 @@
     public static class ChangeWifiStateActivity extends SettingsActivity { /* empty */ }
     public static class AppDrawOverlaySettingsActivity extends SettingsActivity { /* empty */ }
     public static class AppWriteSettingsActivity extends SettingsActivity { /* empty */ }
-    /** Activity to manage app battery optimization details. */
-    public static class AppBatteryOptimizationActivity extends SettingsActivity { /* empty */ }
+    /** Activity to manage app battery usage details. */
+    public static class AppBatteryUsageActivity extends SettingsActivity { /* empty */ }
 
     public static class ManageExternalSourcesActivity extends SettingsActivity {/* empty */ }
     public static class ManageAppExternalSourcesActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/applications/AppBatteryUsagePreferenceController.java b/src/com/android/settings/applications/AppBatteryUsagePreferenceController.java
new file mode 100644
index 0000000..405f198
--- /dev/null
+++ b/src/com/android/settings/applications/AppBatteryUsagePreferenceController.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications;
+
+
+import android.content.Context;
+
+import androidx.lifecycle.LifecycleObserver;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+
+/**
+ * Preference controller for handling the app battery usage list preference.
+ */
+public final class AppBatteryUsagePreferenceController extends BasePreferenceController
+        implements LifecycleObserver {
+    private static final String TAG = "AppBatteryUsagePreferenceController";
+    private boolean mEnableAppBatteryUsagePage;
+
+    public AppBatteryUsagePreferenceController(Context context, String preferenceKey) {
+        super(context, preferenceKey);
+        mEnableAppBatteryUsagePage =
+                mContext.getResources().getBoolean(R.bool.config_app_battery_usage_list_enabled);
+    }
+
+    @Override
+    public int getAvailabilityStatus() {
+        return mEnableAppBatteryUsagePage ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+    }
+}
+
diff --git a/src/com/android/settings/applications/AppStateBatteryOptimizationBridge.java b/src/com/android/settings/applications/AppStateAppBatteryUsageBridge.java
similarity index 81%
rename from src/com/android/settings/applications/AppStateBatteryOptimizationBridge.java
rename to src/com/android/settings/applications/AppStateAppBatteryUsageBridge.java
index 6301c85..3674212 100644
--- a/src/com/android/settings/applications/AppStateBatteryOptimizationBridge.java
+++ b/src/com/android/settings/applications/AppStateAppBatteryUsageBridge.java
@@ -31,10 +31,10 @@
 import java.lang.annotation.RetentionPolicy;
 
 /**
- * Class for bridging the Battery optimization information to ApplicationState.
+ * Class for bridging the app battery usage information to ApplicationState.
  */
-public class AppStateBatteryOptimizationBridge extends AppStateBaseBridge {
-    private static final String TAG = AppStateBatteryOptimizationBridge.class.getSimpleName();
+public class AppStateAppBatteryUsageBridge extends AppStateBaseBridge {
+    private static final String TAG = AppStateAppBatteryUsageBridge.class.getSimpleName();
     static final boolean DEBUG = Build.IS_DEBUGGABLE;
 
     private final Context mContext;
@@ -58,7 +58,7 @@
     @interface OptimizationMode {
     }
 
-    public AppStateBatteryOptimizationBridge(
+    public AppStateAppBatteryUsageBridge(
             Context context, ApplicationsState appState, Callback callback) {
         super(appState, callback);
         mContext = context;
@@ -68,7 +68,7 @@
 
     @Override
     protected void updateExtraInfo(AppEntry app, String pkg, int uid) {
-        app.extraInfo = getAppBatteryOptimizationState(pkg, uid);
+        app.extraInfo = getAppBatteryUsageState(pkg, uid);
     }
 
     @Override
@@ -83,7 +83,7 @@
         }
     }
 
-    protected Object getAppBatteryOptimizationState(String pkg, int uid) {
+    protected Object getAppBatteryUsageState(String pkg, int uid) {
         // Restricted = AppOpsManager.MODE_IGNORED + !allowListed
         // Unrestricted = AppOpsManager.MODE_ALLOWED + allowListed
         // Optimized = AppOpsManager.MODE_ALLOWED + !allowListed
@@ -107,17 +107,17 @@
         if (DEBUG) {
             Log.d(TAG, "Pkg: " + pkg + ", mode: " + modeName);
         }
-        return new BatteryOptimizationDetails(mode);
+        return new AppBatteryUsageDetails(mode);
     }
 
     @OptimizationMode
-    private static int getBatteryOptimizationDetailsMode(AppEntry entry) {
+    private static int getAppBatteryUsageDetailsMode(AppEntry entry) {
         if (entry == null || entry.extraInfo == null) {
             return MODE_UNKNOWN;
         }
 
-        return entry.extraInfo instanceof BatteryOptimizationDetails
-                ? ((BatteryOptimizationDetails) entry.extraInfo).mMode
+        return entry.extraInfo instanceof AppBatteryUsageDetails
+                ? ((AppBatteryUsageDetails) entry.extraInfo).mMode
                 : MODE_UNKNOWN;
     }
 
@@ -132,7 +132,7 @@
 
                 @Override
                 public boolean filterApp(AppEntry info) {
-                    return getBatteryOptimizationDetailsMode(info) == MODE_UNRESTRICTED;
+                    return getAppBatteryUsageDetailsMode(info) == MODE_UNRESTRICTED;
                 }
             };
 
@@ -147,7 +147,7 @@
 
                 @Override
                 public boolean filterApp(AppEntry info) {
-                    return getBatteryOptimizationDetailsMode(info) == MODE_OPTIMIZED;
+                    return getAppBatteryUsageDetailsMode(info) == MODE_OPTIMIZED;
                 }
             };
 
@@ -162,18 +162,18 @@
 
                 @Override
                 public boolean filterApp(AppEntry info) {
-                    return getBatteryOptimizationDetailsMode(info) == MODE_RESTRICTED;
+                    return getAppBatteryUsageDetailsMode(info) == MODE_RESTRICTED;
                 }
             };
 
     /**
-     * Extra details for battery optimization app data.
+     * Extra details for app battery usage data.
      */
-    static final class BatteryOptimizationDetails {
+    static final class AppBatteryUsageDetails {
         @OptimizationMode
         int mMode;
 
-        BatteryOptimizationDetails(@OptimizationMode int mode) {
+        AppBatteryUsageDetails(@OptimizationMode int mode) {
             mMode = mode;
         }
     }
diff --git a/src/com/android/settings/applications/manageapplications/AppFilterRegistry.java b/src/com/android/settings/applications/manageapplications/AppFilterRegistry.java
index 35de16e..15cf8e7 100644
--- a/src/com/android/settings/applications/manageapplications/AppFilterRegistry.java
+++ b/src/com/android/settings/applications/manageapplications/AppFilterRegistry.java
@@ -20,7 +20,7 @@
 
 import com.android.settings.R;
 import com.android.settings.applications.AppStateAlarmsAndRemindersBridge;
-import com.android.settings.applications.AppStateBatteryOptimizationBridge;
+import com.android.settings.applications.AppStateAppBatteryUsageBridge;
 import com.android.settings.applications.AppStateInstallAppsBridge;
 import com.android.settings.applications.AppStateLocaleBridge;
 import com.android.settings.applications.AppStateManageExternalStorageBridge;
@@ -225,21 +225,21 @@
         // Unrestricted
         mFilters[FILTER_APPS_BATTERY_UNRESTRICTED] =
                 new AppFilterItem(
-                        AppStateBatteryOptimizationBridge.FILTER_BATTERY_UNRESTRICTED_APPS,
+                        AppStateAppBatteryUsageBridge.FILTER_BATTERY_UNRESTRICTED_APPS,
                         FILTER_APPS_BATTERY_UNRESTRICTED,
                         R.string.filter_battery_unrestricted_title);
 
         // Optimized
         mFilters[FILTER_APPS_BATTERY_OPTIMIZED] =
                 new AppFilterItem(
-                        AppStateBatteryOptimizationBridge.FILTER_BATTERY_OPTIMIZED_APPS,
+                        AppStateAppBatteryUsageBridge.FILTER_BATTERY_OPTIMIZED_APPS,
                         FILTER_APPS_BATTERY_OPTIMIZED,
                         R.string.filter_battery_optimized_title);
 
         // Unrestricted
         mFilters[FILTER_APPS_BATTERY_RESTRICTED] =
                 new AppFilterItem(
-                        AppStateBatteryOptimizationBridge.FILTER_BATTERY_RESTRICTED_APPS,
+                        AppStateAppBatteryUsageBridge.FILTER_BATTERY_RESTRICTED_APPS,
                         FILTER_APPS_BATTERY_RESTRICTED,
                         R.string.filter_battery_restricted_title);
     }
diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java
index 9256140..1865f16 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -95,9 +95,9 @@
 import com.android.settings.Utils;
 import com.android.settings.applications.AppInfoBase;
 import com.android.settings.applications.AppStateAlarmsAndRemindersBridge;
+import com.android.settings.applications.AppStateAppBatteryUsageBridge;
 import com.android.settings.applications.AppStateAppOpsBridge.PermissionState;
 import com.android.settings.applications.AppStateBaseBridge;
-import com.android.settings.applications.AppStateBatteryOptimizationBridge;
 import com.android.settings.applications.AppStateInstallAppsBridge;
 import com.android.settings.applications.AppStateLocaleBridge;
 import com.android.settings.applications.AppStateManageExternalStorageBridge;
@@ -333,7 +333,7 @@
             }
         } else if (className.equals(AppLocaleDetails.class.getName())) {
             mListType = LIST_TYPE_APPS_LOCALE;
-        } else if (className.equals(Settings.AppBatteryOptimizationActivity.class.getName())) {
+        } else if (className.equals(Settings.AppBatteryUsageActivity.class.getName())) {
             mListType = LIST_TYPE_BATTERY_OPTIMIZATION;
         } else {
             mListType = LIST_TYPE_MAIN;
@@ -954,7 +954,7 @@
             screenTitle = R.string.app_notifications_title;
         } else if (className.equals(AppLocaleDetails.class.getName())) {
             screenTitle = R.string.app_locales_picker_menu_title;
-        } else if (className.equals(Settings.AppBatteryOptimizationActivity.class.getName())) {
+        } else if (className.equals(Settings.AppBatteryUsageActivity.class.getName())) {
             screenTitle = R.string.app_battery_optimization_title;
         } else {
             if (screenTitle == -1) {
@@ -1149,7 +1149,7 @@
             } else if (mManageApplications.mListType == LIST_TYPE_APPS_LOCALE) {
                 mExtraInfoBridge = new AppStateLocaleBridge(mContext, mState, this);
             } else if (mManageApplications.mListType == LIST_TYPE_BATTERY_OPTIMIZATION) {
-                mExtraInfoBridge = new AppStateBatteryOptimizationBridge(mContext, mState, this);
+                mExtraInfoBridge = new AppStateAppBatteryUsageBridge(mContext, mState, this);
             } else {
                 mExtraInfoBridge = null;
             }
@@ -1195,7 +1195,7 @@
                     rebuild(R.id.sort_order_alpha, true);
                 }
             } else if (mManageApplications.mListType == LIST_TYPE_BATTERY_OPTIMIZATION) {
-                logBatteryOptimization(filterType);
+                logAppBatteryUsage(filterType);
             } else {
                 rebuild();
             }
@@ -1332,7 +1332,7 @@
             });
         }
 
-        private void logBatteryOptimization(int filterType) {
+        private void logAppBatteryUsage(int filterType) {
             switch(filterType) {
                 case FILTER_APPS_BATTERY_UNRESTRICTED:
                     logAction(SettingsEnums.ACTION_BATTERY_OPTIMIZED_APPS_FILTER_UNRESTRICTED);
diff --git a/src/com/android/settings/fuelgauge/RestrictAppPreferenceController.java b/src/com/android/settings/fuelgauge/RestrictAppPreferenceController.java
index b960d4c..b85db40 100644
--- a/src/com/android/settings/fuelgauge/RestrictAppPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/RestrictAppPreferenceController.java
@@ -46,12 +46,15 @@
     private AppOpsManager mAppOpsManager;
     private InstrumentedPreferenceFragment mPreferenceFragment;
     private UserManager mUserManager;
+    private boolean mEnableAppBatteryUsagePage;
 
     public RestrictAppPreferenceController(Context context) {
         super(context, KEY_RESTRICT_APP);
         mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
         mUserManager = context.getSystemService(UserManager.class);
         mAppInfos = BatteryTipUtils.getRestrictedAppsList(mAppOpsManager, mUserManager);
+        mEnableAppBatteryUsagePage =
+                mContext.getResources().getBoolean(R.bool.config_app_battery_usage_list_enabled);
     }
 
     public RestrictAppPreferenceController(InstrumentedPreferenceFragment preferenceFragment) {
@@ -61,7 +64,8 @@
 
     @Override
     public int getAvailabilityStatus() {
-        return mAppInfos.size() > 0 ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+        return mAppInfos.size() > 0 && !mEnableAppBatteryUsagePage ? AVAILABLE
+                : CONDITIONALLY_UNAVAILABLE;
     }
 
     @Override
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryManagerPreferenceController.java b/src/com/android/settings/fuelgauge/batterytip/BatteryManagerPreferenceController.java
index d920a8e..d508603 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryManagerPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryManagerPreferenceController.java
@@ -36,6 +36,7 @@
     private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
     private AppOpsManager mAppOpsManager;
     private UserManager mUserManager;
+    private boolean mEnableAppBatteryUsagePage;
 
     public BatteryManagerPreferenceController(Context context) {
         super(context, KEY_BATTERY_MANAGER);
@@ -43,6 +44,8 @@
                 context).getPowerUsageFeatureProvider(context);
         mAppOpsManager = context.getSystemService(AppOpsManager.class);
         mUserManager = context.getSystemService(UserManager.class);
+        mEnableAppBatteryUsagePage =
+                mContext.getResources().getBoolean(R.bool.config_app_battery_usage_list_enabled);
     }
 
     @Override
@@ -53,9 +56,12 @@
     @Override
     public void updateState(Preference preference) {
         super.updateState(preference);
-        final int num = BatteryTipUtils.getRestrictedAppsList(mAppOpsManager, mUserManager).size();
+        if (!mEnableAppBatteryUsagePage) {
+            final int num = BatteryTipUtils.getRestrictedAppsList(mAppOpsManager,
+                    mUserManager).size();
 
-        updateSummary(preference, num);
+            updateSummary(preference, num);
+        }
     }
 
     @VisibleForTesting
