Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e314b294 authored by Kholoud Mohamed's avatar Kholoud Mohamed Committed by Android (Google) Code Review
Browse files

Merge "Fix bug in CrossProfileApps#canInteractAcrossProfiles" into sc-dev

parents 51f0592f cc3c2d99
Loading
Loading
Loading
Loading
+25 −1
Original line number Diff line number Diff line
@@ -288,7 +288,9 @@ public class CrossProfileAppsServiceImpl extends ICrossProfileApps.Stub {
        if (targetUserProfiles.isEmpty()) {
            return false;
        }
        return hasCallerGotInteractAcrossProfilesPermission(callingPackage);
        return hasCallerGotInteractAcrossProfilesPermission(callingPackage)
                && haveProfilesGotInteractAcrossProfilesPermission(
                        callingPackage, targetUserProfiles);
    }

    private boolean hasCallerGotInteractAcrossProfilesPermission(String callingPackage) {
@@ -296,6 +298,28 @@ public class CrossProfileAppsServiceImpl extends ICrossProfileApps.Stub {
                callingPackage, mInjector.getCallingUid(), mInjector.getCallingPid());
    }

    private boolean haveProfilesGotInteractAcrossProfilesPermission(
            String packageName, List<UserHandle> profiles) {
        for (UserHandle profile : profiles) {
            final int uid = mInjector.withCleanCallingIdentity(() -> {
                try {
                    return mInjector.getPackageManager().getPackageUidAsUser(
                            packageName, /* flags= */ 0, profile.getIdentifier());
                } catch (PackageManager.NameNotFoundException e) {
                    return -1;
                }
            });
            if (uid == -1) {
                return false;
            }
            if (!hasInteractAcrossProfilesPermission(
                    packageName, uid, PermissionChecker.PID_UNKNOWN)) {
                return false;
            }
        }
        return true;
    }

    private boolean isCrossProfilePackageAllowlisted(String packageName) {
        return mInjector.withCleanCallingIdentity(() ->
                mInjector.getDevicePolicyManagerInternal()