diff options
author | Victoria Lease <violets@google.com> | 2012-10-01 17:46:26 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-10-01 17:46:27 -0700 |
commit | 3750db176adbaf3f9779df5eadf335f673b2ac4f (patch) | |
tree | c3dc41f075caedc0f858fb5dfa0c743ef8b37327 | |
parent | 6f354ed9994b4ea7612cc4499413de108dcac7d4 (diff) | |
parent | 38389b6cf7bd2ef49d2bd20ff1bca8677596590e (diff) | |
download | frameworks_base-3750db176adbaf3f9779df5eadf335f673b2ac4f.zip frameworks_base-3750db176adbaf3f9779df5eadf335f673b2ac4f.tar.gz frameworks_base-3750db176adbaf3f9779df5eadf335f673b2ac4f.tar.bz2 |
Merge "Route GPS notifications to all users." into jb-mr1-dev
3 files changed, 37 insertions, 9 deletions
diff --git a/location/java/com/android/internal/location/GpsNetInitiatedHandler.java b/location/java/com/android/internal/location/GpsNetInitiatedHandler.java index 0adba06..57e2786 100755 --- a/location/java/com/android/internal/location/GpsNetInitiatedHandler.java +++ b/location/java/com/android/internal/location/GpsNetInitiatedHandler.java @@ -26,6 +26,7 @@ import android.content.Intent; import android.location.LocationManager; import android.os.Bundle; import android.os.RemoteException; +import android.os.UserHandle; import android.util.Log; import com.android.internal.R; @@ -89,7 +90,6 @@ public class GpsNetInitiatedHandler { // configuration of notificaiton behavior private boolean mPlaySounds = false; - private boolean visible = true; private boolean mPopupImmediately = true; // Set to true if string from HAL is encoded as Hex, e.g., "3F0039" @@ -213,11 +213,8 @@ public class GpsNetInitiatedHandler { PendingIntent pi = PendingIntent.getBroadcast(mContext, 0, intent, 0); mNiNotification.setLatestEventInfo(mContext, title, message, pi); - if (visible) { - notificationManager.notify(notif.notificationId, mNiNotification); - } else { - notificationManager.cancel(notif.notificationId); - } + notificationManager.notifyAsUser(null, notif.notificationId, mNiNotification, + UserHandle.ALL); } // Opens the notification dialog and waits for user input diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java index f864d04..776cf36 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java @@ -97,7 +97,6 @@ public class LocationController extends BroadcastReceiver { } try { - // XXX WHAT TO DO ABOUT MULTI-USER? if (visible) { Intent gpsIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); gpsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); @@ -126,7 +125,7 @@ public class LocationController extends BroadcastReceiver { GPS_NOTIFICATION_ID, n, idOut, - UserHandle.USER_CURRENT); + UserHandle.USER_ALL); for (LocationGpsStateChangeCallback cb : mChangeCallbacks) { cb.onLocationGpsStateChanged(true, text); @@ -134,7 +133,7 @@ public class LocationController extends BroadcastReceiver { } else { mNotificationService.cancelNotificationWithTag( mContext.getPackageName(), null, - GPS_NOTIFICATION_ID, UserHandle.USER_CURRENT); + GPS_NOTIFICATION_ID, UserHandle.USER_ALL); for (LocationGpsStateChangeCallback cb : mChangeCallbacks) { cb.onLocationGpsStateChanged(false, null); diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java index a1bd3c5..2197e31 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. */ |