diff --git a/packages/CarSystemUI/src/com/android/systemui/car/statusbar/UserNameViewController.java b/packages/CarSystemUI/src/com/android/systemui/car/statusbar/UserNameViewController.java index 5ef8aa19b1829..1b1a118d6ba14 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/statusbar/UserNameViewController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/statusbar/UserNameViewController.java @@ -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."); } diff --git a/packages/CarSystemUI/tests/src/com/android/systemui/car/statusbar/UserNameViewControllerTest.java b/packages/CarSystemUI/tests/src/com/android/systemui/car/statusbar/UserNameViewControllerTest.java index 8f9e56edf4198..ac7edd32c14c1 100644 --- a/packages/CarSystemUI/tests/src/com/android/systemui/car/statusbar/UserNameViewControllerTest.java +++ b/packages/CarSystemUI/tests/src/com/android/systemui/car/statusbar/UserNameViewControllerTest.java @@ -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 userLifecycleListenerArgumentCaptor =