Merge "Add a flow to keep special apps in the battery unrestricted mode" into main
This commit is contained in:
committed by
Android (Google) Code Review
commit
0201afb9d5
@@ -529,10 +529,14 @@
|
||||
<item>content://com.android.settings.slices/intent/media_output_indicator</item>
|
||||
</string-array>
|
||||
|
||||
<!-- List containing the apps keep in battery mode = "Optimize" -->
|
||||
<!-- List containing the apps keep in battery mode = "Optimized" -->
|
||||
<string-array name="config_force_battery_optimize_mode_apps" translatable="false">
|
||||
</string-array>
|
||||
|
||||
<!-- List containing the apps keep in battery mode = "Unrestricted" -->
|
||||
<string-array name="config_force_battery_unrestrict_mode_apps" translatable="false">
|
||||
</string-array>
|
||||
|
||||
<!-- Uri to query non-public Slice Uris. -->
|
||||
<string name="config_non_public_slice_query_uri" translatable="false"></string>
|
||||
|
||||
|
@@ -342,7 +342,7 @@ public final class BatteryBackupHelper implements BackupHelper {
|
||||
|
||||
private boolean isSystemOrDefaultApp(String packageName, int uid) {
|
||||
return BatteryOptimizeUtils.isSystemOrDefaultApp(
|
||||
getPowerAllowlistBackend(), packageName, uid);
|
||||
mContext, getPowerAllowlistBackend(), packageName, uid);
|
||||
}
|
||||
|
||||
private ArraySet<ApplicationInfo> getInstalledApplications() {
|
||||
|
@@ -45,6 +45,10 @@ public class BatteryOptimizeUtils {
|
||||
private static final String TAG = "BatteryOptimizeUtils";
|
||||
private static final String UNKNOWN_PACKAGE = "unknown";
|
||||
|
||||
// Avoid reload the data again since it is predefined in the resource/config.
|
||||
private static List<String> sBatteryOptimizeModeList = null;
|
||||
private static List<String> sBatteryUnrestrictModeList = null;
|
||||
|
||||
@VisibleForTesting AppOpsManager mAppOpsManager;
|
||||
@VisibleForTesting BatteryUtils mBatteryUtils;
|
||||
@VisibleForTesting PowerAllowlistBackend mPowerAllowListBackend;
|
||||
@@ -139,7 +143,7 @@ public class BatteryOptimizeUtils {
|
||||
*/
|
||||
public boolean isSystemOrDefaultApp() {
|
||||
mPowerAllowListBackend.refreshList();
|
||||
return isSystemOrDefaultApp(mPowerAllowListBackend, mPackageName, mUid);
|
||||
return isSystemOrDefaultApp(mContext, mPowerAllowListBackend, mPackageName, mUid);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -191,7 +195,8 @@ public class BatteryOptimizeUtils {
|
||||
// Ignores default optimized/unknown state or system/default apps.
|
||||
if (optimizationMode == MODE_OPTIMIZED
|
||||
|| optimizationMode == MODE_UNKNOWN
|
||||
|| isSystemOrDefaultApp(allowlistBackend, info.packageName, info.uid)) {
|
||||
|| isSystemOrDefaultApp(
|
||||
context, allowlistBackend, info.packageName, info.uid)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -211,15 +216,33 @@ public class BatteryOptimizeUtils {
|
||||
}
|
||||
|
||||
static boolean isSystemOrDefaultApp(
|
||||
PowerAllowlistBackend powerAllowlistBackend, String packageName, int uid) {
|
||||
Context context,
|
||||
PowerAllowlistBackend powerAllowlistBackend,
|
||||
String packageName,
|
||||
int uid) {
|
||||
return powerAllowlistBackend.isSysAllowlisted(packageName)
|
||||
// Always forced unrestricted apps are one type of system important apps.
|
||||
|| getForceBatteryUnrestrictModeList(context).contains(packageName)
|
||||
|| powerAllowlistBackend.isDefaultActiveApp(packageName, uid);
|
||||
}
|
||||
|
||||
static List<String> getForceBatteryOptimizeModeList(Context context) {
|
||||
return Arrays.asList(context.getResources().getStringArray(
|
||||
if (sBatteryOptimizeModeList == null) {
|
||||
sBatteryOptimizeModeList = Arrays.asList(
|
||||
context.getResources().getStringArray(
|
||||
R.array.config_force_battery_optimize_mode_apps));
|
||||
}
|
||||
return sBatteryOptimizeModeList;
|
||||
}
|
||||
|
||||
static List<String> getForceBatteryUnrestrictModeList(Context context) {
|
||||
if (sBatteryUnrestrictModeList == null) {
|
||||
sBatteryUnrestrictModeList = Arrays.asList(
|
||||
context.getResources().getStringArray(
|
||||
R.array.config_force_battery_unrestrict_mode_apps));
|
||||
}
|
||||
return sBatteryUnrestrictModeList;
|
||||
}
|
||||
|
||||
private static void setAppUsageStateInternal(
|
||||
Context context, @OptimizationMode int mode, int uid, String packageName,
|
||||
|
@@ -56,12 +56,21 @@ public final class BatterySettingsMigrateChecker extends BroadcastReceiver {
|
||||
/** Avoid users set important apps into the unexpected battery optimize modes */
|
||||
static void verifyBatteryOptimizeModes(Context context) {
|
||||
Log.d(TAG, "invoke verifyOptimizationModes()");
|
||||
verifyBatteryOptimizeModes(context,
|
||||
verifyBatteryOptimizeModeApps(
|
||||
context,
|
||||
BatteryOptimizeUtils.MODE_OPTIMIZED,
|
||||
BatteryOptimizeUtils.getForceBatteryOptimizeModeList(context));
|
||||
verifyBatteryOptimizeModeApps(
|
||||
context,
|
||||
BatteryOptimizeUtils.MODE_UNRESTRICTED,
|
||||
BatteryOptimizeUtils.getForceBatteryUnrestrictModeList(context));
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
static void verifyBatteryOptimizeModes(Context context, List<String> allowList) {
|
||||
static void verifyBatteryOptimizeModeApps(
|
||||
Context context,
|
||||
@BatteryOptimizeUtils.OptimizationMode int optimizationMode,
|
||||
List<String> allowList) {
|
||||
allowList.forEach(packageName -> {
|
||||
final BatteryOptimizeUtils batteryOptimizeUtils =
|
||||
BatteryBackupHelper.newBatteryOptimizeUtils(context, packageName,
|
||||
@@ -69,10 +78,10 @@ public final class BatterySettingsMigrateChecker extends BroadcastReceiver {
|
||||
if (batteryOptimizeUtils == null) {
|
||||
return;
|
||||
}
|
||||
if (batteryOptimizeUtils.getAppOptimizationMode() !=
|
||||
BatteryOptimizeUtils.MODE_OPTIMIZED) {
|
||||
Log.w(TAG, "Reset optimization mode for: " + packageName);
|
||||
batteryOptimizeUtils.setAppUsageState(BatteryOptimizeUtils.MODE_OPTIMIZED,
|
||||
if (batteryOptimizeUtils.getAppOptimizationMode() != optimizationMode) {
|
||||
Log.w(TAG, "Reset " + packageName + " battery mode into " + optimizationMode);
|
||||
batteryOptimizeUtils.setAppUsageState(
|
||||
optimizationMode,
|
||||
BatteryOptimizeHistoricalLogEntry.Action.FORCE_RESET);
|
||||
}
|
||||
});
|
||||
|
@@ -151,12 +151,15 @@ public final class BatterySettingsMigrateCheckerTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void verifyBatteryOptimizeModes_inAllowList_resetOptimizationMode() throws Exception {
|
||||
public void verifyBatteryOptimizeModeApps_inAllowList_resetOptimizationMode()
|
||||
throws Exception {
|
||||
doReturn(BatteryOptimizeUtils.MODE_RESTRICTED).when(mBatteryOptimizeUtils)
|
||||
.getAppOptimizationMode();
|
||||
|
||||
mBatterySettingsMigrateChecker.verifyBatteryOptimizeModes(
|
||||
mContext, Arrays.asList(PACKAGE_NAME));
|
||||
mBatterySettingsMigrateChecker.verifyBatteryOptimizeModeApps(
|
||||
mContext,
|
||||
BatteryOptimizeUtils.MODE_OPTIMIZED,
|
||||
Arrays.asList(PACKAGE_NAME));
|
||||
|
||||
final InOrder inOrder = inOrder(mBatteryOptimizeUtils);
|
||||
inOrder.verify(mBatteryOptimizeUtils).getAppOptimizationMode();
|
||||
@@ -166,23 +169,27 @@ public final class BatterySettingsMigrateCheckerTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void verifyBatteryOptimizeModes_optimizedMode_noAction() throws Exception {
|
||||
public void verifyBatteryOptimizeModeApps_optimizedMode_noAction() throws Exception {
|
||||
doReturn(BatteryOptimizeUtils.MODE_OPTIMIZED).when(mBatteryOptimizeUtils)
|
||||
.getAppOptimizationMode();
|
||||
|
||||
mBatterySettingsMigrateChecker.verifyBatteryOptimizeModes(
|
||||
mContext, Arrays.asList(PACKAGE_NAME));
|
||||
mBatterySettingsMigrateChecker.verifyBatteryOptimizeModeApps(
|
||||
mContext,
|
||||
BatteryOptimizeUtils.MODE_OPTIMIZED,
|
||||
Arrays.asList(PACKAGE_NAME));
|
||||
|
||||
verify(mBatteryOptimizeUtils, never()).setAppUsageState(anyInt(), any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void verifyBatteryOptimizeModes_notInAllowList_noAction() throws Exception {
|
||||
public void verifyBatteryOptimizeModeApps_notInAllowList_noAction() throws Exception {
|
||||
doReturn(BatteryOptimizeUtils.MODE_RESTRICTED).when(mBatteryOptimizeUtils)
|
||||
.getAppOptimizationMode();
|
||||
|
||||
mBatterySettingsMigrateChecker.verifyBatteryOptimizeModes(
|
||||
mContext, new ArrayList<String>());
|
||||
mBatterySettingsMigrateChecker.verifyBatteryOptimizeModeApps(
|
||||
mContext,
|
||||
BatteryOptimizeUtils.MODE_OPTIMIZED,
|
||||
new ArrayList<String>());
|
||||
|
||||
verifyNoInteractions(mBatteryOptimizeUtils);
|
||||
}
|
||||
|
Reference in New Issue
Block a user