blob: 767bdae7c3bcb9c7ee8e76c5d0a5c8a8ddc35780 [file] [log] [blame] [view]
# 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
```
<intent-filter>
<action android:name="com.android.settings.action.IA_SETTINGS" />
</intent-filter>
<meta-data android:name="com.android.settings.category"
android:value="com.android.settings.category.ia.development" />
```
And hence the UI shows up in Developer options. If the Developer options are disabled, all settings
global variables will be cleared.