Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7bfa060c authored by mxyyiyi's avatar mxyyiyi
Browse files

Take as Unrestricted Mode in the UI if current Mode is Unknown.

- Battery usage mode MODE_UNKNOWN is (1) apps in allowlist and (2) app's OP_RUN_ANY_IN_BACKGROUND = MODE_IGNORED.
For this case, mode should be displayed as Unrestricted on UI since it is in allowlist; and should be logged as unknown mode for the potential compatibility issues.

- After Backup & Restore, the MODE_UNKNOWN will be reset to Optimized(Default) Mode on target device.

Bug: 372831500
Test: manual
Test: atest BatteryOptimizeUtilsTest
Test: atest AppOptModeSharedPreferencesUtilsTest
Flag: EXEMPT for simple fix
Change-Id: Ic18e026f71a4a50ffa1711e2ca0782aeb8b33076
parent fdc8eb3e
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -196,7 +196,9 @@ public final class BatteryBackupHelper implements BackupHelper {
                    appOptModeMap.containsKey(info.uid)
                            ? (int) appOptModeMap.get(info.uid).getResetOptimizationMode()
                            : BatteryOptimizeUtils.getAppOptimizationMode(
                                    mode, allowlistedApps.contains(info.packageName));
                                    mode,
                                    allowlistedApps.contains(info.packageName),
                                    /* ignoreUnknownMode= */ false);
            // Ignores default optimized/unknown state or system/default apps.
            if (optimizationMode == BatteryOptimizeUtils.MODE_OPTIMIZED
                    || optimizationMode == BatteryOptimizeUtils.MODE_UNKNOWN
+14 −9
Original line number Diff line number Diff line
@@ -100,7 +100,8 @@ public class BatteryOptimizeUtils {

    /** Gets the {@link OptimizationMode} based on mode and allowed list. */
    @OptimizationMode
    public static int getAppOptimizationMode(int mode, boolean isAllowListed) {
    public static int getAppOptimizationMode(
            int mode, boolean isAllowListed, boolean ignoreUnknownMode) {
        if (!isAllowListed && mode == AppOpsManager.MODE_IGNORED) {
            return MODE_RESTRICTED;
        } else if (isAllowListed && mode == AppOpsManager.MODE_ALLOWED) {
@@ -108,13 +109,15 @@ public class BatteryOptimizeUtils {
        } else if (!isAllowListed && mode == AppOpsManager.MODE_ALLOWED) {
            return MODE_OPTIMIZED;
        } else {
            return MODE_UNKNOWN;
            // MODE_UNKNOWN = isAllowListed + AppOpsManager.MODE_IGNORED
            // Return Unrestricted mode for Unknown mode since it is in allowlist.
            return ignoreUnknownMode ? MODE_UNRESTRICTED : MODE_UNKNOWN;
        }
    }

    /** Gets the {@link OptimizationMode} for associated app. */
    @OptimizationMode
    public int getAppOptimizationMode(boolean refreshList) {
    public int getAppOptimizationMode(boolean refreshList, boolean ignoreUnknownMode) {
        if (refreshList) {
            mPowerAllowListBackend.refreshList();
        }
@@ -127,13 +130,13 @@ public class BatteryOptimizeUtils {
                String.format(
                        "refresh %s state, allowlisted = %s, mode = %d",
                        mPackageName, mAllowListed, mMode));
        return getAppOptimizationMode(mMode, mAllowListed);
        return getAppOptimizationMode(mMode, mAllowListed, ignoreUnknownMode);
    }

    /** Gets the {@link OptimizationMode} for associated app. */
    @OptimizationMode
    public int getAppOptimizationMode() {
        return getAppOptimizationMode(true);
        return getAppOptimizationMode(/* refreshList= */ true, /* ignoreUnknownMode= */ true);
    }

    /** Resets optimization mode for all applications. */
@@ -246,10 +249,11 @@ public class BatteryOptimizeUtils {
            @OptimizationMode
            final int optimizationMode =
                    getAppOptimizationMode(
                            mode, allowlistBackend.isAllowlisted(info.packageName, info.uid));
            // Ignores default optimized/unknown state or system/default apps.
                            mode,
                            allowlistBackend.isAllowlisted(info.packageName, info.uid),
                            /* ignoreUnknownMode= */ false);
            // Ignores default optimized state or system/default apps.
            if (optimizationMode == MODE_OPTIMIZED
                    || optimizationMode == MODE_UNKNOWN
                    || isSystemOrDefaultApp(
                            context, allowlistBackend, info.packageName, info.uid)) {
                continue;
@@ -374,7 +378,8 @@ public class BatteryOptimizeUtils {
                        "\tStandbyMode: %s, allowListed: %s, mode: %s",
                        appStandbyMode,
                        allowListed,
                        getAppOptimizationMode(appStandbyMode, allowListed));
                        getAppOptimizationMode(
                                appStandbyMode, allowListed, /* ignoreUnknownMode= */ false));
    }

    private static @DataChangeReason int toChangeReason(Action action) {
+3 −1
Original line number Diff line number Diff line
@@ -347,7 +347,9 @@ public final class BatterySettingsStorage extends ObservableBackupRestoreStorage
                        appOptModeMap.containsKey(info.uid)
                                ? (int) appOptModeMap.get(info.uid).getResetOptimizationMode()
                                : BatteryOptimizeUtils.getAppOptimizationMode(
                                        mode, mAllowlistedApps.contains(info.packageName));
                                        mode,
                                        mAllowlistedApps.contains(info.packageName),
                                        /* ignoreUnknownMode= */ false);
                // Ignores default optimized/unknown state or system/default apps.
                if (optimizationMode == BatteryOptimizeUtils.MODE_OPTIMIZED
                        || optimizationMode == BatteryOptimizeUtils.MODE_UNKNOWN
+2 −1
Original line number Diff line number Diff line
@@ -51,7 +51,8 @@ final class BatteryOptimizationModeCache {
                    Pair.create(
                            BatteryOptimizationMode.forNumber(
                                    batteryOptimizeUtils.getAppOptimizationMode(
                                            /* refreshList= */ false)),
                                            /* refreshList= */ false,
                                            /* ignoreUnknownMode= */ false)),
                            batteryOptimizeUtils.isOptimizeModeMutable()));
        }
        final Pair<BatteryOptimizationMode, Boolean> batteryOptimizeModeInfo =
+1 −1
Original line number Diff line number Diff line
@@ -107,7 +107,7 @@ class BatteryOptimizationModeAppListModel(
        PowerAllowlistBackend.getInstance(context).refreshList()
        return recordListFlow.filterItem {
            val appOptimizationMode = BatteryOptimizeUtils(context, it.app.uid, it.app.packageName)
                .getAppOptimizationMode(/* refreshList */ false);
                .getAppOptimizationMode(/* refreshList */ false, /* ignoreUnknownMode */ true);
            when (OptimizationModeSpinnerItem.entries.getOrNull(option)) {
                OptimizationModeSpinnerItem.Restricted ->
                    appOptimizationMode == BatteryOptimizeUtils.MODE_RESTRICTED
Loading