Snap for 10453563 from 74481dd023718b0b33972300815f7fcf4cae3e66 to mainline-tzdata5-release

Change-Id: I2434f79ed64587a506f08d4188b5bd53f3b8d707
diff --git a/src/android_system_settings/assets/a4a_rules.json b/src/android_system_settings/assets/a4a_rules.json
index 933f8f2..f0735d3 100644
--- a/src/android_system_settings/assets/a4a_rules.json
+++ b/src/android_system_settings/assets/a4a_rules.json
@@ -1,161 +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": "android.media.codec.cts"
-                },
-                {
-                    "AppName": "com.adobe.lrmobile"
-                },
-                {
-                    "AppName": "com.adobe.lens.android"
-                },
-                {
-                    "AppName": "com.caddish_hedgehog.hedgecam2"
-                },
-                {
-                    "AppName": "com.camtwo.hd.camera.pro"
-                },
-                {
-                    "AppName": "com.clsoftware.mute"
-                },
-                {
-                    "AppName": "com.cyworld.camera"
-                },
-                {
-                    "AppName": "com.dama.camera2"
-                },
-                {
-                    "AppName": "com.dwsh.super16"
-                },
-                {
-                    "AppName": "com.filmicpro.alpha"
-                },
-                {
-                    "AppName": "com.fgnm.baconcamera"
-                },
-                {
-                    "AppName": "com.fimo.camera"
-                },
-                {
-                    "AppName": "com.flavionet.android.camera.pro"
-                },
-                {
-                    "AppName": "com.flavionet.android.camera.lite"
-                },
-                {
-                    "AppName": "com.footej.camera"
-                },
-                {
-                    "AppName": "com.footej.camera2"
-                },
-                {
-                    "AppName": "com.ginnypix.gudakpro"
-                },
-                {
-                    "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.intermedia.hd.camera.pro"
-                },
-                {
-                    "AppName": "com.intermedia.hd.camera.professional"
-                },
-                {
-                    "AppName": "com.joeware.android.gpulumera"
-                },
-                {
-                    "AppName": "com.lensesdev.manual.camera.pro"
-                },
-                {
-                    "AppName": "com.magix.camera_mx"
-                },
-                {
-                    "AppName": "com.marginz.snap"
-                },
-                {
-                    "AppName": "com.neaststudios.procapture"
-                },
-                {
-                    "AppName": "com.netflix.mediaclient"
-                },
-                {
-                    "AppName": "com.niksoftware.snapseed"
-                },
-                {
-                    "AppName": "com.peace.SilentCamera"
-                },
-                {
-                    "AppName": "com.perracolabs.pixtica"
-                },
-                {
-                    "AppName": "com.riseupgames.proshot2"
-                },
-                {
-                    "AppName": "com.riseupgames.proshotevaluator"
-                },
-                {
-                    "AppName": "com.saychiz.remotecamera"
-                },
-                {
-                    "AppName": "com.sec.Android.app.camera"
-                },
-                {
-                    "AppName": "com.snapchat.android"
-                },
-                {
-                    "AppName": "com.snapphotofilters.funnystickers"
-                },
-                {
-                    "AppName": "com.ss.android.ugc.trill"
-                },
-                {
-                    "AppName": "com.vsco.cam"
-                },
-                {
-                    "AppName": "loorj.manualcam"
-                },
-                {
-                    "AppName": "net.sourceforge.opencamera"
-                },
-                {
-                    "AppName": "slide.camZoomFree"
-                },
-                {
-                    "AppName": "slide.cameraZoom"
-                },
-                {
-                    "AppName": "vStudio.Android.Camera360"
-                }
-            ]
-        }
-    ]
+   "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 caa1c8b..259406b 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 70a8a70..269a847 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 @@
     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 @@
         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 @@
                 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 @@
                 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 @@
         for (String pkgName : globalSettingsDriverPkgs)
         {
             // Remove any uninstalled packages.
-            if (!isPkgInstalled(pkgName) && !isPkgInDeferlist(pkgName))
+            if (!isPkgInstalled(pkgName))
             {
                 removePkgFromGlobalSettings(pkgName);
             }
@@ -352,20 +285,6 @@
         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 677f456..d60acb5 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 @@
 
         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 f8cbb9b..03fbf8d 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.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 @@
     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,21 +55,14 @@
         }
         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))
-            {
-                return;
-            }
+            String jsonStr      = loadRules(context);
+            String packageNames = parsePackageNames(jsonStr);
 
-            String jsonStr = loadRules(context);
-            parseDeferlist(context, jsonStr);
+            // Update the ANGLE allowlist
+            if (packageNames != null)
+            {
+                GlobalSettings.updateAngleAllowlist(context, packageNames);
+            }
 
             updateDeveloperOptionsWatcher(context);
         }
@@ -106,15 +93,11 @@
     }
 
     /*
-     * 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 @@
             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 @@
                     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 @@
                 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 @@
                     editor.apply();
                     GlobalSettings.clearAllGlobalSettings(context);
                 }
-                */
             }
         };