Move restricted apps page to new battery optimization page.

New entry: https://screenshot.googleplex.com/BbU6RnQhBbpnBc3.png
Restricted: https://screenshot.googleplex.com/5ggid7TcSsH9CUF.png
Old entry: https://screenshot.googleplex.com/7JgZpSfKs5zZb3Z.png

Bug: 240711616
Test: manual
Change-Id: I03d17beac0fb85a3d17acd7d0d581feb35e9582b
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..59e409b
--- /dev/null
+++ b/src/com/android/settings/applications/AppBatteryUsagePreferenceController.java
@@ -0,0 +1,55 @@
+/*
+ * 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 android.permission.PermissionControllerManager;
+import android.provider.DeviceConfig;
+
+import androidx.lifecycle.Lifecycle;
+import androidx.lifecycle.LifecycleObserver;
+import androidx.lifecycle.OnLifecycleEvent;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+
+import com.google.common.annotations.VisibleForTesting;
+
+import java.util.concurrent.Executor;
+
+/**
+ * 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;
+    }
+}
\ No newline at end of file
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 00af973..71c6a67 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -100,7 +100,7 @@
 import com.android.settings.applications.AppStateAlarmsAndRemindersBridge;
 import com.android.settings.applications.AppStateAppOpsBridge.PermissionState;
 import com.android.settings.applications.AppStateBaseBridge;
-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;
@@ -336,7 +336,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;
@@ -958,7 +958,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) {
@@ -1153,7 +1153,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;
             }
@@ -1199,7 +1199,7 @@
                     rebuild(R.id.sort_order_alpha, true);
                 }
             } else if (mManageApplications.mListType == LIST_TYPE_BATTERY_OPTIMIZATION) {
-                logBatteryOptimization(filterType);
+                logAppBatteryUsage(filterType);
             } else {
                 rebuild();
             }
@@ -1336,7 +1336,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