Loading services/core/java/com/android/server/pm/permission/PermissionManagerService.java +29 −54 Original line number Diff line number Diff line Loading @@ -793,68 +793,62 @@ public class PermissionManagerService extends IPermissionManager.Stub { final CheckPermissionDelegate checkPermissionDelegate; synchronized (mLock) { checkPermissionDelegate = mCheckPermissionDelegate; } if (checkPermissionDelegate == null) { if (mCheckPermissionDelegate == null) { return checkPermissionImpl(permName, pkgName, userId); } checkPermissionDelegate = mCheckPermissionDelegate; } return checkPermissionDelegate.checkPermission(permName, pkgName, userId, this::checkPermissionImpl); PermissionManagerService.this::checkPermissionImpl); } private int checkPermissionImpl(@NonNull String permissionName, @NonNull String packageName, @UserIdInt int userId) { final PackageParser.Package pkg = mPackageManagerInt.getPackage(packageName); private int checkPermissionImpl(String permName, String pkgName, int userId) { final PackageParser.Package pkg = mPackageManagerInt.getPackage(pkgName); if (pkg == null) { return PackageManager.PERMISSION_DENIED; } return checkPermissionInternal(pkg, true, permissionName, true, userId) ? PackageManager.PERMISSION_GRANTED : PackageManager.PERMISSION_DENIED; return checkPermissionInternal(pkg, true, permName, userId); } private boolean checkPermissionInternal(@NonNull Package pkg, boolean isPackageExplicit, @NonNull String permissionName, boolean useRequestedPermissionsForLegacyApps, @UserIdInt int userId) { private int checkPermissionInternal(@NonNull Package pkg, boolean isPackageExplicit, @NonNull String permissionName, @UserIdInt int userId) { final int callingUid = getCallingUid(); if (isPackageExplicit || pkg.mSharedUserId == null) { if (mPackageManagerInt.filterAppAccess(pkg, callingUid, userId)) { return false; return PackageManager.PERMISSION_DENIED; } } else { if (mPackageManagerInt.getInstantAppPackageName(callingUid) != null) { return false; return PackageManager.PERMISSION_DENIED; } } final int uid = UserHandle.getUid(userId, pkg.applicationInfo.uid); final PackageSetting ps = (PackageSetting) pkg.mExtras; if (ps == null) { return false; return PackageManager.PERMISSION_DENIED; } final PermissionsState permissionsState = ps.getPermissionsState(); if (checkSinglePermissionInternal(uid, permissionsState, permissionName, useRequestedPermissionsForLegacyApps)) { return true; if (checkSinglePermissionInternal(uid, permissionsState, permissionName)) { return PackageManager.PERMISSION_GRANTED; } final String fullerPermissionName = FULLER_PERMISSION_MAP.get(permissionName); if (fullerPermissionName != null && checkSinglePermissionInternal(uid, permissionsState, fullerPermissionName, useRequestedPermissionsForLegacyApps)) { return true; if (fullerPermissionName != null && checkSinglePermissionInternal(uid, permissionsState, fullerPermissionName)) { return PackageManager.PERMISSION_GRANTED; } return false; return PackageManager.PERMISSION_DENIED; } private boolean checkSinglePermissionInternal(int uid, @NonNull PermissionsState permissionsState, @NonNull String permissionName, boolean useRequestedPermissionsForLegacyApps) { @NonNull PermissionsState permissionsState, @NonNull String permissionName) { boolean hasPermission = permissionsState.hasPermission(permissionName, UserHandle.getUserId(uid)); if (!hasPermission && useRequestedPermissionsForLegacyApps && mSettings.isPermissionRuntime(permissionName)) { if (!hasPermission && mSettings.isPermissionRuntime(permissionName)) { final String[] packageNames = mContext.getPackageManager().getPackagesForUid(uid); final int packageNamesSize = packageNames != null ? packageNames.length : 0; for (int i = 0; i < packageNamesSize; i++) { Loading Loading @@ -897,13 +891,12 @@ public class PermissionManagerService extends IPermissionManager.Stub { checkPermissionDelegate = mCheckPermissionDelegate; } return checkPermissionDelegate.checkUidPermission(permName, uid, this::checkUidPermissionImpl); PermissionManagerService.this::checkUidPermissionImpl); } private int checkUidPermissionImpl(@NonNull String permissionName, int uid) { private int checkUidPermissionImpl(String permName, int uid) { final PackageParser.Package pkg = mPackageManagerInt.getPackage(uid); return checkUidPermissionInternal(uid, pkg, permissionName, true) ? PackageManager.PERMISSION_GRANTED : PackageManager.PERMISSION_DENIED; return checkUidPermissionInternal(pkg, uid, permName); } /** Loading @@ -913,25 +906,24 @@ public class PermissionManagerService extends IPermissionManager.Stub { * * @see SystemConfig#getSystemPermissions() */ private boolean checkUidPermissionInternal(int uid, @Nullable Package pkg, @NonNull String permissionName, boolean useRequestedPermissionsForLegacyApps) { private int checkUidPermissionInternal(@Nullable Package pkg, int uid, @NonNull String permissionName) { if (pkg != null) { final int userId = UserHandle.getUserId(uid); return checkPermissionInternal(pkg, false, permissionName, useRequestedPermissionsForLegacyApps, userId); return checkPermissionInternal(pkg, false, permissionName, userId); } if (checkSingleUidPermissionInternal(uid, permissionName)) { return true; return PackageManager.PERMISSION_GRANTED; } final String fullerPermissionName = FULLER_PERMISSION_MAP.get(permissionName); if (fullerPermissionName != null && checkSingleUidPermissionInternal(uid, fullerPermissionName)) { return true; return PackageManager.PERMISSION_GRANTED; } return false; return PackageManager.PERMISSION_DENIED; } private boolean checkSingleUidPermissionInternal(int uid, @NonNull String permissionName) { Loading @@ -941,17 +933,6 @@ public class PermissionManagerService extends IPermissionManager.Stub { } } private int computeRuntimePermissionAppOpMode(int uid, @NonNull String permissionName) { boolean granted = isUidPermissionGranted(uid, permissionName); // TODO: Foreground permissions. return granted ? AppOpsManager.MODE_ALLOWED : AppOpsManager.MODE_IGNORED; } private boolean isUidPermissionGranted(int uid, @NonNull String permissionName) { final PackageParser.Package pkg = mPackageManagerInt.getPackage(uid); return checkUidPermissionInternal(uid, pkg, permissionName, false); } @Override public void addOnPermissionsChangeListener(IOnPermissionsChangeListener listener) { mContext.enforceCallingOrSelfPermission( Loading Loading @@ -4477,12 +4458,6 @@ public class PermissionManagerService extends IPermissionManager.Stub { StorageManager.UUID_PRIVATE_INTERNAL, true, mDefaultPermissionCallback); } } @Override public int computeRuntimePermissionAppOpMode(int uid, @NonNull String permissionName) { return PermissionManagerService.this.computeRuntimePermissionAppOpMode(uid, permissionName); } } private static final class OnPermissionChangeListeners extends Handler { Loading services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java +0 −9 Original line number Diff line number Diff line Loading @@ -445,13 +445,4 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager /** Called when a new user has been created. */ public abstract void onNewUserCreated(@UserIdInt int userId); /** * Compute an app op mode based on its runtime permission state. * * @param uid the uid for the app op * @param permissionName the permission name for the app op * @return the computed mode */ public abstract int computeRuntimePermissionAppOpMode(int uid, @NonNull String permissionName); } Loading
services/core/java/com/android/server/pm/permission/PermissionManagerService.java +29 −54 Original line number Diff line number Diff line Loading @@ -793,68 +793,62 @@ public class PermissionManagerService extends IPermissionManager.Stub { final CheckPermissionDelegate checkPermissionDelegate; synchronized (mLock) { checkPermissionDelegate = mCheckPermissionDelegate; } if (checkPermissionDelegate == null) { if (mCheckPermissionDelegate == null) { return checkPermissionImpl(permName, pkgName, userId); } checkPermissionDelegate = mCheckPermissionDelegate; } return checkPermissionDelegate.checkPermission(permName, pkgName, userId, this::checkPermissionImpl); PermissionManagerService.this::checkPermissionImpl); } private int checkPermissionImpl(@NonNull String permissionName, @NonNull String packageName, @UserIdInt int userId) { final PackageParser.Package pkg = mPackageManagerInt.getPackage(packageName); private int checkPermissionImpl(String permName, String pkgName, int userId) { final PackageParser.Package pkg = mPackageManagerInt.getPackage(pkgName); if (pkg == null) { return PackageManager.PERMISSION_DENIED; } return checkPermissionInternal(pkg, true, permissionName, true, userId) ? PackageManager.PERMISSION_GRANTED : PackageManager.PERMISSION_DENIED; return checkPermissionInternal(pkg, true, permName, userId); } private boolean checkPermissionInternal(@NonNull Package pkg, boolean isPackageExplicit, @NonNull String permissionName, boolean useRequestedPermissionsForLegacyApps, @UserIdInt int userId) { private int checkPermissionInternal(@NonNull Package pkg, boolean isPackageExplicit, @NonNull String permissionName, @UserIdInt int userId) { final int callingUid = getCallingUid(); if (isPackageExplicit || pkg.mSharedUserId == null) { if (mPackageManagerInt.filterAppAccess(pkg, callingUid, userId)) { return false; return PackageManager.PERMISSION_DENIED; } } else { if (mPackageManagerInt.getInstantAppPackageName(callingUid) != null) { return false; return PackageManager.PERMISSION_DENIED; } } final int uid = UserHandle.getUid(userId, pkg.applicationInfo.uid); final PackageSetting ps = (PackageSetting) pkg.mExtras; if (ps == null) { return false; return PackageManager.PERMISSION_DENIED; } final PermissionsState permissionsState = ps.getPermissionsState(); if (checkSinglePermissionInternal(uid, permissionsState, permissionName, useRequestedPermissionsForLegacyApps)) { return true; if (checkSinglePermissionInternal(uid, permissionsState, permissionName)) { return PackageManager.PERMISSION_GRANTED; } final String fullerPermissionName = FULLER_PERMISSION_MAP.get(permissionName); if (fullerPermissionName != null && checkSinglePermissionInternal(uid, permissionsState, fullerPermissionName, useRequestedPermissionsForLegacyApps)) { return true; if (fullerPermissionName != null && checkSinglePermissionInternal(uid, permissionsState, fullerPermissionName)) { return PackageManager.PERMISSION_GRANTED; } return false; return PackageManager.PERMISSION_DENIED; } private boolean checkSinglePermissionInternal(int uid, @NonNull PermissionsState permissionsState, @NonNull String permissionName, boolean useRequestedPermissionsForLegacyApps) { @NonNull PermissionsState permissionsState, @NonNull String permissionName) { boolean hasPermission = permissionsState.hasPermission(permissionName, UserHandle.getUserId(uid)); if (!hasPermission && useRequestedPermissionsForLegacyApps && mSettings.isPermissionRuntime(permissionName)) { if (!hasPermission && mSettings.isPermissionRuntime(permissionName)) { final String[] packageNames = mContext.getPackageManager().getPackagesForUid(uid); final int packageNamesSize = packageNames != null ? packageNames.length : 0; for (int i = 0; i < packageNamesSize; i++) { Loading Loading @@ -897,13 +891,12 @@ public class PermissionManagerService extends IPermissionManager.Stub { checkPermissionDelegate = mCheckPermissionDelegate; } return checkPermissionDelegate.checkUidPermission(permName, uid, this::checkUidPermissionImpl); PermissionManagerService.this::checkUidPermissionImpl); } private int checkUidPermissionImpl(@NonNull String permissionName, int uid) { private int checkUidPermissionImpl(String permName, int uid) { final PackageParser.Package pkg = mPackageManagerInt.getPackage(uid); return checkUidPermissionInternal(uid, pkg, permissionName, true) ? PackageManager.PERMISSION_GRANTED : PackageManager.PERMISSION_DENIED; return checkUidPermissionInternal(pkg, uid, permName); } /** Loading @@ -913,25 +906,24 @@ public class PermissionManagerService extends IPermissionManager.Stub { * * @see SystemConfig#getSystemPermissions() */ private boolean checkUidPermissionInternal(int uid, @Nullable Package pkg, @NonNull String permissionName, boolean useRequestedPermissionsForLegacyApps) { private int checkUidPermissionInternal(@Nullable Package pkg, int uid, @NonNull String permissionName) { if (pkg != null) { final int userId = UserHandle.getUserId(uid); return checkPermissionInternal(pkg, false, permissionName, useRequestedPermissionsForLegacyApps, userId); return checkPermissionInternal(pkg, false, permissionName, userId); } if (checkSingleUidPermissionInternal(uid, permissionName)) { return true; return PackageManager.PERMISSION_GRANTED; } final String fullerPermissionName = FULLER_PERMISSION_MAP.get(permissionName); if (fullerPermissionName != null && checkSingleUidPermissionInternal(uid, fullerPermissionName)) { return true; return PackageManager.PERMISSION_GRANTED; } return false; return PackageManager.PERMISSION_DENIED; } private boolean checkSingleUidPermissionInternal(int uid, @NonNull String permissionName) { Loading @@ -941,17 +933,6 @@ public class PermissionManagerService extends IPermissionManager.Stub { } } private int computeRuntimePermissionAppOpMode(int uid, @NonNull String permissionName) { boolean granted = isUidPermissionGranted(uid, permissionName); // TODO: Foreground permissions. return granted ? AppOpsManager.MODE_ALLOWED : AppOpsManager.MODE_IGNORED; } private boolean isUidPermissionGranted(int uid, @NonNull String permissionName) { final PackageParser.Package pkg = mPackageManagerInt.getPackage(uid); return checkUidPermissionInternal(uid, pkg, permissionName, false); } @Override public void addOnPermissionsChangeListener(IOnPermissionsChangeListener listener) { mContext.enforceCallingOrSelfPermission( Loading Loading @@ -4477,12 +4458,6 @@ public class PermissionManagerService extends IPermissionManager.Stub { StorageManager.UUID_PRIVATE_INTERNAL, true, mDefaultPermissionCallback); } } @Override public int computeRuntimePermissionAppOpMode(int uid, @NonNull String permissionName) { return PermissionManagerService.this.computeRuntimePermissionAppOpMode(uid, permissionName); } } private static final class OnPermissionChangeListeners extends Handler { Loading
services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java +0 −9 Original line number Diff line number Diff line Loading @@ -445,13 +445,4 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager /** Called when a new user has been created. */ public abstract void onNewUserCreated(@UserIdInt int userId); /** * Compute an app op mode based on its runtime permission state. * * @param uid the uid for the app op * @param permissionName the permission name for the app op * @return the computed mode */ public abstract int computeRuntimePermissionAppOpMode(int uid, @NonNull String permissionName); }