Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f454ed41 authored by Evan Severson's avatar Evan Severson
Browse files

DO NOT MERGE Use permission group definintion if defined in PermissionController

Test: Manual + `atest PermissionsHostTest`
Bug: 153879813
Change-Id: I41084d247eda582391e6751ce76b412aeb4f72df
parent 85596820
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -268,6 +268,8 @@ public class GrantPermissionsActivity extends Activity
        // 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);
+29 −0
Original line number Diff line number Diff line
@@ -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 @@ public final class SafetyNetLogger {

    // 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 @@ public final class SafetyNetLogger {

        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);
        }
    }
}
+7 −1
Original line number Diff line number Diff line
@@ -316,7 +316,13 @@ public final class Utils {
    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;