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

Commit b86334fa authored by Wei Wang's avatar Wei Wang
Browse files

Use app ops string string when checking ops.

Permission string is used instead of app ops string. This would
cause RemoteExceptions when getting last location.

Bug: 111104930
Test: Manual, with test app
Change-Id: Ia284b1103f667bd29cf2bc0877dd8f605723b0ff
parent 50621368
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -1549,6 +1549,22 @@ public class LocationManagerService extends ILocationManager.Stub {
        return -1;
    }

    private static String resolutionLevelToOpStr(int allowedResolutionLevel) {
        switch(allowedResolutionLevel) {
            case RESOLUTION_LEVEL_COARSE:
                return AppOpsManager.OPSTR_COARSE_LOCATION;
            case RESOLUTION_LEVEL_FINE:
                return AppOpsManager.OPSTR_FINE_LOCATION;
            case RESOLUTION_LEVEL_NONE:
                // The client is not allowed to get any location, so both FINE and COARSE ops will
                // be denied. Pick the most restrictive one to be safe.
                return AppOpsManager.OPSTR_FINE_LOCATION;
            default:
                // Use the most restrictive ops if not sure.
                return AppOpsManager.OPSTR_FINE_LOCATION;
        }
    }

    boolean reportLocationAccessNoThrow(
            int pid, int uid, String packageName, int allowedResolutionLevel) {
        int op = resolutionLevelToOp(allowedResolutionLevel);
@@ -2295,7 +2311,7 @@ public class LocationManagerService extends ILocationManager.Stub {
                }

                // Don't return stale location to apps with foreground-only location permission.
                String op = getResolutionPermission(allowedResolutionLevel);
                String op = resolutionLevelToOpStr(allowedResolutionLevel);
                long locationAgeMs = SystemClock.elapsedRealtime() -
                        location.getElapsedRealtimeNanos() / NANOS_PER_MILLI;
                if ((locationAgeMs > mLastLocationMaxAgeMs)