Merge "Fix GPS settings change listener in LocManager" into jb-mr1-dev

This commit is contained in:
Brian Muramatsu
2012-09-04 18:36:34 -07:00
committed by Android (Google) Code Review

View File

@@ -26,6 +26,7 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources; import android.content.res.Resources;
import android.database.ContentObserver;
import android.database.Cursor; import android.database.Cursor;
import android.location.Address; import android.location.Address;
import android.location.Criteria; import android.location.Criteria;
@@ -87,7 +88,7 @@ import java.util.Set;
* The service class that manages LocationProviders and issues location * The service class that manages LocationProviders and issues location
* updates and alerts. * updates and alerts.
*/ */
public class LocationManagerService extends ILocationManager.Stub implements Observer, Runnable { public class LocationManagerService extends ILocationManager.Stub implements Runnable {
private static final String TAG = "LocationManagerService"; private static final String TAG = "LocationManagerService";
public static final boolean D = false; public static final boolean D = false;
@@ -207,24 +208,30 @@ public class LocationManagerService extends ILocationManager.Stub implements Obs
mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKELOCK_KEY); mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKELOCK_KEY);
mPackageManager = mContext.getPackageManager(); mPackageManager = mContext.getPackageManager();
mBlacklist = new LocationBlacklist(mContext, mLocationHandler);
mBlacklist.init();
mLocationFudger = new LocationFudger();
synchronized (mLock) { synchronized (mLock) {
loadProvidersLocked(); loadProvidersLocked();
} }
mBlacklist = new LocationBlacklist(mContext, mLocationHandler);
mBlacklist.init();
mGeofenceManager = new GeofenceManager(mContext, mBlacklist); mGeofenceManager = new GeofenceManager(mContext, mBlacklist);
mLocationFudger = new LocationFudger();
// listen for settings changes // listen for settings changes
ContentResolver resolver = mContext.getContentResolver(); mContext.getContentResolver().registerContentObserver(
Cursor settingsCursor = resolver.query(Settings.Secure.CONTENT_URI, null, Settings.Secure.getUriFor(Settings.Secure.LOCATION_PROVIDERS_ALLOWED), true,
"(" + NameValueTable.NAME + "=?)", new ContentObserver(mLocationHandler) {
new String[]{Settings.Secure.LOCATION_PROVIDERS_ALLOWED}, null); @Override
ContentQueryMap query = new ContentQueryMap(settingsCursor, NameValueTable.NAME, true, public void onChange(boolean selfChange) {
mLocationHandler); synchronized (mLock) {
settingsCursor.close(); updateProvidersLocked();
query.addObserver(this); }
}
});
mPackageMonitor.register(mContext, Looper.myLooper(), true); mPackageMonitor.register(mContext, Looper.myLooper(), true);
updateProvidersLocked();
} }
private void loadProvidersLocked() { private void loadProvidersLocked() {
@@ -299,8 +306,6 @@ public class LocationManagerService extends ILocationManager.Stub implements Obs
if (mGeocodeProvider == null) { if (mGeocodeProvider == null) {
Slog.e(TAG, "no geocoder provider found"); Slog.e(TAG, "no geocoder provider found");
} }
updateProvidersLocked();
} }
/** /**
@@ -544,14 +549,6 @@ public class LocationManagerService extends ILocationManager.Stub implements Obs
} }
} }
/** Settings Observer callback */
@Override
public void update(Observable o, Object arg) {
synchronized (mLock) {
updateProvidersLocked();
}
}
private void addProviderLocked(LocationProviderInterface provider) { private void addProviderLocked(LocationProviderInterface provider) {
mProviders.add(provider); mProviders.add(provider);
mProvidersByName.put(provider.getName(), provider); mProvidersByName.put(provider.getName(), provider);