aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-05-20 01:09:43 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-05-20 01:09:43 +0000
commit514d8a4874ae93b57dc95967b8505541a2a875e2 (patch)
treed30fedb12fe3a2fe63e1d4efa2ed608f1f0f4b0b
parenta25cbee451954b1ec9b11ab1c4758324dcf9d7d1 (diff)
parentdf9f6d901b0eb7c2e0bbd021974ad3ab21fdf993 (diff)
downloadangle-android14-d1-s2-release.tar.gz
Change-Id: Ia37f190019c44519829cb0e9b9ee2275c91864b2
-rw-r--r--src/android_system_settings/assets/a4a_rules.json68
-rw-r--r--src/android_system_settings/res/values/global_settings.xml3
-rw-r--r--src/android_system_settings/src/com/android/angle/common/GlobalSettings.java89
-rw-r--r--src/android_system_settings/src/com/android/angle/common/MainFragment.java31
-rw-r--r--src/android_system_settings/src/com/android/angle/common/Receiver.java54
5 files changed, 49 insertions, 196 deletions
diff --git a/src/android_system_settings/assets/a4a_rules.json b/src/android_system_settings/assets/a4a_rules.json
index cff73f7ff9..f0735d358b 100644
--- a/src/android_system_settings/assets/a4a_rules.json
+++ b/src/android_system_settings/assets/a4a_rules.json
@@ -1,47 +1,25 @@
{
- "Rules": [
- {
- "Rule": "Default Rule (i.e. use native driver)",
- "UseANGLE": true
- },
- {
- "Rule": "Do not use ANGLE for application(s) currently known to have issues",
- "UseANGLE": false,
- "Applications": [
- {
- "AppName": "com.google.android.apps.photos"
- },
- {
- "AppName": "com.google.android.GoogleCamera"
- },
- {
- "AppName": "com.google.android.GoogleCameraEng"
- },
- {
- "AppName": "com.google.android.videos"
- },
- {
- "AppName": "com.google.android.youtube"
- },
- {
- "AppName": "com.disney.disneyplus"
- },
- {
- "AppName": "com.facebook.katana"
- },
- {
- "AppName": "com.hbo.hbonow"
- },
- {
- "AppName": "com.netflix.mediaclient"
- },
- {
- "AppName": "com.snapchat.android"
- },
- {
- "AppName": "com.ss.android.ugc.trill"
- }
- ]
- }
- ]
+ "Rules":[
+ {
+ "Rule":"Default Rule (i.e. use native driver)",
+ "UseANGLE":false
+ },
+ {
+ "Rule":"Supported application(s) (e.g. Maps on Google devices)",
+ "UseANGLE":true,
+ "Applications":[
+ {
+ "AppName":"com.android.angle"
+ },
+ {
+ "AppName":"com.google.android.angle"
+ }
+ ],
+ "Devices":[
+ {
+ "Manufacturer":"Google"
+ }
+ ]
+ }
+ ]
}
diff --git a/src/android_system_settings/res/values/global_settings.xml b/src/android_system_settings/res/values/global_settings.xml
index caa1c8b588..259406bdb8 100644
--- a/src/android_system_settings/res/values/global_settings.xml
+++ b/src/android_system_settings/res/values/global_settings.xml
@@ -21,6 +21,5 @@
<string name="global_settings_driver_selection_pkgs">angle_gl_driver_selection_pkgs</string>
<string name="global_settings_driver_selection_values">angle_gl_driver_selection_values</string>
<string name="global_settings_angle_debug_package">angle_debug_package</string>
- <string name="global_settings_angle_deferlist">angle_deferlist</string>
- <string name="global_settings_angle_deferlist_mode">angle_deferlist_mode</string>
+ <string name="global_settings_angle_allowlist">angle_allowlist</string>
</resources>
diff --git a/src/android_system_settings/src/com/android/angle/common/GlobalSettings.java b/src/android_system_settings/src/com/android/angle/common/GlobalSettings.java
index 70a8a70b4b..269a847313 100644
--- a/src/android_system_settings/src/com/android/angle/common/GlobalSettings.java
+++ b/src/android_system_settings/src/com/android/angle/common/GlobalSettings.java
@@ -34,26 +34,6 @@ class GlobalSettings
private List<PackageInfo> mInstalledPkgs = new ArrayList<>();
private List<String> mGlobalSettingsDriverPkgs = new ArrayList<>();
private List<String> mGlobalSettingsDriverValues = new ArrayList<>();
- private List<String> mGlobalDeferlist = new ArrayList<>();
-
- /*
- * Modes of applying the deferlist to the per-application switch (i.e. the
- * "angle_gl_driver_selection_*" settings). Most devices will not do anything
- * (i.e. DEFERLIST_MODE_NA). While a device is transitioning from using a legacy driver to
- * using ANGLE, the following modes can be used to defer the use of ANGLE until bugs are fixed.
- *
- * NOTE: the set of modes can grow over time, as we identify new needs.
- */
- // ANGLE deferlist not applicable. For devices where ANGLE is either: 1) not installed; 2) is
- // not the system driver; 3) is the system driver and there is no legacy driver
- private static final int DEFERLIST_MODE_NA = 0;
- // ANGLE deferlist replaces the existing settings at first boot, and then doesn't change them
- private static final int DEFERLIST_MODE_REPLACE = 1;
- // ANGLE deferlist is merged into the existing settings at first boot, and then doesn't change
- // them
- private static final int DEFERLIST_MODE_MERGE = 2;
-
- private static final int kDesiredDeferlistMode = DEFERLIST_MODE_REPLACE;
GlobalSettings(Context context, List<PackageInfo> installedPkgs)
{
@@ -80,7 +60,7 @@ class GlobalSettings
Settings.Global.putString(contentResolver,
context.getString(R.string.global_settings_angle_debug_package), "");
- // Skip angle_deferlist; not updatable via Developer Options
+ // Skip angle_allowlist; not updatable via Developer Options
}
Boolean getAllUseAngle()
@@ -128,56 +108,11 @@ class GlobalSettings
showAngleInUseDialog ? 1 : 0);
}
- static void updateAngleDeferlist(Context context, String packageNames, String driverNames)
+ static void updateAngleAllowlist(Context context, String packageNames)
{
- // Write the deferlist to a setting so that it survives reboots
ContentResolver contentResolver = context.getContentResolver();
Settings.Global.putString(contentResolver,
- context.getString(R.string.global_settings_angle_deferlist), packageNames);
-
- // Depending on the device's current and desired deferlist mode, potentially transition to
- // the desired mode, which may involve changing the "angle_gl_driver_selection_*" settings,
- // based on the deferlist packages coming from the packageNames and driverNames parameters.
- int currentDeferlistMode = DEFERLIST_MODE_NA;
- try
- {
- currentDeferlistMode = Settings.Global.getInt(
- contentResolver,
- context.getString(R.string.global_settings_angle_deferlist_mode));
- }
- catch (Settings.SettingNotFoundException e)
- {
- // This is likely a newly-flashed system, with a non-existent setting; assume NA
- currentDeferlistMode = DEFERLIST_MODE_NA;
- }
- switch (kDesiredDeferlistMode)
- {
- case DEFERLIST_MODE_NA:
- // Do nothing
- break;
- case DEFERLIST_MODE_REPLACE:
- // Replace the existing per-application switch settings
- if (currentDeferlistMode != kDesiredDeferlistMode)
- {
- Settings.Global.putString(contentResolver,
- context.getString(R.string.global_settings_driver_selection_pkgs),
- packageNames);
- Settings.Global.putString(contentResolver,
- context.getString(R.string.global_settings_driver_selection_values),
- driverNames);
- }
- break;
- case DEFERLIST_MODE_MERGE:
- // TODO: implement this when needed (b/224558229)
- break;
- default:
- // Do nothing
- break;
- }
- // Set the device's current mode to the desired mode
- Settings.Global.putInt(contentResolver,
- context.getString(R.string.global_settings_angle_deferlist_mode),
- kDesiredDeferlistMode);
+ context.getString(R.string.global_settings_angle_allowlist), packageNames);
}
void updatePkg(String pkgName, String driver)
@@ -250,8 +185,6 @@ class GlobalSettings
mContext.getString(R.string.global_settings_driver_selection_pkgs));
mGlobalSettingsDriverValues = getGlobalSettingsString(
mContext.getString(R.string.global_settings_driver_selection_values));
- mGlobalDeferlist = getGlobalSettingsString(
- mContext.getString(R.string.global_settings_angle_deferlist));
}
private List<String> getGlobalSettingsString(String globalSetting)
@@ -301,7 +234,7 @@ class GlobalSettings
for (String pkgName : globalSettingsDriverPkgs)
{
// Remove any uninstalled packages.
- if (!isPkgInstalled(pkgName) && !isPkgInDeferlist(pkgName))
+ if (!isPkgInstalled(pkgName))
{
removePkgFromGlobalSettings(pkgName);
}
@@ -352,20 +285,6 @@ class GlobalSettings
return false;
}
- private Boolean isPkgInDeferlist(String pkgName)
- {
- List<String> globalSettingsDeferlist = new ArrayList<>(mGlobalDeferlist);
- for (String pkg : globalSettingsDeferlist)
- {
- if (pkg.equals(pkgName))
- {
- return true;
- }
- }
-
- return false;
- }
-
private Boolean isValidDiverValue(String driverValue)
{
CharSequence[] drivers = mContext.getResources().getStringArray(R.array.driver_values);
diff --git a/src/android_system_settings/src/com/android/angle/common/MainFragment.java b/src/android_system_settings/src/com/android/angle/common/MainFragment.java
index 677f456ac8..d60acb5947 100644
--- a/src/android_system_settings/src/com/android/angle/common/MainFragment.java
+++ b/src/android_system_settings/src/com/android/angle/common/MainFragment.java
@@ -209,32 +209,15 @@ public class MainFragment extends PreferenceFragment implements OnSharedPreferen
for (PackageInfo packageInfo : pkgs)
{
- // We need to be able to see the following system applications until ANGLE supports YUV
- // b/232149402
- if (!(packageInfo.packageName.equals("com.google.android.calendar") ||
- packageInfo.packageName.equals("com.android.chrome") ||
- packageInfo.packageName.equals("com.google.android.gm") ||
- packageInfo.packageName.equals("com.google.android.GoogleCamera") ||
- packageInfo.packageName.equals("com.google.android.GoogleCameraEng") ||
- packageInfo.packageName.equals("com.google.android.apps.chromecast.app") ||
- packageInfo.packageName.equals("com.google.android.apps.magazines") ||
- packageInfo.packageName.equals("com.google.android.apps.maps") ||
- packageInfo.packageName.equals("com.google.android.apps.messaging") ||
- packageInfo.packageName.equals("com.google.android.apps.photos") ||
- packageInfo.packageName.equals("com.google.android.apps.photosgo") ||
- packageInfo.packageName.equals("com.google.android.videos") ||
- packageInfo.packageName.equals("com.google.android.youtube")))
+ if (packageInfo.applicationInfo.uid == Process.SYSTEM_UID)
{
- if (packageInfo.applicationInfo.uid == Process.SYSTEM_UID)
- {
- continue;
- }
+ continue;
+ }
- // Filter out apps that are system apps
- if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0)
- {
- continue;
- }
+ // Filter out apps that are system apps
+ if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0)
+ {
+ continue;
}
mInstalledPkgs.add(packageInfo);
diff --git a/src/android_system_settings/src/com/android/angle/common/Receiver.java b/src/android_system_settings/src/com/android/angle/common/Receiver.java
index f8cbb9b904..03fbf8d1ed 100644
--- a/src/android_system_settings/src/com/android/angle/common/Receiver.java
+++ b/src/android_system_settings/src/com/android/angle/common/Receiver.java
@@ -22,7 +22,6 @@ import android.content.SharedPreferences;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Bundle;
-import android.os.SystemProperties;
import android.os.Handler;
import android.provider.Settings;
import android.util.Log;
@@ -42,11 +41,6 @@ public class Receiver extends BroadcastReceiver
private static final String TAG = "AngleReceiver";
private static final String ANGLE_RULES_FILE = "a4a_rules.json";
- // System properties related to ANGLE and legacy GLES graphics drivers.
- private static final String PROPERTY_EGL_SYSTEM_DRIVER = "ro.hardware.egl";
- private static final String PROPERTY_EGL_LEGACY_DRIVER = "ro.hardware.egl_legacy";
- private static final String ANGLE_DRIVER_NAME = "angle";
-
@Override
public void onReceive(Context context, Intent intent)
{
@@ -61,22 +55,15 @@ public class Receiver extends BroadcastReceiver
}
else
{
- // Process the deferlist only if both: 1) ANGLE is the system driver; 2) there is also a
- // legacy driver:
- final String eglSystemDriver = SystemProperties.get(PROPERTY_EGL_SYSTEM_DRIVER);
- if (!eglSystemDriver.equals(ANGLE_DRIVER_NAME))
- {
- return;
- }
- final String eglLegacyDriver = SystemProperties.get(PROPERTY_EGL_LEGACY_DRIVER);
- if (eglLegacyDriver.isEmpty() || eglSystemDriver.equals(eglLegacyDriver))
+ String jsonStr = loadRules(context);
+ String packageNames = parsePackageNames(jsonStr);
+
+ // Update the ANGLE allowlist
+ if (packageNames != null)
{
- return;
+ GlobalSettings.updateAngleAllowlist(context, packageNames);
}
- String jsonStr = loadRules(context);
- parseDeferlist(context, jsonStr);
-
updateDeveloperOptionsWatcher(context);
}
}
@@ -106,15 +93,11 @@ public class Receiver extends BroadcastReceiver
}
/*
- * Parse the default deferlist from a json file, and convert it into the following
- * comma-separated settings:
- * - "angle_gl_driver_selection_pkgs"
- * - "angle_gl_driver_selection_values"
+ * Extract all app package names from the json file and return them comma separated
*/
- public void parseDeferlist(Context context, String rulesJSON)
+ private String parsePackageNames(String rulesJSON)
{
StringBuilder packageNames = new StringBuilder();
- StringBuilder driverNames = new StringBuilder();
try
{
@@ -123,7 +106,7 @@ public class Receiver extends BroadcastReceiver
if (rules == null)
{
Log.e(TAG, "No Rules in " + ANGLE_RULES_FILE);
- return;
+ return null;
}
for (int i = 0; i < rules.length(); i++)
{
@@ -145,23 +128,20 @@ public class Receiver extends BroadcastReceiver
if (!packageNames.toString().isEmpty())
{
packageNames.append(",");
- driverNames.append(",");
}
packageNames.append(appName);
- driverNames.append("native");
}
}
- Log.v(TAG, "Parsed the following deferlist package names from " + ANGLE_RULES_FILE
- + ": " + packageNames);
+ Log.v(TAG, "Parsed the following package names from " + ANGLE_RULES_FILE + ": "
+ + packageNames);
}
catch (JSONException je)
{
- Log.e(TAG, "Error when parsing angle deferlist JSON: ", je);
- return;
+ Log.e(TAG, "Error when parsing angle JSON: ", je);
+ return null;
}
- GlobalSettings.updateAngleDeferlist(context, packageNames.toString(),
- driverNames.toString());
+ return packageNames.toString();
}
static void updateAllUseAngle(Context context)
@@ -208,11 +188,6 @@ public class Receiver extends BroadcastReceiver
Log.v(TAG, "Developer Options enabled value changed: "
+ "developerOptionsEnabled = " + developerOptionsEnabled);
- /*
- * NOTE: We DO NOT want to clear these when ANGLE is system driver
- *
- * TODO: We need to be able to query the service to known when to do this
- *
if (!developerOptionsEnabled)
{
// Reset the necessary settings to their defaults.
@@ -222,7 +197,6 @@ public class Receiver extends BroadcastReceiver
editor.apply();
GlobalSettings.clearAllGlobalSettings(context);
}
- */
}
};