Skip to content

Commit 6809352

Browse files
Brian MuramatsuAndroid (Google) Code Review
authored andcommitted
Merge "Fix GPS settings change listener in LocManager" into jb-mr1-dev
2 parents deeade3 + bb95cb9 commit 6809352

File tree

1 file changed

+19
-22
lines changed

1 file changed

+19
-22
lines changed

services/java/com/android/server/LocationManagerService.java

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import android.content.pm.PackageManager;
2727
import android.content.pm.PackageManager.NameNotFoundException;
2828
import android.content.res.Resources;
29+
import android.database.ContentObserver;
2930
import android.database.Cursor;
3031
import android.location.Address;
3132
import android.location.Criteria;
@@ -87,7 +88,7 @@
8788
* The service class that manages LocationProviders and issues location
8889
* updates and alerts.
8990
*/
90-
public class LocationManagerService extends ILocationManager.Stub implements Observer, Runnable {
91+
public class LocationManagerService extends ILocationManager.Stub implements Runnable {
9192
private static final String TAG = "LocationManagerService";
9293
public static final boolean D = false;
9394

@@ -207,24 +208,30 @@ private void init() {
207208
mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKELOCK_KEY);
208209
mPackageManager = mContext.getPackageManager();
209210

211+
mBlacklist = new LocationBlacklist(mContext, mLocationHandler);
212+
mBlacklist.init();
213+
mLocationFudger = new LocationFudger();
214+
210215
synchronized (mLock) {
211216
loadProvidersLocked();
212217
}
213-
mBlacklist = new LocationBlacklist(mContext, mLocationHandler);
214-
mBlacklist.init();
218+
215219
mGeofenceManager = new GeofenceManager(mContext, mBlacklist);
216-
mLocationFudger = new LocationFudger();
217220

218221
// listen for settings changes
219-
ContentResolver resolver = mContext.getContentResolver();
220-
Cursor settingsCursor = resolver.query(Settings.Secure.CONTENT_URI, null,
221-
"(" + NameValueTable.NAME + "=?)",
222-
new String[]{Settings.Secure.LOCATION_PROVIDERS_ALLOWED}, null);
223-
ContentQueryMap query = new ContentQueryMap(settingsCursor, NameValueTable.NAME, true,
224-
mLocationHandler);
225-
settingsCursor.close();
226-
query.addObserver(this);
222+
mContext.getContentResolver().registerContentObserver(
223+
Settings.Secure.getUriFor(Settings.Secure.LOCATION_PROVIDERS_ALLOWED), true,
224+
new ContentObserver(mLocationHandler) {
225+
@Override
226+
public void onChange(boolean selfChange) {
227+
synchronized (mLock) {
228+
updateProvidersLocked();
229+
}
230+
}
231+
});
227232
mPackageMonitor.register(mContext, Looper.myLooper(), true);
233+
234+
updateProvidersLocked();
228235
}
229236

230237
private void loadProvidersLocked() {
@@ -299,8 +306,6 @@ Load package name(s) containing location provider support.
299306
if (mGeocodeProvider == null) {
300307
Slog.e(TAG, "no geocoder provider found");
301308
}
302-
303-
updateProvidersLocked();
304309
}
305310

306311
/**
@@ -544,14 +549,6 @@ public void locationCallbackFinished(ILocationListener listener) {
544549
}
545550
}
546551

547-
/** Settings Observer callback */
548-
@Override
549-
public void update(Observable o, Object arg) {
550-
synchronized (mLock) {
551-
updateProvidersLocked();
552-
}
553-
}
554-
555552
private void addProviderLocked(LocationProviderInterface provider) {
556553
mProviders.add(provider);
557554
mProvidersByName.put(provider.getName(), provider);

0 commit comments

Comments
 (0)