Refactor BatteryOptimizeUtils from enum to @IntDef am: 0ab0a3af56

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/15659652

Change-Id: Ia636f4a56ff2b528e8a86d924af00e2a68602b06
This commit is contained in:
ykhung
2021-08-25 02:46:38 +00:00
committed by Automerger Merge Worker
10 changed files with 84 additions and 70 deletions

View File

@@ -37,8 +37,6 @@ import android.util.Log;
import androidx.annotation.VisibleForTesting;
import com.android.settings.fuelgauge.BatteryOptimizeUtils.AppUsageState;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
@@ -135,13 +133,16 @@ public final class BatteryBackupHelper implements BackupHelper {
for (ApplicationInfo info : applications) {
final int mode = appOps.checkOpNoThrow(
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, info.uid, info.packageName);
final AppUsageState state = BatteryOptimizeUtils.getAppUsageState(
@BatteryOptimizeUtils.OptimizationMode
final int optimizationMode = BatteryOptimizeUtils.getAppOptimizationMode(
mode, allowlistedApps.contains(info.packageName));
// Ignores default optimized or unknown state.
if (state == AppUsageState.OPTIMIZED || state == AppUsageState.UNKNOWN) {
if (optimizationMode == BatteryOptimizeUtils.MODE_OPTIMIZED
|| optimizationMode == BatteryOptimizeUtils.MODE_UNKNOWN) {
continue;
}
final String packageOptimizeMode = info.packageName + DELIMITER_MODE + state;
final String packageOptimizeMode =
info.packageName + DELIMITER_MODE + optimizationMode;
builder.append(packageOptimizeMode + DELIMITER);
debugLog(packageOptimizeMode);
}

View File

@@ -16,6 +16,7 @@
package com.android.settings.fuelgauge;
import android.annotation.IntDef;
import android.app.AppOpsManager;
import android.content.Context;
import android.util.Log;
@@ -24,6 +25,9 @@ import androidx.annotation.VisibleForTesting;
import com.android.settingslib.fuelgauge.PowerAllowlistBackend;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/** A utility class for application usage operation. */
public class BatteryOptimizeUtils {
private static final String TAG = "BatteryOptimizeUtils";
@@ -32,21 +36,27 @@ public class BatteryOptimizeUtils {
@VisibleForTesting AppOpsManager mAppOpsManager;
@VisibleForTesting BatteryUtils mBatteryUtils;
@VisibleForTesting PowerAllowlistBackend mPowerAllowListBackend;
private final String mPackageName;
private final int mUid;
private int mMode;
private boolean mAllowListed;
/**
* Usage type of application.
*/
public enum AppUsageState {
UNKNOWN,
RESTRICTED,
UNRESTRICTED,
OPTIMIZED,
}
// Optimization modes.
static final int MODE_UNKNOWN = 0;
static final int MODE_RESTRICTED = 1;
static final int MODE_UNRESTRICTED = 2;
static final int MODE_OPTIMIZED = 3;
@IntDef(prefix = {"MODE_"}, value = {
MODE_UNKNOWN,
MODE_RESTRICTED,
MODE_UNRESTRICTED,
MODE_OPTIMIZED,
})
@Retention(RetentionPolicy.SOURCE)
static @interface OptimizationMode {}
public BatteryOptimizeUtils(Context context, int uid, String packageName) {
mUid = uid;
@@ -59,41 +69,44 @@ public class BatteryOptimizeUtils {
mAllowListed = mPowerAllowListBackend.isAllowlisted(mPackageName);
}
/** Gets the {@link AppUsageState} based on mode and allowed list. */
public static AppUsageState getAppUsageState(int mode, boolean isAllowListed) {
/** Gets the {@link OptimizationMode} based on mode and allowed list. */
@OptimizationMode
public static int getAppOptimizationMode(int mode, boolean isAllowListed) {
if (!isAllowListed && mode == AppOpsManager.MODE_IGNORED) {
return AppUsageState.RESTRICTED;
return MODE_RESTRICTED;
} else if (isAllowListed && mode == AppOpsManager.MODE_ALLOWED) {
return AppUsageState.UNRESTRICTED;
return MODE_UNRESTRICTED;
} else if (!isAllowListed && mode == AppOpsManager.MODE_ALLOWED) {
return AppUsageState.OPTIMIZED;
return MODE_OPTIMIZED;
} else {
return AppUsageState.UNKNOWN;
return MODE_UNKNOWN;
}
}
/** Gets the current {@link AppUsageState}. */
public AppUsageState getAppUsageState() {
/** Gets the {@link OptimizationMode} for associated app. */
@OptimizationMode
public int getAppOptimizationMode() {
refreshState();
return getAppUsageState(mMode, mAllowListed);
return getAppOptimizationMode(mMode, mAllowListed);
}
public void setAppUsageState(AppUsageState state) {
switch (state) {
case RESTRICTED:
/** Sets the {@link OptimizationMode} for associated app. */
public void setAppOptimizationMode(@OptimizationMode int mode) {
switch (mode) {
case MODE_RESTRICTED:
mBatteryUtils.setForceAppStandby(mUid, mPackageName, AppOpsManager.MODE_IGNORED);
mPowerAllowListBackend.removeApp(mPackageName);
break;
case UNRESTRICTED:
case MODE_UNRESTRICTED:
mBatteryUtils.setForceAppStandby(mUid, mPackageName, AppOpsManager.MODE_ALLOWED);
mPowerAllowListBackend.addApp(mPackageName);
break;
case OPTIMIZED:
case MODE_OPTIMIZED:
mBatteryUtils.setForceAppStandby(mUid, mPackageName, AppOpsManager.MODE_ALLOWED);
mPowerAllowListBackend.removeApp(mPackageName);
break;
default:
Log.d(TAG, "set unknown app usage state.");
Log.d(TAG, "set unknown app optimization mode.");
}
}

View File

@@ -16,8 +16,6 @@
package com.android.settings.fuelgauge;
import static com.android.settings.fuelgauge.BatteryOptimizeUtils.AppUsageState.OPTIMIZED;
import android.content.Context;
import android.util.Log;
@@ -59,7 +57,8 @@ public class OptimizedPreferenceController extends AbstractPreferenceController
Log.d(TAG, "is system or default app, disable pref");
((RadioButtonPreference) preference).setChecked(false);
preference.setEnabled(false);
} else if (mBatteryOptimizeUtils.getAppUsageState() == OPTIMIZED) {
} else if (mBatteryOptimizeUtils.getAppOptimizationMode()
== BatteryOptimizeUtils.MODE_OPTIMIZED) {
Log.d(TAG, "is optimized states");
((RadioButtonPreference) preference).setChecked(true);
} else {
@@ -78,7 +77,7 @@ public class OptimizedPreferenceController extends AbstractPreferenceController
return false;
}
mBatteryOptimizeUtils.setAppUsageState(OPTIMIZED);
mBatteryOptimizeUtils.setAppOptimizationMode(BatteryOptimizeUtils.MODE_OPTIMIZED);
Log.d(TAG, "Set optimized");
return true;
}

View File

@@ -17,8 +17,6 @@
package com.android.settings.fuelgauge;
import static com.android.settings.fuelgauge.BatteryOptimizeUtils.AppUsageState.RESTRICTED;
import android.content.Context;
import android.util.Log;
@@ -57,7 +55,8 @@ public class RestrictedPreferenceController extends AbstractPreferenceController
Log.d(TAG, "is system or default app, disable pref");
((RadioButtonPreference) preference).setChecked(false);
preference.setEnabled(false);
} else if (mBatteryOptimizeUtils.getAppUsageState() == RESTRICTED) {
} else if (mBatteryOptimizeUtils.getAppOptimizationMode()
== BatteryOptimizeUtils.MODE_RESTRICTED) {
Log.d(TAG, "is restricted states");
((RadioButtonPreference) preference).setChecked(true);
} else {
@@ -81,7 +80,7 @@ public class RestrictedPreferenceController extends AbstractPreferenceController
return false;
}
mBatteryOptimizeUtils.setAppUsageState(RESTRICTED);
mBatteryOptimizeUtils.setAppOptimizationMode(BatteryOptimizeUtils.MODE_RESTRICTED);
Log.d(TAG, "Set restricted");
return true;
}

View File

@@ -16,8 +16,6 @@
package com.android.settings.fuelgauge;
import static com.android.settings.fuelgauge.BatteryOptimizeUtils.AppUsageState.UNRESTRICTED;
import android.content.Context;
import android.util.Log;
@@ -55,7 +53,8 @@ public class UnrestrictedPreferenceController extends AbstractPreferenceControll
if (mBatteryOptimizeUtils.isSystemOrDefaultApp()) {
Log.d(TAG, "is system or default app, unrestricted states only");
((RadioButtonPreference) preference).setChecked(true);
} else if (mBatteryOptimizeUtils.getAppUsageState() == UNRESTRICTED) {
} else if (mBatteryOptimizeUtils.getAppOptimizationMode()
== BatteryOptimizeUtils.MODE_UNRESTRICTED) {
Log.d(TAG, "is unrestricted states");
((RadioButtonPreference) preference).setChecked(true);
} else {
@@ -79,7 +78,7 @@ public class UnrestrictedPreferenceController extends AbstractPreferenceControll
return false;
}
mBatteryOptimizeUtils.setAppUsageState(UNRESTRICTED);
mBatteryOptimizeUtils.setAppOptimizationMode(BatteryOptimizeUtils.MODE_UNRESTRICTED);
Log.d(TAG, "Set unrestricted");
return true;
}