Allow renounce permission
Allow renounce permission
Bug: 198533763
Test: CTS
Change-Id: Ie1c7ad713e72b8d30c53367d2af563b142d340e8
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 815f90e..475eba8 100755
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -6335,28 +6335,35 @@
* Starts a new network scan and returns the id of this scan.
*
* @param subId id of the subscription
+ * @param renounceFineLocationAccess Set this to true if the caller would not like to receive
+ * location related information which will be sent if the caller already possess
+ * {@android.Manifest.permission.ACCESS_FINE_LOCATION} and do not renounce the permission
* @param request contains the radio access networks with bands/channels to scan
* @param messenger callback messenger for scan results or errors
* @param binder for the purpose of auto clean when the user thread crashes
* @return the id of the requested scan which can be used to stop the scan.
*/
@Override
- public int requestNetworkScan(int subId, NetworkScanRequest request, Messenger messenger,
+ public int requestNetworkScan(int subId, boolean renounceFineLocationAccess,
+ NetworkScanRequest request, Messenger messenger,
IBinder binder, String callingPackage, String callingFeatureId) {
TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(
mApp, subId, "requestNetworkScan");
LocationAccessPolicy.LocationPermissionResult locationResult =
- LocationAccessPolicy.checkLocationPermission(mApp,
- new LocationAccessPolicy.LocationPermissionQuery.Builder()
- .setCallingPackage(callingPackage)
- .setCallingFeatureId(callingFeatureId)
- .setCallingPid(Binder.getCallingPid())
- .setCallingUid(Binder.getCallingUid())
- .setMethod("requestNetworkScan")
- .setMinSdkVersionForFine(Build.VERSION_CODES.Q)
- .setMinSdkVersionForCoarse(Build.VERSION_CODES.Q)
- .setMinSdkVersionForEnforcement(Build.VERSION_CODES.Q)
- .build());
+ LocationAccessPolicy.LocationPermissionResult.DENIED_HARD;
+ if (!renounceFineLocationAccess) {
+ locationResult = LocationAccessPolicy.checkLocationPermission(mApp,
+ new LocationAccessPolicy.LocationPermissionQuery.Builder()
+ .setCallingPackage(callingPackage)
+ .setCallingFeatureId(callingFeatureId)
+ .setCallingPid(Binder.getCallingPid())
+ .setCallingUid(Binder.getCallingUid())
+ .setMethod("requestNetworkScan")
+ .setMinSdkVersionForFine(Build.VERSION_CODES.Q)
+ .setMinSdkVersionForCoarse(Build.VERSION_CODES.Q)
+ .setMinSdkVersionForEnforcement(Build.VERSION_CODES.Q)
+ .build());
+ }
if (locationResult != LocationAccessPolicy.LocationPermissionResult.ALLOWED) {
SecurityException e = checkNetworkRequestForSanitizedLocationAccess(
request, subId, callingPackage);
@@ -6374,7 +6381,7 @@
final long identity = Binder.clearCallingIdentity();
try {
return mNetworkScanRequestTracker.startNetworkScan(
- request, messenger, binder, getPhone(subId),
+ renounceFineLocationAccess, request, messenger, binder, getPhone(subId),
callingUid, callingPid, callingPackage);
} finally {
Binder.restoreCallingIdentity(identity);
@@ -7869,49 +7876,54 @@
}
/**
- * {@hide}
* Returns the service state information on specified subscription.
*/
@Override
- public ServiceState getServiceStateForSubscriber(int subId, String callingPackage,
- String callingFeatureId) {
+ public ServiceState getServiceStateForSubscriber(int subId,
+ boolean renounceFineLocationAccess, boolean renounceCoarseLocationAccess,
+ String callingPackage, String callingFeatureId) {
if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
mApp, subId, callingPackage, callingFeatureId, "getServiceStateForSubscriber")) {
return null;
}
- LocationAccessPolicy.LocationPermissionResult fineLocationResult =
- LocationAccessPolicy.checkLocationPermission(mApp,
- new LocationAccessPolicy.LocationPermissionQuery.Builder()
- .setCallingPackage(callingPackage)
- .setCallingFeatureId(callingFeatureId)
- .setCallingPid(Binder.getCallingPid())
- .setCallingUid(Binder.getCallingUid())
- .setMethod("getServiceStateForSubscriber")
- .setLogAsInfo(true)
- .setMinSdkVersionForFine(Build.VERSION_CODES.Q)
- .setMinSdkVersionForCoarse(Build.VERSION_CODES.Q)
- .setMinSdkVersionForEnforcement(Build.VERSION_CODES.Q)
- .build());
+ boolean hasFinePermission = false;
+ boolean hasCoarsePermission = false;
+ if (!renounceFineLocationAccess) {
+ LocationAccessPolicy.LocationPermissionResult fineLocationResult =
+ LocationAccessPolicy.checkLocationPermission(mApp,
+ new LocationAccessPolicy.LocationPermissionQuery.Builder()
+ .setCallingPackage(callingPackage)
+ .setCallingFeatureId(callingFeatureId)
+ .setCallingPid(Binder.getCallingPid())
+ .setCallingUid(Binder.getCallingUid())
+ .setMethod("getServiceStateForSubscriber")
+ .setLogAsInfo(true)
+ .setMinSdkVersionForFine(Build.VERSION_CODES.Q)
+ .setMinSdkVersionForCoarse(Build.VERSION_CODES.Q)
+ .setMinSdkVersionForEnforcement(Build.VERSION_CODES.Q)
+ .build());
+ hasFinePermission =
+ fineLocationResult == LocationAccessPolicy.LocationPermissionResult.ALLOWED;
+ }
- LocationAccessPolicy.LocationPermissionResult coarseLocationResult =
- LocationAccessPolicy.checkLocationPermission(mApp,
- new LocationAccessPolicy.LocationPermissionQuery.Builder()
- .setCallingPackage(callingPackage)
- .setCallingFeatureId(callingFeatureId)
- .setCallingPid(Binder.getCallingPid())
- .setCallingUid(Binder.getCallingUid())
- .setMethod("getServiceStateForSubscriber")
- .setLogAsInfo(true)
- .setMinSdkVersionForCoarse(Build.VERSION_CODES.Q)
- .setMinSdkVersionForFine(Integer.MAX_VALUE)
- .setMinSdkVersionForEnforcement(Build.VERSION_CODES.Q)
- .build());
- // We don't care about hard or soft here -- all we need to know is how much info to scrub.
- boolean hasFinePermission =
- fineLocationResult == LocationAccessPolicy.LocationPermissionResult.ALLOWED;
- boolean hasCoarsePermission =
- coarseLocationResult == LocationAccessPolicy.LocationPermissionResult.ALLOWED;
+ if (!renounceCoarseLocationAccess) {
+ LocationAccessPolicy.LocationPermissionResult coarseLocationResult =
+ LocationAccessPolicy.checkLocationPermission(mApp,
+ new LocationAccessPolicy.LocationPermissionQuery.Builder()
+ .setCallingPackage(callingPackage)
+ .setCallingFeatureId(callingFeatureId)
+ .setCallingPid(Binder.getCallingPid())
+ .setCallingUid(Binder.getCallingUid())
+ .setMethod("getServiceStateForSubscriber")
+ .setLogAsInfo(true)
+ .setMinSdkVersionForCoarse(Build.VERSION_CODES.Q)
+ .setMinSdkVersionForFine(Integer.MAX_VALUE)
+ .setMinSdkVersionForEnforcement(Build.VERSION_CODES.Q)
+ .build());
+ hasCoarsePermission =
+ coarseLocationResult == LocationAccessPolicy.LocationPermissionResult.ALLOWED;
+ }
final Phone phone = getPhone(subId);
if (phone == null) {