diff --git a/src/com/android/phone/LocationAccessPolicy.java b/src/com/android/phone/LocationAccessPolicy.java
index 9f863a3..6f2a5ec 100644
--- a/src/com/android/phone/LocationAccessPolicy.java
+++ b/src/com/android/phone/LocationAccessPolicy.java
@@ -45,18 +45,27 @@
      *
      * @param pkgName Package name of the application requesting access
      * @param uid The uid of the package
+     * @param message Message to add to the exception if no location permission
      * @return boolean true or false if permissions is granted
      */
     static boolean canAccessCellLocation(@NonNull Context context, @NonNull String pkgName,
-            int uid) throws SecurityException {
+            int uid, String message) throws SecurityException {
         context.getSystemService(AppOpsManager.class).checkPackage(uid, pkgName);
         // We always require the location permission and also require the
         // location mode to be on for non-legacy apps. Legacy apps are
         // required to be in the foreground to at least mitigate the case
         // where a legacy app the user is not using tracks their location.
-        if (!hasUidLocationPermission(context, pkgName, uid)
-                || (!isLocationModeEnabled(context, UserHandle.getUserId(uid)))
-                        && !isLegacyForeground(context, pkgName)) {
+
+        // Grating ACCESS_FINE_LOCATION to an app automatically grants it ACCESS_COARSE_LOCATION.
+        context.enforceCallingOrSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION, message);
+        final int opCode = AppOpsManager.permissionToOpCode(
+                Manifest.permission.ACCESS_COARSE_LOCATION);
+        if (opCode != AppOpsManager.OP_NONE && context.getSystemService(AppOpsManager.class)
+                .noteOp(opCode, uid, pkgName) != AppOpsManager.MODE_ALLOWED) {
+            return false;
+        }
+        if (!isLocationModeEnabled(context, UserHandle.getUserId(uid))
+                && !isLegacyForeground(context, pkgName)) {
             return false;
         }
         // If the user or profile is current, permission is granted.
@@ -103,21 +112,6 @@
                 == PackageManager.PERMISSION_GRANTED;
     }
 
-    private static boolean hasUidLocationPermission(@NonNull Context context,
-            @NonNull String pkgName, int uid) {
-        // Grating ACCESS_FINE_LOCATION to an app automatically grants it ACCESS_COARSE_LOCATION.
-        if ((context.checkCallingOrSelfPermission(
-                Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED)) {
-            final int opCode = AppOpsManager.permissionToOpCode(
-                    Manifest.permission.ACCESS_COARSE_LOCATION);
-            if (opCode != AppOpsManager.OP_NONE) {
-                return context.getSystemService(AppOpsManager.class).noteOp(opCode, uid, pkgName)
-                        == AppOpsManager.MODE_ALLOWED;
-            }
-        }
-        return false;
-    }
-
     private static boolean isCurrentProfile(@NonNull Context context, int uid) {
         final int currentUser = ActivityManager.getCurrentUser();
         final int callingUserId = UserHandle.getUserId(uid);
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 204afd3..59b7684 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -1641,7 +1641,7 @@
     @Override
     public Bundle getCellLocation(String callingPackage) {
         if (!LocationAccessPolicy.canAccessCellLocation(mPhone.getContext(),
-                callingPackage, Binder.getCallingUid())) {
+                callingPackage, Binder.getCallingUid(), "getCellLocation")) {
             return null;
         }
 
@@ -1709,7 +1709,7 @@
     @SuppressWarnings("unchecked")
     public List<NeighboringCellInfo> getNeighboringCellInfo(String callingPackage) {
         if (!LocationAccessPolicy.canAccessCellLocation(mPhone.getContext(),
-                callingPackage, Binder.getCallingUid())) {
+                callingPackage, Binder.getCallingUid(), "getNeighboringCellInfo")) {
             return null;
         }
 
@@ -1737,7 +1737,7 @@
     @Override
     public List<CellInfo> getAllCellInfo(String callingPackage) {
         if (!LocationAccessPolicy.canAccessCellLocation(mPhone.getContext(),
-                callingPackage, Binder.getCallingUid())) {
+                callingPackage, Binder.getCallingUid(), "getAllCellInfo")) {
             return null;
         }
 
