From 259d6e29824834e35ed984969a5064ad11e1a646 Mon Sep 17 00:00:00 2001 From: Soonil Nagarkar Date: Fri, 7 May 2021 09:26:36 -0700 Subject: [PATCH] Fix NPE in LocationProviderManager Bug: 187449017 Test: presubmits Change-Id: Ieb722a2247f2db2a13c7f526c0de5f6e503fa246 --- .../provider/LocationProviderManager.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) 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)) {