Merge "Fix crash from UserNameViewController.removeAll()"

This commit is contained in:
Julia Kawano
2020-09-11 16:07:26 +00:00
committed by Android (Google) Code Review
2 changed files with 17 additions and 3 deletions

View File

@@ -59,6 +59,8 @@ public class UserNameViewController {
}
};
private boolean mUserLifecycleListenerRegistered = false;
private final CarUserManager.UserLifecycleListener mUserLifecycleListener =
new CarUserManager.UserLifecycleListener() {
@Override
@@ -100,9 +102,13 @@ public class UserNameViewController {
* Clean up the controller and unregister receiver.
*/
public void removeAll() {
mBroadcastDispatcher.unregisterReceiver(mUserUpdateReceiver);
if (mCarUserManager != null) {
mCarUserManager.removeListener(mUserLifecycleListener);
mUserNameView = null;
if (mUserLifecycleListenerRegistered) {
mBroadcastDispatcher.unregisterReceiver(mUserUpdateReceiver);
if (mCarUserManager != null) {
mCarUserManager.removeListener(mUserLifecycleListener);
}
mUserLifecycleListenerRegistered = false;
}
}
@@ -112,6 +118,7 @@ public class UserNameViewController {
mCarUserManager = (CarUserManager) car.getCarManager(Car.CAR_USER_SERVICE);
if (mCarUserManager != null) {
mCarUserManager.addListener(Runnable::run, mUserLifecycleListener);
mUserLifecycleListenerRegistered = true;
} else {
Log.e(TAG, "CarUserManager could not be obtained.");
}

View File

@@ -108,6 +108,13 @@ public class UserNameViewControllerTest extends SysuiTestCase {
verifyZeroInteractions(mUserManager);
}
@Test
public void removeAll_withNoRegisteredListener_doesNotUnregister() {
mUserNameViewController.removeAll();
verifyZeroInteractions(mCarUserManager);
}
@Test
public void userLifecycleListener_onUserSwitchLifecycleEvent_updatesUserNameView() {
ArgumentCaptor<CarUserManager.UserLifecycleListener> userLifecycleListenerArgumentCaptor =