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
diff --git a/src/com/android/settings/fuelgauge/BatteryBackupHelper.java b/src/com/android/settings/fuelgauge/BatteryBackupHelper.java
index 44990ff..eebfaf7 100644
--- a/src/com/android/settings/fuelgauge/BatteryBackupHelper.java
+++ b/src/com/android/settings/fuelgauge/BatteryBackupHelper.java
@@ -37,8 +37,6 @@
 
 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 @@
         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 0be9060..76c1ca7 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 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 @@
     @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 @@
         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 b2da356..ffec50d 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 @@
             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 @@
             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 b52af57..d50926e 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 @@
             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 @@
             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 36141c5..1d66c6c 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 @@
         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 @@
             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 47fa59e..90e9405 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 @@
 
         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 89d66be..c1603b8 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 @@
     }
 
     @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 @@
     }
 
     @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 @@
     }
 
     @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 @@
     }
 
     @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 874618d..9df3ac9 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 @@
     @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 @@
         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 2e17404..0986153 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 @@
     @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 @@
         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 63cf760..004e97c 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 @@
     @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 @@
         mPreference.setKey(mController.KEY_UNRESTRICTED_PREF);
         mController.handlePreferenceTreeClick(mPreference);
 
-        verify(mockBatteryOptimizeUtils).setAppUsageState(
-                BatteryOptimizeUtils.AppUsageState.UNRESTRICTED);
+        verify(mockBatteryOptimizeUtils).setAppOptimizationMode(
+                BatteryOptimizeUtils.MODE_UNRESTRICTED);
     }
 
     @Test