diff options
4 files changed, 52 insertions, 2 deletions
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 98d2a406fc0c..3a9728413151 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -10092,11 +10092,40 @@ public class DevicePolicyManager {          if (mService != null) {              try {                  return mService.isPackageAllowedToAccessCalendarForUser(packageName, -                        mContext.getUserId()); +                        myUserId());              } catch (RemoteException e) {                  throw e.rethrowFromSystemServer();              }          }          return false;      } + +    /** +     * Gets a set of package names that are whitelisted to access cross profile calendar APIs. +     * +     * <p>To query for a specific user, use +     * {@link Context#createPackageContextAsUser(String, int, UserHandle)} to create a context for +     * that user, and get a {@link DevicePolicyManager} from this context. +     * +     * @return the set of names of packages that were previously whitelisted via +     * {@link #addCrossProfileCalendarPackage(ComponentName, String)}, or an +     * empty set if none have been whitelisted. +     * +     * @see #addCrossProfileCalendarPackage(ComponentName, String) +     * @see #removeCrossProfileCalendarPackage(ComponentName, String) +     * @see #getCrossProfileCalendarPackages(ComponentName) +     * @hide +     */ +    public @NonNull Set<String>  getCrossProfileCalendarPackages() { +        throwIfParentInstance("getCrossProfileCalendarPackages"); +        if (mService != null) { +            try { +                return new ArraySet<>(mService.getCrossProfileCalendarPackagesForUser( +                        myUserId())); +            } catch (RemoteException e) { +                throw e.rethrowFromSystemServer(); +            } +        } +        return Collections.emptySet(); +    }  } diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl index 297676d397bf..fcf74ee301d8 100644 --- a/core/java/android/app/admin/IDevicePolicyManager.aidl +++ b/core/java/android/app/admin/IDevicePolicyManager.aidl @@ -427,4 +427,5 @@ interface IDevicePolicyManager {      boolean removeCrossProfileCalendarPackage(in ComponentName admin, String packageName);      List<String> getCrossProfileCalendarPackages(in ComponentName admin);      boolean isPackageAllowedToAccessCalendarForUser(String packageName, int userHandle); +    List<String> getCrossProfileCalendarPackagesForUser(int userHandle);  } diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java b/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java index b9dabb9ee7ec..65d32450b27f 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java @@ -120,4 +120,9 @@ abstract class BaseIDevicePolicyManager extends IDevicePolicyManager.Stub {              int userHandle) {          return false;      } + +    @Override +    public List<String> getCrossProfileCalendarPackagesForUser(int userHandle) { +        return Collections.emptyList(); +    }  } diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 6fbb850e4e40..f68f4d7424f4 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -13426,10 +13426,25 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {          enforceCrossUsersPermission(userHandle);          synchronized (getLockObject()) {              final ActiveAdmin admin = getProfileOwnerAdminLocked(userHandle); -            if (admin != null && admin.mCrossProfileCalendarPackages != null) { +            if (admin != null) {                  return admin.mCrossProfileCalendarPackages.contains(packageName);              }          }          return false;      } + +    @Override +    public List<String> getCrossProfileCalendarPackagesForUser(int userHandle) { +        if (!mHasFeature) { +            return Collections.emptyList(); +        } +        enforceCrossUsersPermission(userHandle); +        synchronized (getLockObject()) { +            final ActiveAdmin admin = getProfileOwnerAdminLocked(userHandle); +            if (admin != null) { +                return new ArrayList<String>(admin.mCrossProfileCalendarPackages); +            } +        } +        return Collections.emptyList(); +    }  }  |