diff options
author | Xin Li <delphij@google.com> | 2020-12-02 00:38:58 -0800 |
---|---|---|
committer | Xin Li <delphij@google.com> | 2020-12-02 00:38:58 -0800 |
commit | d31ee388115d17c2fd337f2806b37390c7d29834 (patch) | |
tree | de02b2ac289fbc2077fbc652481672eeea0b18fe /location | |
parent | 88f10e63bb2ce069bffc195acee09c332aab71fd (diff) | |
parent | 07ec9b4dcb828de0f9ad15ef5c501fcc5ce21379 (diff) |
Merge rvc-qpr-dev-plus-aosp-without-vendor@6881855
Bug: 172690556
Merged-In: I78222391b83a4add8e964340ec08bb8a1306e1c6
Change-Id: I28bbf40820674675ccf765c912aa8140d3f74ab2
Diffstat (limited to 'location')
-rw-r--r-- | location/java/android/location/ILocationManager.aidl | 6 | ||||
-rw-r--r-- | location/java/android/location/LocationManager.java | 33 |
2 files changed, 21 insertions, 18 deletions
diff --git a/location/java/android/location/ILocationManager.aidl b/location/java/android/location/ILocationManager.aidl index 75ea0cbada92..7ed5b579ebb4 100644 --- a/location/java/android/location/ILocationManager.aidl +++ b/location/java/android/location/ILocationManager.aidl @@ -45,9 +45,9 @@ import com.android.internal.location.ProviderProperties; interface ILocationManager { Location getLastLocation(in LocationRequest request, String packageName, String featureId); - boolean getCurrentLocation(in LocationRequest request, - in ICancellationSignal cancellationSignal, in ILocationListener listener, - String packageName, String featureId, String listenerId); + @nullable ICancellationSignal getCurrentLocation(in LocationRequest request, + in ILocationListener listener, String packageName, String featureId, + String listenerId); void requestLocationUpdates(in LocationRequest request, in ILocationListener listener, in PendingIntent intent, String packageName, String featureId, String listenerId); diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java index 0c7d96d9f136..33c69511d273 100644 --- a/location/java/android/location/LocationManager.java +++ b/location/java/android/location/LocationManager.java @@ -724,16 +724,15 @@ public class LocationManager { cancellationSignal.throwIfCanceled(); } - ICancellationSignal remoteCancellationSignal = CancellationSignal.createTransport(); - try { - if (mService.getCurrentLocation(currentLocationRequest, remoteCancellationSignal, - transport, mContext.getPackageName(), mContext.getAttributionTag(), - transport.getListenerId())) { + ICancellationSignal cancelRemote = mService.getCurrentLocation( + currentLocationRequest, transport, mContext.getPackageName(), + mContext.getAttributionTag(), transport.getListenerId()); + if (cancelRemote != null) { transport.register(mContext.getSystemService(AlarmManager.class), - remoteCancellationSignal); + cancellationSignal, cancelRemote); if (cancellationSignal != null) { - cancellationSignal.setOnCancelListener(transport::cancel); + cancellationSignal.setRemote(cancelRemote); } } else { transport.fail(); @@ -2535,7 +2534,7 @@ public class LocationManager { } private static class GetCurrentLocationTransport extends ILocationListener.Stub implements - AlarmManager.OnAlarmListener { + AlarmManager.OnAlarmListener, CancellationSignal.OnCancelListener { @GuardedBy("this") @Nullable @@ -2567,6 +2566,7 @@ public class LocationManager { } public synchronized void register(AlarmManager alarmManager, + CancellationSignal cancellationSignal, ICancellationSignal remoteCancellationSignal) { if (mConsumer == null) { return; @@ -2580,10 +2580,18 @@ public class LocationManager { this, null); + if (cancellationSignal != null) { + cancellationSignal.setOnCancelListener(this); + } + mRemoteCancellationSignal = remoteCancellationSignal; } - public void cancel() { + @Override + public void onCancel() { + synchronized (this) { + mRemoteCancellationSignal = null; + } remove(); } @@ -2632,11 +2640,6 @@ public class LocationManager { @Override public void onLocationChanged(Location location) { - synchronized (this) { - // save ourselves a pointless x-process call to cancel the location request - mRemoteCancellationSignal = null; - } - deliverResult(location); } @@ -3034,7 +3037,7 @@ public class LocationManager { protected GnssRequest merge(@NonNull List<GnssRequest> requests) { Preconditions.checkArgument(!requests.isEmpty()); for (GnssRequest request : requests) { - if (request.isFullTracking()) { + if (request != null && request.isFullTracking()) { return request; } } |