From 0c5a04014d3833c9a82772a832d3bc6410fc52ac Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Fri, 27 Aug 2010 14:01:23 -0700 Subject: Send broadcast intent when configured location providers change. See e.g. http://code.google.com/p/android/issues/detail?id=10042 This is also needed by the power control widget, which has no reliable way otherwise of staying in-sync. Change-Id: I8f2b6b79b1843329bae952a25ea56f15e3cf92aa --- location/java/android/location/LocationManager.java | 7 +++++++ services/java/com/android/server/LocationManagerService.java | 8 ++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java index 9ceda7e..9aa84a03 100644 --- a/location/java/android/location/LocationManager.java +++ b/location/java/android/location/LocationManager.java @@ -127,6 +127,13 @@ public class LocationManager { "android.location.GPS_ENABLED_CHANGE"; /** + * Broadcast intent action when the configured location providers + * change. + */ + public static final String PROVIDERS_CHANGED_ACTION = + "android.location.PROVIDERS_CHANGED"; + + /** * Broadcast intent action indicating that the GPS has either started or * stopped receiving GPS fixes. An intent extra provides this state as a * boolean, where {@code true} means that the GPS is actively receiving fixes. diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java index 3bcf427..a38970f 100644 --- a/services/java/com/android/server/LocationManagerService.java +++ b/services/java/com/android/server/LocationManagerService.java @@ -858,18 +858,22 @@ public class LocationManagerService extends ILocationManager.Stub implements Run } private void updateProvidersLocked() { + boolean changesMade = false; for (int i = mProviders.size() - 1; i >= 0; i--) { LocationProviderInterface p = mProviders.get(i); boolean isEnabled = p.isEnabled(); String name = p.getName(); boolean shouldBeEnabled = isAllowedBySettingsLocked(name); - if (isEnabled && !shouldBeEnabled) { updateProviderListenersLocked(name, false); + changesMade = true; } else if (!isEnabled && shouldBeEnabled) { updateProviderListenersLocked(name, true); + changesMade = true; } - + } + if (changesMade) { + mContext.sendBroadcast(new Intent(LocationManager.PROVIDERS_CHANGED_ACTION)); } } -- cgit v1.1