summaryrefslogtreecommitdiffstats
path: root/services/java/com/android/server/LocationManagerService.java
diff options
context:
space:
mode:
authorVictoria Lease <violets@google.com>2012-09-30 11:44:22 -0700
committerVictoria Lease <violets@google.com>2012-10-01 09:09:25 -0700
commit38389b6cf7bd2ef49d2bd20ff1bca8677596590e (patch)
treedf60d969dee05b53545e2b0b18bfba57d266d595 /services/java/com/android/server/LocationManagerService.java
parentce803d8ed8350179a8474564df8ff26be32bbe5e (diff)
downloadframeworks_base-38389b6cf7bd2ef49d2bd20ff1bca8677596590e.zip
frameworks_base-38389b6cf7bd2ef49d2bd20ff1bca8677596590e.tar.gz
frameworks_base-38389b6cf7bd2ef49d2bd20ff1bca8677596590e.tar.bz2
Route GPS notifications to all users.
This takes the easy way around notifying the correct users about GPS state transitions by notifying ALL the users(!). I've also laid groundwork for proper multiuser support in LocationManager and did a tiny bit of cleanup in GpsNetInitiatedHandler while I was looking at notifications. Bug: 7213552 Change-Id: I2d6dc65c459e55d110ac0f5f79ae7a87ad638ede
Diffstat (limited to 'services/java/com/android/server/LocationManagerService.java')
-rw-r--r--services/java/com/android/server/LocationManagerService.java32
1 files changed, 32 insertions, 0 deletions
diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java
index a0c1552..d982d0d 100644
--- a/services/java/com/android/server/LocationManagerService.java
+++ b/services/java/com/android/server/LocationManagerService.java
@@ -17,9 +17,11 @@
package com.android.server;
import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
+import android.content.IntentFilter;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
@@ -171,6 +173,9 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
private final ArrayList<LocationProviderProxy> mProxyProviders =
new ArrayList<LocationProviderProxy>();
+ // current active user on the device - other users are denied location data
+ private int mCurrentUserId = UserHandle.USER_OWNER;
+
public LocationManagerService(Context context) {
super();
mContext = context;
@@ -224,6 +229,20 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
});
mPackageMonitor.register(mContext, Looper.myLooper(), true);
+ // listen for user change
+ IntentFilter intentFilter = new IntentFilter();
+ intentFilter.addAction(Intent.ACTION_USER_SWITCHED);
+
+ mContext.registerReceiverAsUser(new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if (Intent.ACTION_USER_SWITCHED.equals(action)) {
+ switchUser(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0));
+ }
+ }
+ }, UserHandle.ALL, intentFilter, null, null);
+
updateProvidersLocked();
}
@@ -302,6 +321,19 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
}
/**
+ * Called when the device's active user changes.
+ * @param userId the new active user's UserId
+ */
+ private void switchUser(int userId) {
+ //Log.d("LocationManagerService", "switchUser(" + mCurrentUserId + " -> " + userId + ")"); // TODO: remove this
+ synchronized (mLock) {
+ // TODO: inform previous user's Receivers that they will no longer receive updates
+ mCurrentUserId = userId;
+ // TODO: inform new user's Receivers that they are back on the update train
+ }
+ }
+
+ /**
* A wrapper class holding either an ILocationListener or a PendingIntent to receive
* location updates.
*/