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))