From afe1adfb1dfa7d39bfb950968296f9e2034de536 Mon Sep 17 00:00:00 2001 From: Soonil Nagarkar Date: Thu, 27 Feb 2020 13:00:31 -0800 Subject: Updates and fixes to GnssMeasurementsProvider Listen for changes to developer full tracking setting, and respect that from within GnssMeasurementsProvider, and fix some nullable inconsistencies. Test: manual + presubmits Change-Id: Id000d97d528ed579f064c2f89ed2025ef97aa7b5 --- .../util/listeners/AbstractListenerManager.java | 90 ++++++++++++++-------- 1 file changed, 57 insertions(+), 33 deletions(-) (limited to 'location/java') diff --git a/location/java/android/location/util/listeners/AbstractListenerManager.java b/location/java/android/location/util/listeners/AbstractListenerManager.java index d2adab0aa9d9..facb74766f2c 100644 --- a/location/java/android/location/util/listeners/AbstractListenerManager.java +++ b/location/java/android/location/util/listeners/AbstractListenerManager.java @@ -78,13 +78,6 @@ public abstract class AbstractListenerManager actives = new ArrayList<>(mRegistrations.size()); - for (int i = 0; i < mRegistrations.size(); i++) { - TRegistration registration = mRegistrations.valueAt(i); - if (isActive(registration)) { - actives.add(registration); + /** + * Forces a re-evalution of the active state of all registrations, the merged request for all + * active registrations, and service registration state. + */ + protected void updateService() { + synchronized (mRegistrations) { + ArrayList actives = new ArrayList<>(mRegistrations.size()); + for (int i = 0; i < mRegistrations.size(); i++) { + TRegistration registration = mRegistrations.valueAt(i); + if (isActive(registration)) { + actives.add(registration); + } } - } - if (actives.isEmpty()) { - if (mServiceRegistered) { - unregisterService(); - mServiceRegistered = false; + if (actives.isEmpty()) { + if (mServiceRegistered) { + unregisterService(); + mServiceRegistered = false; + } + mCurrentRequest = null; + + if (mActiveRegistrations) { + mActiveRegistrations = false; + onInactive(); + } + return; + } else { + if (!mActiveRegistrations) { + mActiveRegistrations = true; + onActive(); + } } - mCurrentRequest = null; - return; - } - TMergedRequest merged = mergeRequests(actives); - if (!mServiceRegistered || !Objects.equals(merged, mCurrentRequest)) { - if (mServiceRegistered) { - unregisterService(); + TMergedRequest merged = mergeRequests(actives); + if (!mServiceRegistered || !Objects.equals(merged, mCurrentRequest)) { + if (mServiceRegistered) { + unregisterService(); + } + mCurrentRequest = merged; + mServiceRegistered = registerService(mCurrentRequest); } - mCurrentRequest = merged; - mServiceRegistered = registerService(mCurrentRequest); } } @@ -264,7 +271,8 @@ public abstract class AbstractListenerManager function) { synchronized (mRegistrations) { @@ -307,6 +315,22 @@ public abstract class AbstractListenerManager