Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e92284ce authored by Peiyong Lin's avatar Peiyong Lin Committed by Automerger Merge Worker
Browse files

[Cherry-pick] Add debug property to safe guard ANGLE developer option UI. am: 3182b0e2

parents 24503938 3182b0e2
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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 default OpenGL ES driver. Enabling it on incompatible devices may break some applications.</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>
+26 −0
Original line number Diff line number Diff line
@@ -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,12 @@ public class GraphicsDriverEnableAngleAsSystemDriverController
            mPreference.setEnabled(false);
            ((SwitchPreference) mPreference).setChecked(false);
        }

        // Regardless of whether ANGLE is enabled, disable the developer option UI
        // as long as UI is not enabled via debug property.
        if (!isAngleDeveloperOptionEnabled()) {
            mPreference.setEnabled(false);
        }
    }

    @Override
+9 −0
Original line number Diff line number Diff line
@@ -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);
}
+2 −0
Original line number Diff line number Diff line
@@ -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();
+4 −0
Original line number Diff line number Diff line
@@ -18,12 +18,14 @@ 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.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.when;

@@ -98,6 +100,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,