Merge "Fix "Enable ANGLE" switch behavior when Developer Option Switch is off" into udc-dev am: 67c72c01cb
am: f783947615
am: 1af33f713b
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/23360519 Change-Id: Ib0f282be3b9f96abeff70eba344e63ab1c6b8c06 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -354,13 +354,18 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
|
|||||||
final NfcVerboseVendorLogPreferenceController nfcVerboseLogController =
|
final NfcVerboseVendorLogPreferenceController nfcVerboseLogController =
|
||||||
getDevelopmentOptionsController(
|
getDevelopmentOptionsController(
|
||||||
NfcVerboseVendorLogPreferenceController.class);
|
NfcVerboseVendorLogPreferenceController.class);
|
||||||
|
final GraphicsDriverEnableAngleAsSystemDriverController enableAngleController =
|
||||||
|
getDevelopmentOptionsController(
|
||||||
|
GraphicsDriverEnableAngleAsSystemDriverController.class);
|
||||||
// If hardware offload isn't default value, we must reboot after disable
|
// If hardware offload isn't default value, we must reboot after disable
|
||||||
// developer options. Show a dialog for the user to confirm.
|
// developer options. Show a dialog for the user to confirm.
|
||||||
if ((a2dpController == null || a2dpController.isDefaultValue())
|
if ((a2dpController == null || a2dpController.isDefaultValue())
|
||||||
&& (leAudioController == null || leAudioController.isDefaultValue())
|
&& (leAudioController == null || leAudioController.isDefaultValue())
|
||||||
&& (nfcSnoopLogController == null || nfcSnoopLogController.isDefaultValue())
|
&& (nfcSnoopLogController == null || nfcSnoopLogController.isDefaultValue())
|
||||||
&& (nfcVerboseLogController == null
|
&& (nfcVerboseLogController == null
|
||||||
|| nfcVerboseLogController.isDefaultValue())) {
|
|| nfcVerboseLogController.isDefaultValue())
|
||||||
|
&& (enableAngleController == null
|
||||||
|
|| enableAngleController.isDefaultValue())) {
|
||||||
disableDeveloperOptions();
|
disableDeveloperOptions();
|
||||||
} else {
|
} else {
|
||||||
DisableDevSettingsDialogFragment.show(this /* host */);
|
DisableDevSettingsDialogFragment.show(this /* host */);
|
||||||
|
@@ -45,6 +45,10 @@ public class DisableDevSettingsDialogFragment extends InstrumentedDialogFragment
|
|||||||
public static void show(DevelopmentSettingsDashboardFragment host) {
|
public static void show(DevelopmentSettingsDashboardFragment host) {
|
||||||
final DisableDevSettingsDialogFragment dialog = new DisableDevSettingsDialogFragment();
|
final DisableDevSettingsDialogFragment dialog = new DisableDevSettingsDialogFragment();
|
||||||
dialog.setTargetFragment(host, 0 /* requestCode */);
|
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();
|
final FragmentManager manager = host.getActivity().getSupportFragmentManager();
|
||||||
dialog.show(manager, TAG);
|
dialog.show(manager, TAG);
|
||||||
}
|
}
|
||||||
|
@@ -81,6 +81,11 @@ public class GraphicsDriverEnableAngleAsSystemDriverController
|
|||||||
this(context, fragment, new Injector());
|
this(context, fragment, new Injector());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isAngleSupported() {
|
||||||
|
return TextUtils.equals(
|
||||||
|
mSystemProperties.get(PROPERTY_RO_GFX_ANGLE_SUPPORTED, ""), "true");
|
||||||
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
GraphicsDriverEnableAngleAsSystemDriverController(
|
GraphicsDriverEnableAngleAsSystemDriverController(
|
||||||
Context context, DevelopmentSettingsDashboardFragment fragment, Injector injector) {
|
Context context, DevelopmentSettingsDashboardFragment fragment, Injector injector) {
|
||||||
@@ -118,38 +123,44 @@ public class GraphicsDriverEnableAngleAsSystemDriverController
|
|||||||
this);
|
this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Return the default value of "persist.graphics.egl" */
|
||||||
|
public boolean isDefaultValue() {
|
||||||
|
if (!isAngleSupported()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
final String currentGlesDriver =
|
||||||
|
mSystemProperties.get(PROPERTY_PERSISTENT_GRAPHICS_EGL, "");
|
||||||
|
// default value of "persist.graphics.egl" is ""
|
||||||
|
return TextUtils.isEmpty(currentGlesDriver);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateState(Preference preference) {
|
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 on if "persist.graphics.egl" is "angle" and angle is built in /vendor
|
||||||
// set switch off otherwise.
|
// set switch off otherwise.
|
||||||
final String currentGlesDriver =
|
final String currentGlesDriver =
|
||||||
mSystemProperties.get(PROPERTY_PERSISTENT_GRAPHICS_EGL, "");
|
mSystemProperties.get(PROPERTY_PERSISTENT_GRAPHICS_EGL, "");
|
||||||
final boolean isAngle = TextUtils.equals(ANGLE_DRIVER_SUFFIX, currentGlesDriver);
|
final boolean isAngle = TextUtils.equals(ANGLE_DRIVER_SUFFIX, currentGlesDriver);
|
||||||
final boolean isAngleSupported =
|
((SwitchPreference) mPreference).setChecked(isAngle);
|
||||||
TextUtils.equals(
|
} else {
|
||||||
mSystemProperties.get(PROPERTY_RO_GFX_ANGLE_SUPPORTED, ""), "true");
|
mPreference.setEnabled(false);
|
||||||
((SwitchPreference) mPreference).setChecked(isAngle && isAngleSupported);
|
((SwitchPreference) mPreference).setChecked(false);
|
||||||
((SwitchPreference) mPreference).setEnabled(isAngleSupported);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onDeveloperOptionsSwitchDisabled() {
|
protected void onDeveloperOptionsSwitchDisabled() {
|
||||||
// 1) set the persist.graphics.egl empty string
|
// 1) disable the switch
|
||||||
|
super.onDeveloperOptionsSwitchDisabled();
|
||||||
|
if (isAngleSupported()) {
|
||||||
|
// 2) set the persist.graphics.egl empty string
|
||||||
GraphicsEnvironment.getInstance().toggleAngleAsSystemDriver(false);
|
GraphicsEnvironment.getInstance().toggleAngleAsSystemDriver(false);
|
||||||
// 2) reset the switch
|
// 3) reset the switch
|
||||||
((SwitchPreference) mPreference).setChecked(false);
|
((SwitchPreference) mPreference).setChecked(false);
|
||||||
// 3) disable switch
|
}
|
||||||
((SwitchPreference) mPreference).setEnabled(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void toggleSwitchBack() {
|
void toggleSwitchBack() {
|
||||||
|
@@ -141,6 +141,7 @@ public class GraphicsDriverEnableAngleAsSystemDriverControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onDeveloperOptionSwitchDisabled_shouldDisableAngleAsSystemDriver() {
|
public void onDeveloperOptionSwitchDisabled_shouldDisableAngleAsSystemDriver() {
|
||||||
|
ShadowSystemProperties.override(PROPERTY_RO_GFX_ANGLE_SUPPORTED, "true");
|
||||||
mController.onDeveloperOptionsSwitchDisabled();
|
mController.onDeveloperOptionsSwitchDisabled();
|
||||||
final String systemEGLDriver = SystemProperties.get(PROPERTY_PERSISTENT_GRAPHICS_EGL);
|
final String systemEGLDriver = SystemProperties.get(PROPERTY_PERSISTENT_GRAPHICS_EGL);
|
||||||
assertThat(systemEGLDriver).isEqualTo("");
|
assertThat(systemEGLDriver).isEqualTo("");
|
||||||
@@ -148,12 +149,14 @@ public class GraphicsDriverEnableAngleAsSystemDriverControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onDeveloperOptionSwitchDisabled_preferenceShouldNotBeChecked() {
|
public void onDeveloperOptionSwitchDisabled_preferenceShouldNotBeChecked() {
|
||||||
|
ShadowSystemProperties.override(PROPERTY_RO_GFX_ANGLE_SUPPORTED, "true");
|
||||||
mController.onDeveloperOptionsSwitchDisabled();
|
mController.onDeveloperOptionsSwitchDisabled();
|
||||||
verify(mPreference).setChecked(false);
|
verify(mPreference).setChecked(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onDeveloperOptionsSwitchDisabled_preferenceShouldNotBeEnabled() {
|
public void onDeveloperOptionsSwitchDisabled_preferenceShouldNotBeEnabled() {
|
||||||
|
ShadowSystemProperties.override(PROPERTY_RO_GFX_ANGLE_SUPPORTED, "true");
|
||||||
mController.onDeveloperOptionsSwitchDisabled();
|
mController.onDeveloperOptionsSwitchDisabled();
|
||||||
verify(mPreference).setEnabled(false);
|
verify(mPreference).setEnabled(false);
|
||||||
}
|
}
|
||||||
|
@@ -57,7 +57,7 @@ public class GraphicsDriverEnableAngleAsSystemDriverControllerJUnitTest {
|
|||||||
private GraphicsDriverEnableAngleAsSystemDriverController mController;
|
private GraphicsDriverEnableAngleAsSystemDriverController mController;
|
||||||
|
|
||||||
// Signal to wait for SystemProperty values changed
|
// Signal to wait for SystemProperty values changed
|
||||||
private class PropertyChangeSignal {
|
private static class PropertyChangeSignal {
|
||||||
private CountDownLatch mCountDownLatch;
|
private CountDownLatch mCountDownLatch;
|
||||||
|
|
||||||
private Runnable mCountDownJob;
|
private Runnable mCountDownJob;
|
||||||
@@ -217,23 +217,7 @@ public class GraphicsDriverEnableAngleAsSystemDriverControllerJUnitTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onDeveloperOptionSwitchEnabled_angleSupported_PreferenceShouldEnabled() {
|
public void onDeveloperOptionSwitchDisabled_angleShouldNotBeSystemGLESDriver() {
|
||||||
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() {
|
|
||||||
// Add a callback when SystemProperty changes.
|
// Add a callback when SystemProperty changes.
|
||||||
// This allows the thread to wait until
|
// This allows the thread to wait until
|
||||||
// GpuService::toggleAngleAsSystemDriver() updates the persist.graphics.egl.
|
// GpuService::toggleAngleAsSystemDriver() updates the persist.graphics.egl.
|
||||||
@@ -242,6 +226,8 @@ public class GraphicsDriverEnableAngleAsSystemDriverControllerJUnitTest {
|
|||||||
|
|
||||||
// Test that onDeveloperOptionSwitchDisabled,
|
// Test that onDeveloperOptionSwitchDisabled,
|
||||||
// persist.graphics.egl updates to ""
|
// persist.graphics.egl updates to ""
|
||||||
|
when(mSystemPropertiesMock.get(eq(PROPERTY_RO_GFX_ANGLE_SUPPORTED), any()))
|
||||||
|
.thenReturn("true");
|
||||||
mController.onDeveloperOptionsSwitchDisabled();
|
mController.onDeveloperOptionsSwitchDisabled();
|
||||||
propertyChangeSignal1.wait(100);
|
propertyChangeSignal1.wait(100);
|
||||||
final String systemEGLDriver = SystemProperties.get(PROPERTY_PERSISTENT_GRAPHICS_EGL);
|
final String systemEGLDriver = SystemProperties.get(PROPERTY_PERSISTENT_GRAPHICS_EGL);
|
||||||
@@ -253,12 +239,16 @@ public class GraphicsDriverEnableAngleAsSystemDriverControllerJUnitTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onDeveloperOptionSwitchDisabled_PreferenceShouldNotBeChecked() {
|
public void onDeveloperOptionSwitchDisabled_PreferenceShouldNotBeChecked() {
|
||||||
|
when(mSystemPropertiesMock.get(eq(PROPERTY_RO_GFX_ANGLE_SUPPORTED), any()))
|
||||||
|
.thenReturn("true");
|
||||||
mController.onDeveloperOptionsSwitchDisabled();
|
mController.onDeveloperOptionsSwitchDisabled();
|
||||||
assertThat(mPreference.isChecked()).isFalse();
|
assertThat(mPreference.isChecked()).isFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onDeveloperOptionSwitchDisabled_PreferenceShouldDisabled() {
|
public void onDeveloperOptionSwitchDisabled_PreferenceShouldDisabled() {
|
||||||
|
when(mSystemPropertiesMock.get(eq(PROPERTY_RO_GFX_ANGLE_SUPPORTED), any()))
|
||||||
|
.thenReturn("true");
|
||||||
mController.onDeveloperOptionsSwitchDisabled();
|
mController.onDeveloperOptionsSwitchDisabled();
|
||||||
assertThat(mPreference.isEnabled()).isFalse();
|
assertThat(mPreference.isEnabled()).isFalse();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user