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:
@@ -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);
|
||||
}
|
||||
|
@@ -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.");
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user