diff options
| -rw-r--r-- | services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java | 67 |
1 files changed, 54 insertions, 13 deletions
diff --git a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java index b15e495a3714..af524db74341 100644 --- a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java +++ b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java @@ -217,6 +217,11 @@ final class DefaultPermissionGrantPolicy { NEARBY_DEVICES_PERMISSIONS.add(Manifest.permission.NEARBY_WIFI_DEVICES); } + private static final Set<String> NOTIFICATION_PERMISSIONS = new ArraySet<>(); + static { + NOTIFICATION_PERMISSIONS.add(Manifest.permission.POST_NOTIFICATIONS); + } + private static final int MSG_READ_DEFAULT_PERMISSION_EXCEPTIONS = 1; private static final String ACTION_TRACK = "com.android.fitness.TRACK"; @@ -378,18 +383,43 @@ final class DefaultPermissionGrantPolicy { grantPermissionsToSysComponentsAndPrivApps(pm, userId); grantDefaultSystemHandlerPermissions(pm, userId); + grantSignatureAppsNotificationPermissions(pm, userId); grantDefaultPermissionExceptions(pm, userId); // Apply delayed state pm.apply(); } + private void grantSignatureAppsNotificationPermissions(PackageManagerWrapper pm, int userId) { + Log.i(TAG, "Granting Notification permissions to platform signature apps for user " + + userId); + List<PackageInfo> packages = mContext.getPackageManager().getInstalledPackagesAsUser( + DEFAULT_PACKAGE_INFO_QUERY_FLAGS, UserHandle.USER_SYSTEM); + for (PackageInfo pkg : packages) { + if (pkg == null || !pkg.applicationInfo.isSystemApp() + || !pkg.applicationInfo.isSignedWithPlatformKey()) { + continue; + } + grantRuntimePermissionsForSystemPackage(pm, userId, pkg, NOTIFICATION_PERMISSIONS); + } + + } + private void grantRuntimePermissionsForSystemPackage(PackageManagerWrapper pm, int userId, PackageInfo pkg) { + grantRuntimePermissionsForSystemPackage(pm, userId, pkg, null); + } + + private void grantRuntimePermissionsForSystemPackage(PackageManagerWrapper pm, + int userId, PackageInfo pkg, Set<String> filterPermissions) { + if (ArrayUtils.isEmpty(pkg.requestedPermissions)) { + return; + } Set<String> permissions = new ArraySet<>(); for (String permission : pkg.requestedPermissions) { final PermissionInfo perm = pm.getPermissionInfo(permission); - if (perm == null) { + if (perm == null + || (filterPermissions != null && !filterPermissions.contains(permission))) { continue; } if (perm.isRuntime()) { @@ -547,23 +577,31 @@ final class DefaultPermissionGrantPolicy { String[] calendarSyncAdapterPackages = (syncAdapterPackagesProvider != null) ? syncAdapterPackagesProvider.getPackages(CalendarContract.AUTHORITY, userId) : null; + // PermissionController + grantSystemFixedPermissionsToSystemPackage(pm, + mContext.getPackageManager().getPermissionControllerPackageName(), userId, + NOTIFICATION_PERMISSIONS); + // Installer grantSystemFixedPermissionsToSystemPackage(pm, ArrayUtils.firstOrNull(getKnownPackages( PackageManagerInternal.PACKAGE_INSTALLER, userId)), - userId, STORAGE_PERMISSIONS); + userId, STORAGE_PERMISSIONS, NOTIFICATION_PERMISSIONS); // Verifier final String verifier = ArrayUtils.firstOrNull(getKnownPackages( PackageManagerInternal.PACKAGE_VERIFIER, userId)); grantSystemFixedPermissionsToSystemPackage(pm, verifier, userId, STORAGE_PERMISSIONS); - grantPermissionsToSystemPackage(pm, verifier, userId, PHONE_PERMISSIONS, SMS_PERMISSIONS); + grantPermissionsToSystemPackage(pm, verifier, userId, PHONE_PERMISSIONS, SMS_PERMISSIONS, + NOTIFICATION_PERMISSIONS); // SetupWizard final String setupWizardPackage = ArrayUtils.firstOrNull(getKnownPackages( PackageManagerInternal.PACKAGE_SETUP_WIZARD, userId)); grantPermissionsToSystemPackage(pm, setupWizardPackage, userId, PHONE_PERMISSIONS, CONTACTS_PERMISSIONS, ALWAYS_LOCATION_PERMISSIONS, CAMERA_PERMISSIONS); + grantSystemFixedPermissionsToSystemPackage(pm, setupWizardPackage, userId, + NOTIFICATION_PERMISSIONS); if (mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH, 0) || mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE, 0)) { @@ -585,12 +623,12 @@ final class DefaultPermissionGrantPolicy { // Media provider grantSystemFixedPermissionsToSystemPackage(pm, getDefaultProviderAuthorityPackage(MediaStore.AUTHORITY, userId), userId, - STORAGE_PERMISSIONS); + STORAGE_PERMISSIONS, NOTIFICATION_PERMISSIONS); // Downloads provider grantSystemFixedPermissionsToSystemPackage(pm, getDefaultProviderAuthorityPackage("downloads", userId), userId, - STORAGE_PERMISSIONS); + STORAGE_PERMISSIONS, NOTIFICATION_PERMISSIONS); // Downloads UI grantSystemFixedPermissionsToSystemPackage(pm, @@ -649,7 +687,7 @@ final class DefaultPermissionGrantPolicy { // Cell Broadcast Receiver grantSystemFixedPermissionsToSystemPackage(pm, getDefaultSystemHandlerActivityPackage(pm, Intents.SMS_CB_RECEIVED_ACTION, userId), - userId, SMS_PERMISSIONS, NEARBY_DEVICES_PERMISSIONS); + userId, SMS_PERMISSIONS, NEARBY_DEVICES_PERMISSIONS, NOTIFICATION_PERMISSIONS); // Carrier Provisioning Service grantPermissionsToSystemPackage(pm, @@ -661,7 +699,7 @@ final class DefaultPermissionGrantPolicy { grantPermissionsToSystemPackage(pm, getDefaultSystemHandlerActivityPackageForCategory(pm, Intent.CATEGORY_APP_CALENDAR, userId), - userId, CALENDAR_PERMISSIONS, CONTACTS_PERMISSIONS); + userId, CALENDAR_PERMISSIONS, CONTACTS_PERMISSIONS, NOTIFICATION_PERMISSIONS); // Calendar provider String calendarProvider = @@ -762,7 +800,8 @@ final class DefaultPermissionGrantPolicy { grantPermissionsToSystemPackage(pm, packageName, userId, CONTACTS_PERMISSIONS, CALENDAR_PERMISSIONS, MICROPHONE_PERMISSIONS, PHONE_PERMISSIONS, SMS_PERMISSIONS, CAMERA_PERMISSIONS, - SENSORS_PERMISSIONS, STORAGE_PERMISSIONS, NEARBY_DEVICES_PERMISSIONS); + SENSORS_PERMISSIONS, STORAGE_PERMISSIONS, NEARBY_DEVICES_PERMISSIONS, + NOTIFICATION_PERMISSIONS); grantSystemFixedPermissionsToSystemPackage(pm, packageName, userId, ALWAYS_LOCATION_PERMISSIONS, ACTIVITY_RECOGNITION_PERMISSIONS); } @@ -791,7 +830,7 @@ final class DefaultPermissionGrantPolicy { .addCategory(Intent.CATEGORY_LAUNCHER_APP); grantPermissionsToSystemPackage(pm, getDefaultSystemHandlerActivityPackage(pm, homeIntent, userId), userId, - ALWAYS_LOCATION_PERMISSIONS); + ALWAYS_LOCATION_PERMISSIONS, NOTIFICATION_PERMISSIONS); // Watches if (mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH, 0)) { @@ -816,7 +855,7 @@ final class DefaultPermissionGrantPolicy { // Print Spooler grantSystemFixedPermissionsToSystemPackage(pm, PrintManager.PRINT_SPOOLER_PACKAGE_NAME, - userId, ALWAYS_LOCATION_PERMISSIONS); + userId, ALWAYS_LOCATION_PERMISSIONS, NOTIFICATION_PERMISSIONS); // EmergencyInfo grantSystemFixedPermissionsToSystemPackage(pm, @@ -920,12 +959,13 @@ final class DefaultPermissionGrantPolicy { mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH, 0); if (isPhonePermFixed) { grantSystemFixedPermissionsToSystemPackage(pm, dialerPackage, userId, - PHONE_PERMISSIONS); + PHONE_PERMISSIONS, NOTIFICATION_PERMISSIONS); } else { grantPermissionsToSystemPackage(pm, dialerPackage, userId, PHONE_PERMISSIONS); } grantPermissionsToSystemPackage(pm, dialerPackage, userId, - CONTACTS_PERMISSIONS, SMS_PERMISSIONS, MICROPHONE_PERMISSIONS, CAMERA_PERMISSIONS); + CONTACTS_PERMISSIONS, SMS_PERMISSIONS, MICROPHONE_PERMISSIONS, CAMERA_PERMISSIONS, + NOTIFICATION_PERMISSIONS); boolean isAndroidAutomotive = mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE, 0); if (isAndroidAutomotive) { @@ -937,7 +977,8 @@ final class DefaultPermissionGrantPolicy { String smsPackage, int userId) { grantPermissionsToSystemPackage(pm, smsPackage, userId, PHONE_PERMISSIONS, CONTACTS_PERMISSIONS, SMS_PERMISSIONS, - STORAGE_PERMISSIONS, MICROPHONE_PERMISSIONS, CAMERA_PERMISSIONS); + STORAGE_PERMISSIONS, MICROPHONE_PERMISSIONS, CAMERA_PERMISSIONS, + NOTIFICATION_PERMISSIONS); } private void grantDefaultPermissionsToDefaultSystemUseOpenWifiApp(PackageManagerWrapper pm, |