Loading packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/homecontrols/HomeControlsComponentInteractorKosmos.kt +1 −2 Original line number Original line Diff line number Diff line Loading @@ -17,7 +17,7 @@ package com.android.systemui.dreams.homecontrols import com.android.systemui.controls.dagger.ControlsComponent import com.android.systemui.controls.dagger.ControlsComponent import com.android.systemui.controls.management.ControlsListingController import com.android.systemui.controls.management.ControlsListingController import com.android.systemui.controls.panels.AuthorizedPanelsRepository import com.android.systemui.controls.panels.authorizedPanelsRepository import com.android.systemui.controls.panels.selectedComponentRepository import com.android.systemui.controls.panels.selectedComponentRepository import com.android.systemui.dreams.homecontrols.domain.interactor.HomeControlsComponentInteractor import com.android.systemui.dreams.homecontrols.domain.interactor.HomeControlsComponentInteractor import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.Kosmos Loading @@ -38,4 +38,3 @@ val Kosmos.homeControlsComponentInteractor by val Kosmos.controlsComponent by Kosmos.Fixture<ControlsComponent> { mock() } val Kosmos.controlsComponent by Kosmos.Fixture<ControlsComponent> { mock() } val Kosmos.controlsListingController by Kosmos.Fixture<ControlsListingController> { mock() } val Kosmos.controlsListingController by Kosmos.Fixture<ControlsListingController> { mock() } val Kosmos.authorizedPanelsRepository by Kosmos.Fixture<AuthorizedPanelsRepository> { mock() } packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/homecontrols/HomeControlsComponentInteractorTest.kt +45 −41 Original line number Original line Diff line number Diff line Loading @@ -27,13 +27,14 @@ import com.android.systemui.controls.ControlsServiceInfo import com.android.systemui.controls.dagger.ControlsComponent import com.android.systemui.controls.dagger.ControlsComponent import com.android.systemui.controls.management.ControlsListingController import com.android.systemui.controls.management.ControlsListingController import com.android.systemui.controls.panels.AuthorizedPanelsRepository import com.android.systemui.controls.panels.AuthorizedPanelsRepository import com.android.systemui.controls.panels.FakeSelectedComponentRepository import com.android.systemui.controls.panels.SelectedComponentRepository import com.android.systemui.controls.panels.SelectedComponentRepository import com.android.systemui.controls.panels.authorizedPanelsRepository import com.android.systemui.controls.panels.selectedComponentRepository import com.android.systemui.controls.panels.selectedComponentRepository import com.android.systemui.coroutines.collectLastValue import com.android.systemui.coroutines.collectLastValue import com.android.systemui.dreams.homecontrols.domain.interactor.HomeControlsComponentInteractor import com.android.systemui.dreams.homecontrols.domain.interactor.HomeControlsComponentInteractor import com.android.systemui.kosmos.applicationCoroutineScope import com.android.systemui.kosmos.applicationCoroutineScope import com.android.systemui.kosmos.testScope import com.android.systemui.kosmos.testScope import com.android.systemui.settings.fakeUserTracker import com.android.systemui.testKosmos import com.android.systemui.testKosmos import com.android.systemui.user.data.repository.FakeUserRepository import com.android.systemui.user.data.repository.FakeUserRepository import com.android.systemui.user.data.repository.fakeUserRepository import com.android.systemui.user.data.repository.fakeUserRepository Loading @@ -41,6 +42,9 @@ import com.android.systemui.util.mockito.whenever import com.android.systemui.util.mockito.withArgCaptor import com.android.systemui.util.mockito.withArgCaptor import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat import java.util.Optional import java.util.Optional import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Before import org.junit.Test import org.junit.Test Loading @@ -48,6 +52,7 @@ import org.junit.runner.RunWith import org.mockito.Mockito.verify import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations @OptIn(ExperimentalCoroutinesApi::class) @SmallTest @SmallTest @RunWith(AndroidJUnit4::class) @RunWith(AndroidJUnit4::class) class HomeControlsComponentInteractorTest : SysuiTestCase() { class HomeControlsComponentInteractorTest : SysuiTestCase() { Loading @@ -59,20 +64,20 @@ class HomeControlsComponentInteractorTest : SysuiTestCase() { private lateinit var authorizedPanelsRepository: AuthorizedPanelsRepository private lateinit var authorizedPanelsRepository: AuthorizedPanelsRepository private lateinit var underTest: HomeControlsComponentInteractor private lateinit var underTest: HomeControlsComponentInteractor private lateinit var userRepository: FakeUserRepository private lateinit var userRepository: FakeUserRepository private lateinit var selectedComponentRepository: FakeSelectedComponentRepository private lateinit var selectedComponentRepository: SelectedComponentRepository @Before @Before fun setUp() { fun setUp() { MockitoAnnotations.initMocks(this) MockitoAnnotations.initMocks(this) userRepository = kosmos.fakeUserRepository userRepository.setUserInfos(listOf(PRIMARY_USER, ANOTHER_USER)) controlsComponent = kosmos.controlsComponent controlsComponent = kosmos.controlsComponent authorizedPanelsRepository = kosmos.authorizedPanelsRepository authorizedPanelsRepository = kosmos.authorizedPanelsRepository controlsListingController = kosmos.controlsListingController controlsListingController = kosmos.controlsListingController selectedComponentRepository = kosmos.selectedComponentRepository selectedComponentRepository = kosmos.selectedComponentRepository selectedComponentRepository.setCurrentUserHandle(PRIMARY_USER.userHandle) userRepository = kosmos.fakeUserRepository userRepository.setUserInfos(listOf(PRIMARY_USER, ANOTHER_USER)) whenever(controlsComponent.getControlsListingController()) whenever(controlsComponent.getControlsListingController()) .thenReturn(Optional.of(controlsListingController)) .thenReturn(Optional.of(controlsListingController)) Loading @@ -90,14 +95,13 @@ class HomeControlsComponentInteractorTest : SysuiTestCase() { fun testPanelComponentReturnsComponentNameForSelectedItemByUser() = fun testPanelComponentReturnsComponentNameForSelectedItemByUser() = with(kosmos) { with(kosmos) { testScope.runTest { testScope.runTest { whenever(authorizedPanelsRepository.getAuthorizedPanels()) setActiveUser(PRIMARY_USER) .thenReturn(setOf(TEST_PACKAGE_PANEL)) authorizedPanelsRepository.addAuthorizedPanels(setOf(TEST_PACKAGE)) userRepository.setSelectedUserInfo(PRIMARY_USER) selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_PANEL) selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_PANEL) val actualValue by collectLastValue(underTest.panelComponent) val actualValue by collectLastValue(underTest.panelComponent) assertThat(actualValue).isNull() assertThat(actualValue).isNull() runServicesUpdate() runServicesUpdate() assertThat(actualValue).isEqualTo(TEST_COMPONENT_PANEL) assertThat(actualValue).isEqualTo(TEST_COMPONENT) } } } } Loading @@ -105,16 +109,15 @@ class HomeControlsComponentInteractorTest : SysuiTestCase() { fun testPanelComponentReturnsComponentNameAsInitialValueWithoutServiceUpdate() = fun testPanelComponentReturnsComponentNameAsInitialValueWithoutServiceUpdate() = with(kosmos) { with(kosmos) { testScope.runTest { testScope.runTest { whenever(authorizedPanelsRepository.getAuthorizedPanels()) setActiveUser(PRIMARY_USER) .thenReturn(setOf(TEST_PACKAGE_PANEL)) authorizedPanelsRepository.addAuthorizedPanels(setOf(TEST_PACKAGE)) userRepository.setSelectedUserInfo(PRIMARY_USER) selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_PANEL) selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_PANEL) whenever(controlsListingController.getCurrentServices()) whenever(controlsListingController.getCurrentServices()) .thenReturn( .thenReturn( listOf(ControlsServiceInfo(TEST_COMPONENT_PANEL, "panel", hasPanel = true)) listOf(ControlsServiceInfo(TEST_COMPONENT, "panel", hasPanel = true)) ) ) val actualValue by collectLastValue(underTest.panelComponent) val actualValue by collectLastValue(underTest.panelComponent) assertThat(actualValue).isEqualTo(TEST_COMPONENT_PANEL) assertThat(actualValue).isEqualTo(TEST_COMPONENT) } } } } Loading @@ -122,9 +125,8 @@ class HomeControlsComponentInteractorTest : SysuiTestCase() { fun testPanelComponentReturnsNullForHomeControlsThatDoesNotSupportPanel() = fun testPanelComponentReturnsNullForHomeControlsThatDoesNotSupportPanel() = with(kosmos) { with(kosmos) { testScope.runTest { testScope.runTest { whenever(authorizedPanelsRepository.getAuthorizedPanels()) setActiveUser(PRIMARY_USER) .thenReturn(setOf(TEST_PACKAGE_PANEL)) authorizedPanelsRepository.addAuthorizedPanels(setOf(TEST_PACKAGE)) userRepository.setSelectedUserInfo(PRIMARY_USER) selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_NON_PANEL) selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_NON_PANEL) val actualValue by collectLastValue(underTest.panelComponent) val actualValue by collectLastValue(underTest.panelComponent) assertThat(actualValue).isNull() assertThat(actualValue).isNull() Loading @@ -137,8 +139,8 @@ class HomeControlsComponentInteractorTest : SysuiTestCase() { fun testPanelComponentReturnsNullWhenPanelIsUnauthorized() = fun testPanelComponentReturnsNullWhenPanelIsUnauthorized() = with(kosmos) { with(kosmos) { testScope.runTest { testScope.runTest { whenever(authorizedPanelsRepository.getAuthorizedPanels()).thenReturn(setOf()) setActiveUser(PRIMARY_USER) userRepository.setSelectedUserInfo(PRIMARY_USER) authorizedPanelsRepository.removeAuthorizedPanels(setOf(TEST_PACKAGE)) selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_PANEL) selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_PANEL) val actualValue by collectLastValue(underTest.panelComponent) val actualValue by collectLastValue(underTest.panelComponent) assertThat(actualValue).isNull() assertThat(actualValue).isNull() Loading @@ -151,17 +153,24 @@ class HomeControlsComponentInteractorTest : SysuiTestCase() { fun testPanelComponentReturnsComponentNameForDifferentUsers() = fun testPanelComponentReturnsComponentNameForDifferentUsers() = with(kosmos) { with(kosmos) { testScope.runTest { testScope.runTest { whenever(authorizedPanelsRepository.getAuthorizedPanels()) val actualValue by collectLastValue(underTest.panelComponent) .thenReturn(setOf(TEST_PACKAGE_PANEL)) userRepository.setSelectedUserInfo(ANOTHER_USER) // Secondary user has non-panel selected. setActiveUser(ANOTHER_USER) selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_NON_PANEL) selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_NON_PANEL) selectedComponentRepository.setCurrentUserHandle(ANOTHER_USER.userHandle) // Primary user has panel selected. setActiveUser(PRIMARY_USER) authorizedPanelsRepository.addAuthorizedPanels(setOf(TEST_PACKAGE)) selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_PANEL) selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_PANEL) val actualValue by collectLastValue(underTest.panelComponent) assertThat(actualValue).isNull() runServicesUpdate() runServicesUpdate() assertThat(actualValue).isEqualTo(TEST_COMPONENT_PANEL) assertThat(actualValue).isEqualTo(TEST_COMPONENT) // Back to secondary user, should be null. setActiveUser(ANOTHER_USER) runServicesUpdate() assertThat(actualValue).isNull() } } } } Loading @@ -169,8 +178,7 @@ class HomeControlsComponentInteractorTest : SysuiTestCase() { fun testPanelComponentReturnsNullWhenControlsComponentReturnsNullForListingController() = fun testPanelComponentReturnsNullWhenControlsComponentReturnsNullForListingController() = with(kosmos) { with(kosmos) { testScope.runTest { testScope.runTest { whenever(authorizedPanelsRepository.getAuthorizedPanels()) authorizedPanelsRepository.addAuthorizedPanels(setOf(TEST_PACKAGE)) .thenReturn(setOf(TEST_PACKAGE_PANEL)) whenever(controlsComponent.getControlsListingController()) whenever(controlsComponent.getControlsListingController()) .thenReturn(Optional.empty()) .thenReturn(Optional.empty()) userRepository.setSelectedUserInfo(PRIMARY_USER) userRepository.setSelectedUserInfo(PRIMARY_USER) Loading @@ -182,11 +190,17 @@ class HomeControlsComponentInteractorTest : SysuiTestCase() { private fun runServicesUpdate(hasPanelBoolean: Boolean = true) { private fun runServicesUpdate(hasPanelBoolean: Boolean = true) { val listings = val listings = listOf(ControlsServiceInfo(TEST_COMPONENT_PANEL, "panel", hasPanel = hasPanelBoolean)) listOf(ControlsServiceInfo(TEST_COMPONENT, "panel", hasPanel = hasPanelBoolean)) val callback = withArgCaptor { verify(controlsListingController).addCallback(capture()) } val callback = withArgCaptor { verify(controlsListingController).addCallback(capture()) } callback.onServicesUpdated(listings) callback.onServicesUpdated(listings) } } private suspend fun TestScope.setActiveUser(user: UserInfo) { userRepository.setSelectedUserInfo(user) kosmos.fakeUserTracker.set(listOf(user), 0) runCurrent() } private fun ControlsServiceInfo( private fun ControlsServiceInfo( componentName: ComponentName, componentName: ComponentName, label: CharSequence, label: CharSequence, Loading Loading @@ -237,19 +251,9 @@ class HomeControlsComponentInteractorTest : SysuiTestCase() { ) ) private const val TEST_PACKAGE = "pkg" private const val TEST_PACKAGE = "pkg" private val TEST_COMPONENT = ComponentName(TEST_PACKAGE, "service") private val TEST_COMPONENT = ComponentName(TEST_PACKAGE, "service") private const val TEST_PACKAGE_PANEL = "pkg.panel" private val TEST_COMPONENT_PANEL = ComponentName(TEST_PACKAGE_PANEL, "service") private val TEST_SELECTED_COMPONENT_PANEL = private val TEST_SELECTED_COMPONENT_PANEL = SelectedComponentRepository.SelectedComponent( SelectedComponentRepository.SelectedComponent(TEST_PACKAGE, TEST_COMPONENT, true) TEST_PACKAGE_PANEL, TEST_COMPONENT_PANEL, true ) private val TEST_SELECTED_COMPONENT_NON_PANEL = private val TEST_SELECTED_COMPONENT_NON_PANEL = SelectedComponentRepository.SelectedComponent( SelectedComponentRepository.SelectedComponent(TEST_PACKAGE, TEST_COMPONENT, false) TEST_PACKAGE_PANEL, TEST_COMPONENT_PANEL, false ) } } } } packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/homecontrols/HomeControlsDreamStartableTest.kt +2 −2 Original line number Original line Diff line number Diff line Loading @@ -32,6 +32,7 @@ import com.android.systemui.controls.dagger.ControlsComponent import com.android.systemui.controls.management.ControlsListingController import com.android.systemui.controls.management.ControlsListingController import com.android.systemui.controls.panels.AuthorizedPanelsRepository import com.android.systemui.controls.panels.AuthorizedPanelsRepository import com.android.systemui.controls.panels.SelectedComponentRepository import com.android.systemui.controls.panels.SelectedComponentRepository import com.android.systemui.controls.panels.authorizedPanelsRepository import com.android.systemui.controls.panels.selectedComponentRepository import com.android.systemui.controls.panels.selectedComponentRepository import com.android.systemui.dreams.homecontrols.domain.interactor.HomeControlsComponentInteractor import com.android.systemui.dreams.homecontrols.domain.interactor.HomeControlsComponentInteractor import com.android.systemui.kosmos.applicationCoroutineScope import com.android.systemui.kosmos.applicationCoroutineScope Loading Loading @@ -84,8 +85,7 @@ class HomeControlsDreamStartableTest : SysuiTestCase() { userRepository.setUserInfos(listOf(PRIMARY_USER)) userRepository.setUserInfos(listOf(PRIMARY_USER)) whenever(authorizedPanelsRepository.getAuthorizedPanels()) authorizedPanelsRepository.addAuthorizedPanels(setOf(TEST_PACKAGE_PANEL)) .thenReturn(setOf(TEST_PACKAGE_PANEL)) whenever(controlsComponent.getControlsListingController()) whenever(controlsComponent.getControlsListingController()) .thenReturn(Optional.of(controlsListingController)) .thenReturn(Optional.of(controlsListingController)) Loading packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalPrefsRepository.kt +3 −3 Original line number Original line Diff line number Diff line Loading @@ -28,8 +28,8 @@ import com.android.systemui.log.dagger.CommunalTableLog import com.android.systemui.log.table.TableLogBuffer import com.android.systemui.log.table.TableLogBuffer import com.android.systemui.log.table.logDiffsForTable import com.android.systemui.log.table.logDiffsForTable import com.android.systemui.settings.UserFileManager import com.android.systemui.settings.UserFileManager import com.android.systemui.settings.UserFileManagerExt.observeSharedPreferences import com.android.systemui.user.data.repository.UserRepository import com.android.systemui.user.data.repository.UserRepository import com.android.systemui.util.kotlin.SharedPreferencesExt.observe import javax.inject.Inject import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope Loading Loading @@ -97,8 +97,8 @@ constructor( } } private fun observeCtaDismissState(user: UserInfo): Flow<Boolean> = private fun observeCtaDismissState(user: UserInfo): Flow<Boolean> = userFileManager getSharedPrefsForUser(user) .observeSharedPreferences(FILE_NAME, Context.MODE_PRIVATE, user.id) .observe(CTA_DISMISSED_STATE) // Emit at the start of collection to ensure we get an initial value // Emit at the start of collection to ensure we get an initial value .onStart { emit(Unit) } .onStart { emit(Unit) } .map { getCtaDismissedState() } .map { getCtaDismissedState() } Loading packages/SystemUI/src/com/android/systemui/controls/panels/AuthorizedPanelsRepository.kt +5 −0 Original line number Original line Diff line number Diff line Loading @@ -17,11 +17,16 @@ package com.android.systemui.controls.panels package com.android.systemui.controls.panels import android.os.UserHandle import kotlinx.coroutines.flow.Flow /** /** * Repository for keeping track of which packages the panel has authorized to show control panels * Repository for keeping track of which packages the panel has authorized to show control panels * (embedded activity). * (embedded activity). */ */ interface AuthorizedPanelsRepository { interface AuthorizedPanelsRepository { /** Exposes the authorized panels as a [Flow] for subscribing to updates */ fun observeAuthorizedPanels(user: UserHandle): Flow<Set<String>> /** A set of package names that the user has previously authorized to show panels. */ /** A set of package names that the user has previously authorized to show panels. */ fun getAuthorizedPanels(): Set<String> fun getAuthorizedPanels(): Set<String> Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/homecontrols/HomeControlsComponentInteractorKosmos.kt +1 −2 Original line number Original line Diff line number Diff line Loading @@ -17,7 +17,7 @@ package com.android.systemui.dreams.homecontrols import com.android.systemui.controls.dagger.ControlsComponent import com.android.systemui.controls.dagger.ControlsComponent import com.android.systemui.controls.management.ControlsListingController import com.android.systemui.controls.management.ControlsListingController import com.android.systemui.controls.panels.AuthorizedPanelsRepository import com.android.systemui.controls.panels.authorizedPanelsRepository import com.android.systemui.controls.panels.selectedComponentRepository import com.android.systemui.controls.panels.selectedComponentRepository import com.android.systemui.dreams.homecontrols.domain.interactor.HomeControlsComponentInteractor import com.android.systemui.dreams.homecontrols.domain.interactor.HomeControlsComponentInteractor import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.Kosmos Loading @@ -38,4 +38,3 @@ val Kosmos.homeControlsComponentInteractor by val Kosmos.controlsComponent by Kosmos.Fixture<ControlsComponent> { mock() } val Kosmos.controlsComponent by Kosmos.Fixture<ControlsComponent> { mock() } val Kosmos.controlsListingController by Kosmos.Fixture<ControlsListingController> { mock() } val Kosmos.controlsListingController by Kosmos.Fixture<ControlsListingController> { mock() } val Kosmos.authorizedPanelsRepository by Kosmos.Fixture<AuthorizedPanelsRepository> { mock() }
packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/homecontrols/HomeControlsComponentInteractorTest.kt +45 −41 Original line number Original line Diff line number Diff line Loading @@ -27,13 +27,14 @@ import com.android.systemui.controls.ControlsServiceInfo import com.android.systemui.controls.dagger.ControlsComponent import com.android.systemui.controls.dagger.ControlsComponent import com.android.systemui.controls.management.ControlsListingController import com.android.systemui.controls.management.ControlsListingController import com.android.systemui.controls.panels.AuthorizedPanelsRepository import com.android.systemui.controls.panels.AuthorizedPanelsRepository import com.android.systemui.controls.panels.FakeSelectedComponentRepository import com.android.systemui.controls.panels.SelectedComponentRepository import com.android.systemui.controls.panels.SelectedComponentRepository import com.android.systemui.controls.panels.authorizedPanelsRepository import com.android.systemui.controls.panels.selectedComponentRepository import com.android.systemui.controls.panels.selectedComponentRepository import com.android.systemui.coroutines.collectLastValue import com.android.systemui.coroutines.collectLastValue import com.android.systemui.dreams.homecontrols.domain.interactor.HomeControlsComponentInteractor import com.android.systemui.dreams.homecontrols.domain.interactor.HomeControlsComponentInteractor import com.android.systemui.kosmos.applicationCoroutineScope import com.android.systemui.kosmos.applicationCoroutineScope import com.android.systemui.kosmos.testScope import com.android.systemui.kosmos.testScope import com.android.systemui.settings.fakeUserTracker import com.android.systemui.testKosmos import com.android.systemui.testKosmos import com.android.systemui.user.data.repository.FakeUserRepository import com.android.systemui.user.data.repository.FakeUserRepository import com.android.systemui.user.data.repository.fakeUserRepository import com.android.systemui.user.data.repository.fakeUserRepository Loading @@ -41,6 +42,9 @@ import com.android.systemui.util.mockito.whenever import com.android.systemui.util.mockito.withArgCaptor import com.android.systemui.util.mockito.withArgCaptor import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat import java.util.Optional import java.util.Optional import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Before import org.junit.Test import org.junit.Test Loading @@ -48,6 +52,7 @@ import org.junit.runner.RunWith import org.mockito.Mockito.verify import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations @OptIn(ExperimentalCoroutinesApi::class) @SmallTest @SmallTest @RunWith(AndroidJUnit4::class) @RunWith(AndroidJUnit4::class) class HomeControlsComponentInteractorTest : SysuiTestCase() { class HomeControlsComponentInteractorTest : SysuiTestCase() { Loading @@ -59,20 +64,20 @@ class HomeControlsComponentInteractorTest : SysuiTestCase() { private lateinit var authorizedPanelsRepository: AuthorizedPanelsRepository private lateinit var authorizedPanelsRepository: AuthorizedPanelsRepository private lateinit var underTest: HomeControlsComponentInteractor private lateinit var underTest: HomeControlsComponentInteractor private lateinit var userRepository: FakeUserRepository private lateinit var userRepository: FakeUserRepository private lateinit var selectedComponentRepository: FakeSelectedComponentRepository private lateinit var selectedComponentRepository: SelectedComponentRepository @Before @Before fun setUp() { fun setUp() { MockitoAnnotations.initMocks(this) MockitoAnnotations.initMocks(this) userRepository = kosmos.fakeUserRepository userRepository.setUserInfos(listOf(PRIMARY_USER, ANOTHER_USER)) controlsComponent = kosmos.controlsComponent controlsComponent = kosmos.controlsComponent authorizedPanelsRepository = kosmos.authorizedPanelsRepository authorizedPanelsRepository = kosmos.authorizedPanelsRepository controlsListingController = kosmos.controlsListingController controlsListingController = kosmos.controlsListingController selectedComponentRepository = kosmos.selectedComponentRepository selectedComponentRepository = kosmos.selectedComponentRepository selectedComponentRepository.setCurrentUserHandle(PRIMARY_USER.userHandle) userRepository = kosmos.fakeUserRepository userRepository.setUserInfos(listOf(PRIMARY_USER, ANOTHER_USER)) whenever(controlsComponent.getControlsListingController()) whenever(controlsComponent.getControlsListingController()) .thenReturn(Optional.of(controlsListingController)) .thenReturn(Optional.of(controlsListingController)) Loading @@ -90,14 +95,13 @@ class HomeControlsComponentInteractorTest : SysuiTestCase() { fun testPanelComponentReturnsComponentNameForSelectedItemByUser() = fun testPanelComponentReturnsComponentNameForSelectedItemByUser() = with(kosmos) { with(kosmos) { testScope.runTest { testScope.runTest { whenever(authorizedPanelsRepository.getAuthorizedPanels()) setActiveUser(PRIMARY_USER) .thenReturn(setOf(TEST_PACKAGE_PANEL)) authorizedPanelsRepository.addAuthorizedPanels(setOf(TEST_PACKAGE)) userRepository.setSelectedUserInfo(PRIMARY_USER) selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_PANEL) selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_PANEL) val actualValue by collectLastValue(underTest.panelComponent) val actualValue by collectLastValue(underTest.panelComponent) assertThat(actualValue).isNull() assertThat(actualValue).isNull() runServicesUpdate() runServicesUpdate() assertThat(actualValue).isEqualTo(TEST_COMPONENT_PANEL) assertThat(actualValue).isEqualTo(TEST_COMPONENT) } } } } Loading @@ -105,16 +109,15 @@ class HomeControlsComponentInteractorTest : SysuiTestCase() { fun testPanelComponentReturnsComponentNameAsInitialValueWithoutServiceUpdate() = fun testPanelComponentReturnsComponentNameAsInitialValueWithoutServiceUpdate() = with(kosmos) { with(kosmos) { testScope.runTest { testScope.runTest { whenever(authorizedPanelsRepository.getAuthorizedPanels()) setActiveUser(PRIMARY_USER) .thenReturn(setOf(TEST_PACKAGE_PANEL)) authorizedPanelsRepository.addAuthorizedPanels(setOf(TEST_PACKAGE)) userRepository.setSelectedUserInfo(PRIMARY_USER) selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_PANEL) selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_PANEL) whenever(controlsListingController.getCurrentServices()) whenever(controlsListingController.getCurrentServices()) .thenReturn( .thenReturn( listOf(ControlsServiceInfo(TEST_COMPONENT_PANEL, "panel", hasPanel = true)) listOf(ControlsServiceInfo(TEST_COMPONENT, "panel", hasPanel = true)) ) ) val actualValue by collectLastValue(underTest.panelComponent) val actualValue by collectLastValue(underTest.panelComponent) assertThat(actualValue).isEqualTo(TEST_COMPONENT_PANEL) assertThat(actualValue).isEqualTo(TEST_COMPONENT) } } } } Loading @@ -122,9 +125,8 @@ class HomeControlsComponentInteractorTest : SysuiTestCase() { fun testPanelComponentReturnsNullForHomeControlsThatDoesNotSupportPanel() = fun testPanelComponentReturnsNullForHomeControlsThatDoesNotSupportPanel() = with(kosmos) { with(kosmos) { testScope.runTest { testScope.runTest { whenever(authorizedPanelsRepository.getAuthorizedPanels()) setActiveUser(PRIMARY_USER) .thenReturn(setOf(TEST_PACKAGE_PANEL)) authorizedPanelsRepository.addAuthorizedPanels(setOf(TEST_PACKAGE)) userRepository.setSelectedUserInfo(PRIMARY_USER) selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_NON_PANEL) selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_NON_PANEL) val actualValue by collectLastValue(underTest.panelComponent) val actualValue by collectLastValue(underTest.panelComponent) assertThat(actualValue).isNull() assertThat(actualValue).isNull() Loading @@ -137,8 +139,8 @@ class HomeControlsComponentInteractorTest : SysuiTestCase() { fun testPanelComponentReturnsNullWhenPanelIsUnauthorized() = fun testPanelComponentReturnsNullWhenPanelIsUnauthorized() = with(kosmos) { with(kosmos) { testScope.runTest { testScope.runTest { whenever(authorizedPanelsRepository.getAuthorizedPanels()).thenReturn(setOf()) setActiveUser(PRIMARY_USER) userRepository.setSelectedUserInfo(PRIMARY_USER) authorizedPanelsRepository.removeAuthorizedPanels(setOf(TEST_PACKAGE)) selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_PANEL) selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_PANEL) val actualValue by collectLastValue(underTest.panelComponent) val actualValue by collectLastValue(underTest.panelComponent) assertThat(actualValue).isNull() assertThat(actualValue).isNull() Loading @@ -151,17 +153,24 @@ class HomeControlsComponentInteractorTest : SysuiTestCase() { fun testPanelComponentReturnsComponentNameForDifferentUsers() = fun testPanelComponentReturnsComponentNameForDifferentUsers() = with(kosmos) { with(kosmos) { testScope.runTest { testScope.runTest { whenever(authorizedPanelsRepository.getAuthorizedPanels()) val actualValue by collectLastValue(underTest.panelComponent) .thenReturn(setOf(TEST_PACKAGE_PANEL)) userRepository.setSelectedUserInfo(ANOTHER_USER) // Secondary user has non-panel selected. setActiveUser(ANOTHER_USER) selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_NON_PANEL) selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_NON_PANEL) selectedComponentRepository.setCurrentUserHandle(ANOTHER_USER.userHandle) // Primary user has panel selected. setActiveUser(PRIMARY_USER) authorizedPanelsRepository.addAuthorizedPanels(setOf(TEST_PACKAGE)) selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_PANEL) selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_PANEL) val actualValue by collectLastValue(underTest.panelComponent) assertThat(actualValue).isNull() runServicesUpdate() runServicesUpdate() assertThat(actualValue).isEqualTo(TEST_COMPONENT_PANEL) assertThat(actualValue).isEqualTo(TEST_COMPONENT) // Back to secondary user, should be null. setActiveUser(ANOTHER_USER) runServicesUpdate() assertThat(actualValue).isNull() } } } } Loading @@ -169,8 +178,7 @@ class HomeControlsComponentInteractorTest : SysuiTestCase() { fun testPanelComponentReturnsNullWhenControlsComponentReturnsNullForListingController() = fun testPanelComponentReturnsNullWhenControlsComponentReturnsNullForListingController() = with(kosmos) { with(kosmos) { testScope.runTest { testScope.runTest { whenever(authorizedPanelsRepository.getAuthorizedPanels()) authorizedPanelsRepository.addAuthorizedPanels(setOf(TEST_PACKAGE)) .thenReturn(setOf(TEST_PACKAGE_PANEL)) whenever(controlsComponent.getControlsListingController()) whenever(controlsComponent.getControlsListingController()) .thenReturn(Optional.empty()) .thenReturn(Optional.empty()) userRepository.setSelectedUserInfo(PRIMARY_USER) userRepository.setSelectedUserInfo(PRIMARY_USER) Loading @@ -182,11 +190,17 @@ class HomeControlsComponentInteractorTest : SysuiTestCase() { private fun runServicesUpdate(hasPanelBoolean: Boolean = true) { private fun runServicesUpdate(hasPanelBoolean: Boolean = true) { val listings = val listings = listOf(ControlsServiceInfo(TEST_COMPONENT_PANEL, "panel", hasPanel = hasPanelBoolean)) listOf(ControlsServiceInfo(TEST_COMPONENT, "panel", hasPanel = hasPanelBoolean)) val callback = withArgCaptor { verify(controlsListingController).addCallback(capture()) } val callback = withArgCaptor { verify(controlsListingController).addCallback(capture()) } callback.onServicesUpdated(listings) callback.onServicesUpdated(listings) } } private suspend fun TestScope.setActiveUser(user: UserInfo) { userRepository.setSelectedUserInfo(user) kosmos.fakeUserTracker.set(listOf(user), 0) runCurrent() } private fun ControlsServiceInfo( private fun ControlsServiceInfo( componentName: ComponentName, componentName: ComponentName, label: CharSequence, label: CharSequence, Loading Loading @@ -237,19 +251,9 @@ class HomeControlsComponentInteractorTest : SysuiTestCase() { ) ) private const val TEST_PACKAGE = "pkg" private const val TEST_PACKAGE = "pkg" private val TEST_COMPONENT = ComponentName(TEST_PACKAGE, "service") private val TEST_COMPONENT = ComponentName(TEST_PACKAGE, "service") private const val TEST_PACKAGE_PANEL = "pkg.panel" private val TEST_COMPONENT_PANEL = ComponentName(TEST_PACKAGE_PANEL, "service") private val TEST_SELECTED_COMPONENT_PANEL = private val TEST_SELECTED_COMPONENT_PANEL = SelectedComponentRepository.SelectedComponent( SelectedComponentRepository.SelectedComponent(TEST_PACKAGE, TEST_COMPONENT, true) TEST_PACKAGE_PANEL, TEST_COMPONENT_PANEL, true ) private val TEST_SELECTED_COMPONENT_NON_PANEL = private val TEST_SELECTED_COMPONENT_NON_PANEL = SelectedComponentRepository.SelectedComponent( SelectedComponentRepository.SelectedComponent(TEST_PACKAGE, TEST_COMPONENT, false) TEST_PACKAGE_PANEL, TEST_COMPONENT_PANEL, false ) } } } }
packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/homecontrols/HomeControlsDreamStartableTest.kt +2 −2 Original line number Original line Diff line number Diff line Loading @@ -32,6 +32,7 @@ import com.android.systemui.controls.dagger.ControlsComponent import com.android.systemui.controls.management.ControlsListingController import com.android.systemui.controls.management.ControlsListingController import com.android.systemui.controls.panels.AuthorizedPanelsRepository import com.android.systemui.controls.panels.AuthorizedPanelsRepository import com.android.systemui.controls.panels.SelectedComponentRepository import com.android.systemui.controls.panels.SelectedComponentRepository import com.android.systemui.controls.panels.authorizedPanelsRepository import com.android.systemui.controls.panels.selectedComponentRepository import com.android.systemui.controls.panels.selectedComponentRepository import com.android.systemui.dreams.homecontrols.domain.interactor.HomeControlsComponentInteractor import com.android.systemui.dreams.homecontrols.domain.interactor.HomeControlsComponentInteractor import com.android.systemui.kosmos.applicationCoroutineScope import com.android.systemui.kosmos.applicationCoroutineScope Loading Loading @@ -84,8 +85,7 @@ class HomeControlsDreamStartableTest : SysuiTestCase() { userRepository.setUserInfos(listOf(PRIMARY_USER)) userRepository.setUserInfos(listOf(PRIMARY_USER)) whenever(authorizedPanelsRepository.getAuthorizedPanels()) authorizedPanelsRepository.addAuthorizedPanels(setOf(TEST_PACKAGE_PANEL)) .thenReturn(setOf(TEST_PACKAGE_PANEL)) whenever(controlsComponent.getControlsListingController()) whenever(controlsComponent.getControlsListingController()) .thenReturn(Optional.of(controlsListingController)) .thenReturn(Optional.of(controlsListingController)) Loading
packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalPrefsRepository.kt +3 −3 Original line number Original line Diff line number Diff line Loading @@ -28,8 +28,8 @@ import com.android.systemui.log.dagger.CommunalTableLog import com.android.systemui.log.table.TableLogBuffer import com.android.systemui.log.table.TableLogBuffer import com.android.systemui.log.table.logDiffsForTable import com.android.systemui.log.table.logDiffsForTable import com.android.systemui.settings.UserFileManager import com.android.systemui.settings.UserFileManager import com.android.systemui.settings.UserFileManagerExt.observeSharedPreferences import com.android.systemui.user.data.repository.UserRepository import com.android.systemui.user.data.repository.UserRepository import com.android.systemui.util.kotlin.SharedPreferencesExt.observe import javax.inject.Inject import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope Loading Loading @@ -97,8 +97,8 @@ constructor( } } private fun observeCtaDismissState(user: UserInfo): Flow<Boolean> = private fun observeCtaDismissState(user: UserInfo): Flow<Boolean> = userFileManager getSharedPrefsForUser(user) .observeSharedPreferences(FILE_NAME, Context.MODE_PRIVATE, user.id) .observe(CTA_DISMISSED_STATE) // Emit at the start of collection to ensure we get an initial value // Emit at the start of collection to ensure we get an initial value .onStart { emit(Unit) } .onStart { emit(Unit) } .map { getCtaDismissedState() } .map { getCtaDismissedState() } Loading
packages/SystemUI/src/com/android/systemui/controls/panels/AuthorizedPanelsRepository.kt +5 −0 Original line number Original line Diff line number Diff line Loading @@ -17,11 +17,16 @@ package com.android.systemui.controls.panels package com.android.systemui.controls.panels import android.os.UserHandle import kotlinx.coroutines.flow.Flow /** /** * Repository for keeping track of which packages the panel has authorized to show control panels * Repository for keeping track of which packages the panel has authorized to show control panels * (embedded activity). * (embedded activity). */ */ interface AuthorizedPanelsRepository { interface AuthorizedPanelsRepository { /** Exposes the authorized panels as a [Flow] for subscribing to updates */ fun observeAuthorizedPanels(user: UserHandle): Flow<Set<String>> /** A set of package names that the user has previously authorized to show panels. */ /** A set of package names that the user has previously authorized to show panels. */ fun getAuthorizedPanels(): Set<String> fun getAuthorizedPanels(): Set<String> Loading