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

Commit 8f38f69d authored by Philip P. Moltmann's avatar Philip P. Moltmann Committed by Android (Google) Code Review
Browse files

Merge "Device admin perm adjustment -> perm controller"

parents 114032be a81a5a6f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@
    <uses-permission android:name="android.permission.MANAGE_USERS" />
    <uses-permission android:name="android.permission.GRANT_RUNTIME_PERMISSIONS" />
    <uses-permission android:name="android.permission.REVOKE_RUNTIME_PERMISSIONS" />
    <uses-permission android:name="android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY" />
    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
    <uses-permission android:name="android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS" />
    <uses-permission android:name="android.permission.UPDATE_APP_OPS_STATS" />
+1 −1
Original line number Diff line number Diff line
@@ -1134,7 +1134,7 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
     *                                     app ops change. If this is set to {@code false} the
     *                                     caller has to make sure to kill the app if needed.
     */
    void persistChanges(boolean mayKillBecauseOfAppOpsChange) {
    public void persistChanges(boolean mayKillBecauseOfAppOpsChange) {
        int numPermissions = mPermissions.size();
        boolean shouldKillApp = false;
        boolean shouldUpdateStorage = false;
+54 −0
Original line number Diff line number Diff line
@@ -16,6 +16,9 @@

package com.android.packageinstaller.permission.service;

import static android.app.admin.DevicePolicyManager.PERMISSION_GRANT_STATE_DEFAULT;
import static android.app.admin.DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED;
import static android.app.admin.DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED;
import static android.content.pm.PackageManager.GET_PERMISSIONS;
import static android.permission.PermissionControllerManager.COUNT_ONLY_WHEN_GRANTED;
import static android.permission.PermissionControllerManager.COUNT_WHEN_SYSTEM;
@@ -503,4 +506,55 @@ public final class PermissionControllerServiceImpl extends PermissionControllerS
        return PermissionControllerServiceImplRoleMixin.onIsApplicationQualifiedForRole(roleName,
                packageName, this);
    }

    @Override
    public boolean onSetRuntimePermissionGrantStateByDeviceAdmin(@NonNull String callerPackageName,
            @NonNull String packageName, @NonNull String unexpandedPermission, int grantState) {
        PackageInfo callerPkgInfo = getPkgInfo(callerPackageName);
        if (callerPkgInfo == null) {
            Log.w(LOG_TAG, "Cannot fix " + unexpandedPermission + " as admin "
                    + callerPackageName + " cannot be found");
            return false;
        }

        PackageInfo pkgInfo = getPkgInfo(packageName);
        if (pkgInfo == null) {
            Log.w(LOG_TAG, "Cannot fix " + unexpandedPermission + " as " + packageName
                    + " cannot be found");
            return false;
        }

        ArrayList<String> expandedPermissions = addSplitPermissions(
                Collections.singletonList(unexpandedPermission),
                callerPkgInfo.applicationInfo.targetSdkVersion);

        int numPerms = expandedPermissions.size();
        for (int i = 0; i < numPerms; i++) {
            String perm = expandedPermissions.get(i);
            AppPermissionGroup group = AppPermissionGroup.create(this, pkgInfo, perm, true);
            if (group == null || group.isSystemFixed()) {
                continue;
            }

            switch (grantState) {
                case PERMISSION_GRANT_STATE_GRANTED:
                    group.getPermission(perm).setPolicyFixed(true);
                    group.grantRuntimePermissions(false, new String[]{perm});
                    break;
                case PERMISSION_GRANT_STATE_DENIED:
                    group.getPermission(perm).setPolicyFixed(true);
                    group.revokeRuntimePermissions(false, new String[]{perm});
                    break;
                case PERMISSION_GRANT_STATE_DEFAULT:
                    group.getPermission(perm).setPolicyFixed(false);
                    break;
                default:
                    return false;
            }

            group.persistChanges(true);
        }

        return true;
    }
}
+24 −1
Original line number Diff line number Diff line
@@ -18,6 +18,29 @@
                    "include-filter": "android.backup.cts.PermissionTest"
                }
            ]
        },
        {
            "name": "CtsDevicePolicyManagerTestCases",
            "options": [
                {
                    "include-filter": "com.android.cts.devicepolicy.MixedManagedProfileOwnerTest#testPermissionGrant"
                },
                {
                    "include-filter": "com.android.cts.devicepolicy.MixedManagedProfileOwnerTest#testPermissionPolicy"
                },
                {
                    "include-filter": "com.android.cts.devicepolicy.MixedManagedProfileOwnerTest#testPermissionMixedPolicies"
                },
                {
                    "include-filter": "com.android.cts.devicepolicy.MixedManagedProfileOwnerTest#testPermissionAppUpdate"
                },
                {
                    "include-filter": "com.android.cts.devicepolicy.MixedManagedProfileOwnerTest#testPermissionGrantPreMApp"
                },
                {
                    "include-filter": "com.android.cts.devicepolicy.MixedManagedProfileOwnerTestApi25#testPermissionGrantPreMApp"
                }
            ]
        }
    ]
}
 No newline at end of file