Game Driver: Add UI support for prerelease Game Driver

Bug: 134881329
Test: make RunSettingsRoboTests ROBOTEST_FILTER=GameDriver
Change-Id: I9c710a5e6adff9b01c656d576f53f9b4b3360207
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e359fed..d3f68fc 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -10648,12 +10648,15 @@
     <string name="game_driver_app_preference_default">Default</string>
     <!-- The game driver value for Game Driver app preference [CHAR LIMIT=50] -->
     <string name="game_driver_app_preference_game_driver">Game Driver</string>
+    <!-- The game driver value for Prerelease Game Driver app preference [CHAR LIMIT=50] -->
+    <string name="game_driver_app_preference_prerelease_driver">Prerelease Driver</string>
     <!-- The system value for Game Driver app preference [CHAR LIMIT=50] -->
     <string name="game_driver_app_preference_system">System Graphics Driver</string>
     <!-- All the values for Game Driver app preference [CHAR LIMIT=50] -->
     <string-array name="game_driver_app_preference_values">
         <item>@string/game_driver_app_preference_default</item>
         <item>@string/game_driver_app_preference_game_driver</item>
+        <item>@string/game_driver_app_preference_prerelease_driver</item>
         <item>@string/game_driver_app_preference_system</item>
     </string-array>
 
diff --git a/src/com/android/settings/development/gamedriver/GameDriverAppPreferenceController.java b/src/com/android/settings/development/gamedriver/GameDriverAppPreferenceController.java
index 09659be..489408d 100644
--- a/src/com/android/settings/development/gamedriver/GameDriverAppPreferenceController.java
+++ b/src/com/android/settings/development/gamedriver/GameDriverAppPreferenceController.java
@@ -64,12 +64,14 @@
     private final String mPreferenceTitle;
     private final String mPreferenceDefault;
     private final String mPreferenceGameDriver;
+    private final String mPreferencePrereleaseDriver;
     private final String mPreferenceSystem;
     @VisibleForTesting
     GameDriverContentObserver mGameDriverContentObserver;
 
     private final List<AppInfo> mAppInfos;
     private final Set<String> mDevOptInApps;
+    private final Set<String> mDevPrereleaseOptInApps;
     private final Set<String> mDevOptOutApps;
 
     private PreferenceGroup mPreferenceGroup;
@@ -88,6 +90,8 @@
         mPreferenceDefault = resources.getString(R.string.game_driver_app_preference_default);
         mPreferenceGameDriver =
                 resources.getString(R.string.game_driver_app_preference_game_driver);
+        mPreferencePrereleaseDriver =
+                resources.getString(R.string.game_driver_app_preference_prerelease_driver);
         mPreferenceSystem = resources.getString(R.string.game_driver_app_preference_system);
 
         // TODO: Move this task to background if there's potential ANR/Jank.
@@ -96,6 +100,8 @@
 
         mDevOptInApps =
                 getGlobalSettingsString(mContentResolver, Settings.Global.GAME_DRIVER_OPT_IN_APPS);
+        mDevPrereleaseOptInApps = getGlobalSettingsString(
+                mContentResolver, Settings.Global.GAME_DRIVER_PRERELEASE_OPT_IN_APPS);
         mDevOptOutApps =
                 getGlobalSettingsString(mContentResolver, Settings.Global.GAME_DRIVER_OPT_OUT_APPS);
     }
@@ -147,21 +153,31 @@
         // opt-in and opt-out apps. Then set the new summary text.
         if (value.equals(mPreferenceSystem)) {
             mDevOptInApps.remove(packageName);
+            mDevPrereleaseOptInApps.remove(packageName);
             mDevOptOutApps.add(packageName);
         } else if (value.equals(mPreferenceGameDriver)) {
             mDevOptInApps.add(packageName);
+            mDevPrereleaseOptInApps.remove(packageName);
+            mDevOptOutApps.remove(packageName);
+        } else if (value.equals(mPreferencePrereleaseDriver)) {
+            mDevOptInApps.remove(packageName);
+            mDevPrereleaseOptInApps.add(packageName);
             mDevOptOutApps.remove(packageName);
         } else {
             mDevOptInApps.remove(packageName);
+            mDevPrereleaseOptInApps.remove(packageName);
             mDevOptOutApps.remove(packageName);
         }
         listPref.setValue(value);
         listPref.setSummary(value);
 
-        // Push the updated Sets for opt-in and opt-out apps to
-        // corresponding Settings.Global.GAME_DRIVER_OPT_(IN|OUT)_APPS
+        // Push the updated Sets for stable/prerelease opt-in and opt-out apps to
+        // corresponding Settings.Global.GAME_DRIVER(_PRERELEASE)?_OPT_(IN|OUT)_APPS
         Settings.Global.putString(mContentResolver, Settings.Global.GAME_DRIVER_OPT_IN_APPS,
                 String.join(",", mDevOptInApps));
+        Settings.Global.putString(mContentResolver,
+                Settings.Global.GAME_DRIVER_PRERELEASE_OPT_IN_APPS,
+                String.join(",", mDevPrereleaseOptInApps));
         Settings.Global.putString(mContentResolver, Settings.Global.GAME_DRIVER_OPT_OUT_APPS,
                 String.join(",", mDevOptOutApps));
 
@@ -233,10 +249,13 @@
         listPreference.setEntryValues(mEntryList);
 
         // Initialize preference default and summary with the opt in/out choices
-        // from Settings.Global.GAME_DRIVER_OPT_(IN|OUT)_APPS
+        // from Settings.Global.GAME_DRIVER(_PRERELEASE)?_OPT_(IN|OUT)_APPS
         if (mDevOptOutApps.contains(packageName)) {
             listPreference.setValue(mPreferenceSystem);
             listPreference.setSummary(mPreferenceSystem);
+        } else if (mDevPrereleaseOptInApps.contains(packageName)) {
+            listPreference.setValue(mPreferencePrereleaseDriver);
+            listPreference.setSummary(mPreferencePrereleaseDriver);
         } else if (mDevOptInApps.contains(packageName)) {
             listPreference.setValue(mPreferenceGameDriver);
             listPreference.setSummary(mPreferenceGameDriver);
diff --git a/tests/robotests/src/com/android/settings/development/gamedriver/GameDriverAppPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/gamedriver/GameDriverAppPreferenceControllerTest.java
index f6fa8e0..f007ce2 100644
--- a/tests/robotests/src/com/android/settings/development/gamedriver/GameDriverAppPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/gamedriver/GameDriverAppPreferenceControllerTest.java
@@ -56,7 +56,8 @@
 
     private static final int DEFAULT = 0;
     private static final int GAME_DRIVER = 1;
-    private static final int SYSTEM = 2;
+    private static final int PRERELEASE_DRIVER = 2;
+    private static final int SYSTEM = 3;
     private static final String TEST_APP_NAME = "testApp";
     private static final String TEST_PKG_NAME = "testPkg";
 
@@ -181,7 +182,7 @@
 
     @Test
     public void createPreference_configGAME_DRIVER_shouldSetGameDriverAttributes() {
-        loadConfig(TEST_PKG_NAME, "");
+        loadConfig(TEST_PKG_NAME, "", "");
         final ListPreference preference =
                 mController.createListPreference(mContext, TEST_PKG_NAME, TEST_APP_NAME);
 
@@ -196,8 +197,24 @@
     }
 
     @Test
+    public void createPreference_configPRERELEASE_DRIVER_shouldSetPrereleaseDriverAttributes() {
+        loadConfig("", TEST_PKG_NAME, "");
+        final ListPreference preference =
+                mController.createListPreference(mContext, TEST_PKG_NAME, TEST_APP_NAME);
+
+        assertThat(preference.getKey()).isEqualTo(TEST_PKG_NAME);
+        assertThat(preference.getTitle()).isEqualTo(TEST_APP_NAME);
+        assertThat(preference.getDialogTitle()).isEqualTo(mDialogTitle);
+        assertThat(preference.getEntries()).isEqualTo(mValueList);
+        assertThat(preference.getEntryValues()).isEqualTo(mValueList);
+        assertThat(preference.getEntry()).isEqualTo(mValueList[PRERELEASE_DRIVER]);
+        assertThat(preference.getValue()).isEqualTo(mValueList[PRERELEASE_DRIVER]);
+        assertThat(preference.getSummary()).isEqualTo(mValueList[PRERELEASE_DRIVER]);
+    }
+
+    @Test
     public void createPreference_configSystem_shouldSetSystemAttributes() {
-        loadConfig("", TEST_PKG_NAME);
+        loadConfig("", "", TEST_PKG_NAME);
         final ListPreference preference =
                 mController.createListPreference(mContext, TEST_PKG_NAME, TEST_APP_NAME);
 
@@ -274,10 +291,12 @@
         when(mContext.getPackageManager()).thenReturn(mPackageManager);
     }
 
-    private void loadDefaultConfig() { loadConfig("", ""); }
+    private void loadDefaultConfig() { loadConfig("", "", ""); }
 
-    private void loadConfig(String optIn, String optOut) {
+    private void loadConfig(String optIn, String prereleaseOptIn, String optOut) {
         Settings.Global.putString(mResolver, Settings.Global.GAME_DRIVER_OPT_IN_APPS, optIn);
+        Settings.Global.putString(
+                mResolver, Settings.Global.GAME_DRIVER_PRERELEASE_OPT_IN_APPS, prereleaseOptIn);
         Settings.Global.putString(mResolver, Settings.Global.GAME_DRIVER_OPT_OUT_APPS, optOut);
 
         mController = new GameDriverAppPreferenceController(mContext, "testKey");