diff options
| author | 2020-05-13 00:46:25 +0000 | |
|---|---|---|
| committer | 2020-05-13 00:46:25 +0000 | |
| commit | 735b2fd312b25f3d34b13cf6e8f1d1f7caa101d8 (patch) | |
| tree | a9bdedb947f5d1a2f17fa06cb6c9f057f81be4f1 | |
| parent | 29e03f93fb2310b1dc828e79bf20f0a35e6759bd (diff) | |
| parent | 3cdfdeb15ec9bf2f26394dedd52211355fd1b447 (diff) | |
Merge "Controls UI - Do not clear callbacks on user change" into rvc-dev
2 files changed, 36 insertions, 3 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsListingControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsListingControllerImpl.kt index 48f191d12801..a2adcf953cc4 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsListingControllerImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsListingControllerImpl.kt @@ -106,9 +106,15 @@ class ControlsListingControllerImpl @VisibleForTesting constructor( override fun changeUser(newUser: UserHandle) { backgroundExecutor.execute { - callbacks.clear() - availableServices = emptyList() serviceListing.setListening(false) + + // Notify all callbacks in order to clear their existing state prior to attaching + // a new listener + availableServices = emptyList() + callbacks.forEach { + it.onServicesUpdated(emptyList()) + } + currentUserId = newUser.identifier val contextForUser = context.createContextAsUser(newUser, 0) serviceListing = serviceListingBuilder(contextForUser) diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsListingControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsListingControllerImplTest.kt index 9b40c5e87b79..128a7e856ec5 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsListingControllerImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsListingControllerImplTest.kt @@ -177,4 +177,31 @@ class ControlsListingControllerImplTest : SysuiTestCase() { inOrder.verify(mockSL).setListening(true) inOrder.verify(mockSL).reload() } -}
\ No newline at end of file + + @Test + fun testChangeUserResetsExistingCallbackServices() { + val list = listOf(serviceInfo) + controller.addCallback(mockCallback) + + @Suppress("unchecked_cast") + val captor: ArgumentCaptor<List<ControlsServiceInfo>> = + ArgumentCaptor.forClass(List::class.java) + as ArgumentCaptor<List<ControlsServiceInfo>> + executor.runAllReady() + reset(mockCallback) + + serviceListingCallbackCaptor.value.onServicesReloaded(list) + + executor.runAllReady() + verify(mockCallback).onServicesUpdated(capture(captor)) + assertEquals(1, captor.value.size) + + reset(mockCallback) + controller.changeUser(UserHandle.of(otherUser)) + executor.runAllReady() + assertEquals(otherUser, controller.currentUserId) + + verify(mockCallback).onServicesUpdated(capture(captor)) + assertEquals(0, captor.value.size) + } +} |