Merge "Fix "Enable ANGLE" switch behavior when Developer Option Switch is off" into udc-dev am: 67c72c01cb am: f783947615
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/23360519
Change-Id: I7d2cfa1bb297eab9ff0b06ed10d628153ae1c40c
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
index 87d8c17..f7be1aa 100644
--- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
+++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
@@ -354,13 +354,18 @@
final NfcVerboseVendorLogPreferenceController nfcVerboseLogController =
getDevelopmentOptionsController(
NfcVerboseVendorLogPreferenceController.class);
+ final GraphicsDriverEnableAngleAsSystemDriverController enableAngleController =
+ getDevelopmentOptionsController(
+ GraphicsDriverEnableAngleAsSystemDriverController.class);
// If hardware offload isn't default value, we must reboot after disable
// developer options. Show a dialog for the user to confirm.
if ((a2dpController == null || a2dpController.isDefaultValue())
&& (leAudioController == null || leAudioController.isDefaultValue())
&& (nfcSnoopLogController == null || nfcSnoopLogController.isDefaultValue())
&& (nfcVerboseLogController == null
- || nfcVerboseLogController.isDefaultValue())) {
+ || nfcVerboseLogController.isDefaultValue())
+ && (enableAngleController == null
+ || enableAngleController.isDefaultValue())) {
disableDeveloperOptions();
} else {
DisableDevSettingsDialogFragment.show(this /* host */);
diff --git a/src/com/android/settings/development/DisableDevSettingsDialogFragment.java b/src/com/android/settings/development/DisableDevSettingsDialogFragment.java
index 5db2ed4..224768b 100644
--- a/src/com/android/settings/development/DisableDevSettingsDialogFragment.java
+++ b/src/com/android/settings/development/DisableDevSettingsDialogFragment.java
@@ -45,6 +45,10 @@
public static void show(DevelopmentSettingsDashboardFragment host) {
final DisableDevSettingsDialogFragment dialog = new DisableDevSettingsDialogFragment();
dialog.setTargetFragment(host, 0 /* requestCode */);
+ // We need to handle data changes and switch state based on which button user clicks,
+ // therefore we should enforce user to click one of the buttons
+ // by disallowing dialog dismiss through tapping outside of dialog bounds.
+ dialog.setCancelable(false);
final FragmentManager manager = host.getActivity().getSupportFragmentManager();
dialog.show(manager, TAG);
}
diff --git a/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverController.java b/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverController.java
index 1a065a9..b3af95e 100644
--- a/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverController.java
+++ b/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverController.java
@@ -81,6 +81,11 @@
this(context, fragment, new Injector());
}
+ private boolean isAngleSupported() {
+ return TextUtils.equals(
+ mSystemProperties.get(PROPERTY_RO_GFX_ANGLE_SUPPORTED, ""), "true");
+ }
+
@VisibleForTesting
GraphicsDriverEnableAngleAsSystemDriverController(
Context context, DevelopmentSettingsDashboardFragment fragment, Injector injector) {
@@ -118,38 +123,44 @@
this);
}
- @Override
- public void updateState(Preference preference) {
- // set switch on if "persist.graphics.egl" is "angle" and angle is built in /vendor
- // set switch off otherwise.
+ /** Return the default value of "persist.graphics.egl" */
+ public boolean isDefaultValue() {
+ if (!isAngleSupported()) {
+ return true;
+ }
+
final String currentGlesDriver =
mSystemProperties.get(PROPERTY_PERSISTENT_GRAPHICS_EGL, "");
- final boolean isAngle = TextUtils.equals(ANGLE_DRIVER_SUFFIX, currentGlesDriver);
- final boolean isAngleSupported =
- TextUtils.equals(
- mSystemProperties.get(PROPERTY_RO_GFX_ANGLE_SUPPORTED, ""), "true");
- ((SwitchPreference) mPreference).setChecked(isAngle && isAngleSupported);
- ((SwitchPreference) mPreference).setEnabled(isAngleSupported);
+ // default value of "persist.graphics.egl" is ""
+ return TextUtils.isEmpty(currentGlesDriver);
}
@Override
- protected void onDeveloperOptionsSwitchEnabled() {
- // only enable the switch if ro.gfx.angle.supported is true
- // we use ro.gfx.angle.supported to indicate if ANGLE libs are installed under /vendor
- final boolean isAngleSupported =
- TextUtils.equals(
- mSystemProperties.get(PROPERTY_RO_GFX_ANGLE_SUPPORTED, ""), "true");
- ((SwitchPreference) mPreference).setEnabled(isAngleSupported);
+ public void updateState(Preference preference) {
+ super.updateState(preference);
+ if (isAngleSupported()) {
+ // set switch on if "persist.graphics.egl" is "angle" and angle is built in /vendor
+ // set switch off otherwise.
+ final String currentGlesDriver =
+ mSystemProperties.get(PROPERTY_PERSISTENT_GRAPHICS_EGL, "");
+ final boolean isAngle = TextUtils.equals(ANGLE_DRIVER_SUFFIX, currentGlesDriver);
+ ((SwitchPreference) mPreference).setChecked(isAngle);
+ } else {
+ mPreference.setEnabled(false);
+ ((SwitchPreference) mPreference).setChecked(false);
+ }
}
@Override
protected void onDeveloperOptionsSwitchDisabled() {
- // 1) set the persist.graphics.egl empty string
- GraphicsEnvironment.getInstance().toggleAngleAsSystemDriver(false);
- // 2) reset the switch
- ((SwitchPreference) mPreference).setChecked(false);
- // 3) disable switch
- ((SwitchPreference) mPreference).setEnabled(false);
+ // 1) disable the switch
+ super.onDeveloperOptionsSwitchDisabled();
+ if (isAngleSupported()) {
+ // 2) set the persist.graphics.egl empty string
+ GraphicsEnvironment.getInstance().toggleAngleAsSystemDriver(false);
+ // 3) reset the switch
+ ((SwitchPreference) mPreference).setChecked(false);
+ }
}
void toggleSwitchBack() {
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 de380c4..9210b87 100644
--- a/tests/robotests/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverControllerTest.java
@@ -141,6 +141,7 @@
@Test
public void onDeveloperOptionSwitchDisabled_shouldDisableAngleAsSystemDriver() {
+ ShadowSystemProperties.override(PROPERTY_RO_GFX_ANGLE_SUPPORTED, "true");
mController.onDeveloperOptionsSwitchDisabled();
final String systemEGLDriver = SystemProperties.get(PROPERTY_PERSISTENT_GRAPHICS_EGL);
assertThat(systemEGLDriver).isEqualTo("");
@@ -148,12 +149,14 @@
@Test
public void onDeveloperOptionSwitchDisabled_preferenceShouldNotBeChecked() {
+ ShadowSystemProperties.override(PROPERTY_RO_GFX_ANGLE_SUPPORTED, "true");
mController.onDeveloperOptionsSwitchDisabled();
verify(mPreference).setChecked(false);
}
@Test
public void onDeveloperOptionsSwitchDisabled_preferenceShouldNotBeEnabled() {
+ ShadowSystemProperties.override(PROPERTY_RO_GFX_ANGLE_SUPPORTED, "true");
mController.onDeveloperOptionsSwitchDisabled();
verify(mPreference).setEnabled(false);
}
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 c23292a..ae35431 100644
--- a/tests/unit/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverControllerJUnitTest.java
+++ b/tests/unit/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverControllerJUnitTest.java
@@ -57,7 +57,7 @@
private GraphicsDriverEnableAngleAsSystemDriverController mController;
// Signal to wait for SystemProperty values changed
- private class PropertyChangeSignal {
+ private static class PropertyChangeSignal {
private CountDownLatch mCountDownLatch;
private Runnable mCountDownJob;
@@ -217,23 +217,7 @@
}
@Test
- public void onDeveloperOptionSwitchEnabled_angleSupported_PreferenceShouldEnabled() {
- when(mSystemPropertiesMock.get(eq(PROPERTY_RO_GFX_ANGLE_SUPPORTED), any()))
- .thenReturn("true");
- mController.onDeveloperOptionsSwitchEnabled();
- assertThat(mPreference.isEnabled()).isTrue();
- }
-
- @Test
- public void onDeveloperOptionSwitchEnabled_angleNotSupported_PrefenceShouldDisabled() {
- when(mSystemPropertiesMock.get(eq(PROPERTY_RO_GFX_ANGLE_SUPPORTED), any()))
- .thenReturn("false");
- mController.onDeveloperOptionsSwitchEnabled();
- assertThat(mPreference.isEnabled()).isFalse();
- }
-
- @Test
- public void onDeveloperOptionSwitchDisabled_angleIsNotSystemGLESDriver() {
+ public void onDeveloperOptionSwitchDisabled_angleShouldNotBeSystemGLESDriver() {
// Add a callback when SystemProperty changes.
// This allows the thread to wait until
// GpuService::toggleAngleAsSystemDriver() updates the persist.graphics.egl.
@@ -242,6 +226,8 @@
// Test that onDeveloperOptionSwitchDisabled,
// persist.graphics.egl updates to ""
+ when(mSystemPropertiesMock.get(eq(PROPERTY_RO_GFX_ANGLE_SUPPORTED), any()))
+ .thenReturn("true");
mController.onDeveloperOptionsSwitchDisabled();
propertyChangeSignal1.wait(100);
final String systemEGLDriver = SystemProperties.get(PROPERTY_PERSISTENT_GRAPHICS_EGL);
@@ -253,12 +239,16 @@
@Test
public void onDeveloperOptionSwitchDisabled_PreferenceShouldNotBeChecked() {
+ when(mSystemPropertiesMock.get(eq(PROPERTY_RO_GFX_ANGLE_SUPPORTED), any()))
+ .thenReturn("true");
mController.onDeveloperOptionsSwitchDisabled();
assertThat(mPreference.isChecked()).isFalse();
}
@Test
public void onDeveloperOptionSwitchDisabled_PreferenceShouldDisabled() {
+ when(mSystemPropertiesMock.get(eq(PROPERTY_RO_GFX_ANGLE_SUPPORTED), any()))
+ .thenReturn("true");
mController.onDeveloperOptionsSwitchDisabled();
assertThat(mPreference.isEnabled()).isFalse();
}