From 0ab0a3af56dd83905b06cd2bb3b8d68a985006a2 Mon Sep 17 00:00:00 2001 From: ykhung Date: Tue, 24 Aug 2021 14:37:05 +0800 Subject: [PATCH] Refactor BatteryOptimizeUtils from enum to @IntDef Based on the Android API Council guideline, we should avoid using the Enum structure to define the constant definition. go/android-api-guidelines#avoid-enum Bug: 197595292 Test: make SettingsRoboTests Change-Id: I4b22f0abde7f4ce2c3a0b076db786e619783d93e Merged-In: I4b22f0abde7f4ce2c3a0b076db786e619783d93e --- .../fuelgauge/BatteryBackupHelper.java | 11 ++-- .../fuelgauge/BatteryOptimizeUtils.java | 61 +++++++++++-------- .../OptimizedPreferenceController.java | 7 +-- .../RestrictedPreferenceController.java | 7 +-- .../UnrestrictedPreferenceController.java | 7 +-- .../fuelgauge/BatteryBackupHelperTest.java | 4 +- .../fuelgauge/BatteryOptimizeUtilsTest.java | 33 +++++----- .../OptimizedPreferenceControllerTest.java | 8 +-- .../RestrictedPreferenceControllerTest.java | 8 +-- .../UnrestrictedPreferenceControllerTest.java | 8 +-- 10 files changed, 84 insertions(+), 70 deletions(-) diff --git a/src/com/android/settings/fuelgauge/BatteryBackupHelper.java b/src/com/android/settings/fuelgauge/BatteryBackupHelper.java index 44990ffa3ef..eebfaf7d360 100644 --- a/src/com/android/settings/fuelgauge/BatteryBackupHelper.java +++ b/src/com/android/settings/fuelgauge/BatteryBackupHelper.java @@ -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); } diff --git a/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java b/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java index 0be90600ba7..76c1ca79ac8 100644 --- a/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java +++ b/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java @@ -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."); } } diff --git a/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java b/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java index b2da35632ea..ffec50d4f53 100644 --- a/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java +++ b/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java @@ -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; } diff --git a/src/com/android/settings/fuelgauge/RestrictedPreferenceController.java b/src/com/android/settings/fuelgauge/RestrictedPreferenceController.java index b52af578e13..d50926e6177 100644 --- a/src/com/android/settings/fuelgauge/RestrictedPreferenceController.java +++ b/src/com/android/settings/fuelgauge/RestrictedPreferenceController.java @@ -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; } diff --git a/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java b/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java index 36141c52abd..1d66c6c6cdd 100644 --- a/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java +++ b/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java @@ -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; } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryBackupHelperTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryBackupHelperTest.java index 47fa59e6271..90e9405ba03 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryBackupHelperTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryBackupHelperTest.java @@ -180,8 +180,8 @@ public final class BatteryBackupHelperTest { mBatteryBackupHelper.backupOptimizationMode(mBackupDataOutput, allowlistedApps); - final String expectedResult = - packageName1 + "|UNRESTRICTED," + packageName2 + "|RESTRICTED,"; + // 2 for UNRESTRICTED mode and 1 for RESTRICTED mode. + final String expectedResult = packageName1 + "|2," + packageName2 + "|1,"; final byte[] expectedBytes = expectedResult.getBytes(); verify(mBackupDataOutput).writeEntityHeader( BatteryBackupHelper.KEY_OPTIMIZATION_LIST, expectedBytes.length); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java index 89d66be187b..c1603b803fd 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java @@ -16,9 +16,9 @@ package com.android.settings.fuelgauge; -import static com.android.settings.fuelgauge.BatteryOptimizeUtils.AppUsageState.OPTIMIZED; -import static com.android.settings.fuelgauge.BatteryOptimizeUtils.AppUsageState.RESTRICTED; -import static com.android.settings.fuelgauge.BatteryOptimizeUtils.AppUsageState.UNRESTRICTED; +import static com.android.settings.fuelgauge.BatteryOptimizeUtils.MODE_OPTIMIZED; +import static com.android.settings.fuelgauge.BatteryOptimizeUtils.MODE_RESTRICTED; +import static com.android.settings.fuelgauge.BatteryOptimizeUtils.MODE_UNRESTRICTED; import static com.google.common.truth.Truth.assertThat; @@ -65,30 +65,33 @@ public class BatteryOptimizeUtilsTest { } @Test - public void testGetAppUsageState_returnRestricted() { + public void testGetAppOptimizationMode_returnRestricted() { when(mockBackend.isAllowlisted(anyString())).thenReturn(false); when(mockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString())) .thenReturn(AppOpsManager.MODE_IGNORED); - assertThat(mBatteryOptimizeUtils.getAppUsageState()).isEqualTo(RESTRICTED); + assertThat(mBatteryOptimizeUtils.getAppOptimizationMode()) + .isEqualTo(MODE_RESTRICTED); } @Test - public void testGetAppUsageState_returnUnrestricted() { + public void testGetAppOptimizationMode_returnUnrestricted() { when(mockBackend.isAllowlisted(anyString())).thenReturn(true); when(mockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString())) .thenReturn(AppOpsManager.MODE_ALLOWED); - assertThat(mBatteryOptimizeUtils.getAppUsageState()).isEqualTo(UNRESTRICTED); + assertThat(mBatteryOptimizeUtils.getAppOptimizationMode()) + .isEqualTo(MODE_UNRESTRICTED); } @Test - public void testGetAppUsageState_returnOptimized() { + public void testGetAppOptimizationMode_returnOptimized() { when(mockBackend.isAllowlisted(anyString())).thenReturn(false); when(mockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString())) .thenReturn(AppOpsManager.MODE_ALLOWED); - assertThat(mBatteryOptimizeUtils.getAppUsageState()).isEqualTo(OPTIMIZED); + assertThat(mBatteryOptimizeUtils.getAppOptimizationMode()) + .isEqualTo(MODE_OPTIMIZED); } @Test @@ -118,8 +121,8 @@ public class BatteryOptimizeUtilsTest { } @Test - public void testSetAppUsageState_Restricted_verifyAction() { - mBatteryOptimizeUtils.setAppUsageState(RESTRICTED); + public void testSetAppOptimizationMode_Restricted_verifyAction() { + mBatteryOptimizeUtils.setAppOptimizationMode(MODE_RESTRICTED); verify(mockBatteryUtils).setForceAppStandby(UID, PACKAGE_NAME, AppOpsManager.MODE_IGNORED); @@ -127,8 +130,8 @@ public class BatteryOptimizeUtilsTest { } @Test - public void testSetAppUsageState_Unrestricted_verifyAction() { - mBatteryOptimizeUtils.setAppUsageState(UNRESTRICTED); + public void testSetAppOptimizationMode_Unrestricted_verifyAction() { + mBatteryOptimizeUtils.setAppOptimizationMode(MODE_UNRESTRICTED); verify(mockBatteryUtils).setForceAppStandby(UID, PACKAGE_NAME, AppOpsManager.MODE_ALLOWED); @@ -136,8 +139,8 @@ public class BatteryOptimizeUtilsTest { } @Test - public void testSetAppUsageState_Optimized_verifyAction() { - mBatteryOptimizeUtils.setAppUsageState(OPTIMIZED); + public void testSetAppOptimizationMode_Optimized_verifyAction() { + mBatteryOptimizeUtils.setAppOptimizationMode(MODE_OPTIMIZED); verify(mockBatteryUtils).setForceAppStandby(UID, PACKAGE_NAME, AppOpsManager.MODE_ALLOWED); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java index 874618db00b..9df3ac90cb4 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java @@ -76,8 +76,8 @@ public class OptimizedPreferenceControllerTest { @Test public void testUpdateState_isOptimizedStates_prefChecked() { when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true); - when(mockBatteryOptimizeUtils.getAppUsageState()).thenReturn( - BatteryOptimizeUtils.AppUsageState.OPTIMIZED); + when(mockBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn( + BatteryOptimizeUtils.MODE_OPTIMIZED); mController.updateState(mPreference); @@ -98,8 +98,8 @@ public class OptimizedPreferenceControllerTest { mPreference.setKey(mController.KEY_OPTIMIZED_PREF); mController.handlePreferenceTreeClick(mPreference); - verify(mockBatteryOptimizeUtils).setAppUsageState( - BatteryOptimizeUtils.AppUsageState.OPTIMIZED); + verify(mockBatteryOptimizeUtils).setAppOptimizationMode( + BatteryOptimizeUtils.MODE_OPTIMIZED); } @Test diff --git a/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java index 2e17404f675..09861536edd 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java @@ -84,8 +84,8 @@ public class RestrictedPreferenceControllerTest { @Test public void testUpdateState_isRestrictedStates_prefChecked() { when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true); - when(mockBatteryOptimizeUtils.getAppUsageState()).thenReturn( - BatteryOptimizeUtils.AppUsageState.RESTRICTED); + when(mockBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn( + BatteryOptimizeUtils.MODE_RESTRICTED); mController.updateState(mPreference); @@ -106,8 +106,8 @@ public class RestrictedPreferenceControllerTest { mPreference.setKey(mController.KEY_RESTRICTED_PREF); mController.handlePreferenceTreeClick(mPreference); - verify(mockBatteryOptimizeUtils).setAppUsageState( - BatteryOptimizeUtils.AppUsageState.RESTRICTED); + verify(mockBatteryOptimizeUtils).setAppOptimizationMode( + BatteryOptimizeUtils.MODE_RESTRICTED); } @Test diff --git a/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java index 63cf760a2f6..004e97ce6fe 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java @@ -84,8 +84,8 @@ public class UnrestrictedPreferenceControllerTest { @Test public void testUpdateState_isUnrestrictedStates_prefChecked() { when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true); - when(mockBatteryOptimizeUtils.getAppUsageState()).thenReturn( - BatteryOptimizeUtils.AppUsageState.UNRESTRICTED); + when(mockBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn( + BatteryOptimizeUtils.MODE_UNRESTRICTED); mController.updateState(mPreference); @@ -106,8 +106,8 @@ public class UnrestrictedPreferenceControllerTest { mPreference.setKey(mController.KEY_UNRESTRICTED_PREF); mController.handlePreferenceTreeClick(mPreference); - verify(mockBatteryOptimizeUtils).setAppUsageState( - BatteryOptimizeUtils.AppUsageState.UNRESTRICTED); + verify(mockBatteryOptimizeUtils).setAppOptimizationMode( + BatteryOptimizeUtils.MODE_UNRESTRICTED); } @Test