DO NOT MERGE Use permission group definintion if defined in PermissionController

Test: Manual + `atest PermissionsHostTest`
Bug: 153879813
Change-Id: I41084d247eda582391e6751ce76b412aeb4f72df
(cherry picked from commit f454ed41d3b1500d60ab2fc260d6d3b87f6c935a)
diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
index 18de0cd..3649b0e 100644
--- a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
+++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
@@ -268,6 +268,8 @@
         // Cache this as this can only read on onCreate, not later.
         mCallingPackage = getCallingPackage();
 
+        SafetyNetLogger.logIfHasUndefinedPermissionGroup(getPackageManager(), mCallingPackage);
+
         setFinishOnTouchOutside(false);
 
         setTitle(R.string.permission_request_title);
diff --git a/src/com/android/packageinstaller/permission/utils/SafetyNetLogger.java b/src/com/android/packageinstaller/permission/utils/SafetyNetLogger.java
index b77502a..c4376ac 100644
--- a/src/com/android/packageinstaller/permission/utils/SafetyNetLogger.java
+++ b/src/com/android/packageinstaller/permission/utils/SafetyNetLogger.java
@@ -16,10 +16,15 @@
 
 package com.android.packageinstaller.permission.utils;
 
+import android.Manifest;
 import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PermissionInfo;
+import android.text.TextUtils;
 import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.EventLog;
+import android.util.Log;
 
 import com.android.packageinstaller.permission.model.AppPermissionGroup;
 import com.android.packageinstaller.permission.model.Permission;
@@ -37,6 +42,7 @@
 
     // Log tag for the result of permissions toggling.
     private static final String PERMISSIONS_TOGGLED = "individual_permissions_toggled";
+    public static final String LOG_TAG = SafetyNetLogger.class.getSimpleName();
 
     private SafetyNetLogger() {
         /* do nothing */
@@ -129,4 +135,27 @@
 
         return builder.toString();
     }
+
+    /**
+     * Log if the given package has defined a permission in the undefined group.
+     *
+     * @param pm A PackageManager to look up the package.
+     * @param packageName The name of the package to check.
+     */
+    public static void logIfHasUndefinedPermissionGroup(PackageManager pm, String packageName) {
+        try { //Avoid crashing for any reason
+            PermissionInfo[] permissions =
+                    pm.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS).permissions;
+            if (permissions == null) {
+                return;
+            }
+            for (PermissionInfo permission : permissions) {
+                if (TextUtils.equals(permission.group, Manifest.permission_group.UNDEFINED)) {
+                    EventLog.writeEvent(SNET_NET_EVENT_LOG_TAG, "153879813");
+                }
+            }
+        } catch (Throwable e) {
+            Log.e(LOG_TAG, "Unable to log undefined permission event for " + packageName + ".", e);
+        }
+    }
 }
diff --git a/src/com/android/packageinstaller/permission/utils/Utils.java b/src/com/android/packageinstaller/permission/utils/Utils.java
index 707b9f7..f4389b0 100644
--- a/src/com/android/packageinstaller/permission/utils/Utils.java
+++ b/src/com/android/packageinstaller/permission/utils/Utils.java
@@ -316,7 +316,13 @@
     public static @NonNull List<PermissionInfo> getPermissionInfosForGroup(
             @NonNull PackageManager pm, @NonNull String group)
             throws PackageManager.NameNotFoundException {
-        List<PermissionInfo> permissions = pm.queryPermissionsByGroup(group, 0);
+        List<PermissionInfo> permissions = new ArrayList<>();
+        for (PermissionInfo permission : pm.queryPermissionsByGroup(group, 0)) {
+            // PermissionController's mapping takes precedence
+            if (getGroupOfPermission(permission).equals(group)) {
+                permissions.add(permission);
+            }
+        }
         permissions.addAll(getPlatformPermissionsOfGroup(pm, group));
 
         return permissions;