Merge changes from topic "app_battery_usage" into tm-qpr-dev
* changes: Fix loading bug when switching filters. Align strings and UX across the different pages. Move restricted apps page to new battery optimization page. Add Apps > Battery optimization page implementation.
This commit is contained in:
@@ -633,4 +633,7 @@
|
|||||||
<item>@string/config_settingsintelligence_package_name</item>
|
<item>@string/config_settingsintelligence_package_name</item>
|
||||||
<item>android.uid.system:1000</item>
|
<item>android.uid.system:1000</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
|
<!-- Whether to enable the app battery usage list page feature. -->
|
||||||
|
<bool name="config_app_battery_usage_list_enabled">false</bool>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -6368,7 +6368,7 @@
|
|||||||
<string name="advanced_battery_preference_summary">View usage from last full charge</string>
|
<string name="advanced_battery_preference_summary">View usage from last full charge</string>
|
||||||
|
|
||||||
<!-- Activity title for battery usage details for an app. or power consumer -->
|
<!-- Activity title for battery usage details for an app. or power consumer -->
|
||||||
<string name="battery_details_title">Battery usage</string>
|
<string name="battery_details_title">App battery usage</string>
|
||||||
<!-- Subtitle for application/subsystem details -->
|
<!-- Subtitle for application/subsystem details -->
|
||||||
<string name="details_subtitle">Use details</string>
|
<string name="details_subtitle">Use details</string>
|
||||||
<!-- Subtitle for possible options -->
|
<!-- Subtitle for possible options -->
|
||||||
@@ -11794,6 +11794,21 @@
|
|||||||
<!-- [CHAR_LIMIT=NONE] Label for when app is ignoring battery optimizations -->
|
<!-- [CHAR_LIMIT=NONE] Label for when app is ignoring battery optimizations -->
|
||||||
<string name="not_battery_optimizing">Not using battery optimization</string>
|
<string name="not_battery_optimizing">Not using battery optimization</string>
|
||||||
|
|
||||||
|
<!-- Preference title for battery usage list page[CHAR_LIMIT=50]-->
|
||||||
|
<string name="app_battery_usage_title">App battery usage</string>
|
||||||
|
|
||||||
|
<!-- Preference summary for battery usage list page[CHAR_LIMIT=50]-->
|
||||||
|
<string name="app_battery_usage_summary">Set battery usage for apps</string>
|
||||||
|
|
||||||
|
<!-- Filter title for battery unrestricted[CHAR_LIMIT=50]-->
|
||||||
|
<string name="filter_battery_unrestricted_title">Unrestricted</string>
|
||||||
|
|
||||||
|
<!-- Filter title for battery optimized[CHAR_LIMIT=50]-->
|
||||||
|
<string name="filter_battery_optimized_title">Optimized</string>
|
||||||
|
|
||||||
|
<!-- Filter title for battery restricted[CHAR_LIMIT=50]-->
|
||||||
|
<string name="filter_battery_restricted_title">Restricted</string>
|
||||||
|
|
||||||
<!-- Text for the setting on whether you can type text into notifications without unlocking the device. -->
|
<!-- Text for the setting on whether you can type text into notifications without unlocking the device. -->
|
||||||
<string name="lockscreen_remote_input">If device is locked, prevent typing replies or other text in notifications</string>
|
<string name="lockscreen_remote_input">If device is locked, prevent typing replies or other text in notifications</string>
|
||||||
|
|
||||||
|
@@ -85,7 +85,7 @@
|
|||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:key="battery"
|
android:key="battery"
|
||||||
android:title="@string/power_usage_summary_title"
|
android:title="@string/app_battery_usage_title"
|
||||||
android:summary="@string/summary_placeholder" />
|
android:summary="@string/summary_placeholder" />
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
|
@@ -76,6 +76,18 @@
|
|||||||
<intent android:action="android.intent.action.MANAGE_UNUSED_APPS"/>
|
<intent android:action="android.intent.action.MANAGE_UNUSED_APPS"/>
|
||||||
</Preference>
|
</Preference>
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
android:key="app_battery_usage"
|
||||||
|
android:order="17"
|
||||||
|
android:title="@string/app_battery_usage_title"
|
||||||
|
android:summary="@string/app_battery_usage_summary"
|
||||||
|
settings:controller="com.android.settings.applications.AppBatteryUsagePreferenceController"
|
||||||
|
android:fragment="com.android.settings.applications.manageapplications.ManageApplications">
|
||||||
|
<extra
|
||||||
|
android:name="classname"
|
||||||
|
android:value="com.android.settings.Settings$AppBatteryUsageActivity"/>
|
||||||
|
</Preference>
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:key="special_access"
|
android:key="special_access"
|
||||||
android:fragment="com.android.settings.applications.specialaccess.SpecialAccessSettings"
|
android:fragment="com.android.settings.applications.specialaccess.SpecialAccessSettings"
|
||||||
|
@@ -27,9 +27,6 @@
|
|||||||
<com.android.settingslib.widget.ActionButtonsPreference
|
<com.android.settingslib.widget.ActionButtonsPreference
|
||||||
android:key="action_buttons"/>
|
android:key="action_buttons"/>
|
||||||
|
|
||||||
<PreferenceCategory
|
|
||||||
android:title="@string/battery_detail_manage_title">
|
|
||||||
|
|
||||||
<com.android.settingslib.widget.SelectorWithWidgetPreference
|
<com.android.settingslib.widget.SelectorWithWidgetPreference
|
||||||
android:key="unrestricted_pref"
|
android:key="unrestricted_pref"
|
||||||
android:summary="@string/manager_battery_usage_unrestricted_summary"
|
android:summary="@string/manager_battery_usage_unrestricted_summary"
|
||||||
@@ -48,8 +45,6 @@
|
|||||||
android:title="@string/manager_battery_usage_restricted_title"
|
android:title="@string/manager_battery_usage_restricted_title"
|
||||||
settings:controller="com.android.settings.fuelgauge.RestrictedPreferenceController"/>
|
settings:controller="com.android.settings.fuelgauge.RestrictedPreferenceController"/>
|
||||||
|
|
||||||
</PreferenceCategory>
|
|
||||||
|
|
||||||
<com.android.settingslib.widget.FooterPreference
|
<com.android.settingslib.widget.FooterPreference
|
||||||
android:key="app_usage_footer_preference"
|
android:key="app_usage_footer_preference"
|
||||||
android:title="@string/manager_battery_usage_footer"
|
android:title="@string/manager_battery_usage_footer"
|
||||||
|
@@ -326,6 +326,8 @@ public class Settings extends SettingsActivity {
|
|||||||
public static class ChangeWifiStateActivity extends SettingsActivity { /* empty */ }
|
public static class ChangeWifiStateActivity extends SettingsActivity { /* empty */ }
|
||||||
public static class AppDrawOverlaySettingsActivity extends SettingsActivity { /* empty */ }
|
public static class AppDrawOverlaySettingsActivity extends SettingsActivity { /* empty */ }
|
||||||
public static class AppWriteSettingsActivity extends SettingsActivity { /* empty */ }
|
public static class AppWriteSettingsActivity 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 ManageExternalSourcesActivity extends SettingsActivity {/* empty */ }
|
||||||
public static class ManageAppExternalSourcesActivity extends SettingsActivity { /* empty */ }
|
public static class ManageAppExternalSourcesActivity extends SettingsActivity { /* empty */ }
|
||||||
|
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@@ -0,0 +1,180 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 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.annotation.IntDef;
|
||||||
|
import android.app.AppOpsManager;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.android.settingslib.applications.ApplicationsState;
|
||||||
|
import com.android.settingslib.applications.ApplicationsState.AppEntry;
|
||||||
|
import com.android.settingslib.applications.ApplicationsState.AppFilter;
|
||||||
|
import com.android.settingslib.fuelgauge.PowerAllowlistBackend;
|
||||||
|
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class for bridging the app battery usage information to ApplicationState.
|
||||||
|
*/
|
||||||
|
public class AppStateAppBatteryUsageBridge extends AppStateBaseBridge {
|
||||||
|
private static final String TAG = AppStateAppBatteryUsageBridge.class.getSimpleName();
|
||||||
|
static final boolean DEBUG = Build.IS_DEBUGGABLE;
|
||||||
|
|
||||||
|
private final Context mContext;
|
||||||
|
private final AppOpsManager mAppOpsManager;
|
||||||
|
private final PowerAllowlistBackend mPowerAllowlistBackend;
|
||||||
|
|
||||||
|
private static final int MODE_UNKNOWN = 0;
|
||||||
|
private static final int MODE_UNRESTRICTED = 1;
|
||||||
|
private static final int MODE_OPTIMIZED = 2;
|
||||||
|
private static final int MODE_RESTRICTED = 3;
|
||||||
|
|
||||||
|
@IntDef(
|
||||||
|
prefix = {"MODE_"},
|
||||||
|
value = {
|
||||||
|
MODE_UNKNOWN,
|
||||||
|
MODE_RESTRICTED,
|
||||||
|
MODE_UNRESTRICTED,
|
||||||
|
MODE_OPTIMIZED,
|
||||||
|
})
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
@interface OptimizationMode {
|
||||||
|
}
|
||||||
|
|
||||||
|
public AppStateAppBatteryUsageBridge(
|
||||||
|
Context context, ApplicationsState appState, Callback callback) {
|
||||||
|
super(appState, callback);
|
||||||
|
mContext = context;
|
||||||
|
mAppOpsManager = context.getSystemService(AppOpsManager.class);
|
||||||
|
mPowerAllowlistBackend = PowerAllowlistBackend.getInstance(mContext);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void updateExtraInfo(AppEntry app, String pkg, int uid) {
|
||||||
|
app.extraInfo = getAppBatteryUsageState(pkg, uid);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void loadAllExtraInfo() {
|
||||||
|
if (DEBUG) {
|
||||||
|
Log.d(TAG, "Start loadAllExtraInfo()");
|
||||||
|
}
|
||||||
|
mAppSession.getAllApps().stream().forEach(appEntry ->
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -20,6 +20,7 @@ import androidx.annotation.IntDef;
|
|||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.applications.AppStateAlarmsAndRemindersBridge;
|
import com.android.settings.applications.AppStateAlarmsAndRemindersBridge;
|
||||||
|
import com.android.settings.applications.AppStateAppBatteryUsageBridge;
|
||||||
import com.android.settings.applications.AppStateInstallAppsBridge;
|
import com.android.settings.applications.AppStateInstallAppsBridge;
|
||||||
import com.android.settings.applications.AppStateLocaleBridge;
|
import com.android.settings.applications.AppStateLocaleBridge;
|
||||||
import com.android.settings.applications.AppStateManageExternalStorageBridge;
|
import com.android.settings.applications.AppStateManageExternalStorageBridge;
|
||||||
@@ -37,7 +38,8 @@ import com.android.settingslib.applications.ApplicationsState;
|
|||||||
*/
|
*/
|
||||||
public class AppFilterRegistry {
|
public class AppFilterRegistry {
|
||||||
|
|
||||||
@IntDef(value = {
|
@IntDef(
|
||||||
|
value = {
|
||||||
FILTER_APPS_POWER_ALLOWLIST,
|
FILTER_APPS_POWER_ALLOWLIST,
|
||||||
FILTER_APPS_POWER_ALLOWLIST_ALL,
|
FILTER_APPS_POWER_ALLOWLIST_ALL,
|
||||||
FILTER_APPS_ALL,
|
FILTER_APPS_ALL,
|
||||||
@@ -56,9 +58,11 @@ public class AppFilterRegistry {
|
|||||||
FILTER_ALARMS_AND_REMINDERS,
|
FILTER_ALARMS_AND_REMINDERS,
|
||||||
FILTER_APPS_MEDIA_MANAGEMENT,
|
FILTER_APPS_MEDIA_MANAGEMENT,
|
||||||
FILTER_APPS_LOCALE,
|
FILTER_APPS_LOCALE,
|
||||||
|
FILTER_APPS_BATTERY_UNRESTRICTED,
|
||||||
|
FILTER_APPS_BATTERY_OPTIMIZED,
|
||||||
|
FILTER_APPS_BATTERY_RESTRICTED,
|
||||||
})
|
})
|
||||||
@interface FilterType {
|
@interface FilterType {}
|
||||||
}
|
|
||||||
|
|
||||||
// Filter options used for displayed list of applications
|
// Filter options used for displayed list of applications
|
||||||
// Filters will appear sorted based on their value defined here.
|
// 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_ALARMS_AND_REMINDERS = 18;
|
||||||
public static final int FILTER_APPS_MEDIA_MANAGEMENT = 19;
|
public static final int FILTER_APPS_MEDIA_MANAGEMENT = 19;
|
||||||
public static final int FILTER_APPS_LOCALE = 20;
|
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 static AppFilterRegistry sRegistry;
|
||||||
|
|
||||||
private final AppFilterItem[] mFilters;
|
private final AppFilterItem[] mFilters;
|
||||||
|
|
||||||
private AppFilterRegistry() {
|
private AppFilterRegistry() {
|
||||||
mFilters = new AppFilterItem[21];
|
mFilters = new AppFilterItem[NUM_FILTER_ENTRIES];
|
||||||
|
|
||||||
// High power allowlist, on
|
// High power allowlist, on
|
||||||
mFilters[FILTER_APPS_POWER_ALLOWLIST] = new AppFilterItem(
|
mFilters[FILTER_APPS_POWER_ALLOWLIST] = new AppFilterItem(
|
||||||
@@ -212,6 +220,28 @@ public class AppFilterRegistry {
|
|||||||
AppStateLocaleBridge.FILTER_APPS_LOCALE,
|
AppStateLocaleBridge.FILTER_APPS_LOCALE,
|
||||||
FILTER_APPS_LOCALE,
|
FILTER_APPS_LOCALE,
|
||||||
R.string.app_locale_picker_title);
|
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;
|
return FILTER_APPS_MEDIA_MANAGEMENT;
|
||||||
case ManageApplications.LIST_TYPE_APPS_LOCALE:
|
case ManageApplications.LIST_TYPE_APPS_LOCALE:
|
||||||
return FILTER_APPS_LOCALE;
|
return FILTER_APPS_LOCALE;
|
||||||
|
case ManageApplications.LIST_TYPE_BATTERY_OPTIMIZATION:
|
||||||
|
return FILTER_APPS_BATTERY_OPTIMIZED;
|
||||||
default:
|
default:
|
||||||
return FILTER_APPS_ALL;
|
return FILTER_APPS_ALL;
|
||||||
}
|
}
|
||||||
|
@@ -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.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_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_BLOCKED;
|
||||||
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_DISABLED;
|
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_DISABLED;
|
||||||
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_ENABLED;
|
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.Utils;
|
||||||
import com.android.settings.applications.AppInfoBase;
|
import com.android.settings.applications.AppInfoBase;
|
||||||
import com.android.settings.applications.AppStateAlarmsAndRemindersBridge;
|
import com.android.settings.applications.AppStateAlarmsAndRemindersBridge;
|
||||||
|
import com.android.settings.applications.AppStateAppBatteryUsageBridge;
|
||||||
import com.android.settings.applications.AppStateAppOpsBridge.PermissionState;
|
import com.android.settings.applications.AppStateAppOpsBridge.PermissionState;
|
||||||
import com.android.settings.applications.AppStateBaseBridge;
|
import com.android.settings.applications.AppStateBaseBridge;
|
||||||
import com.android.settings.applications.AppStateInstallAppsBridge;
|
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.InstrumentedFragment;
|
||||||
import com.android.settings.core.SubSettingLauncher;
|
import com.android.settings.core.SubSettingLauncher;
|
||||||
import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
|
import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
|
||||||
|
import com.android.settings.fuelgauge.AdvancedPowerUsageDetail;
|
||||||
import com.android.settings.fuelgauge.HighPowerDetail;
|
import com.android.settings.fuelgauge.HighPowerDetail;
|
||||||
import com.android.settings.localepicker.AppLocalePickerActivity;
|
import com.android.settings.localepicker.AppLocalePickerActivity;
|
||||||
import com.android.settings.notification.ConfigureNotificationSettings;
|
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_ALARMS_AND_REMINDERS = 12;
|
||||||
public static final int LIST_TYPE_MEDIA_MANAGEMENT_APPS = 13;
|
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_APPS_LOCALE = 14;
|
||||||
|
public static final int LIST_TYPE_BATTERY_OPTIMIZATION = 15;
|
||||||
|
|
||||||
// List types that should show instant apps.
|
// List types that should show instant apps.
|
||||||
public static final Set<Integer> LIST_TYPES_WITH_INSTANT = new ArraySet<>(Arrays.asList(
|
public static final Set<Integer> LIST_TYPES_WITH_INSTANT = new ArraySet<>(Arrays.asList(
|
||||||
@@ -327,6 +333,8 @@ public class ManageApplications extends InstrumentedFragment
|
|||||||
}
|
}
|
||||||
} else if (className.equals(AppLocaleDetails.class.getName())) {
|
} else if (className.equals(AppLocaleDetails.class.getName())) {
|
||||||
mListType = LIST_TYPE_APPS_LOCALE;
|
mListType = LIST_TYPE_APPS_LOCALE;
|
||||||
|
} else if (className.equals(Settings.AppBatteryUsageActivity.class.getName())) {
|
||||||
|
mListType = LIST_TYPE_BATTERY_OPTIMIZATION;
|
||||||
} else {
|
} else {
|
||||||
mListType = LIST_TYPE_MAIN;
|
mListType = LIST_TYPE_MAIN;
|
||||||
}
|
}
|
||||||
@@ -460,6 +468,12 @@ public class ManageApplications extends InstrumentedFragment
|
|||||||
if (mListType == LIST_TYPE_HIGH_POWER) {
|
if (mListType == LIST_TYPE_HIGH_POWER) {
|
||||||
mFilterAdapter.enableFilter(FILTER_APPS_POWER_ALLOWLIST_ALL);
|
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();
|
setCompositeFilter();
|
||||||
}
|
}
|
||||||
@@ -511,6 +525,8 @@ public class ManageApplications extends InstrumentedFragment
|
|||||||
return SettingsEnums.MEDIA_MANAGEMENT_APPS;
|
return SettingsEnums.MEDIA_MANAGEMENT_APPS;
|
||||||
case LIST_TYPE_APPS_LOCALE:
|
case LIST_TYPE_APPS_LOCALE:
|
||||||
return SettingsEnums.APPS_LOCALE_LIST;
|
return SettingsEnums.APPS_LOCALE_LIST;
|
||||||
|
case LIST_TYPE_BATTERY_OPTIMIZATION:
|
||||||
|
return SettingsEnums.BATTERY_OPTIMIZED_APPS_LIST;
|
||||||
default:
|
default:
|
||||||
return SettingsEnums.PAGE_UNKNOWN;
|
return SettingsEnums.PAGE_UNKNOWN;
|
||||||
}
|
}
|
||||||
@@ -641,6 +657,10 @@ public class ManageApplications extends InstrumentedFragment
|
|||||||
intent.putExtra(AppInfoBase.ARG_PACKAGE_UID, mCurrentUid);
|
intent.putExtra(AppInfoBase.ARG_PACKAGE_UID, mCurrentUid);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
break;
|
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
|
// 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
|
// 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.
|
// app. Maybe when they load the list of apps that contains managed profile apps.
|
||||||
@@ -900,6 +920,7 @@ public class ManageApplications extends InstrumentedFragment
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a resource ID of title based on what type of app list is
|
* 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 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
|
||||||
*/
|
*/
|
||||||
@@ -934,6 +955,8 @@ public class ManageApplications extends InstrumentedFragment
|
|||||||
screenTitle = R.string.app_notifications_title;
|
screenTitle = R.string.app_notifications_title;
|
||||||
} else if (className.equals(AppLocaleDetails.class.getName())) {
|
} else if (className.equals(AppLocaleDetails.class.getName())) {
|
||||||
screenTitle = R.string.app_locales_picker_menu_title;
|
screenTitle = R.string.app_locales_picker_menu_title;
|
||||||
|
} else if (className.equals(Settings.AppBatteryUsageActivity.class.getName())) {
|
||||||
|
screenTitle = R.string.app_battery_usage_title;
|
||||||
} else {
|
} else {
|
||||||
if (screenTitle == -1) {
|
if (screenTitle == -1) {
|
||||||
screenTitle = R.string.all_apps;
|
screenTitle = R.string.all_apps;
|
||||||
@@ -1126,6 +1149,8 @@ public class ManageApplications extends InstrumentedFragment
|
|||||||
mExtraInfoBridge = new AppStateMediaManagementAppsBridge(mContext, mState, this);
|
mExtraInfoBridge = new AppStateMediaManagementAppsBridge(mContext, mState, this);
|
||||||
} else if (mManageApplications.mListType == LIST_TYPE_APPS_LOCALE) {
|
} else if (mManageApplications.mListType == LIST_TYPE_APPS_LOCALE) {
|
||||||
mExtraInfoBridge = new AppStateLocaleBridge(mContext, mState, this);
|
mExtraInfoBridge = new AppStateLocaleBridge(mContext, mState, this);
|
||||||
|
} else if (mManageApplications.mListType == LIST_TYPE_BATTERY_OPTIMIZATION) {
|
||||||
|
mExtraInfoBridge = new AppStateAppBatteryUsageBridge(mContext, mState, this);
|
||||||
} else {
|
} else {
|
||||||
mExtraInfoBridge = null;
|
mExtraInfoBridge = null;
|
||||||
}
|
}
|
||||||
@@ -1157,22 +1182,25 @@ public class ManageApplications extends InstrumentedFragment
|
|||||||
|
|
||||||
public void setFilter(AppFilterItem appFilter) {
|
public void setFilter(AppFilterItem appFilter) {
|
||||||
mAppFilter = appFilter;
|
mAppFilter = appFilter;
|
||||||
|
final int filterType = appFilter.getFilterType();
|
||||||
|
|
||||||
// Notification filters require resorting the list
|
// Notification filters require resorting the list
|
||||||
if (mManageApplications.mListType == LIST_TYPE_NOTIFICATION) {
|
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);
|
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);
|
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);
|
rebuild(R.id.sort_order_alpha, true);
|
||||||
} else {
|
} else {
|
||||||
rebuild(R.id.sort_order_alpha, true);
|
rebuild(R.id.sort_order_alpha, true);
|
||||||
}
|
}
|
||||||
} else {
|
return;
|
||||||
|
} else if (mManageApplications.mListType == LIST_TYPE_BATTERY_OPTIMIZATION) {
|
||||||
|
logAppBatteryUsage(filterType);
|
||||||
|
}
|
||||||
rebuild();
|
rebuild();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void resume(int sort) {
|
public void resume(int sort) {
|
||||||
if (DEBUG) Log.i(TAG, "Resume! mResumed=" + mResumed);
|
if (DEBUG) Log.i(TAG, "Resume! mResumed=" + mResumed);
|
||||||
@@ -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
|
@VisibleForTesting
|
||||||
void filterSearch(String query) {
|
void filterSearch(String query) {
|
||||||
if (mSearchFilter == null) {
|
if (mSearchFilter == null) {
|
||||||
@@ -1511,6 +1559,7 @@ public class ManageApplications extends InstrumentedFragment
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Check item in the list shall enable or disable.
|
* Check item in the list shall enable or disable.
|
||||||
|
*
|
||||||
* @param position The item position in the list
|
* @param position The item position in the list
|
||||||
*/
|
*/
|
||||||
public boolean isEnabled(int position) {
|
public boolean isEnabled(int position) {
|
||||||
@@ -1623,6 +1672,9 @@ public class ManageApplications extends InstrumentedFragment
|
|||||||
case LIST_TYPE_APPS_LOCALE:
|
case LIST_TYPE_APPS_LOCALE:
|
||||||
holder.setSummary(AppLocaleDetails.getSummary(mContext, entry));
|
holder.setSummary(AppLocaleDetails.getSummary(mContext, entry));
|
||||||
break;
|
break;
|
||||||
|
case LIST_TYPE_BATTERY_OPTIMIZATION:
|
||||||
|
holder.setSummary(R.string.app_battery_usage_summary);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
holder.updateSizeText(entry, mManageApplications.mInvalidSizeStr, mWhichSize);
|
holder.updateSizeText(entry, mManageApplications.mInvalidSizeStr, mWhichSize);
|
||||||
break;
|
break;
|
||||||
|
@@ -44,15 +44,16 @@ import com.android.settings.core.SubSettingLauncher;
|
|||||||
import com.android.settings.dashboard.DashboardFragment;
|
import com.android.settings.dashboard.DashboardFragment;
|
||||||
import com.android.settings.fuelgauge.batterytip.BatteryTipPreferenceController;
|
import com.android.settings.fuelgauge.batterytip.BatteryTipPreferenceController;
|
||||||
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
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.BatteryDiffEntry;
|
||||||
import com.android.settings.fuelgauge.batteryusage.BatteryEntry;
|
import com.android.settings.fuelgauge.batteryusage.BatteryEntry;
|
||||||
import com.android.settings.fuelgauge.batteryusage.BatteryHistEntry;
|
import com.android.settings.fuelgauge.batteryusage.BatteryHistEntry;
|
||||||
|
import com.android.settings.overlay.FeatureFactory;
|
||||||
import com.android.settings.widget.EntityHeaderController;
|
import com.android.settings.widget.EntityHeaderController;
|
||||||
import com.android.settingslib.HelpUtils;
|
import com.android.settingslib.HelpUtils;
|
||||||
import com.android.settingslib.applications.AppUtils;
|
import com.android.settingslib.applications.AppUtils;
|
||||||
import com.android.settingslib.applications.ApplicationsState;
|
import com.android.settingslib.applications.ApplicationsState;
|
||||||
import com.android.settingslib.core.AbstractPreferenceController;
|
import com.android.settingslib.core.AbstractPreferenceController;
|
||||||
|
import com.android.settingslib.core.instrumentation.Instrumentable;
|
||||||
import com.android.settingslib.utils.StringUtil;
|
import com.android.settingslib.utils.StringUtil;
|
||||||
import com.android.settingslib.widget.FooterPreference;
|
import com.android.settingslib.widget.FooterPreference;
|
||||||
import com.android.settingslib.widget.LayoutPreference;
|
import com.android.settingslib.widget.LayoutPreference;
|
||||||
@@ -222,8 +223,11 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
|
|||||||
return UserHandle.getUserId(batteryEntry.getUid());
|
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 Bundle args = new Bundle(3);
|
||||||
final PackageManager packageManager = caller.getPackageManager();
|
final PackageManager packageManager = caller.getPackageManager();
|
||||||
args.putString(EXTRA_PACKAGE_NAME, packageName);
|
args.putString(EXTRA_PACKAGE_NAME, packageName);
|
||||||
@@ -238,7 +242,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
|
|||||||
.setDestination(AdvancedPowerUsageDetail.class.getName())
|
.setDestination(AdvancedPowerUsageDetail.class.getName())
|
||||||
.setTitleRes(R.string.battery_details_title)
|
.setTitleRes(R.string.battery_details_title)
|
||||||
.setArguments(args)
|
.setArguments(args)
|
||||||
.setSourceMetricsCategory(fragment.getMetricsCategory())
|
.setSourceMetricsCategory(instrumentable.getMetricsCategory())
|
||||||
.launch();
|
.launch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -46,12 +46,15 @@ public class RestrictAppPreferenceController extends BasePreferenceController {
|
|||||||
private AppOpsManager mAppOpsManager;
|
private AppOpsManager mAppOpsManager;
|
||||||
private InstrumentedPreferenceFragment mPreferenceFragment;
|
private InstrumentedPreferenceFragment mPreferenceFragment;
|
||||||
private UserManager mUserManager;
|
private UserManager mUserManager;
|
||||||
|
private boolean mEnableAppBatteryUsagePage;
|
||||||
|
|
||||||
public RestrictAppPreferenceController(Context context) {
|
public RestrictAppPreferenceController(Context context) {
|
||||||
super(context, KEY_RESTRICT_APP);
|
super(context, KEY_RESTRICT_APP);
|
||||||
mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
|
mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
|
||||||
mUserManager = context.getSystemService(UserManager.class);
|
mUserManager = context.getSystemService(UserManager.class);
|
||||||
mAppInfos = BatteryTipUtils.getRestrictedAppsList(mAppOpsManager, mUserManager);
|
mAppInfos = BatteryTipUtils.getRestrictedAppsList(mAppOpsManager, mUserManager);
|
||||||
|
mEnableAppBatteryUsagePage =
|
||||||
|
mContext.getResources().getBoolean(R.bool.config_app_battery_usage_list_enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
public RestrictAppPreferenceController(InstrumentedPreferenceFragment preferenceFragment) {
|
public RestrictAppPreferenceController(InstrumentedPreferenceFragment preferenceFragment) {
|
||||||
@@ -61,7 +64,8 @@ public class RestrictAppPreferenceController extends BasePreferenceController {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAvailabilityStatus() {
|
public int getAvailabilityStatus() {
|
||||||
return mAppInfos.size() > 0 ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
|
return mAppInfos.size() > 0 && !mEnableAppBatteryUsagePage ? AVAILABLE
|
||||||
|
: CONDITIONALLY_UNAVAILABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -36,6 +36,7 @@ public class BatteryManagerPreferenceController extends BasePreferenceController
|
|||||||
private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
|
private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
|
||||||
private AppOpsManager mAppOpsManager;
|
private AppOpsManager mAppOpsManager;
|
||||||
private UserManager mUserManager;
|
private UserManager mUserManager;
|
||||||
|
private boolean mEnableAppBatteryUsagePage;
|
||||||
|
|
||||||
public BatteryManagerPreferenceController(Context context) {
|
public BatteryManagerPreferenceController(Context context) {
|
||||||
super(context, KEY_BATTERY_MANAGER);
|
super(context, KEY_BATTERY_MANAGER);
|
||||||
@@ -43,6 +44,8 @@ public class BatteryManagerPreferenceController extends BasePreferenceController
|
|||||||
context).getPowerUsageFeatureProvider(context);
|
context).getPowerUsageFeatureProvider(context);
|
||||||
mAppOpsManager = context.getSystemService(AppOpsManager.class);
|
mAppOpsManager = context.getSystemService(AppOpsManager.class);
|
||||||
mUserManager = context.getSystemService(UserManager.class);
|
mUserManager = context.getSystemService(UserManager.class);
|
||||||
|
mEnableAppBatteryUsagePage =
|
||||||
|
mContext.getResources().getBoolean(R.bool.config_app_battery_usage_list_enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -53,10 +56,13 @@ public class BatteryManagerPreferenceController extends BasePreferenceController
|
|||||||
@Override
|
@Override
|
||||||
public void updateState(Preference preference) {
|
public void updateState(Preference preference) {
|
||||||
super.updateState(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
|
@VisibleForTesting
|
||||||
void updateSummary(Preference preference, int num) {
|
void updateSummary(Preference preference, int num) {
|
||||||
|
@@ -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_ALARMS_AND_REMINDERS;
|
||||||
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_ALL;
|
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_INSTALL_SOURCES;
|
||||||
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_MEDIA_MANAGEMENT;
|
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_MEDIA_MANAGEMENT;
|
||||||
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_POWER_ALLOWLIST;
|
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_WITH_OVERLAY;
|
||||||
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_WRITE_SETTINGS;
|
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_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_GAMES;
|
||||||
import static com.android.settings.applications.manageapplications.ManageApplications.LIST_TYPE_HIGH_POWER;
|
import static com.android.settings.applications.manageapplications.ManageApplications.LIST_TYPE_HIGH_POWER;
|
||||||
import static com.android.settings.applications.manageapplications.ManageApplications.LIST_TYPE_MAIN;
|
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))
|
assertThat(registry.getDefaultFilterType(LIST_TYPE_MEDIA_MANAGEMENT_APPS))
|
||||||
.isEqualTo(FILTER_APPS_MEDIA_MANAGEMENT);
|
.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_MAIN)).isEqualTo(FILTER_APPS_ALL);
|
||||||
assertThat(registry.getDefaultFilterType(LIST_TYPE_NOTIFICATION))
|
assertThat(registry.getDefaultFilterType(LIST_TYPE_NOTIFICATION))
|
||||||
|
Reference in New Issue
Block a user