summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com>2023-10-18 19:50:40 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2023-10-18 19:50:40 +0000
commit0481d6a318c588b0dc9cbd6da1746d2c9ed719ff (patch)
tree0363049c17a9cbcc7d8b30b08fe6d0f6af18adc9
parent3eea9e53a11035987dd6e69f83f9275e4c6dfe3f (diff)
parent34d308924e038e6f68027e774dd404995ff942e1 (diff)
downloadSettings-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.
-rw-r--r--res/values/strings.xml4
-rw-r--r--src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverController.java27
-rw-r--r--src/com/android/settings/development/graphicsdriver/GraphicsDriverSystemPropertiesWrapper.java9
-rw-r--r--tests/robotests/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverControllerTest.java2
-rw-r--r--tests/unit/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverControllerJUnitTest.java29
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());
+ }
}