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

Commit 7031d30c authored by Sarah Chin's avatar Sarah Chin Committed by Automerger Merge Worker
Browse files

Merge "Add always full location check to LocationAccessPolicy" into tm-dev am:...

Merge "Add always full location check to LocationAccessPolicy" into tm-dev am: a9235c32 am: fe0ebdcb am: f87e6944

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18342389



Change-Id: Ibe26569554f7fa67b93c2cd1623b02638ccc6adf
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 0c236de7 f87e6944
Loading
Loading
Loading
Loading
+19 −6
Original line number Diff line number Diff line
@@ -316,9 +316,11 @@ public final class LocationAccessPolicy {
            return LocationPermissionResult.ALLOWED;
        }

        // Check the system-wide requirements. If the location main switch is off or
        // the app's profile isn't in foreground, return a soft denial.
        if (!checkSystemLocationAccess(context, query.callingUid, query.callingPid)) {
        // Check the system-wide requirements. If the location main switch is off and the caller is
        // not in the allowlist of apps that always have loation access or the app's profile
        // isn't in the foreground, return a soft denial.
        if (!checkSystemLocationAccess(context, query.callingUid, query.callingPid,
                query.callingPackage)) {
            return LocationPermissionResult.DENIED_SOFT;
        }

@@ -344,15 +346,16 @@ public final class LocationAccessPolicy {
        return LocationPermissionResult.ALLOWED;
    }


    private static boolean checkManifestPermission(Context context, int pid, int uid,
            String permissionToCheck) {
        return context.checkPermission(permissionToCheck, pid, uid)
                == PackageManager.PERMISSION_GRANTED;
    }

    private static boolean checkSystemLocationAccess(@NonNull Context context, int uid, int pid) {
        if (!isLocationModeEnabled(context, UserHandle.getUserHandleForUid(uid).getIdentifier())) {
    private static boolean checkSystemLocationAccess(@NonNull Context context, int uid, int pid,
            @NonNull String callingPackage) {
        if (!isLocationModeEnabled(context, UserHandle.getUserHandleForUid(uid).getIdentifier())
                && !isLocationBypassAllowed(context, callingPackage)) {
            if (DBG) Log.w(TAG, "Location disabled, failed, (" + uid + ")");
            return false;
        }
@@ -373,6 +376,16 @@ public final class LocationAccessPolicy {
        return locationManager.isLocationEnabledForUser(UserHandle.of(userId));
    }

    private static boolean isLocationBypassAllowed(@NonNull Context context,
            @NonNull String callingPackage) {
        for (String bypassPackage : getLocationBypassPackages(context)) {
            if (callingPackage.equals(bypassPackage)) {
                return true;
            }
        }
        return false;
    }

    /**
     * @return An array of packages that are always allowed to access location.
     */