diff --git a/libs/graphicsenv/GraphicsEnv.cpp b/libs/graphicsenv/GraphicsEnv.cpp
index 80daeb9..282b468 100644
--- a/libs/graphicsenv/GraphicsEnv.cpp
+++ b/libs/graphicsenv/GraphicsEnv.cpp
@@ -56,14 +56,25 @@
     mDriverPath = path;
 }
 
-void GraphicsEnv::setAnglePath(const std::string path) {
+void GraphicsEnv::setAngleInfo(const std::string path, const std::string appName,
+                               bool developerOptIn) {
     if (!mAnglePath.empty()) {
         ALOGV("ignoring attempt to change ANGLE path from '%s' to '%s'", mAnglePath.c_str(),
               path.c_str());
-        return;
+    } else {
+        ALOGV("setting ANGLE path to '%s'", path.c_str());
+        mAnglePath = path;
     }
-    ALOGV("setting ANGLE path to '%s'", path.c_str());
-    mAnglePath = path;
+
+    if (!mAngleAppName.empty()) {
+        ALOGV("ignoring attempt to change ANGLE app name from '%s' to '%s'", mAngleAppName.c_str(),
+              appName.c_str());
+    } else {
+        ALOGV("setting ANGLE app name to '%s'", appName.c_str());
+        mAngleAppName = appName;
+    }
+
+    mAngleDeveloperOptIn = developerOptIn;
 }
 
 void GraphicsEnv::setLayerPaths(NativeLoaderNamespace* appNamespace, const std::string layerPaths) {
@@ -80,6 +91,15 @@
     return mAppNamespace;
 }
 
+const char* GraphicsEnv::getAngleAppName() {
+    if (mAngleAppName.empty()) return nullptr;
+    return mAngleAppName.c_str();
+}
+
+bool GraphicsEnv::getAngleDeveloperOptIn() {
+    return mAngleDeveloperOptIn;
+}
+
 const std::string GraphicsEnv::getLayerPaths(){
     return mLayerPaths;
 }
@@ -139,4 +159,10 @@
 android_namespace_t* android_getAngleNamespace() {
     return android::GraphicsEnv::getInstance().getAngleNamespace();
 }
+const char* android_getAngleAppName() {
+    return android::GraphicsEnv::getInstance().getAngleAppName();
+}
+bool android_getAngleDeveloperOptIn() {
+    return android::GraphicsEnv::getInstance().getAngleDeveloperOptIn();
+}
 }
diff --git a/libs/graphicsenv/include/graphicsenv/GraphicsEnv.h b/libs/graphicsenv/include/graphicsenv/GraphicsEnv.h
index ea38a97..58d4582 100644
--- a/libs/graphicsenv/include/graphicsenv/GraphicsEnv.h
+++ b/libs/graphicsenv/include/graphicsenv/GraphicsEnv.h
@@ -42,8 +42,10 @@
     // (libraries must be stored uncompressed and page aligned); such elements
     // in the search path must have a '!' after the zip filename, e.g.
     //     /system/app/ANGLEPrebuilt/ANGLEPrebuilt.apk!/lib/arm64-v8a
-    void setAnglePath(const std::string path);
+    void setAngleInfo(const std::string path, const std::string appName, const bool optIn);
     android_namespace_t* getAngleNamespace();
+    const char* getAngleAppName();
+    bool getAngleDeveloperOptIn();
 
     void setLayerPaths(NativeLoaderNamespace* appNamespace, const std::string layerPaths);
     NativeLoaderNamespace* getAppNamespace();
@@ -57,6 +59,8 @@
     GraphicsEnv() = default;
     std::string mDriverPath;
     std::string mAnglePath;
+    std::string mAngleAppName;
+    bool mAngleDeveloperOptIn;
     std::string mDebugLayers;
     std::string mLayerPaths;
     android_namespace_t* mDriverNamespace = nullptr;
@@ -77,7 +81,11 @@
  *  - the EGLsyncKHR synchronization in BufferQueue, which is deprecated and
  *    will be removed soon.
  */
-extern "C" android_namespace_t* android_getDriverNamespace();
-extern "C" android_namespace_t* android_getAngleNamespace();
+extern "C" {
+android_namespace_t* android_getDriverNamespace();
+android_namespace_t* android_getAngleNamespace();
+const char* android_getAngleAppName();
+bool android_getAngleDeveloperOptIn();
+}
 
 #endif // ANDROID_UI_GRAPHICS_ENV_H
diff --git a/opengl/libs/EGL/Loader.cpp b/opengl/libs/EGL/Loader.cpp
index 2e01965..531bb20 100644
--- a/opengl/libs/EGL/Loader.cpp
+++ b/opengl/libs/EGL/Loader.cpp
@@ -475,7 +475,7 @@
     return nullptr;
 }
 
-static void* load_angle(const char* kind, android_namespace_t* ns, egl_connection_t* cnx) {
+static void* load_angle(const char* kind, egl_connection_t* cnx) {
     // Only attempt to load ANGLE libs
     if (strcmp(kind, "EGL") != 0 && strcmp(kind, "GLESv2") != 0 && strcmp(kind, "GLESv1_CM") != 0)
         return nullptr;
@@ -483,11 +483,20 @@
     void* so = nullptr;
     std::string name;
 
+    android_namespace_t* ns = android_getAngleNamespace();
+    const char* app_name = android_getAngleAppName();
+    bool developer_opt_in = android_getAngleDeveloperOptIn();
+
     if (ns) {
-        so = load_angle_from_namespace(kind, ns);
+        // If we got a namespce for ANGLE, check any other conditions
+        // before loading from it.
+        if (developer_opt_in) {
+            so = load_angle_from_namespace(kind, ns);
+        }
     }
 
     if (so) {
+        ALOGD("Loaded ANGLE libraries for %s", app_name ? app_name : "nullptr");
         cnx->useAngle = true;
         // Find and load vendor libEGL for ANGLE
         if (!cnx->vendorEGL) {
@@ -530,11 +539,10 @@
     ATRACE_CALL();
 
     void* dso = nullptr;
-    android_namespace_t* ns = android_getAngleNamespace();
-    dso = load_angle(kind, ns, cnx);
+    dso = load_angle(kind, cnx);
 #ifndef __ANDROID_VNDK__
     if (!dso) {
-        ns = android_getDriverNamespace();
+        android_namespace_t* ns = android_getDriverNamespace();
         if (ns) {
             dso = load_updated_driver(kind, ns);
         }
