# ANGLE Settings UI ## Introduction ANGLE Settings UI is a UI shipped as part of the ANGLE apk. The ANGLE apk can ship with a list rules of applications using different OpenGL ES driver. The UI provides two functionalities: 1) Enable to show a message when ANGLE is loaded into the launched application; 2) Allow to select driver choice in the UI for applications. ## The rule file Currently the ANGLE apk supports two rules: ANGLE and native OpenGL ES driver. The rule file is a file that contains a JSON string, the format is shown below: ``` { "rules":[ { "description": "Applications in this list will use ANGLE", "choice": "angle", "apps": [ { "packageName": "com.android.example.a" }, { "packageName": "com.android.example.b" } ] }, { "description": "Applications in this list will not use ANGLE", "choice": "native", "apps":[ { "packageName": "com.android.example.c" } ] } ] } ``` The ANGLE JSON rules are parsed only when `ACTION_BOOT_COMPLETED` or `ACTION_MY_PACKAGE_REPLACED` is received. After the JSON rules are parsed, the result will be stored in `SharedPreferences` as key-value pair, with the key being the package name and the value being the driver selection choice. The JSON parsing code is in `AngleRuleHelper`. After parsing, the rules are converted to global settings variables and applied to the system. This is done in `Receiver`. The UI logic is mainly in `MainFragment`, and the `GlobalSettings` is merely for manipulating settings global variables and updating `SharedPreferences`. When a user changes the driver choice of an application, the update will go into `GlobalSettings` and `SharedPreferences` respectively. The `SharedPreferences` is the source of truth and the code should always query the driver choice from it with the package name. The `SharedPreferences` should only be updated within `GlobalSettings` and `AngleRuleHelper`. The settings global variables may also be changed via `adb` command by the users, often time ANGLE for Android developers. Note that every time a boot event happens, it is expected that all previous values in settings global variables will be cleared and only values from the ANGLE JSON rule file will take effect. ## Developer options The ANGLE Settings UI is registered as a dynamic setting entry in the development component via ``` ``` And hence the UI shows up in Developer options. If the Developer options are disabled, all settings global variables will be cleared.