diff options
-rw-r--r-- | services/core/java/com/android/server/location/provider/LocationProviderManager.java | 17 |
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)) { |