diff --git a/res/values/config.xml b/res/values/config.xml
index 4180154bbe6..ca2cc0ff650 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -633,4 +633,7 @@
- @string/config_settingsintelligence_package_name
- android.uid.system:1000
+
+
+ false
diff --git a/res/values/strings.xml b/res/values/strings.xml
index a1a27042221..2fef457b9cd 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -6368,7 +6368,7 @@
View usage from last full charge
- Battery usage
+ App battery usage
Use details
@@ -11794,6 +11794,21 @@
Not using battery optimization
+
+ App battery usage
+
+
+ Set battery usage for apps
+
+
+ Unrestricted
+
+
+ Optimized
+
+
+ Restricted
+
If device is locked, prevent typing replies or other text in notifications
diff --git a/res/xml/app_info_settings.xml b/res/xml/app_info_settings.xml
index a310af59ea6..2bb05d000ae 100644
--- a/res/xml/app_info_settings.xml
+++ b/res/xml/app_info_settings.xml
@@ -85,7 +85,7 @@
+
+
+
+
-
+
-
+
-
-
-
-
-
+
+ updateExtraInfo(appEntry, appEntry.info.packageName, appEntry.info.uid));
+ if (DEBUG) {
+ Log.d(TAG, "End loadAllExtraInfo()");
+ }
+ }
+
+ protected Object getAppBatteryUsageState(String pkg, int uid) {
+ // Restricted = AppOpsManager.MODE_IGNORED + !allowListed
+ // Unrestricted = AppOpsManager.MODE_ALLOWED + allowListed
+ // Optimized = AppOpsManager.MODE_ALLOWED + !allowListed
+
+ boolean allowListed = mPowerAllowlistBackend.isAllowlisted(pkg);
+ int aomMode =
+ mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, uid, pkg);
+ @OptimizationMode int mode = MODE_UNKNOWN;
+ String modeName = "";
+ if (aomMode == AppOpsManager.MODE_IGNORED && !allowListed) {
+ mode = MODE_RESTRICTED;
+ if (DEBUG) {
+ modeName = "RESTRICTED";
+ }
+ } else if (aomMode == AppOpsManager.MODE_ALLOWED) {
+ mode = allowListed ? MODE_UNRESTRICTED : MODE_OPTIMIZED;
+ if (DEBUG) {
+ modeName = allowListed ? "UNRESTRICTED" : "OPTIMIZED";
+ }
+ }
+ if (DEBUG) {
+ Log.d(TAG, "Pkg: " + pkg + ", mode: " + modeName);
+ }
+ return new AppBatteryUsageDetails(mode);
+ }
+
+ @OptimizationMode
+ private static int getAppBatteryUsageDetailsMode(AppEntry entry) {
+ if (entry == null || entry.extraInfo == null) {
+ return MODE_UNKNOWN;
+ }
+
+ return entry.extraInfo instanceof AppBatteryUsageDetails
+ ? ((AppBatteryUsageDetails) entry.extraInfo).mMode
+ : MODE_UNKNOWN;
+ }
+
+ /**
+ * Used by {@link com.android.settings.applications.manageapplications.AppFilterRegistry} to
+ * determine which apps are unrestricted.
+ */
+ public static final AppFilter FILTER_BATTERY_UNRESTRICTED_APPS =
+ new AppFilter() {
+ @Override
+ public void init() {}
+
+ @Override
+ public boolean filterApp(AppEntry info) {
+ return getAppBatteryUsageDetailsMode(info) == MODE_UNRESTRICTED;
+ }
+ };
+
+ /**
+ * Used by {@link com.android.settings.applications.manageapplications.AppFilterRegistry} to
+ * determine which apps are optimized.
+ */
+ public static final AppFilter FILTER_BATTERY_OPTIMIZED_APPS =
+ new AppFilter() {
+ @Override
+ public void init() {}
+
+ @Override
+ public boolean filterApp(AppEntry info) {
+ return getAppBatteryUsageDetailsMode(info) == MODE_OPTIMIZED;
+ }
+ };
+
+ /**
+ * Used by {@link com.android.settings.applications.manageapplications.AppFilterRegistry} to
+ * determine which apps are restricted.
+ */
+ public static final AppFilter FILTER_BATTERY_RESTRICTED_APPS =
+ new AppFilter() {
+ @Override
+ public void init() {}
+
+ @Override
+ public boolean filterApp(AppEntry info) {
+ return getAppBatteryUsageDetailsMode(info) == MODE_RESTRICTED;
+ }
+ };
+
+ /**
+ * Extra details for app battery usage data.
+ */
+ static final class AppBatteryUsageDetails {
+ @OptimizationMode
+ int mMode;
+
+ 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 3c00b73570c..15cf8e71a6d 100644
--- a/src/com/android/settings/applications/manageapplications/AppFilterRegistry.java
+++ b/src/com/android/settings/applications/manageapplications/AppFilterRegistry.java
@@ -20,6 +20,7 @@ import androidx.annotation.IntDef;
import com.android.settings.R;
import com.android.settings.applications.AppStateAlarmsAndRemindersBridge;
+import com.android.settings.applications.AppStateAppBatteryUsageBridge;
import com.android.settings.applications.AppStateInstallAppsBridge;
import com.android.settings.applications.AppStateLocaleBridge;
import com.android.settings.applications.AppStateManageExternalStorageBridge;
@@ -37,28 +38,31 @@ import com.android.settingslib.applications.ApplicationsState;
*/
public class AppFilterRegistry {
- @IntDef(value = {
- FILTER_APPS_POWER_ALLOWLIST,
- FILTER_APPS_POWER_ALLOWLIST_ALL,
- FILTER_APPS_ALL,
- FILTER_APPS_ENABLED,
- FILTER_APPS_INSTANT,
- FILTER_APPS_DISABLED,
- FILTER_APPS_RECENT,
- FILTER_APPS_FREQUENT,
- FILTER_APPS_PERSONAL,
- FILTER_APPS_WORK,
- FILTER_APPS_USAGE_ACCESS,
- FILTER_APPS_WITH_OVERLAY,
- FILTER_APPS_WRITE_SETTINGS,
- FILTER_APPS_INSTALL_SOURCES,
- FILTER_APPS_BLOCKED,
- FILTER_ALARMS_AND_REMINDERS,
- FILTER_APPS_MEDIA_MANAGEMENT,
- FILTER_APPS_LOCALE,
- })
- @interface FilterType {
- }
+ @IntDef(
+ value = {
+ FILTER_APPS_POWER_ALLOWLIST,
+ FILTER_APPS_POWER_ALLOWLIST_ALL,
+ FILTER_APPS_ALL,
+ FILTER_APPS_ENABLED,
+ FILTER_APPS_INSTANT,
+ FILTER_APPS_DISABLED,
+ FILTER_APPS_RECENT,
+ FILTER_APPS_FREQUENT,
+ FILTER_APPS_PERSONAL,
+ FILTER_APPS_WORK,
+ FILTER_APPS_USAGE_ACCESS,
+ FILTER_APPS_WITH_OVERLAY,
+ FILTER_APPS_WRITE_SETTINGS,
+ FILTER_APPS_INSTALL_SOURCES,
+ FILTER_APPS_BLOCKED,
+ FILTER_ALARMS_AND_REMINDERS,
+ FILTER_APPS_MEDIA_MANAGEMENT,
+ FILTER_APPS_LOCALE,
+ FILTER_APPS_BATTERY_UNRESTRICTED,
+ FILTER_APPS_BATTERY_OPTIMIZED,
+ FILTER_APPS_BATTERY_RESTRICTED,
+ })
+ @interface FilterType {}
// Filter options used for displayed list of applications
// Filters will appear sorted based on their value defined here.
@@ -82,14 +86,18 @@ public class AppFilterRegistry {
public static final int FILTER_ALARMS_AND_REMINDERS = 18;
public static final int FILTER_APPS_MEDIA_MANAGEMENT = 19;
public static final int FILTER_APPS_LOCALE = 20;
- // Next id: 21. If you add an entry here, length of mFilters should be updated
+ public static final int FILTER_APPS_BATTERY_UNRESTRICTED = 21;
+ public static final int FILTER_APPS_BATTERY_OPTIMIZED = 22;
+ public static final int FILTER_APPS_BATTERY_RESTRICTED = 23;
+ // Next id: 24. If you add an entry here, please change NUM_FILTER_ENTRIES.
+ private static final int NUM_FILTER_ENTRIES = 24;
private static AppFilterRegistry sRegistry;
private final AppFilterItem[] mFilters;
private AppFilterRegistry() {
- mFilters = new AppFilterItem[21];
+ mFilters = new AppFilterItem[NUM_FILTER_ENTRIES];
// High power allowlist, on
mFilters[FILTER_APPS_POWER_ALLOWLIST] = new AppFilterItem(
@@ -212,6 +220,28 @@ public class AppFilterRegistry {
AppStateLocaleBridge.FILTER_APPS_LOCALE,
FILTER_APPS_LOCALE,
R.string.app_locale_picker_title);
+
+ // Battery optimization app states:
+ // Unrestricted
+ mFilters[FILTER_APPS_BATTERY_UNRESTRICTED] =
+ new AppFilterItem(
+ AppStateAppBatteryUsageBridge.FILTER_BATTERY_UNRESTRICTED_APPS,
+ FILTER_APPS_BATTERY_UNRESTRICTED,
+ R.string.filter_battery_unrestricted_title);
+
+ // Optimized
+ mFilters[FILTER_APPS_BATTERY_OPTIMIZED] =
+ new AppFilterItem(
+ AppStateAppBatteryUsageBridge.FILTER_BATTERY_OPTIMIZED_APPS,
+ FILTER_APPS_BATTERY_OPTIMIZED,
+ R.string.filter_battery_optimized_title);
+
+ // Unrestricted
+ mFilters[FILTER_APPS_BATTERY_RESTRICTED] =
+ new AppFilterItem(
+ AppStateAppBatteryUsageBridge.FILTER_BATTERY_RESTRICTED_APPS,
+ FILTER_APPS_BATTERY_RESTRICTED,
+ R.string.filter_battery_restricted_title);
}
@@ -248,6 +278,8 @@ public class AppFilterRegistry {
return FILTER_APPS_MEDIA_MANAGEMENT;
case ManageApplications.LIST_TYPE_APPS_LOCALE:
return FILTER_APPS_LOCALE;
+ case ManageApplications.LIST_TYPE_BATTERY_OPTIMIZATION:
+ return FILTER_APPS_BATTERY_OPTIMIZED;
default:
return FILTER_APPS_ALL;
}
diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java
index 30d4a717087..018fda51e12 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -20,6 +20,9 @@ import static androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_IDLE;
import static com.android.settings.ChangeIds.CHANGE_RESTRICT_SAW_INTENT;
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_ALL;
+import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_BATTERY_OPTIMIZED;
+import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_BATTERY_RESTRICTED;
+import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_BATTERY_UNRESTRICTED;
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_BLOCKED;
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_DISABLED;
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_ENABLED;
@@ -92,6 +95,7 @@ import com.android.settings.SettingsActivity;
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.AppStateInstallAppsBridge;
@@ -118,6 +122,7 @@ import com.android.settings.applications.appinfo.WriteSettingsDetails;
import com.android.settings.core.InstrumentedFragment;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
+import com.android.settings.fuelgauge.AdvancedPowerUsageDetail;
import com.android.settings.fuelgauge.HighPowerDetail;
import com.android.settings.localepicker.AppLocalePickerActivity;
import com.android.settings.notification.ConfigureNotificationSettings;
@@ -229,6 +234,7 @@ public class ManageApplications extends InstrumentedFragment
public static final int LIST_TYPE_ALARMS_AND_REMINDERS = 12;
public static final int LIST_TYPE_MEDIA_MANAGEMENT_APPS = 13;
public static final int LIST_TYPE_APPS_LOCALE = 14;
+ public static final int LIST_TYPE_BATTERY_OPTIMIZATION = 15;
// List types that should show instant apps.
public static final Set LIST_TYPES_WITH_INSTANT = new ArraySet<>(Arrays.asList(
@@ -312,7 +318,7 @@ public class ManageApplications extends InstrumentedFragment
mListType = LIST_TYPE_ALARMS_AND_REMINDERS;
} else if (className.equals(Settings.NotificationAppListActivity.class.getName())
|| className.equals(
- Settings.NotificationReviewPermissionsActivity.class.getName())) {
+ Settings.NotificationReviewPermissionsActivity.class.getName())) {
mListType = LIST_TYPE_NOTIFICATION;
mUsageStatsManager = IUsageStatsManager.Stub.asInterface(
ServiceManager.getService(Context.USAGE_STATS_SERVICE));
@@ -327,6 +333,8 @@ public class ManageApplications extends InstrumentedFragment
}
} else if (className.equals(AppLocaleDetails.class.getName())) {
mListType = LIST_TYPE_APPS_LOCALE;
+ } else if (className.equals(Settings.AppBatteryUsageActivity.class.getName())) {
+ mListType = LIST_TYPE_BATTERY_OPTIMIZATION;
} else {
mListType = LIST_TYPE_MAIN;
}
@@ -460,6 +468,12 @@ public class ManageApplications extends InstrumentedFragment
if (mListType == LIST_TYPE_HIGH_POWER) {
mFilterAdapter.enableFilter(FILTER_APPS_POWER_ALLOWLIST_ALL);
}
+ if (mListType == LIST_TYPE_BATTERY_OPTIMIZATION) {
+ mFilterAdapter.enableFilter(FILTER_APPS_ALL);
+ mFilterAdapter.enableFilter(FILTER_APPS_BATTERY_UNRESTRICTED);
+ mFilterAdapter.enableFilter(FILTER_APPS_BATTERY_OPTIMIZED);
+ mFilterAdapter.enableFilter(FILTER_APPS_BATTERY_RESTRICTED);
+ }
setCompositeFilter();
}
@@ -511,6 +525,8 @@ public class ManageApplications extends InstrumentedFragment
return SettingsEnums.MEDIA_MANAGEMENT_APPS;
case LIST_TYPE_APPS_LOCALE:
return SettingsEnums.APPS_LOCALE_LIST;
+ case LIST_TYPE_BATTERY_OPTIMIZATION:
+ return SettingsEnums.BATTERY_OPTIMIZED_APPS_LIST;
default:
return SettingsEnums.PAGE_UNKNOWN;
}
@@ -641,6 +657,10 @@ public class ManageApplications extends InstrumentedFragment
intent.putExtra(AppInfoBase.ARG_PACKAGE_UID, mCurrentUid);
startActivity(intent);
break;
+ case LIST_TYPE_BATTERY_OPTIMIZATION:
+ AdvancedPowerUsageDetail.startBatteryDetailPage(
+ getActivity(), this, mCurrentPkgName);
+ break;
// TODO: Figure out if there is a way where we can spin up the profile's settings
// process ahead of time, to avoid a long load of data when user clicks on a managed
// app. Maybe when they load the list of apps that contains managed profile apps.
@@ -900,8 +920,9 @@ public class ManageApplications extends InstrumentedFragment
/**
* Returns a resource ID of title based on what type of app list is
+ *
* @param intent the intent of the activity that might include a specified title
- * @param args the args that includes a class name of app list
+ * @param args the args that includes a class name of app list
*/
public static int getTitleResId(@NonNull Intent intent, Bundle args) {
int screenTitle = intent.getIntExtra(
@@ -924,16 +945,18 @@ public class ManageApplications extends InstrumentedFragment
screenTitle = R.string.change_wifi_state_title;
} else if (className.equals(Settings.ManageExternalStorageActivity.class.getName())) {
screenTitle = R.string.manage_external_storage_title;
- } else if (className.equals(Settings.MediaManagementAppsActivity.class.getName())) {
+ } else if (className.equals(Settings.MediaManagementAppsActivity.class.getName())) {
screenTitle = R.string.media_management_apps_title;
} else if (className.equals(Settings.AlarmsAndRemindersActivity.class.getName())) {
screenTitle = R.string.alarms_and_reminders_title;
} else if (className.equals(Settings.NotificationAppListActivity.class.getName())
|| className.equals(
- Settings.NotificationReviewPermissionsActivity.class.getName())) {
+ Settings.NotificationReviewPermissionsActivity.class.getName())) {
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.AppBatteryUsageActivity.class.getName())) {
+ screenTitle = R.string.app_battery_usage_title;
} else {
if (screenTitle == -1) {
screenTitle = R.string.all_apps;
@@ -1126,6 +1149,8 @@ public class ManageApplications extends InstrumentedFragment
mExtraInfoBridge = new AppStateMediaManagementAppsBridge(mContext, mState, this);
} else if (mManageApplications.mListType == LIST_TYPE_APPS_LOCALE) {
mExtraInfoBridge = new AppStateLocaleBridge(mContext, mState, this);
+ } else if (mManageApplications.mListType == LIST_TYPE_BATTERY_OPTIMIZATION) {
+ mExtraInfoBridge = new AppStateAppBatteryUsageBridge(mContext, mState, this);
} else {
mExtraInfoBridge = null;
}
@@ -1157,21 +1182,24 @@ public class ManageApplications extends InstrumentedFragment
public void setFilter(AppFilterItem appFilter) {
mAppFilter = appFilter;
+ final int filterType = appFilter.getFilterType();
// Notification filters require resorting the list
if (mManageApplications.mListType == LIST_TYPE_NOTIFICATION) {
- if (FILTER_APPS_FREQUENT == appFilter.getFilterType()) {
+ if (FILTER_APPS_FREQUENT == filterType) {
rebuild(R.id.sort_order_frequent_notification, false);
- } else if (FILTER_APPS_RECENT == appFilter.getFilterType()) {
+ } else if (FILTER_APPS_RECENT == filterType) {
rebuild(R.id.sort_order_recent_notification, false);
- } else if (FILTER_APPS_BLOCKED == appFilter.getFilterType()) {
+ } else if (FILTER_APPS_BLOCKED == filterType) {
rebuild(R.id.sort_order_alpha, true);
} else {
rebuild(R.id.sort_order_alpha, true);
}
- } else {
- rebuild();
+ return;
+ } else if (mManageApplications.mListType == LIST_TYPE_BATTERY_OPTIMIZATION) {
+ logAppBatteryUsage(filterType);
}
+ rebuild();
}
public void resume(int sort) {
@@ -1305,6 +1333,26 @@ public class ManageApplications extends InstrumentedFragment
});
}
+ private void logAppBatteryUsage(int filterType) {
+ switch (filterType) {
+ case FILTER_APPS_BATTERY_UNRESTRICTED:
+ logAction(SettingsEnums.ACTION_BATTERY_OPTIMIZED_APPS_FILTER_UNRESTRICTED);
+ break;
+ case FILTER_APPS_BATTERY_OPTIMIZED:
+ logAction(SettingsEnums.ACTION_BATTERY_OPTIMIZED_APPS_FILTER_OPTIMIZED);
+ break;
+ case FILTER_APPS_BATTERY_RESTRICTED:
+ logAction(SettingsEnums.ACTION_BATTERY_OPTIMIZED_APPS_FILTER_RESTRICTED);
+ break;
+ default:
+ logAction(SettingsEnums.ACTION_BATTERY_OPTIMIZED_APPS_FILTER_ALL_APPS);
+ }
+ }
+
+ private void logAction(int action) {
+ mManageApplications.mMetricsFeatureProvider.action(mContext, action);
+ }
+
@VisibleForTesting
void filterSearch(String query) {
if (mSearchFilter == null) {
@@ -1511,6 +1559,7 @@ public class ManageApplications extends InstrumentedFragment
/**
* Check item in the list shall enable or disable.
+ *
* @param position The item position in the list
*/
public boolean isEnabled(int position) {
@@ -1623,6 +1672,9 @@ public class ManageApplications extends InstrumentedFragment
case LIST_TYPE_APPS_LOCALE:
holder.setSummary(AppLocaleDetails.getSummary(mContext, entry));
break;
+ case LIST_TYPE_BATTERY_OPTIMIZATION:
+ holder.setSummary(R.string.app_battery_usage_summary);
+ break;
default:
holder.updateSizeText(entry, mManageApplications.mInvalidSizeStr, mWhichSize);
break;
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index db98a4c6376..f6ed2a1a320 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -44,15 +44,16 @@ import com.android.settings.core.SubSettingLauncher;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.fuelgauge.batterytip.BatteryTipPreferenceController;
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
-import com.android.settings.overlay.FeatureFactory;
import com.android.settings.fuelgauge.batteryusage.BatteryDiffEntry;
import com.android.settings.fuelgauge.batteryusage.BatteryEntry;
import com.android.settings.fuelgauge.batteryusage.BatteryHistEntry;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.EntityHeaderController;
import com.android.settingslib.HelpUtils;
import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.core.instrumentation.Instrumentable;
import com.android.settingslib.utils.StringUtil;
import com.android.settingslib.widget.FooterPreference;
import com.android.settingslib.widget.LayoutPreference;
@@ -222,8 +223,11 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
return UserHandle.getUserId(batteryEntry.getUid());
}
- public static void startBatteryDetailPage(Activity caller,
- InstrumentedPreferenceFragment fragment, String packageName) {
+ /**
+ * Start packageName's battery detail page.
+ */
+ public static void startBatteryDetailPage(
+ Activity caller, Instrumentable instrumentable, String packageName) {
final Bundle args = new Bundle(3);
final PackageManager packageManager = caller.getPackageManager();
args.putString(EXTRA_PACKAGE_NAME, packageName);
@@ -238,7 +242,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
.setDestination(AdvancedPowerUsageDetail.class.getName())
.setTitleRes(R.string.battery_details_title)
.setArguments(args)
- .setSourceMetricsCategory(fragment.getMetricsCategory())
+ .setSourceMetricsCategory(instrumentable.getMetricsCategory())
.launch();
}
diff --git a/src/com/android/settings/fuelgauge/RestrictAppPreferenceController.java b/src/com/android/settings/fuelgauge/RestrictAppPreferenceController.java
index b960d4c4e06..b85db40d954 100644
--- a/src/com/android/settings/fuelgauge/RestrictAppPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/RestrictAppPreferenceController.java
@@ -46,12 +46,15 @@ public class RestrictAppPreferenceController extends BasePreferenceController {
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 @@ public class RestrictAppPreferenceController extends BasePreferenceController {
@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 d920a8ef777..d508603c772 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryManagerPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryManagerPreferenceController.java
@@ -36,6 +36,7 @@ public class BatteryManagerPreferenceController extends BasePreferenceController
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 @@ public class BatteryManagerPreferenceController extends BasePreferenceController
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 @@ public class BatteryManagerPreferenceController extends BasePreferenceController
@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
diff --git a/tests/unit/src/com/android/settings/applications/manageapplications/AppFilterRegistryTest.java b/tests/unit/src/com/android/settings/applications/manageapplications/AppFilterRegistryTest.java
index 4c271c64e52..13bc3dba014 100644
--- a/tests/unit/src/com/android/settings/applications/manageapplications/AppFilterRegistryTest.java
+++ b/tests/unit/src/com/android/settings/applications/manageapplications/AppFilterRegistryTest.java
@@ -18,6 +18,7 @@ package com.android.settings.applications.manageapplications;
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_ALARMS_AND_REMINDERS;
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_ALL;
+import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_BATTERY_OPTIMIZED;
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_INSTALL_SOURCES;
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_MEDIA_MANAGEMENT;
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_POWER_ALLOWLIST;
@@ -26,6 +27,7 @@ import static com.android.settings.applications.manageapplications.AppFilterRegi
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_WITH_OVERLAY;
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_WRITE_SETTINGS;
import static com.android.settings.applications.manageapplications.ManageApplications.LIST_TYPE_ALARMS_AND_REMINDERS;
+import static com.android.settings.applications.manageapplications.ManageApplications.LIST_TYPE_BATTERY_OPTIMIZATION;
import static com.android.settings.applications.manageapplications.ManageApplications.LIST_TYPE_GAMES;
import static com.android.settings.applications.manageapplications.ManageApplications.LIST_TYPE_HIGH_POWER;
import static com.android.settings.applications.manageapplications.ManageApplications.LIST_TYPE_MAIN;
@@ -66,6 +68,8 @@ public class AppFilterRegistryTest {
assertThat(registry.getDefaultFilterType(LIST_TYPE_MEDIA_MANAGEMENT_APPS))
.isEqualTo(FILTER_APPS_MEDIA_MANAGEMENT);
+ assertThat(registry.getDefaultFilterType(LIST_TYPE_BATTERY_OPTIMIZATION))
+ .isEqualTo(FILTER_APPS_BATTERY_OPTIMIZED);
assertThat(registry.getDefaultFilterType(LIST_TYPE_MAIN)).isEqualTo(FILTER_APPS_ALL);
assertThat(registry.getDefaultFilterType(LIST_TYPE_NOTIFICATION))