summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Matt Pietal <mpietal@google.com> 2020-05-13 00:46:25 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-05-13 00:46:25 +0000
commit735b2fd312b25f3d34b13cf6e8f1d1f7caa101d8 (patch)
treea9bdedb947f5d1a2f17fa06cb6c9f057f81be4f1
parent29e03f93fb2310b1dc828e79bf20f0a35e6759bd (diff)
parent3cdfdeb15ec9bf2f26394dedd52211355fd1b447 (diff)
Merge "Controls UI - Do not clear callbacks on user change" into rvc-dev
-rw-r--r--packages/SystemUI/src/com/android/systemui/controls/management/ControlsListingControllerImpl.kt10
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsListingControllerImplTest.kt29
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)
+ }
+}