summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/location/provider/LocationProviderManager.java17
1 files changed, 16 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/location/provider/LocationProviderManager.java b/services/core/java/com/android/server/location/provider/LocationProviderManager.java
index 9474f5de0ca1..ca5343174478 100644
--- a/services/core/java/com/android/server/location/provider/LocationProviderManager.java
+++ b/services/core/java/com/android/server/location/provider/LocationProviderManager.java
@@ -462,6 +462,12 @@ public class LocationProviderManager extends
}
@GuardedBy("mLock")
+ final boolean onProviderPropertiesChanged() {
+ onHighPowerUsageChanged();
+ return false;
+ }
+
+ @GuardedBy("mLock")
private void onHighPowerUsageChanged() {
boolean isUsingHighPower = isUsingHighPower();
if (isUsingHighPower != mIsUsingHighPower) {
@@ -485,9 +491,14 @@ public class LocationProviderManager extends
Preconditions.checkState(Thread.holdsLock(mLock));
}
+ ProviderProperties properties = getProperties();
+ if (properties == null) {
+ return false;
+ }
+
return isActive()
&& getRequest().getIntervalMillis() < MAX_HIGH_POWER_INTERVAL_MS
- && getProperties().getPowerUsage() == ProviderProperties.POWER_USAGE_HIGH;
+ && properties.getPowerUsage() == ProviderProperties.POWER_USAGE_HIGH;
}
@GuardedBy("mLock")
@@ -2277,6 +2288,10 @@ public class LocationProviderManager extends
onEnabledChanged(UserHandle.USER_ALL);
}
+ if (!Objects.equals(oldState.properties, newState.properties)) {
+ updateRegistrations(Registration::onProviderPropertiesChanged);
+ }
+
if (mOnLocationTagsChangeListener != null) {
if (!oldState.extraAttributionTags.equals(newState.extraAttributionTags)
|| !Objects.equals(oldState.identity, newState.identity)) {