diff options
author | Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> | 2023-10-18 19:50:40 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2023-10-18 19:50:40 +0000 |
commit | 0481d6a318c588b0dc9cbd6da1746d2c9ed719ff (patch) | |
tree | 0363049c17a9cbcc7d8b30b08fe6d0f6af18adc9 | |
parent | 3eea9e53a11035987dd6e69f83f9275e4c6dfe3f (diff) | |
parent | 34d308924e038e6f68027e774dd404995ff942e1 (diff) | |
download | Settings-0481d6a318c588b0dc9cbd6da1746d2c9ed719ff.tar.gz |
Merge changes from topic "angle-developer-option-toggle1" into main
* changes:
[Cherry-pick] Allow ANGLE developer option toggle UI enabled if ANGLE is enabled.
[Cherry-pick] Add debug property to safe guard ANGLE developer option UI.
[Cherry-pick] Add warning on enabling ANGLE.
5 files changed, 69 insertions, 2 deletions
diff --git a/res/values/strings.xml b/res/values/strings.xml index fa79cbbb33b..d62512274ad 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -10505,9 +10505,9 @@ </string-array> <!-- Debugging developer settings: enable angle as system driver? [CHAR LIMIT=50] --> - <string name="enable_angle_as_system_driver">Enable ANGLE</string> + <string name="enable_angle_as_system_driver">Experimental: Enable ANGLE</string> <!-- Debugging developer settings: enable angle as system driver summary [CHAR LIMIT=NONE] --> - <string name="enable_angle_as_system_driver_summary">Enable ANGLE as system OpenGL ES driver</string> + <string name="enable_angle_as_system_driver_summary">Warning: Enable ANGLE as default OpenGL ES driver. This feature is in experiment and may not be compatible with some camera and video apps.</string> <!--Dialog body text used to explain a reboot is required after changing ANGLE as system GLES driver setting--> <string name="reboot_dialog_enable_angle_as_system_driver">A reboot is required to change the system OpenGL ES driver</string> diff --git a/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverController.java b/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverController.java index b3af95ec0cc..992136c9b70 100644 --- a/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverController.java +++ b/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverController.java @@ -57,6 +57,10 @@ public class GraphicsDriverEnableAngleAsSystemDriverController @VisibleForTesting static final String PROPERTY_PERSISTENT_GRAPHICS_EGL = "persist.graphics.egl"; + @VisibleForTesting + static final String PROPERTY_DEBUG_ANGLE_DEVELOPER_OPTION = + "debug.graphics.angle.developeroption.enable"; + @VisibleForTesting static final String ANGLE_DRIVER_SUFFIX = "angle"; @VisibleForTesting @@ -72,6 +76,11 @@ public class GraphicsDriverEnableAngleAsSystemDriverController public void set(String key, String val) { SystemProperties.set(key, val); } + + @Override + public boolean getBoolean(String key, boolean def) { + return SystemProperties.getBoolean(key, def); + } }; } } @@ -81,6 +90,13 @@ public class GraphicsDriverEnableAngleAsSystemDriverController this(context, fragment, new Injector()); } + // Return true if the ANGLE developer option entry point is enabled. + // This can be enabled by calling: + // `adb shell setprop debug.graphics.angle.developeroption.enable true` + private boolean isAngleDeveloperOptionEnabled() { + return mSystemProperties.getBoolean(PROPERTY_DEBUG_ANGLE_DEVELOPER_OPTION, false); + } + private boolean isAngleSupported() { return TextUtils.equals( mSystemProperties.get(PROPERTY_RO_GFX_ANGLE_SUPPORTED, ""), "true"); @@ -96,6 +112,10 @@ public class GraphicsDriverEnableAngleAsSystemDriverController // Exception is when user chooses to reboot now, the switch should keep its current value // and persist its' state over reboot. mShouldToggleSwitchBackOnRebootDialogDismiss = true; + final String persistGraphicsEglValue = + mSystemProperties.get(PROPERTY_PERSISTENT_GRAPHICS_EGL, ""); + Log.v(TAG, "Value of " + PROPERTY_PERSISTENT_GRAPHICS_EGL + " is: " + + persistGraphicsEglValue); } @Override @@ -149,6 +169,13 @@ public class GraphicsDriverEnableAngleAsSystemDriverController mPreference.setEnabled(false); ((SwitchPreference) mPreference).setChecked(false); } + + // Disable the developer option toggle UI if ANGLE is disabled, this means next time the + // debug property needs to be set to true again to enable ANGLE. If ANGLE is enabled, don't + // disable the developer option toggle UI so that it can be turned off easily. + if (!isAngleDeveloperOptionEnabled() && !((SwitchPreference) mPreference).isChecked()) { + mPreference.setEnabled(false); + } } @Override diff --git a/src/com/android/settings/development/graphicsdriver/GraphicsDriverSystemPropertiesWrapper.java b/src/com/android/settings/development/graphicsdriver/GraphicsDriverSystemPropertiesWrapper.java index 549cd81c565..96842821521 100644 --- a/src/com/android/settings/development/graphicsdriver/GraphicsDriverSystemPropertiesWrapper.java +++ b/src/com/android/settings/development/graphicsdriver/GraphicsDriverSystemPropertiesWrapper.java @@ -41,4 +41,13 @@ interface GraphicsDriverSystemPropertiesWrapper { * SELinux. libc will log the underlying reason. */ void set(@NonNull String key, @Nullable String val); + + /** + * Get the boolean value for the given {@code key}. + * + * @param key the key to lookup + * @param def the default value in case the property is not set or empty + * @return if the {@code key} isn't found, return {@code def}. + */ + boolean getBoolean(@NonNull String key, @NonNull boolean def); } diff --git a/tests/robotests/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverControllerTest.java b/tests/robotests/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverControllerTest.java index 9210b870d77..249acf5e539 100644 --- a/tests/robotests/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverControllerTest.java +++ b/tests/robotests/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverControllerTest.java @@ -17,6 +17,7 @@ package com.android.settings.development.graphicsdriver; import static com.android.settings.development.graphicsdriver.GraphicsDriverEnableAngleAsSystemDriverController.ANGLE_DRIVER_SUFFIX; +import static com.android.settings.development.graphicsdriver.GraphicsDriverEnableAngleAsSystemDriverController.PROPERTY_DEBUG_ANGLE_DEVELOPER_OPTION; import static com.android.settings.development.graphicsdriver.GraphicsDriverEnableAngleAsSystemDriverController.PROPERTY_PERSISTENT_GRAPHICS_EGL; import static com.android.settings.development.graphicsdriver.GraphicsDriverEnableAngleAsSystemDriverController.PROPERTY_RO_GFX_ANGLE_SUPPORTED; @@ -67,6 +68,7 @@ public class GraphicsDriverEnableAngleAsSystemDriverControllerTest { public void setUp() { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; + ShadowSystemProperties.override(PROPERTY_DEBUG_ANGLE_DEVELOPER_OPTION, "true"); doReturn(mTransaction).when(mFragmentManager).beginTransaction(); doReturn(mFragmentManager).when(mActivity).getSupportFragmentManager(); doReturn(mActivity).when(mFragment).getActivity(); diff --git a/tests/unit/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverControllerJUnitTest.java b/tests/unit/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverControllerJUnitTest.java index ae35431fef7..a402d919f99 100644 --- a/tests/unit/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverControllerJUnitTest.java +++ b/tests/unit/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverControllerJUnitTest.java @@ -18,12 +18,16 @@ package com.android.settings.development.graphicsdriver; import static com.android.settings.development.graphicsdriver.GraphicsDriverEnableAngleAsSystemDriverController.ANGLE_DRIVER_SUFFIX; import static com.android.settings.development.graphicsdriver.GraphicsDriverEnableAngleAsSystemDriverController.Injector; +import static com.android.settings.development.graphicsdriver.GraphicsDriverEnableAngleAsSystemDriverController.PROPERTY_DEBUG_ANGLE_DEVELOPER_OPTION; import static com.android.settings.development.graphicsdriver.GraphicsDriverEnableAngleAsSystemDriverController.PROPERTY_PERSISTENT_GRAPHICS_EGL; import static com.android.settings.development.graphicsdriver.GraphicsDriverEnableAngleAsSystemDriverController.PROPERTY_RO_GFX_ANGLE_SUPPORTED; import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; @@ -98,6 +102,8 @@ public class GraphicsDriverEnableAngleAsSystemDriverControllerJUnitTest { } mContext = ApplicationProvider.getApplicationContext(); + when(mSystemPropertiesMock.getBoolean(eq(PROPERTY_DEBUG_ANGLE_DEVELOPER_OPTION), + anyBoolean())).thenReturn(true); // Construct a GraphicsDriverEnableAngleAsSystemDriverController with two Overrides: // 1) Override the mSystemProperties with mSystemPropertiesMock, @@ -468,4 +474,27 @@ public class GraphicsDriverEnableAngleAsSystemDriverControllerJUnitTest { SystemProperties.removeChangeCallback(propertyChangeSignal1.getCountDownJob()); SystemProperties.removeChangeCallback(propertyChangeSignal2.getCountDownJob()); } + + @Test + public void updateState_DeveloperOptionPropertyIsFalse() { + // Test that when debug.graphics.angle.developeroption.enable is false: + when(mSystemPropertiesMock.getBoolean(eq(PROPERTY_DEBUG_ANGLE_DEVELOPER_OPTION), + anyBoolean())).thenReturn(false); + when(mSystemPropertiesMock.get(eq(PROPERTY_RO_GFX_ANGLE_SUPPORTED), any())) + .thenReturn("true"); + + // 1. "Enable ANGLE" switch is on, the switch should be enabled. + when(mSystemPropertiesMock.get(eq(PROPERTY_PERSISTENT_GRAPHICS_EGL), any())) + .thenReturn(ANGLE_DRIVER_SUFFIX); + mController.updateState(mPreference); + assertTrue(mPreference.isChecked()); + assertTrue(mPreference.isEnabled()); + + // 2. "Enable ANGLE" switch is off, the switch should be disabled. + when(mSystemPropertiesMock.get(eq(PROPERTY_PERSISTENT_GRAPHICS_EGL), any())) + .thenReturn(""); + mController.updateState(mPreference); + assertFalse(mPreference.isChecked()); + assertFalse(mPreference.isEnabled()); + } } |