Loading packages/SystemUI/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModel.kt +9 −4 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ package com.android.systemui.user.ui.viewmodel import com.android.systemui.res.R import com.android.systemui.common.shared.model.Text import com.android.systemui.common.ui.drawable.CircularDrawable import com.android.systemui.dagger.SysUISingleton Loading Loading @@ -64,6 +63,7 @@ constructor( private val hasCancelButtonBeenClicked = MutableStateFlow(false) private val isFinishRequiredDueToExecutedAction = MutableStateFlow(false) private val userSwitched = MutableStateFlow(false) /** * Whether the observer should finish the experience. Once consumed, [onFinished] must be called Loading @@ -85,6 +85,7 @@ constructor( fun onFinished() { hasCancelButtonBeenClicked.value = false isFinishRequiredDueToExecutedAction.value = false userSwitched.value = false } /** Notifies that the user has clicked the "open menu" button. */ Loading Loading @@ -117,8 +118,9 @@ constructor( hasCancelButtonBeenClicked, // If an executed action told us to finish, we should finish, isFinishRequiredDueToExecutedAction, ) { cancelButtonClicked, executedActionFinish -> cancelButtonClicked || executedActionFinish userSwitched, ) { cancelButtonClicked, executedActionFinish, userSwitched -> cancelButtonClicked || executedActionFinish || userSwitched } private fun toViewModel( Loading Loading @@ -187,7 +189,10 @@ constructor( return if (!model.isSelectable) { null } else { { userInteractor.selectUser(model.id) } { userInteractor.selectUser(model.id) userSwitched.value = true } } } } packages/SystemUI/tests/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModelTest.kt +19 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import com.android.systemui.GuestResetOrExitSessionReceiver import com.android.systemui.GuestResumeSessionReceiver import com.android.systemui.SysuiTestCase 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.Flags import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository Loading Loading @@ -346,6 +347,24 @@ class UserSwitcherViewModelTest : SysuiTestCase() { job.cancel() } @Test fun isFinishRequested_finishesWhenUserButtonIsClicked() = testScope.runTest { setUsers(count = 2) val isFinishRequested = mutableListOf<Boolean>() val job = launch(testDispatcher) { underTest.isFinishRequested.toList(isFinishRequested) } val userViewModels = collectLastValue(underTest.users) assertThat(isFinishRequested.last()).isFalse() userViewModels.invoke()?.firstOrNull()?.onClicked?.invoke() assertThat(isFinishRequested.last()).isTrue() job.cancel() } @Test fun guestSelected_nameIsExitGuest() = testScope.runTest { Loading Loading
packages/SystemUI/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModel.kt +9 −4 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ package com.android.systemui.user.ui.viewmodel import com.android.systemui.res.R import com.android.systemui.common.shared.model.Text import com.android.systemui.common.ui.drawable.CircularDrawable import com.android.systemui.dagger.SysUISingleton Loading Loading @@ -64,6 +63,7 @@ constructor( private val hasCancelButtonBeenClicked = MutableStateFlow(false) private val isFinishRequiredDueToExecutedAction = MutableStateFlow(false) private val userSwitched = MutableStateFlow(false) /** * Whether the observer should finish the experience. Once consumed, [onFinished] must be called Loading @@ -85,6 +85,7 @@ constructor( fun onFinished() { hasCancelButtonBeenClicked.value = false isFinishRequiredDueToExecutedAction.value = false userSwitched.value = false } /** Notifies that the user has clicked the "open menu" button. */ Loading Loading @@ -117,8 +118,9 @@ constructor( hasCancelButtonBeenClicked, // If an executed action told us to finish, we should finish, isFinishRequiredDueToExecutedAction, ) { cancelButtonClicked, executedActionFinish -> cancelButtonClicked || executedActionFinish userSwitched, ) { cancelButtonClicked, executedActionFinish, userSwitched -> cancelButtonClicked || executedActionFinish || userSwitched } private fun toViewModel( Loading Loading @@ -187,7 +189,10 @@ constructor( return if (!model.isSelectable) { null } else { { userInteractor.selectUser(model.id) } { userInteractor.selectUser(model.id) userSwitched.value = true } } } }
packages/SystemUI/tests/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModelTest.kt +19 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import com.android.systemui.GuestResetOrExitSessionReceiver import com.android.systemui.GuestResumeSessionReceiver import com.android.systemui.SysuiTestCase 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.Flags import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository Loading Loading @@ -346,6 +347,24 @@ class UserSwitcherViewModelTest : SysuiTestCase() { job.cancel() } @Test fun isFinishRequested_finishesWhenUserButtonIsClicked() = testScope.runTest { setUsers(count = 2) val isFinishRequested = mutableListOf<Boolean>() val job = launch(testDispatcher) { underTest.isFinishRequested.toList(isFinishRequested) } val userViewModels = collectLastValue(underTest.users) assertThat(isFinishRequested.last()).isFalse() userViewModels.invoke()?.firstOrNull()?.onClicked?.invoke() assertThat(isFinishRequested.last()).isTrue() job.cancel() } @Test fun guestSelected_nameIsExitGuest() = testScope.runTest { Loading