|
|
|
@@ -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 =
|
|
|
|
backgroundScope.launch {
|
|
|
|
underTest.dialogDismissRequests
|
|
|
|
underTest.dialogDismissRequests.collect {
|
|
|
|
.onEach {
|
|
|
|
|
|
|
|
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"
|
|
|
|
|