diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index 1352b5eaa1e37..277738ba845a7 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -619,6 +619,8 @@ interface IPackageManager { in String[] packageNames, int userId); void revokeDefaultPermissionsFromDisabledTelephonyDataServices( in String[] packageNames, int userId); + void grantDefaultPermissionsToActiveLuiApp(in String packageName, int userId); + void revokeDefaultPermissionsFromLuiApps(in String[] packageNames, int userId); boolean isPermissionRevokedByPolicy(String permission, String packageName, int userId); diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 8f0e070fa2ceb..b282c89ce2c40 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -24105,6 +24105,33 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); } } + @Override + public void grantDefaultPermissionsToActiveLuiApp(String packageName, int userId) { + enforceSystemOrPhoneCaller("grantDefaultPermissionsToActiveLuiApp"); + synchronized (mPackages) { + final long identity = Binder.clearCallingIdentity(); + try { + mDefaultPermissionPolicy.grantDefaultPermissionsToActiveLuiApp( + packageName, userId); + } finally { + Binder.restoreCallingIdentity(identity); + } + } + } + + @Override + public void revokeDefaultPermissionsFromLuiApps(String[] packageNames, int userId) { + enforceSystemOrPhoneCaller("revokeDefaultPermissionsFromLuiApps"); + synchronized (mPackages) { + final long identity = Binder.clearCallingIdentity(); + try { + mDefaultPermissionPolicy.revokeDefaultPermissionsFromLuiApps(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) { 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 3116480d320ca..658e63d69614a 100644 --- a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java +++ b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java @@ -1010,6 +1010,32 @@ public final class DefaultPermissionGrantPolicy { } } + public void grantDefaultPermissionsToActiveLuiApp(String packageName, int userId) { + Log.i(TAG, "Granting permissions to active LUI app for user:" + userId); + if (packageName == null) { + return; + } + PackageParser.Package luiAppPackage = getSystemPackage(packageName); + if (luiAppPackage != null + && doesPackageSupportRuntimePermissions(luiAppPackage)) { + grantRuntimePermissions(luiAppPackage, CAMERA_PERMISSIONS, true, userId); + } + } + + public void revokeDefaultPermissionsFromLuiApps(String[] packageNames, int userId) { + Log.i(TAG, "Revoke permissions from LUI apps for user:" + userId); + if (packageNames == null) { + return; + } + for (String packageName : packageNames) { + PackageParser.Package luiAppPackage = getSystemPackage(packageName); + if (luiAppPackage != null + && doesPackageSupportRuntimePermissions(luiAppPackage)) { + revokeRuntimePermissions(luiAppPackage, CAMERA_PERMISSIONS, true, userId); + } + } + } + public void grantDefaultPermissionsToDefaultBrowser(String packageName, int userId) { Log.i(TAG, "Granting permissions to default browser for user:" + userId); if (packageName == null) {