aboutsummaryrefslogtreecommitdiff
path: root/car-lib
diff options
context:
space:
mode:
authorjovanak <jovanak@google.com>2018-06-22 17:23:43 -0700
committerjovanak <jovanak@google.com>2018-06-25 12:34:52 -0700
commit32c0c703325c07bca115bfd17a5620989f03e6d0 (patch)
tree89772dacaf60589fc3bb83a195b3e900c0369d2d /car-lib
parent5748e3e9174c05dc2c44ff667cc4f3cca100238d (diff)
downloadCar-32c0c703325c07bca115bfd17a5620989f03e6d0.tar.gz
Enables registering/unregistering multiple update listeners.
Change-Id: I8c59dd8bb675644f4c7bc0e4488a3c3576b01631 Fixes: 110708099 Test: atest CarUserManagerHelperTest
Diffstat (limited to 'car-lib')
-rw-r--r--car-lib/src/android/car/user/CarUserManagerHelper.java50
1 files changed, 38 insertions, 12 deletions
diff --git a/car-lib/src/android/car/user/CarUserManagerHelper.java b/car-lib/src/android/car/user/CarUserManagerHelper.java
index a0f4e15d7b..5eb572ff09 100644
--- a/car-lib/src/android/car/user/CarUserManagerHelper.java
+++ b/car-lib/src/android/car/user/CarUserManagerHelper.java
@@ -34,11 +34,11 @@ import android.os.UserManager;
import android.provider.Settings;
import android.util.Log;
-import com.android.internal.annotations.VisibleForTesting;
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;
@@ -68,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);
@@ -85,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();
+ }
+ }
+ }
}
/**