diff options
| author | 2017-02-01 19:35:56 +0000 | |
|---|---|---|
| committer | 2017-02-01 19:35:56 +0000 | |
| commit | fa1dca0ad61af079c7653ba80d847a5b51df343c (patch) | |
| tree | b7b6e45fd400e1e4796df2637ceb5ebd3d2dfac7 | |
| parent | 9576ce66966c843d7d59ed27fbcbf6e64271e2b5 (diff) | |
| parent | 6734275c2f7bdffca50062c08c07a58609eba78b (diff) | |
Merge "Adds @hide permission granting API for ImsServices" am: 390ec27f9d
am: 6734275c2f
Change-Id: I6d502db3362aafcfed426b6598be0bd39dd38890
3 files changed, 32 insertions, 0 deletions
| diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index f35b13d44474..c51945e4e27d 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 a6f9243887df..a0fabdfb138e 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 8686c7befb69..0e969bc2ab06 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -21191,6 +21191,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) { |