diff options
| author | 2019-06-09 22:49:25 -0700 | |
|---|---|---|
| committer | 2019-06-10 18:11:12 +0000 | |
| commit | 0e9ea750790b032f40f20c0302283b6f13d4cbb4 (patch) | |
| tree | c3793baed5058555d17bbad951eea946e206f446 | |
| parent | 8a03eb7842cea71e2713b8d208e44de550d210db (diff) | |
Fix NPE in removeGeofence
Check if geofence is null before reading getRadius()
Test: run cts-dev --module CtsLocationTestCases --test android.location.cts.LocationManagerTest
============================================
================= Results ==================
=============== Consumed Time ==============
arm64-v8a CtsLocationTestCases: 1m 21s
Total aggregated tests run time: 1m 21s
============== TOP 1 Slow Modules ==============
arm64-v8a CtsLocationTestCases: 0.29 tests/sec [24 tests / 81579 msec]
============== Modules Preparation Times ==============
arm64-v8a CtsLocationTestCases => prep = 4604 ms || clean = 750 ms
Total preparation time: 4s || Total tear down time: 750 ms
=======================================================
=============== Summary ===============
Total Run time: 1m 28s
1/1 modules completed
Total Tests : 24
PASSED : 24
FAILED : 0
============== End of Results ==============
============================================
Bug: 134894083
Change-Id: I71f643688855394e14974170bd2380f66cd51308
| -rw-r--r-- | services/core/java/com/android/server/LocationManagerService.java | 12 | ||||
| -rw-r--r-- | services/core/java/com/android/server/LocationUsageLogger.java | 11 |
2 files changed, 14 insertions, 9 deletions
diff --git a/services/core/java/com/android/server/LocationManagerService.java b/services/core/java/com/android/server/LocationManagerService.java index 78f0603c5359..8a639c543366 100644 --- a/services/core/java/com/android/server/LocationManagerService.java +++ b/services/core/java/com/android/server/LocationManagerService.java @@ -2361,7 +2361,7 @@ public class LocationManagerService extends ILocationManager.Stub { mRealRequest, mReceiver.isListener(), mReceiver.isPendingIntent(), - /* radius= */ 0, + /* geofence= */ null, mActivityManager.getPackageImportance(packageName)); // remove from mRecordsByProvider @@ -2541,7 +2541,7 @@ public class LocationManagerService extends ILocationManager.Stub { LocationStatsEnums.USAGE_STARTED, LocationStatsEnums.API_REQUEST_LOCATION_UPDATES, packageName, request, listener != null, intent != null, - /* radius= */ 0, + /* geofence= */ null, mActivityManager.getPackageImportance(packageName)); Receiver receiver; @@ -2844,7 +2844,7 @@ public class LocationManagerService extends ILocationManager.Stub { request, /* hasListener= */ false, intent != null, - geofence.getRadius(), + geofence, mActivityManager.getPackageImportance(packageName)); } @@ -2876,7 +2876,7 @@ public class LocationManagerService extends ILocationManager.Stub { /* LocationRequest= */ null, /* hasListener= */ false, intent != null, - geofence.getRadius(), + geofence, mActivityManager.getPackageImportance(packageName)); } mGeofenceManager.removeFence(geofence, intent); @@ -2973,7 +2973,7 @@ public class LocationManagerService extends ILocationManager.Stub { /* LocationRequest= */ null, /* hasListener= */ true, /* hasIntent= */ false, - /* radius */ 0, + /* geofence= */ null, mActivityManager.getPackageImportance(packageName)); } if (isThrottlingExemptLocked(callerIdentity) @@ -3014,7 +3014,7 @@ public class LocationManagerService extends ILocationManager.Stub { /* LocationRequest= */ null, /* hasListener= */ true, /* hasIntent= */ false, - /* radius= */ 0, + /* geofence= */ null, mActivityManager.getPackageImportance( linkedListener.mCallerIdentity.mPackageName)); } diff --git a/services/core/java/com/android/server/LocationUsageLogger.java b/services/core/java/com/android/server/LocationUsageLogger.java index c5030351f69d..4ca74bf3aa91 100644 --- a/services/core/java/com/android/server/LocationUsageLogger.java +++ b/services/core/java/com/android/server/LocationUsageLogger.java @@ -17,6 +17,7 @@ package com.android.server; import android.app.ActivityManager; +import android.location.Geofence; import android.location.LocationManager; import android.location.LocationRequest; import android.os.SystemClock; @@ -180,13 +181,14 @@ class LocationUsageLogger { public void logLocationApiUsage(int usageType, int apiInUse, String packageName, LocationRequest locationRequest, boolean hasListener, boolean hasIntent, - float radius, int activityImportance) { + Geofence geofence, int activityImportance) { try { if (!checkApiUsageLogCap()) { return; } boolean isLocationRequestNull = locationRequest == null; + boolean isGeofenceNull = geofence == null; if (D) { Log.d(TAG, "log API Usage to statsd. usageType: " + usageType + ", apiInUse: " + apiInUse + ", packageName: " + (packageName == null ? "" : packageName) @@ -194,7 +196,8 @@ class LocationUsageLogger { + (isLocationRequestNull ? "" : locationRequest.toString()) + ", hasListener: " + hasListener + ", hasIntent: " + hasIntent - + ", radius: " + radius + + ", geofence: " + + (isGeofenceNull ? "" : geofence.toString()) + ", importance: " + activityImportance); } @@ -219,7 +222,9 @@ class LocationUsageLogger { ? LocationStatsEnums.EXPIRATION_UNKNOWN : getBucketizedExpireIn(locationRequest.getExpireAt()), getCallbackType(apiInUse, hasListener, hasIntent), - bucketizeRadiusToStatsdEnum(radius), + isGeofenceNull + ? LocationStatsEnums.RADIUS_UNKNOWN + : bucketizeRadiusToStatsdEnum(geofence.getRadius()), categorizeActivityImportance(activityImportance)); } catch (Exception e) { // Swallow exceptions to avoid crashing LMS. |