Merge "Fix "Enable ANGLE" switch behavior when Developer Option Switch is off" into udc-dev am: 67c72c01cb am: b67e1d5371

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/23360519

Change-Id: I6f25d8783e9c94335bd8f58c969b8e14c82f9147
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Yuxin Hu
2023-05-25 19:45:48 +00:00
committed by Automerger Merge Worker
5 changed files with 55 additions and 42 deletions

View File

@@ -354,13 +354,18 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
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 */);

View File

@@ -45,6 +45,10 @@ public class DisableDevSettingsDialogFragment extends InstrumentedDialogFragment
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);
}

View File

@@ -81,6 +81,11 @@ public class GraphicsDriverEnableAngleAsSystemDriverController
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 @@ public class GraphicsDriverEnableAngleAsSystemDriverController
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() {