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

Commit 51489673 authored by Evan Severson's avatar Evan Severson Committed by Anis Assi
Browse files

DO NOT MERGE Use permission group definintion if defined in PermissionController

Test: Manual + `atest PermissionsHostTest`
Bug: 153879813
Change-Id: I41084d247eda582391e6751ce76b412aeb4f72df
(cherry picked from commit f454ed41)
parent 355a4ec0
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;