From f477979bf9b8ecbaa366f0b600b0f2f2030c21ab Mon Sep 17 00:00:00 2001 From: Brad Ebinger Date: Mon, 23 Jan 2017 16:44:23 -0800 Subject: [PATCH] Adds @hide permission granting API for ImsServices Adds the @hide API to grant ImsServices default permissions using the PackageManager and DefaultPermissionGrantPolicy APIs. Test: Manual Bug: 32460405 Change-Id: Ia143ede42623b4c2203261fc6e83624d73c478f1 --- .../android/content/pm/IPackageManager.aidl | 1 + .../server/pm/DefaultPermissionGrantPolicy.java | 17 +++++++++++++++++ .../server/pm/PackageManagerService.java | 14 ++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index f35b13d44474c..c51945e4e27da 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -563,6 +563,7 @@ interface IPackageManager { void addOnPermissionsChangeListener(in IOnPermissionsChangeListener listener); void removeOnPermissionsChangeListener(in IOnPermissionsChangeListener listener); void grantDefaultPermissionsToEnabledCarrierApps(in String[] packageNames, int userId); + void grantDefaultPermissionsToEnabledImsServices(in String[] packageNames, int userId); boolean isPermissionRevokedByPolicy(String permission, String packageName, int userId); diff --git a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java index a6f9243887df1..a0fabdfb138e5 100644 --- a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java +++ b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java @@ -777,6 +777,23 @@ final class DefaultPermissionGrantPolicy { } } + public void grantDefaultPermissionsToEnabledImsServicesLPr(String[] packageNames, int userId) { + Log.i(TAG, "Granting permissions to enabled ImsServices for user:" + userId); + if (packageNames == null) { + return; + } + for (String packageName : packageNames) { + PackageParser.Package imsServicePackage = getSystemPackageLPr(packageName); + if (imsServicePackage != null + && doesPackageSupportRuntimePermissions(imsServicePackage)) { + grantRuntimePermissionsLPw(imsServicePackage, PHONE_PERMISSIONS, userId); + grantRuntimePermissionsLPw(imsServicePackage, MICROPHONE_PERMISSIONS, userId); + grantRuntimePermissionsLPw(imsServicePackage, LOCATION_PERMISSIONS, userId); + grantRuntimePermissionsLPw(imsServicePackage, CAMERA_PERMISSIONS, userId); + } + } + } + public void grantDefaultPermissionsToDefaultBrowserLPr(String packageName, int userId) { Log.i(TAG, "Granting permissions to default browser for user:" + userId); if (packageName == null) { diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 07dbb17b94516..ca0f85d51f3ec 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -21143,6 +21143,20 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); } } + @Override + public void grantDefaultPermissionsToEnabledImsServices(String[] packageNames, int userId) { + enforceSystemOrPhoneCaller("grantDefaultPermissionsToEnabledImsServices"); + synchronized (mPackages) { + final long identity = Binder.clearCallingIdentity(); + try { + mDefaultPermissionPolicy.grantDefaultPermissionsToEnabledImsServicesLPr( + packageNames, userId); + } finally { + Binder.restoreCallingIdentity(identity); + } + } + } + private static void enforceSystemOrPhoneCaller(String tag) { int callingUid = Binder.getCallingUid(); if (callingUid != Process.PHONE_UID && callingUid != Process.SYSTEM_UID) {