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 4b772f29e250b..1461712f2732c 100644 --- a/services/core/java/com/android/server/location/provider/LocationProviderManager.java +++ b/services/core/java/com/android/server/location/provider/LocationProviderManager.java @@ -461,6 +461,12 @@ public class LocationProviderManager extends return LocationProviderManager.this; } + @GuardedBy("mLock") + final boolean onProviderPropertiesChanged() { + onHighPowerUsageChanged(); + return false; + } + @GuardedBy("mLock") private void onHighPowerUsageChanged() { boolean isUsingHighPower = isUsingHighPower(); @@ -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") @@ -2270,6 +2281,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)) {