From fd9bb8e2cc7b300fe0412b0a39ac165812140a8a Mon Sep 17 00:00:00 2001 From: Anil Admal Date: Wed, 17 Apr 2019 18:08:46 -0700 Subject: [PATCH] Fix incorrect error log message in GnssVisibilityControl class Fixes: 130763415 Test: Verified on a Pixel device. Change-Id: I83c150df1e99e9fb264fdafd846be1afb33897ed --- .../location/GnssVisibilityControl.java | 61 +++++++++++++++---- 1 file changed, 50 insertions(+), 11 deletions(-) diff --git a/services/core/java/com/android/server/location/GnssVisibilityControl.java b/services/core/java/com/android/server/location/GnssVisibilityControl.java index 24ee389a585b7..582a9de4cc6ff 100644 --- a/services/core/java/com/android/server/location/GnssVisibilityControl.java +++ b/services/core/java/com/android/server/location/GnssVisibilityControl.java @@ -290,6 +290,18 @@ class GnssVisibilityControl { return ""; } } + + private boolean isRequestAccepted() { + return mResponseType != NfwNotification.NFW_RESPONSE_TYPE_REJECTED; + } + + private boolean isRequestAttributedToProxyApp() { + return !TextUtils.isEmpty(mProxyAppPackageName); + } + + private boolean isEmergencyRequestNotification() { + return mInEmergencyMode && !isRequestAttributedToProxyApp(); + } } private void handlePermissionsChanged(int uid) { @@ -378,20 +390,37 @@ class GnssVisibilityControl { private void handleNfwNotification(NfwNotification nfwNotification) { if (DEBUG) Log.d(TAG, "Non-framework location access notification: " + nfwNotification); - final String proxyAppPackageName = nfwNotification.mProxyAppPackageName; - Boolean isLocationPermissionEnabled = mProxyAppToLocationPermissions.get( - proxyAppPackageName); - boolean isLocationRequestAccepted = - nfwNotification.mResponseType != NfwNotification.NFW_RESPONSE_TYPE_REJECTED; - boolean isPermissionMismatched; - if (isLocationPermissionEnabled == null) { - isPermissionMismatched = isLocationRequestAccepted; - } else { - isPermissionMismatched = (isLocationPermissionEnabled != isLocationRequestAccepted); + if (nfwNotification.isEmergencyRequestNotification()) { + handleEmergencyNfwNotification(nfwNotification); + return; } + + final String proxyAppPackageName = nfwNotification.mProxyAppPackageName; + final Boolean isLocationPermissionEnabled = mProxyAppToLocationPermissions.get( + proxyAppPackageName); + final boolean isLocationRequestAccepted = nfwNotification.isRequestAccepted(); + final boolean isPermissionMismatched = + (isLocationPermissionEnabled == null) ? isLocationRequestAccepted + : (isLocationPermissionEnabled != isLocationRequestAccepted); logEvent(nfwNotification, isPermissionMismatched); - if (TextUtils.isEmpty(proxyAppPackageName)) { + if (!nfwNotification.isRequestAttributedToProxyApp()) { + // Handle cases where GNSS HAL implementation correctly rejected NFW location request. + // 1. GNSS HAL implementation doesn't provide location to any NFW location use cases. + // There is no Location Attribution App configured in the framework. + // 2. GNSS HAL implementation doesn't provide location to some NFW location use cases. + // Location Attribution Apps are configured only for the supported NFW location + // use cases. All other use cases which are not supported (and always rejected) by + // the GNSS HAL implementation will have proxyAppPackageName set to empty string. + if (!isLocationRequestAccepted) { + if (DEBUG) { + Log.d(TAG, "Non-framework location request rejected. ProxyAppPackageName field" + + " is not set in the notification: " + nfwNotification + ". Number of" + + " configured proxy apps: " + mProxyAppToLocationPermissions.size()); + } + return; + } + Log.e(TAG, "ProxyAppPackageName field is not set. AppOps service not notified " + "for non-framework location access notification: " + nfwNotification); return; @@ -425,6 +454,16 @@ class GnssVisibilityControl { } } + private void handleEmergencyNfwNotification(NfwNotification nfwNotification) { + boolean isPermissionMismatched = + (nfwNotification.mResponseType == NfwNotification.NFW_RESPONSE_TYPE_REJECTED); + if (isPermissionMismatched) { + Log.e(TAG, "Emergency non-framework location request incorrectly rejected." + + " Notification: " + nfwNotification); + } + logEvent(nfwNotification, isPermissionMismatched); + } + private void logEvent(NfwNotification notification, boolean isPermissionMismatched) { StatsLog.write(StatsLog.GNSS_NFW_NOTIFICATION_REPORTED, notification.mProxyAppPackageName,