Add prerelease driver to graphics driver preference dashboard.
To facilitate better development, add prerelease driver choice to graphics driver preferences dashboard. This patch also makes sure that when game driver or developer driver is not shipped, the choice doesn't show up. Minor: Add tests. Bug: b/148626177 Test: make RunSettingsRoboTests ROBOTEST_FILTER=GraphicsDriver Change-Id: Iad398cd663300086d3f4802ffab34531e11dfb17
This commit is contained in:
@@ -10951,8 +10951,8 @@
|
|||||||
<string name="graphics_driver_app_preference_default">Default</string>
|
<string name="graphics_driver_app_preference_default">Default</string>
|
||||||
<!-- The game driver value for Game Driver app preference [CHAR LIMIT=50] -->
|
<!-- The game driver value for Game Driver app preference [CHAR LIMIT=50] -->
|
||||||
<string name="graphics_driver_app_preference_game_driver">Game Driver</string>
|
<string name="graphics_driver_app_preference_game_driver">Game Driver</string>
|
||||||
<!-- The prerelase driver value for Prerelease Driver app preference [CHAR LIMIT=50] -->
|
<!-- The prerelase driver value for Developer Driver app preference [CHAR LIMIT=50] -->
|
||||||
<string name="graphics_driver_app_preference_prerelease_driver">Prerelease Driver</string>
|
<string name="graphics_driver_app_preference_prerelease_driver">Developer Driver</string>
|
||||||
<!-- The system driver value for system graphics driver app preference [CHAR LIMIT=50] -->
|
<!-- The system driver value for system graphics driver app preference [CHAR LIMIT=50] -->
|
||||||
<string name="graphics_driver_app_preference_system">System Graphics Driver</string>
|
<string name="graphics_driver_app_preference_system">System Graphics Driver</string>
|
||||||
<!-- All the graphics driver preference values for all apps globally [CHAR LIMIT=50] -->
|
<!-- All the graphics driver preference values for all apps globally [CHAR LIMIT=50] -->
|
||||||
@@ -10963,6 +10963,7 @@
|
|||||||
<!-- All the values of graphics driver for app preference [CHAR LIMIT=50] -->
|
<!-- All the values of graphics driver for app preference [CHAR LIMIT=50] -->
|
||||||
<string-array name="graphics_driver_app_preference_values">
|
<string-array name="graphics_driver_app_preference_values">
|
||||||
<item>@string/graphics_driver_app_preference_default</item>
|
<item>@string/graphics_driver_app_preference_default</item>
|
||||||
|
<item>@string/graphics_driver_app_preference_prerelease_driver</item>
|
||||||
<item>@string/graphics_driver_app_preference_game_driver</item>
|
<item>@string/graphics_driver_app_preference_game_driver</item>
|
||||||
<item>@string/graphics_driver_app_preference_system</item>
|
<item>@string/graphics_driver_app_preference_system</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
@@ -26,7 +26,9 @@ import android.content.pm.PackageManager;
|
|||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
|
import android.os.SystemProperties;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
import android.text.TextUtils;
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
import androidx.preference.ListPreference;
|
import androidx.preference.ListPreference;
|
||||||
@@ -58,15 +60,19 @@ public class GraphicsDriverAppPreferenceController extends BasePreferenceControl
|
|||||||
GraphicsDriverContentObserver.OnGraphicsDriverContentChangedListener, LifecycleObserver,
|
GraphicsDriverContentObserver.OnGraphicsDriverContentChangedListener, LifecycleObserver,
|
||||||
OnStart, OnStop {
|
OnStart, OnStop {
|
||||||
|
|
||||||
|
private static final String PROPERTY_GFX_DRIVER_GAME = "ro.gfx.driver.0";
|
||||||
|
private static final String PROPERTY_GFX_DRIVER_PRERELEASE = "ro.gfx.driver.1";
|
||||||
|
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final ContentResolver mContentResolver;
|
private final ContentResolver mContentResolver;
|
||||||
private final CharSequence[] mEntryList;
|
|
||||||
private final String mPreferenceTitle;
|
private final String mPreferenceTitle;
|
||||||
private final String mPreferenceDefault;
|
private final String mPreferenceDefault;
|
||||||
private final String mPreferenceGameDriver;
|
private final String mPreferenceGameDriver;
|
||||||
private final String mPreferencePrereleaseDriver;
|
private final String mPreferencePrereleaseDriver;
|
||||||
private final String mPreferenceSystem;
|
private final String mPreferenceSystem;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
|
CharSequence[] mEntryList;
|
||||||
|
@VisibleForTesting
|
||||||
GraphicsDriverContentObserver mGraphicsDriverContentObserver;
|
GraphicsDriverContentObserver mGraphicsDriverContentObserver;
|
||||||
|
|
||||||
private final List<AppInfo> mAppInfos;
|
private final List<AppInfo> mAppInfos;
|
||||||
@@ -85,7 +91,6 @@ public class GraphicsDriverAppPreferenceController extends BasePreferenceControl
|
|||||||
new GraphicsDriverContentObserver(new Handler(Looper.getMainLooper()), this);
|
new GraphicsDriverContentObserver(new Handler(Looper.getMainLooper()), this);
|
||||||
|
|
||||||
final Resources resources = context.getResources();
|
final Resources resources = context.getResources();
|
||||||
mEntryList = resources.getStringArray(R.array.graphics_driver_app_preference_values);
|
|
||||||
mPreferenceTitle = resources.getString(R.string.graphics_driver_app_preference_title);
|
mPreferenceTitle = resources.getString(R.string.graphics_driver_app_preference_title);
|
||||||
mPreferenceDefault = resources.getString(R.string.graphics_driver_app_preference_default);
|
mPreferenceDefault = resources.getString(R.string.graphics_driver_app_preference_default);
|
||||||
mPreferenceGameDriver =
|
mPreferenceGameDriver =
|
||||||
@@ -93,6 +98,7 @@ public class GraphicsDriverAppPreferenceController extends BasePreferenceControl
|
|||||||
mPreferencePrereleaseDriver =
|
mPreferencePrereleaseDriver =
|
||||||
resources.getString(R.string.graphics_driver_app_preference_prerelease_driver);
|
resources.getString(R.string.graphics_driver_app_preference_prerelease_driver);
|
||||||
mPreferenceSystem = resources.getString(R.string.graphics_driver_app_preference_system);
|
mPreferenceSystem = resources.getString(R.string.graphics_driver_app_preference_system);
|
||||||
|
mEntryList = constructEntryList();
|
||||||
|
|
||||||
// TODO: Move this task to background if there's potential ANR/Jank.
|
// TODO: Move this task to background if there's potential ANR/Jank.
|
||||||
// Update the UI when all the app infos are ready.
|
// Update the UI when all the app infos are ready.
|
||||||
@@ -189,6 +195,28 @@ public class GraphicsDriverAppPreferenceController extends BasePreferenceControl
|
|||||||
updateState(mPreferenceGroup);
|
updateState(mPreferenceGroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs and returns a list of graphics driver choices.
|
||||||
|
*/
|
||||||
|
public CharSequence[] constructEntryList() {
|
||||||
|
final String prereleaseDriverPackageName =
|
||||||
|
SystemProperties.get(PROPERTY_GFX_DRIVER_PRERELEASE);
|
||||||
|
final String gameDriverPackageName = SystemProperties.get(PROPERTY_GFX_DRIVER_GAME);
|
||||||
|
|
||||||
|
List<CharSequence> entryList = new ArrayList<>();
|
||||||
|
entryList.add(mPreferenceDefault);
|
||||||
|
if (!TextUtils.isEmpty(prereleaseDriverPackageName)) {
|
||||||
|
entryList.add(mPreferencePrereleaseDriver);
|
||||||
|
}
|
||||||
|
if (!TextUtils.isEmpty(gameDriverPackageName)) {
|
||||||
|
entryList.add(mPreferenceGameDriver);
|
||||||
|
}
|
||||||
|
entryList.add(mPreferenceSystem);
|
||||||
|
CharSequence[] filteredEntryList = new CharSequence[entryList.size()];
|
||||||
|
filteredEntryList = entryList.toArray(filteredEntryList);
|
||||||
|
return filteredEntryList;
|
||||||
|
}
|
||||||
|
|
||||||
// AppInfo class to achieve loading the application label only once
|
// AppInfo class to achieve loading the application label only once
|
||||||
class AppInfo {
|
class AppInfo {
|
||||||
AppInfo(PackageManager packageManager, ApplicationInfo applicationInfo) {
|
AppInfo(PackageManager packageManager, ApplicationInfo applicationInfo) {
|
||||||
|
@@ -56,8 +56,9 @@ import java.util.Arrays;
|
|||||||
public class GraphicsDriverAppPreferenceControllerTest {
|
public class GraphicsDriverAppPreferenceControllerTest {
|
||||||
|
|
||||||
private static final int DEFAULT = 0;
|
private static final int DEFAULT = 0;
|
||||||
private static final int GAME_DRIVER = 1;
|
private static final int PRERELEASE_DRIVER = 1;
|
||||||
private static final int SYSTEM = 2;
|
private static final int GAME_DRIVER = 2;
|
||||||
|
private static final int SYSTEM = 3;
|
||||||
private static final String TEST_APP_NAME = "testApp";
|
private static final String TEST_APP_NAME = "testApp";
|
||||||
private static final String TEST_PKG_NAME = "testPkg";
|
private static final String TEST_PKG_NAME = "testPkg";
|
||||||
|
|
||||||
@@ -116,7 +117,7 @@ public class GraphicsDriverAppPreferenceControllerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getAvailability_gameDriverOff_conditionallyUnavailable() {
|
public void getAvailability_graphicsDriverOff_conditionallyUnavailable() {
|
||||||
loadDefaultConfig();
|
loadDefaultConfig();
|
||||||
Settings.Global.putInt(mResolver, Settings.Global.GAME_DRIVER_ALL_APPS, GAME_DRIVER_OFF);
|
Settings.Global.putInt(mResolver, Settings.Global.GAME_DRIVER_ALL_APPS, GAME_DRIVER_OFF);
|
||||||
|
|
||||||
@@ -163,7 +164,7 @@ public class GraphicsDriverAppPreferenceControllerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void updateState_gameDriverOff_notVisible() {
|
public void updateState_graphicsDriverOff_notVisible() {
|
||||||
Settings.Global.putInt(mResolver, Settings.Global.GAME_DRIVER_ALL_APPS, GAME_DRIVER_OFF);
|
Settings.Global.putInt(mResolver, Settings.Global.GAME_DRIVER_ALL_APPS, GAME_DRIVER_OFF);
|
||||||
loadDefaultConfig();
|
loadDefaultConfig();
|
||||||
|
|
||||||
@@ -213,6 +214,8 @@ public class GraphicsDriverAppPreferenceControllerTest {
|
|||||||
assertThat(preference.getDialogTitle()).isEqualTo(mDialogTitle);
|
assertThat(preference.getDialogTitle()).isEqualTo(mDialogTitle);
|
||||||
assertThat(preference.getEntries()).isEqualTo(mValueList);
|
assertThat(preference.getEntries()).isEqualTo(mValueList);
|
||||||
assertThat(preference.getEntryValues()).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(mPreferencePrereleaseDriver);
|
assertThat(preference.getSummary()).isEqualTo(mPreferencePrereleaseDriver);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -248,6 +251,23 @@ public class GraphicsDriverAppPreferenceControllerTest {
|
|||||||
.isEqualTo("");
|
.isEqualTo("");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void onPreferenceChange_selectPRERELEASE_DRIVER_shouldUpdateAttrAndSettingsGlobal() {
|
||||||
|
loadDefaultConfig();
|
||||||
|
final ListPreference preference =
|
||||||
|
mController.createListPreference(mContext, TEST_PKG_NAME, TEST_APP_NAME);
|
||||||
|
mController.onPreferenceChange(preference, mValueList[PRERELEASE_DRIVER]);
|
||||||
|
|
||||||
|
assertThat(preference.getEntry()).isEqualTo(mValueList[PRERELEASE_DRIVER]);
|
||||||
|
assertThat(preference.getValue()).isEqualTo(mValueList[PRERELEASE_DRIVER]);
|
||||||
|
assertThat(preference.getSummary()).isEqualTo(mValueList[PRERELEASE_DRIVER]);
|
||||||
|
assertThat(Settings.Global.getString(mResolver,
|
||||||
|
Settings.Global.GAME_DRIVER_PRERELEASE_OPT_IN_APPS))
|
||||||
|
.isEqualTo(TEST_PKG_NAME);
|
||||||
|
assertThat(Settings.Global.getString(mResolver, Settings.Global.GAME_DRIVER_OPT_OUT_APPS))
|
||||||
|
.isEqualTo("");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onPreferenceChange_selectGAME_DRIVER_shouldUpdateAttributesAndSettingsGlobal() {
|
public void onPreferenceChange_selectGAME_DRIVER_shouldUpdateAttributesAndSettingsGlobal() {
|
||||||
loadDefaultConfig();
|
loadDefaultConfig();
|
||||||
@@ -306,6 +326,8 @@ public class GraphicsDriverAppPreferenceControllerTest {
|
|||||||
Settings.Global.putString(mResolver, Settings.Global.GAME_DRIVER_OPT_OUT_APPS, optOut);
|
Settings.Global.putString(mResolver, Settings.Global.GAME_DRIVER_OPT_OUT_APPS, optOut);
|
||||||
|
|
||||||
mController = new GraphicsDriverAppPreferenceController(mContext, "testKey");
|
mController = new GraphicsDriverAppPreferenceController(mContext, "testKey");
|
||||||
|
mController.mEntryList = mContext.getResources().getStringArray(
|
||||||
|
R.array.graphics_driver_app_preference_values);
|
||||||
mGroup = spy(new PreferenceCategory(mContext));
|
mGroup = spy(new PreferenceCategory(mContext));
|
||||||
final PreferenceManager preferenceManager = new PreferenceManager(mContext);
|
final PreferenceManager preferenceManager = new PreferenceManager(mContext);
|
||||||
when(mGroup.getContext()).thenReturn(mContext);
|
when(mGroup.getContext()).thenReturn(mContext);
|
||||||
|
Reference in New Issue
Block a user