|
26 | 26 | import android.content.pm.PackageManager; |
27 | 27 | import android.content.pm.PackageManager.NameNotFoundException; |
28 | 28 | import android.content.res.Resources; |
| 29 | +import android.database.ContentObserver; |
29 | 30 | import android.database.Cursor; |
30 | 31 | import android.location.Address; |
31 | 32 | import android.location.Criteria; |
|
87 | 88 | * The service class that manages LocationProviders and issues location |
88 | 89 | * updates and alerts. |
89 | 90 | */ |
90 | | -public class LocationManagerService extends ILocationManager.Stub implements Observer, Runnable { |
| 91 | +public class LocationManagerService extends ILocationManager.Stub implements Runnable { |
91 | 92 | private static final String TAG = "LocationManagerService"; |
92 | 93 | public static final boolean D = false; |
93 | 94 |
|
@@ -207,24 +208,30 @@ private void init() { |
207 | 208 | mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKELOCK_KEY); |
208 | 209 | mPackageManager = mContext.getPackageManager(); |
209 | 210 |
|
| 211 | + mBlacklist = new LocationBlacklist(mContext, mLocationHandler); |
| 212 | + mBlacklist.init(); |
| 213 | + mLocationFudger = new LocationFudger(); |
| 214 | + |
210 | 215 | synchronized (mLock) { |
211 | 216 | loadProvidersLocked(); |
212 | 217 | } |
213 | | - mBlacklist = new LocationBlacklist(mContext, mLocationHandler); |
214 | | - mBlacklist.init(); |
| 218 | + |
215 | 219 | mGeofenceManager = new GeofenceManager(mContext, mBlacklist); |
216 | | - mLocationFudger = new LocationFudger(); |
217 | 220 |
|
218 | 221 | // 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 | + }); |
227 | 232 | mPackageMonitor.register(mContext, Looper.myLooper(), true); |
| 233 | + |
| 234 | + updateProvidersLocked(); |
228 | 235 | } |
229 | 236 |
|
230 | 237 | private void loadProvidersLocked() { |
@@ -299,8 +306,6 @@ Load package name(s) containing location provider support. |
299 | 306 | if (mGeocodeProvider == null) { |
300 | 307 | Slog.e(TAG, "no geocoder provider found"); |
301 | 308 | } |
302 | | - |
303 | | - updateProvidersLocked(); |
304 | 309 | } |
305 | 310 |
|
306 | 311 | /** |
@@ -544,14 +549,6 @@ public void locationCallbackFinished(ILocationListener listener) { |
544 | 549 | } |
545 | 550 | } |
546 | 551 |
|
547 | | - /** Settings Observer callback */ |
548 | | - @Override |
549 | | - public void update(Observable o, Object arg) { |
550 | | - synchronized (mLock) { |
551 | | - updateProvidersLocked(); |
552 | | - } |
553 | | - } |
554 | | - |
555 | 552 | private void addProviderLocked(LocationProviderInterface provider) { |
556 | 553 | mProviders.add(provider); |
557 | 554 | mProvidersByName.put(provider.getName(), provider); |
|
0 commit comments