diff options
author | Jovana Knezevic <jovanak@google.com> | 2018-06-25 22:14:32 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-06-25 22:14:32 +0000 |
commit | 4aff01310e105f5a26a418e1a1cd8596ca262b69 (patch) | |
tree | f2245b8db881ca0c74b31bfea0463474dc0d2ed5 /car-lib | |
parent | d50321314e309f0062850733a6e7b5f582af5f8c (diff) | |
parent | 32c0c703325c07bca115bfd17a5620989f03e6d0 (diff) | |
download | Car-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.java | 49 |
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(); + } + } + } } /** |