Fixes user switcher dialog animations. am: 20fd9de94e

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20834282

Change-Id: Iec32bd147b95e86c2b53bc20446bb18cf7fd3f9e
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Alejandro Nijamkin
2023-01-10 03:21:01 +00:00
committed by Automerger Merge Worker
6 changed files with 136 additions and 203 deletions

View File

@@ -204,15 +204,6 @@ public class UserDetailView extends PseudoGridView {
Trace.endSection(); Trace.endSection();
} }
@Override
public void onUserListItemClicked(@NonNull UserRecord record,
@Nullable UserSwitchDialogController.DialogShower dialogShower) {
if (dialogShower != null) {
mDialogShower.dismiss();
}
super.onUserListItemClicked(record, dialogShower);
}
public void linkToViewGroup(ViewGroup viewGroup) { public void linkToViewGroup(ViewGroup viewGroup) {
PseudoGridView.ViewGroupAdapterBridge.link(viewGroup, this); PseudoGridView.ViewGroupAdapterBridge.link(viewGroup, this);
} }

View File

@@ -60,7 +60,7 @@ protected constructor(
* animation to and from the parent dialog. * animation to and from the parent dialog.
*/ */
@JvmOverloads @JvmOverloads
open fun onUserListItemClicked( fun onUserListItemClicked(
record: UserRecord, record: UserRecord,
dialogShower: DialogShower? = null, dialogShower: DialogShower? = null,
) { ) {

View File

@@ -443,7 +443,8 @@ constructor(
) )
) )
} }
UserActionModel.ADD_SUPERVISED_USER -> UserActionModel.ADD_SUPERVISED_USER -> {
dismissDialog()
activityStarter.startActivity( activityStarter.startActivity(
Intent() Intent()
.setAction(UserManager.ACTION_CREATE_SUPERVISED_USER) .setAction(UserManager.ACTION_CREATE_SUPERVISED_USER)
@@ -451,6 +452,7 @@ constructor(
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK), .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK),
/* dismissShade= */ true, /* dismissShade= */ true,
) )
}
UserActionModel.NAVIGATE_TO_USER_MANAGEMENT -> UserActionModel.NAVIGATE_TO_USER_MANAGEMENT ->
activityStarter.startActivity( activityStarter.startActivity(
Intent(Settings.ACTION_USER_SETTINGS), Intent(Settings.ACTION_USER_SETTINGS),

View File

@@ -66,12 +66,6 @@ constructor(
private fun startHandlingDialogShowRequests() { private fun startHandlingDialogShowRequests() {
applicationScope.get().launch { applicationScope.get().launch {
interactor.get().dialogShowRequests.filterNotNull().collect { request -> interactor.get().dialogShowRequests.filterNotNull().collect { request ->
currentDialog?.let {
if (it.isShowing) {
it.cancel()
}
}
val (dialog, dialogCuj) = val (dialog, dialogCuj) =
when (request) { when (request) {
is ShowDialogRequestModel.ShowAddUserDialog -> is ShowDialogRequestModel.ShowAddUserDialog ->

View File

@@ -30,7 +30,6 @@ import com.android.systemui.R
import com.android.systemui.SysuiTestCase import com.android.systemui.SysuiTestCase
import com.android.systemui.classifier.FalsingManagerFake import com.android.systemui.classifier.FalsingManagerFake
import com.android.systemui.qs.QSUserSwitcherEvent import com.android.systemui.qs.QSUserSwitcherEvent
import com.android.systemui.qs.user.UserSwitchDialogController
import com.android.systemui.statusbar.policy.UserSwitcherController import com.android.systemui.statusbar.policy.UserSwitcherController
import com.android.systemui.user.data.source.UserRecord import com.android.systemui.user.data.source.UserRecord
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
@@ -42,7 +41,6 @@ import org.mockito.ArgumentMatchers.any
import org.mockito.ArgumentMatchers.anyBoolean import org.mockito.ArgumentMatchers.anyBoolean
import org.mockito.ArgumentMatchers.anyInt import org.mockito.ArgumentMatchers.anyInt
import org.mockito.Mock import org.mockito.Mock
import org.mockito.Mockito.mock
import org.mockito.Mockito.verify import org.mockito.Mockito.verify
import org.mockito.Mockito.`when` import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations
@@ -152,15 +150,6 @@ class UserDetailViewAdapterTest : SysuiTestCase() {
assertNull(adapter.users.find { it.isManageUsers }) assertNull(adapter.users.find { it.isManageUsers })
} }
@Test
fun clickDismissDialog() {
val shower: UserSwitchDialogController.DialogShower =
mock(UserSwitchDialogController.DialogShower::class.java)
adapter.injectDialogShower(shower)
adapter.onUserListItemClicked(createUserRecord(current = true, guest = false), shower)
verify(shower).dismiss()
}
private fun createUserRecord(current: Boolean, guest: Boolean) = private fun createUserRecord(current: Boolean, guest: Boolean) =
UserRecord( UserRecord(
UserInfo(0 /* id */, "name", 0 /* flags */), UserInfo(0 /* id */, "name", 0 /* flags */),

View File

@@ -36,6 +36,7 @@ import com.android.systemui.R
import com.android.systemui.SysuiTestCase import com.android.systemui.SysuiTestCase
import com.android.systemui.animation.Expandable import com.android.systemui.animation.Expandable
import com.android.systemui.common.shared.model.Text import com.android.systemui.common.shared.model.Text
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.flags.FakeFeatureFlags
import com.android.systemui.flags.Flags import com.android.systemui.flags.Flags
import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
@@ -60,12 +61,12 @@ import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.nullable import com.android.systemui.util.mockito.nullable
import com.android.systemui.util.mockito.whenever import com.android.systemui.util.mockito.whenever
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.launch
import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.TestCoroutineScope import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.advanceUntilIdle import kotlinx.coroutines.test.runTest
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
@@ -73,10 +74,12 @@ import org.junit.runners.JUnit4
import org.mockito.ArgumentMatchers.anyBoolean import org.mockito.ArgumentMatchers.anyBoolean
import org.mockito.ArgumentMatchers.anyInt import org.mockito.ArgumentMatchers.anyInt
import org.mockito.Mock import org.mockito.Mock
import org.mockito.Mockito.atLeastOnce
import org.mockito.Mockito.never import org.mockito.Mockito.never
import org.mockito.Mockito.verify import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations
@OptIn(ExperimentalCoroutinesApi::class)
@SmallTest @SmallTest
@RunWith(JUnit4::class) @RunWith(JUnit4::class)
class UserInteractorTest : SysuiTestCase() { class UserInteractorTest : SysuiTestCase() {
@@ -93,7 +96,7 @@ class UserInteractorTest : SysuiTestCase() {
private lateinit var underTest: UserInteractor private lateinit var underTest: UserInteractor
private lateinit var testCoroutineScope: TestCoroutineScope private lateinit var testScope: TestScope
private lateinit var userRepository: FakeUserRepository private lateinit var userRepository: FakeUserRepository
private lateinit var keyguardRepository: FakeKeyguardRepository private lateinit var keyguardRepository: FakeKeyguardRepository
private lateinit var telephonyRepository: FakeTelephonyRepository private lateinit var telephonyRepository: FakeTelephonyRepository
@@ -117,11 +120,12 @@ class UserInteractorTest : SysuiTestCase() {
userRepository = FakeUserRepository() userRepository = FakeUserRepository()
keyguardRepository = FakeKeyguardRepository() keyguardRepository = FakeKeyguardRepository()
telephonyRepository = FakeTelephonyRepository() telephonyRepository = FakeTelephonyRepository()
testCoroutineScope = TestCoroutineScope() val testDispatcher = StandardTestDispatcher()
testScope = TestScope(testDispatcher)
val refreshUsersScheduler = val refreshUsersScheduler =
RefreshUsersScheduler( RefreshUsersScheduler(
applicationScope = testCoroutineScope, applicationScope = testScope.backgroundScope,
mainDispatcher = IMMEDIATE, mainDispatcher = testDispatcher,
repository = userRepository, repository = userRepository,
) )
underTest = underTest =
@@ -134,21 +138,21 @@ class UserInteractorTest : SysuiTestCase() {
repository = keyguardRepository, repository = keyguardRepository,
), ),
manager = manager, manager = manager,
applicationScope = testCoroutineScope, applicationScope = testScope.backgroundScope,
telephonyInteractor = telephonyInteractor =
TelephonyInteractor( TelephonyInteractor(
repository = telephonyRepository, repository = telephonyRepository,
), ),
broadcastDispatcher = fakeBroadcastDispatcher, broadcastDispatcher = fakeBroadcastDispatcher,
backgroundDispatcher = IMMEDIATE, backgroundDispatcher = testDispatcher,
activityManager = activityManager, activityManager = activityManager,
refreshUsersScheduler = refreshUsersScheduler, refreshUsersScheduler = refreshUsersScheduler,
guestUserInteractor = guestUserInteractor =
GuestUserInteractor( GuestUserInteractor(
applicationContext = context, applicationContext = context,
applicationScope = testCoroutineScope, applicationScope = testScope.backgroundScope,
mainDispatcher = IMMEDIATE, mainDispatcher = testDispatcher,
backgroundDispatcher = IMMEDIATE, backgroundDispatcher = testDispatcher,
manager = manager, manager = manager,
repository = userRepository, repository = userRepository,
deviceProvisionedController = deviceProvisionedController, deviceProvisionedController = deviceProvisionedController,
@@ -164,7 +168,7 @@ class UserInteractorTest : SysuiTestCase() {
@Test @Test
fun `onRecordSelected - user`() = fun `onRecordSelected - user`() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 3, includeGuest = false) val userInfos = createUserInfos(count = 3, includeGuest = false)
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(userInfos[0]) userRepository.setSelectedUserInfo(userInfos[0])
@@ -179,7 +183,7 @@ class UserInteractorTest : SysuiTestCase() {
@Test @Test
fun `onRecordSelected - switch to guest user`() = fun `onRecordSelected - switch to guest user`() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 3, includeGuest = true) val userInfos = createUserInfos(count = 3, includeGuest = true)
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(userInfos[0]) userRepository.setSelectedUserInfo(userInfos[0])
@@ -193,7 +197,7 @@ class UserInteractorTest : SysuiTestCase() {
@Test @Test
fun `onRecordSelected - enter guest mode`() = fun `onRecordSelected - enter guest mode`() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 3, includeGuest = false) val userInfos = createUserInfos(count = 3, includeGuest = false)
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(userInfos[0]) userRepository.setSelectedUserInfo(userInfos[0])
@@ -202,6 +206,7 @@ class UserInteractorTest : SysuiTestCase() {
whenever(manager.createGuest(any())).thenReturn(guestUserInfo) whenever(manager.createGuest(any())).thenReturn(guestUserInfo)
underTest.onRecordSelected(UserRecord(isGuest = true), dialogShower) underTest.onRecordSelected(UserRecord(isGuest = true), dialogShower)
runCurrent()
verify(dialogShower).dismiss() verify(dialogShower).dismiss()
verify(manager).createGuest(any()) verify(manager).createGuest(any())
@@ -210,7 +215,7 @@ class UserInteractorTest : SysuiTestCase() {
@Test @Test
fun `onRecordSelected - action`() = fun `onRecordSelected - action`() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 3, includeGuest = true) val userInfos = createUserInfos(count = 3, includeGuest = true)
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(userInfos[0]) userRepository.setSelectedUserInfo(userInfos[0])
@@ -224,81 +229,72 @@ class UserInteractorTest : SysuiTestCase() {
@Test @Test
fun `users - switcher enabled`() = fun `users - switcher enabled`() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 3, includeGuest = true) val userInfos = createUserInfos(count = 3, includeGuest = true)
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(userInfos[0]) userRepository.setSelectedUserInfo(userInfos[0])
userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true)) userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true))
var value: List<UserModel>? = null val value = collectLastValue(underTest.users)
val job = underTest.users.onEach { value = it }.launchIn(this)
assertUsers(models = value, count = 3, includeGuest = true)
job.cancel() assertUsers(models = value(), count = 3, includeGuest = true)
} }
@Test @Test
fun `users - switches to second user`() = fun `users - switches to second user`() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false) val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(userInfos[0]) userRepository.setSelectedUserInfo(userInfos[0])
userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true)) userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true))
var value: List<UserModel>? = null val value = collectLastValue(underTest.users)
val job = underTest.users.onEach { value = it }.launchIn(this)
userRepository.setSelectedUserInfo(userInfos[1]) userRepository.setSelectedUserInfo(userInfos[1])
assertUsers(models = value, count = 2, selectedIndex = 1) assertUsers(models = value(), count = 2, selectedIndex = 1)
job.cancel()
} }
@Test @Test
fun `users - switcher not enabled`() = fun `users - switcher not enabled`() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false) val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(userInfos[0]) userRepository.setSelectedUserInfo(userInfos[0])
userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = false)) userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = false))
var value: List<UserModel>? = null val value = collectLastValue(underTest.users)
val job = underTest.users.onEach { value = it }.launchIn(this) assertUsers(models = value(), count = 1)
assertUsers(models = value, count = 1)
job.cancel()
} }
@Test @Test
fun selectedUser() = fun selectedUser() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false) val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(userInfos[0]) userRepository.setSelectedUserInfo(userInfos[0])
userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true)) userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true))
var value: UserModel? = null val value = collectLastValue(underTest.selectedUser)
val job = underTest.selectedUser.onEach { value = it }.launchIn(this) assertUser(value(), id = 0, isSelected = true)
assertUser(value, id = 0, isSelected = true)
userRepository.setSelectedUserInfo(userInfos[1]) userRepository.setSelectedUserInfo(userInfos[1])
assertUser(value, id = 1, isSelected = true) assertUser(value(), id = 1, isSelected = true)
job.cancel()
} }
@Test @Test
fun `actions - device unlocked`() = fun `actions - device unlocked`() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false) val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(userInfos[0]) userRepository.setSelectedUserInfo(userInfos[0])
userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true)) userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true))
keyguardRepository.setKeyguardShowing(false) keyguardRepository.setKeyguardShowing(false)
var value: List<UserActionModel>? = null val value = collectLastValue(underTest.actions)
val job = underTest.actions.onEach { value = it }.launchIn(this)
assertThat(value) runCurrent()
assertThat(value())
.isEqualTo( .isEqualTo(
listOf( listOf(
UserActionModel.ENTER_GUEST_MODE, UserActionModel.ENTER_GUEST_MODE,
@@ -307,13 +303,11 @@ class UserInteractorTest : SysuiTestCase() {
UserActionModel.NAVIGATE_TO_USER_MANAGEMENT, UserActionModel.NAVIGATE_TO_USER_MANAGEMENT,
) )
) )
job.cancel()
} }
@Test @Test
fun `actions - device unlocked - full screen`() = fun `actions - device unlocked - full screen`() =
runBlocking(IMMEDIATE) { testScope.runTest {
featureFlags.set(Flags.FULL_SCREEN_USER_SWITCHER, true) featureFlags.set(Flags.FULL_SCREEN_USER_SWITCHER, true)
val userInfos = createUserInfos(count = 2, includeGuest = false) val userInfos = createUserInfos(count = 2, includeGuest = false)
@@ -321,10 +315,9 @@ class UserInteractorTest : SysuiTestCase() {
userRepository.setSelectedUserInfo(userInfos[0]) userRepository.setSelectedUserInfo(userInfos[0])
userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true)) userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true))
keyguardRepository.setKeyguardShowing(false) keyguardRepository.setKeyguardShowing(false)
var value: List<UserActionModel>? = null val value = collectLastValue(underTest.actions)
val job = underTest.actions.onEach { value = it }.launchIn(this)
assertThat(value) assertThat(value())
.isEqualTo( .isEqualTo(
listOf( listOf(
UserActionModel.ADD_USER, UserActionModel.ADD_USER,
@@ -333,46 +326,38 @@ class UserInteractorTest : SysuiTestCase() {
UserActionModel.NAVIGATE_TO_USER_MANAGEMENT, UserActionModel.NAVIGATE_TO_USER_MANAGEMENT,
) )
) )
job.cancel()
} }
@Test @Test
fun `actions - device unlocked user not primary - empty list`() = fun `actions - device unlocked user not primary - empty list`() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false) val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(userInfos[1]) userRepository.setSelectedUserInfo(userInfos[1])
userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true)) userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true))
keyguardRepository.setKeyguardShowing(false) keyguardRepository.setKeyguardShowing(false)
var value: List<UserActionModel>? = null val value = collectLastValue(underTest.actions)
val job = underTest.actions.onEach { value = it }.launchIn(this)
assertThat(value).isEqualTo(emptyList<UserActionModel>()) assertThat(value()).isEqualTo(emptyList<UserActionModel>())
job.cancel()
} }
@Test @Test
fun `actions - device unlocked user is guest - empty list`() = fun `actions - device unlocked user is guest - empty list`() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = true) val userInfos = createUserInfos(count = 2, includeGuest = true)
assertThat(userInfos[1].isGuest).isTrue() assertThat(userInfos[1].isGuest).isTrue()
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(userInfos[1]) userRepository.setSelectedUserInfo(userInfos[1])
userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true)) userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true))
keyguardRepository.setKeyguardShowing(false) keyguardRepository.setKeyguardShowing(false)
var value: List<UserActionModel>? = null val value = collectLastValue(underTest.actions)
val job = underTest.actions.onEach { value = it }.launchIn(this)
assertThat(value).isEqualTo(emptyList<UserActionModel>()) assertThat(value()).isEqualTo(emptyList<UserActionModel>())
job.cancel()
} }
@Test @Test
fun `actions - device locked add from lockscreen set - full list`() = fun `actions - device locked add from lockscreen set - full list`() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false) val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(userInfos[0]) userRepository.setSelectedUserInfo(userInfos[0])
@@ -383,10 +368,9 @@ class UserInteractorTest : SysuiTestCase() {
) )
) )
keyguardRepository.setKeyguardShowing(false) keyguardRepository.setKeyguardShowing(false)
var value: List<UserActionModel>? = null val value = collectLastValue(underTest.actions)
val job = underTest.actions.onEach { value = it }.launchIn(this)
assertThat(value) assertThat(value())
.isEqualTo( .isEqualTo(
listOf( listOf(
UserActionModel.ENTER_GUEST_MODE, UserActionModel.ENTER_GUEST_MODE,
@@ -395,13 +379,11 @@ class UserInteractorTest : SysuiTestCase() {
UserActionModel.NAVIGATE_TO_USER_MANAGEMENT, UserActionModel.NAVIGATE_TO_USER_MANAGEMENT,
) )
) )
job.cancel()
} }
@Test @Test
fun `actions - device locked add from lockscreen set - full list - full screen`() = fun `actions - device locked add from lockscreen set - full list - full screen`() =
runBlocking(IMMEDIATE) { testScope.runTest {
featureFlags.set(Flags.FULL_SCREEN_USER_SWITCHER, true) featureFlags.set(Flags.FULL_SCREEN_USER_SWITCHER, true)
val userInfos = createUserInfos(count = 2, includeGuest = false) val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
@@ -413,10 +395,9 @@ class UserInteractorTest : SysuiTestCase() {
) )
) )
keyguardRepository.setKeyguardShowing(false) keyguardRepository.setKeyguardShowing(false)
var value: List<UserActionModel>? = null val value = collectLastValue(underTest.actions)
val job = underTest.actions.onEach { value = it }.launchIn(this)
assertThat(value) assertThat(value())
.isEqualTo( .isEqualTo(
listOf( listOf(
UserActionModel.ADD_USER, UserActionModel.ADD_USER,
@@ -425,39 +406,33 @@ class UserInteractorTest : SysuiTestCase() {
UserActionModel.NAVIGATE_TO_USER_MANAGEMENT, UserActionModel.NAVIGATE_TO_USER_MANAGEMENT,
) )
) )
job.cancel()
} }
@Test @Test
fun `actions - device locked - only manage user is shown`() = fun `actions - device locked - only manage user is shown`() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false) val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(userInfos[0]) userRepository.setSelectedUserInfo(userInfos[0])
userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true)) userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true))
keyguardRepository.setKeyguardShowing(true) keyguardRepository.setKeyguardShowing(true)
var value: List<UserActionModel>? = null val value = collectLastValue(underTest.actions)
val job = underTest.actions.onEach { value = it }.launchIn(this)
assertThat(value).isEqualTo(listOf(UserActionModel.NAVIGATE_TO_USER_MANAGEMENT)) assertThat(value()).isEqualTo(listOf(UserActionModel.NAVIGATE_TO_USER_MANAGEMENT))
job.cancel()
} }
@Test @Test
fun `executeAction - add user - dialog shown`() = fun `executeAction - add user - dialog shown`() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false) val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(userInfos[0]) userRepository.setSelectedUserInfo(userInfos[0])
keyguardRepository.setKeyguardShowing(false) keyguardRepository.setKeyguardShowing(false)
var dialogRequest: ShowDialogRequestModel? = null val dialogRequest = collectLastValue(underTest.dialogShowRequests)
val job = underTest.dialogShowRequests.onEach { dialogRequest = it }.launchIn(this)
val dialogShower: UserSwitchDialogController.DialogShower = mock() val dialogShower: UserSwitchDialogController.DialogShower = mock()
underTest.executeAction(UserActionModel.ADD_USER, dialogShower) underTest.executeAction(UserActionModel.ADD_USER, dialogShower)
assertThat(dialogRequest) assertThat(dialogRequest())
.isEqualTo( .isEqualTo(
ShowDialogRequestModel.ShowAddUserDialog( ShowDialogRequestModel.ShowAddUserDialog(
userHandle = userInfos[0].userHandle, userHandle = userInfos[0].userHandle,
@@ -468,14 +443,12 @@ class UserInteractorTest : SysuiTestCase() {
) )
underTest.onDialogShown() underTest.onDialogShown()
assertThat(dialogRequest).isNull() assertThat(dialogRequest()).isNull()
job.cancel()
} }
@Test @Test
fun `executeAction - add supervised user - starts activity`() = fun `executeAction - add supervised user - dismisses dialog and starts activity`() =
runBlocking(IMMEDIATE) { testScope.runTest {
underTest.executeAction(UserActionModel.ADD_SUPERVISED_USER) underTest.executeAction(UserActionModel.ADD_SUPERVISED_USER)
val intentCaptor = kotlinArgumentCaptor<Intent>() val intentCaptor = kotlinArgumentCaptor<Intent>()
@@ -487,7 +460,7 @@ class UserInteractorTest : SysuiTestCase() {
@Test @Test
fun `executeAction - navigate to manage users`() = fun `executeAction - navigate to manage users`() =
runBlocking(IMMEDIATE) { testScope.runTest {
underTest.executeAction(UserActionModel.NAVIGATE_TO_USER_MANAGEMENT) underTest.executeAction(UserActionModel.NAVIGATE_TO_USER_MANAGEMENT)
val intentCaptor = kotlinArgumentCaptor<Intent>() val intentCaptor = kotlinArgumentCaptor<Intent>()
@@ -497,7 +470,7 @@ class UserInteractorTest : SysuiTestCase() {
@Test @Test
fun `executeAction - guest mode`() = fun `executeAction - guest mode`() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false) val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(userInfos[0]) userRepository.setSelectedUserInfo(userInfos[0])
@@ -505,110 +478,103 @@ class UserInteractorTest : SysuiTestCase() {
val guestUserInfo = createUserInfo(id = 1337, name = "guest", isGuest = true) val guestUserInfo = createUserInfo(id = 1337, name = "guest", isGuest = true)
whenever(manager.createGuest(any())).thenReturn(guestUserInfo) whenever(manager.createGuest(any())).thenReturn(guestUserInfo)
val dialogRequests = mutableListOf<ShowDialogRequestModel?>() val dialogRequests = mutableListOf<ShowDialogRequestModel?>()
val showDialogsJob = backgroundScope.launch {
underTest.dialogShowRequests underTest.dialogShowRequests.collect {
.onEach { dialogRequests.add(it)
dialogRequests.add(it) if (it != null) {
if (it != null) { underTest.onDialogShown()
underTest.onDialogShown()
}
} }
.launchIn(this) }
val dismissDialogsJob = }
underTest.dialogDismissRequests backgroundScope.launch {
.onEach { underTest.dialogDismissRequests.collect {
if (it != null) { if (it != null) {
underTest.onDialogDismissed() underTest.onDialogDismissed()
}
} }
.launchIn(this) }
}
underTest.executeAction(UserActionModel.ENTER_GUEST_MODE) underTest.executeAction(UserActionModel.ENTER_GUEST_MODE)
runCurrent()
assertThat(dialogRequests) assertThat(dialogRequests)
.contains( .contains(
ShowDialogRequestModel.ShowUserCreationDialog(isGuest = true), ShowDialogRequestModel.ShowUserCreationDialog(isGuest = true),
) )
verify(activityManager).switchUser(guestUserInfo.id) verify(activityManager).switchUser(guestUserInfo.id)
showDialogsJob.cancel()
dismissDialogsJob.cancel()
} }
@Test @Test
fun `selectUser - already selected guest re-selected - exit guest dialog`() = fun `selectUser - already selected guest re-selected - exit guest dialog`() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = true) val userInfos = createUserInfos(count = 2, includeGuest = true)
val guestUserInfo = userInfos[1] val guestUserInfo = userInfos[1]
assertThat(guestUserInfo.isGuest).isTrue() assertThat(guestUserInfo.isGuest).isTrue()
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(guestUserInfo) userRepository.setSelectedUserInfo(guestUserInfo)
userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true)) userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true))
var dialogRequest: ShowDialogRequestModel? = null val dialogRequest = collectLastValue(underTest.dialogShowRequests)
val job = underTest.dialogShowRequests.onEach { dialogRequest = it }.launchIn(this)
underTest.selectUser( underTest.selectUser(
newlySelectedUserId = guestUserInfo.id, newlySelectedUserId = guestUserInfo.id,
dialogShower = dialogShower, dialogShower = dialogShower,
) )
assertThat(dialogRequest) assertThat(dialogRequest())
.isInstanceOf(ShowDialogRequestModel.ShowExitGuestDialog::class.java) .isInstanceOf(ShowDialogRequestModel.ShowExitGuestDialog::class.java)
verify(dialogShower, never()).dismiss() verify(dialogShower, never()).dismiss()
job.cancel()
} }
@Test @Test
fun `selectUser - currently guest non-guest selected - exit guest dialog`() = fun `selectUser - currently guest non-guest selected - exit guest dialog`() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = true) val userInfos = createUserInfos(count = 2, includeGuest = true)
val guestUserInfo = userInfos[1] val guestUserInfo = userInfos[1]
assertThat(guestUserInfo.isGuest).isTrue() assertThat(guestUserInfo.isGuest).isTrue()
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(guestUserInfo) userRepository.setSelectedUserInfo(guestUserInfo)
userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true)) userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true))
var dialogRequest: ShowDialogRequestModel? = null val dialogRequest = collectLastValue(underTest.dialogShowRequests)
val job = underTest.dialogShowRequests.onEach { dialogRequest = it }.launchIn(this)
underTest.selectUser(newlySelectedUserId = userInfos[0].id, dialogShower = dialogShower) underTest.selectUser(newlySelectedUserId = userInfos[0].id, dialogShower = dialogShower)
assertThat(dialogRequest) assertThat(dialogRequest())
.isInstanceOf(ShowDialogRequestModel.ShowExitGuestDialog::class.java) .isInstanceOf(ShowDialogRequestModel.ShowExitGuestDialog::class.java)
verify(dialogShower, never()).dismiss() verify(dialogShower, never()).dismiss()
job.cancel()
} }
@Test @Test
fun `selectUser - not currently guest - switches users`() = fun `selectUser - not currently guest - switches users`() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false) val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(userInfos[0]) userRepository.setSelectedUserInfo(userInfos[0])
userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true)) userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true))
var dialogRequest: ShowDialogRequestModel? = null val dialogRequest = collectLastValue(underTest.dialogShowRequests)
val job = underTest.dialogShowRequests.onEach { dialogRequest = it }.launchIn(this)
underTest.selectUser(newlySelectedUserId = userInfos[1].id, dialogShower = dialogShower) underTest.selectUser(newlySelectedUserId = userInfos[1].id, dialogShower = dialogShower)
assertThat(dialogRequest).isNull() assertThat(dialogRequest()).isNull()
verify(activityManager).switchUser(userInfos[1].id) verify(activityManager).switchUser(userInfos[1].id)
verify(dialogShower).dismiss() verify(dialogShower).dismiss()
job.cancel()
} }
@Test @Test
fun `Telephony call state changes - refreshes users`() = fun `Telephony call state changes - refreshes users`() =
runBlocking(IMMEDIATE) { testScope.runTest {
runCurrent()
val refreshUsersCallCount = userRepository.refreshUsersCallCount val refreshUsersCallCount = userRepository.refreshUsersCallCount
telephonyRepository.setCallState(1) telephonyRepository.setCallState(1)
runCurrent()
assertThat(userRepository.refreshUsersCallCount).isEqualTo(refreshUsersCallCount + 1) assertThat(userRepository.refreshUsersCallCount).isEqualTo(refreshUsersCallCount + 1)
} }
@Test @Test
fun `User switched broadcast`() = fun `User switched broadcast`() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false) val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(userInfos[0]) userRepository.setSelectedUserInfo(userInfos[0])
@@ -617,9 +583,11 @@ class UserInteractorTest : SysuiTestCase() {
val callback2: UserInteractor.UserCallback = mock() val callback2: UserInteractor.UserCallback = mock()
underTest.addCallback(callback1) underTest.addCallback(callback1)
underTest.addCallback(callback2) underTest.addCallback(callback2)
runCurrent()
val refreshUsersCallCount = userRepository.refreshUsersCallCount val refreshUsersCallCount = userRepository.refreshUsersCallCount
userRepository.setSelectedUserInfo(userInfos[1]) userRepository.setSelectedUserInfo(userInfos[1])
runCurrent()
fakeBroadcastDispatcher.registeredReceivers.forEach { fakeBroadcastDispatcher.registeredReceivers.forEach {
it.onReceive( it.onReceive(
context, context,
@@ -627,16 +595,17 @@ class UserInteractorTest : SysuiTestCase() {
.putExtra(Intent.EXTRA_USER_HANDLE, userInfos[1].id), .putExtra(Intent.EXTRA_USER_HANDLE, userInfos[1].id),
) )
} }
runCurrent()
verify(callback1).onUserStateChanged() verify(callback1, atLeastOnce()).onUserStateChanged()
verify(callback2).onUserStateChanged() verify(callback2, atLeastOnce()).onUserStateChanged()
assertThat(userRepository.secondaryUserId).isEqualTo(userInfos[1].id) assertThat(userRepository.secondaryUserId).isEqualTo(userInfos[1].id)
assertThat(userRepository.refreshUsersCallCount).isEqualTo(refreshUsersCallCount + 1) assertThat(userRepository.refreshUsersCallCount).isEqualTo(refreshUsersCallCount + 1)
} }
@Test @Test
fun `User info changed broadcast`() = fun `User info changed broadcast`() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false) val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(userInfos[0]) userRepository.setSelectedUserInfo(userInfos[0])
@@ -649,12 +618,14 @@ class UserInteractorTest : SysuiTestCase() {
) )
} }
runCurrent()
assertThat(userRepository.refreshUsersCallCount).isEqualTo(refreshUsersCallCount + 1) assertThat(userRepository.refreshUsersCallCount).isEqualTo(refreshUsersCallCount + 1)
} }
@Test @Test
fun `System user unlocked broadcast - refresh users`() = fun `System user unlocked broadcast - refresh users`() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false) val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(userInfos[0]) userRepository.setSelectedUserInfo(userInfos[0])
@@ -667,13 +638,14 @@ class UserInteractorTest : SysuiTestCase() {
.putExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_SYSTEM), .putExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_SYSTEM),
) )
} }
runCurrent()
assertThat(userRepository.refreshUsersCallCount).isEqualTo(refreshUsersCallCount + 1) assertThat(userRepository.refreshUsersCallCount).isEqualTo(refreshUsersCallCount + 1)
} }
@Test @Test
fun `Non-system user unlocked broadcast - do not refresh users`() = fun `Non-system user unlocked broadcast - do not refresh users`() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false) val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(userInfos[0]) userRepository.setSelectedUserInfo(userInfos[0])
@@ -691,14 +663,14 @@ class UserInteractorTest : SysuiTestCase() {
@Test @Test
fun userRecords() = fun userRecords() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 3, includeGuest = false) val userInfos = createUserInfos(count = 3, includeGuest = false)
userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true)) userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true))
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(userInfos[0]) userRepository.setSelectedUserInfo(userInfos[0])
keyguardRepository.setKeyguardShowing(false) keyguardRepository.setKeyguardShowing(false)
testCoroutineScope.advanceUntilIdle() runCurrent()
assertRecords( assertRecords(
records = underTest.userRecords.value, records = underTest.userRecords.value,
@@ -717,7 +689,7 @@ class UserInteractorTest : SysuiTestCase() {
@Test @Test
fun userRecordsFullScreen() = fun userRecordsFullScreen() =
runBlocking(IMMEDIATE) { testScope.runTest {
featureFlags.set(Flags.FULL_SCREEN_USER_SWITCHER, true) featureFlags.set(Flags.FULL_SCREEN_USER_SWITCHER, true)
val userInfos = createUserInfos(count = 3, includeGuest = false) val userInfos = createUserInfos(count = 3, includeGuest = false)
userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true)) userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true))
@@ -725,7 +697,7 @@ class UserInteractorTest : SysuiTestCase() {
userRepository.setSelectedUserInfo(userInfos[0]) userRepository.setSelectedUserInfo(userInfos[0])
keyguardRepository.setKeyguardShowing(false) keyguardRepository.setKeyguardShowing(false)
testCoroutineScope.advanceUntilIdle() runCurrent()
assertRecords( assertRecords(
records = underTest.userRecords.value, records = underTest.userRecords.value,
@@ -744,7 +716,7 @@ class UserInteractorTest : SysuiTestCase() {
@Test @Test
fun selectedUserRecord() = fun selectedUserRecord() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 3, includeGuest = true) val userInfos = createUserInfos(count = 3, includeGuest = true)
userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true)) userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true))
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
@@ -762,64 +734,54 @@ class UserInteractorTest : SysuiTestCase() {
@Test @Test
fun `users - secondary user - guest user can be switched to`() = fun `users - secondary user - guest user can be switched to`() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 3, includeGuest = true) val userInfos = createUserInfos(count = 3, includeGuest = true)
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(userInfos[1]) userRepository.setSelectedUserInfo(userInfos[1])
userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true)) userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true))
var res: List<UserModel>? = null val res = collectLastValue(underTest.users)
val job = underTest.users.onEach { res = it }.launchIn(this) assertThat(res()?.size == 3).isTrue()
assertThat(res?.size == 3).isTrue() assertThat(res()?.find { it.isGuest }).isNotNull()
assertThat(res?.find { it.isGuest }).isNotNull()
job.cancel()
} }
@Test @Test
fun `users - secondary user - no guest action`() = fun `users - secondary user - no guest action`() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 3, includeGuest = true) val userInfos = createUserInfos(count = 3, includeGuest = true)
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(userInfos[1]) userRepository.setSelectedUserInfo(userInfos[1])
userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true)) userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true))
var res: List<UserActionModel>? = null val res = collectLastValue(underTest.actions)
val job = underTest.actions.onEach { res = it }.launchIn(this) assertThat(res()?.find { it == UserActionModel.ENTER_GUEST_MODE }).isNull()
assertThat(res?.find { it == UserActionModel.ENTER_GUEST_MODE }).isNull()
job.cancel()
} }
@Test @Test
fun `users - secondary user - no guest user record`() = fun `users - secondary user - no guest user record`() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 3, includeGuest = true) val userInfos = createUserInfos(count = 3, includeGuest = true)
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(userInfos[1]) userRepository.setSelectedUserInfo(userInfos[1])
userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true)) userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true))
var res: List<UserRecord>? = null assertThat(underTest.userRecords.value.find { it.isGuest }).isNull()
val job = underTest.userRecords.onEach { res = it }.launchIn(this)
assertThat(res?.find { it.isGuest }).isNull()
job.cancel()
} }
@Test @Test
fun `show user switcher - full screen disabled - shows dialog switcher`() = fun `show user switcher - full screen disabled - shows dialog switcher`() =
runBlocking(IMMEDIATE) { testScope.runTest {
var dialogRequest: ShowDialogRequestModel? = null
val expandable = mock<Expandable>() val expandable = mock<Expandable>()
underTest.showUserSwitcher(context, expandable) underTest.showUserSwitcher(context, expandable)
val job = underTest.dialogShowRequests.onEach { dialogRequest = it }.launchIn(this) val dialogRequest = collectLastValue(underTest.dialogShowRequests)
// Dialog is shown. // Dialog is shown.
assertThat(dialogRequest) assertThat(dialogRequest())
.isEqualTo(ShowDialogRequestModel.ShowUserSwitcherDialog(expandable)) .isEqualTo(ShowDialogRequestModel.ShowUserSwitcherDialog(expandable))
underTest.onDialogShown() underTest.onDialogShown()
assertThat(dialogRequest).isNull() assertThat(dialogRequest()).isNull()
job.cancel()
} }
@Test @Test
@@ -850,8 +812,8 @@ class UserInteractorTest : SysuiTestCase() {
@Test @Test
fun `users - secondary user - managed profile is not included`() = fun `users - secondary user - managed profile is not included`() =
runBlocking(IMMEDIATE) { testScope.runTest {
var userInfos = createUserInfos(count = 3, includeGuest = false).toMutableList() val userInfos = createUserInfos(count = 3, includeGuest = false).toMutableList()
userInfos.add( userInfos.add(
UserInfo( UserInfo(
50, 50,
@@ -864,23 +826,19 @@ class UserInteractorTest : SysuiTestCase() {
userRepository.setSelectedUserInfo(userInfos[1]) userRepository.setSelectedUserInfo(userInfos[1])
userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true)) userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true))
var res: List<UserModel>? = null val res = collectLastValue(underTest.users)
val job = underTest.users.onEach { res = it }.launchIn(this) assertThat(res()?.size == 3).isTrue()
assertThat(res?.size == 3).isTrue()
job.cancel()
} }
@Test @Test
fun `current user is not primary and user switcher is disabled`() = fun `current user is not primary and user switcher is disabled`() =
runBlocking(IMMEDIATE) { testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false) val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos) userRepository.setUserInfos(userInfos)
userRepository.setSelectedUserInfo(userInfos[1]) userRepository.setSelectedUserInfo(userInfos[1])
userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = false)) userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = false))
var selectedUser: UserModel? = null val selectedUser = collectLastValue(underTest.selectedUser)
val job = underTest.selectedUser.onEach { selectedUser = it }.launchIn(this) assertThat(selectedUser()).isNotNull()
assertThat(selectedUser).isNotNull()
job.cancel()
} }
private fun assertUsers( private fun assertUsers(
@@ -1018,7 +976,6 @@ class UserInteractorTest : SysuiTestCase() {
} }
companion object { companion object {
private val IMMEDIATE = Dispatchers.Main.immediate
private val ICON = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888) private val ICON = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888)
private val GUEST_ICON: Drawable = mock() private val GUEST_ICON: Drawable = mock()
private const val SUPERVISED_USER_CREATION_APP_PACKAGE = "supervisedUserCreation" private const val SUPERVISED_USER_CREATION_APP_PACKAGE = "supervisedUserCreation"