aboutsummaryrefslogtreecommitdiff
path: root/car-lib
diff options
context:
space:
mode:
authorJovana Knezevic <jovanak@google.com>2018-06-25 22:14:32 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2018-06-25 22:14:32 +0000
commit4aff01310e105f5a26a418e1a1cd8596ca262b69 (patch)
treef2245b8db881ca0c74b31bfea0463474dc0d2ed5 /car-lib
parentd50321314e309f0062850733a6e7b5f582af5f8c (diff)
parent32c0c703325c07bca115bfd17a5620989f03e6d0 (diff)
downloadCar-4aff01310e105f5a26a418e1a1cd8596ca262b69.tar.gz
Merge "Enables registering/unregistering multiple update listeners." into pi-dev
Diffstat (limited to 'car-lib')
-rw-r--r--car-lib/src/android/car/user/CarUserManagerHelper.java49
1 files changed, 38 insertions, 11 deletions
diff --git a/car-lib/src/android/car/user/CarUserManagerHelper.java b/car-lib/src/android/car/user/CarUserManagerHelper.java
index db28d21cba..c5885477ab 100644
--- a/car-lib/src/android/car/user/CarUserManagerHelper.java
+++ b/car-lib/src/android/car/user/CarUserManagerHelper.java
@@ -38,6 +38,7 @@ import com.android.internal.util.UserIcons;
import com.google.android.collect.Sets;
+import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -67,15 +68,23 @@ public class CarUserManagerHelper {
private final ActivityManager mActivityManager;
private int mLastActiveUser = UserHandle.USER_SYSTEM;
private Bitmap mDefaultGuestUserIcon;
- private OnUsersUpdateListener mUpdateListener;
+ private ArrayList<OnUsersUpdateListener> mUpdateListeners;
private final BroadcastReceiver mUserChangeReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
- mUpdateListener.onUsersUpdate();
+ ArrayList<OnUsersUpdateListener> copyOfUpdateListeners;
+ synchronized (mUpdateListeners) {
+ copyOfUpdateListeners = new ArrayList(mUpdateListeners);
+ }
+
+ for (OnUsersUpdateListener listener : copyOfUpdateListeners) {
+ listener.onUsersUpdate();
+ }
}
};
public CarUserManagerHelper(Context context) {
+ mUpdateListeners = new ArrayList<>();
mContext = context.getApplicationContext();
mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
mActivityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
@@ -84,24 +93,42 @@ public class CarUserManagerHelper {
/**
* Registers a listener for updates to all users - removing, adding users or changing user info.
*
- * <p> Best practise is to keep one listener per helper.
- *
* @param listener Instance of {@link OnUsersUpdateListener}.
*/
public void registerOnUsersUpdateListener(OnUsersUpdateListener listener) {
- if (mUpdateListener != null) {
- unregisterOnUsersUpdateListener();
+ if (listener == null) {
+ return;
}
- mUpdateListener = listener;
- registerReceiver();
+ synchronized (mUpdateListeners) {
+ if (mUpdateListeners.isEmpty()) {
+ // First listener being added, register receiver.
+ registerReceiver();
+ }
+
+ if (!mUpdateListeners.contains(listener)) {
+ mUpdateListeners.add(listener);
+ }
+ }
}
/**
- * Unregisters on user update listener by unregistering {@code BroadcastReceiver}.
+ * Unregisters on user update listener.
+ * Unregisters {@code BroadcastReceiver} if no listeners remain.
+ *
+ * @param listener Instance of {@link OnUsersUpdateListener} to unregister.
*/
- public void unregisterOnUsersUpdateListener() {
- unregisterReceiver();
+ public void unregisterOnUsersUpdateListener(OnUsersUpdateListener listener) {
+ synchronized (mUpdateListeners) {
+ if (mUpdateListeners.contains(listener)) {
+ mUpdateListeners.remove(listener);
+
+ if (mUpdateListeners.isEmpty()) {
+ // No more listeners, unregister broadcast receiver.
+ unregisterReceiver();
+ }
+ }
+ }
}
/**