diff --git a/apps/flipcash/features/menu/src/main/kotlin/com/flipcash/app/menu/MenuScreen.kt b/apps/flipcash/features/menu/src/main/kotlin/com/flipcash/app/menu/MenuScreen.kt index bb7738331..ab6d8e507 100644 --- a/apps/flipcash/features/menu/src/main/kotlin/com/flipcash/app/menu/MenuScreen.kt +++ b/apps/flipcash/features/menu/src/main/kotlin/com/flipcash/app/menu/MenuScreen.kt @@ -19,15 +19,6 @@ fun MenuScreen() { val navigator = LocalCodeNavigator.current - LaunchedEffect(viewModel) { - viewModel.eventFlow - .filterIsInstance() - .onEach { - navigator.hide() - navigator.replaceAll(AppRoute.Onboarding.Login()) } - .launchIn(this) - } - LaunchedEffect(viewModel) { viewModel.eventFlow .filterIsInstance() diff --git a/apps/flipcash/features/menu/src/main/kotlin/com/flipcash/app/menu/internal/MenuItems.kt b/apps/flipcash/features/menu/src/main/kotlin/com/flipcash/app/menu/internal/MenuItems.kt index dc4087a1a..9ed610420 100644 --- a/apps/flipcash/features/menu/src/main/kotlin/com/flipcash/app/menu/internal/MenuItems.kt +++ b/apps/flipcash/features/menu/src/main/kotlin/com/flipcash/app/menu/internal/MenuItems.kt @@ -75,11 +75,3 @@ internal data object Labs : StaffMenuItem() { AppRoute.Menu.Lab ) } - -internal data object LogOut : FullMenuItem() { - override val icon: Painter - @Composable get() = painterResource(R.drawable.ic_menu_logout) - override val name: String - @Composable get() = stringResource(R.string.action_logout) - override val action: MenuScreenViewModel.Event = MenuScreenViewModel.Event.OnLogOutClicked -} diff --git a/apps/flipcash/features/menu/src/main/kotlin/com/flipcash/app/menu/internal/MenuScreenContent.kt b/apps/flipcash/features/menu/src/main/kotlin/com/flipcash/app/menu/internal/MenuScreenContent.kt index 5118ce610..e7c56ce61 100644 --- a/apps/flipcash/features/menu/src/main/kotlin/com/flipcash/app/menu/internal/MenuScreenContent.kt +++ b/apps/flipcash/features/menu/src/main/kotlin/com/flipcash/app/menu/internal/MenuScreenContent.kt @@ -117,35 +117,6 @@ internal fun MenuScreenContent(viewModel: MenuScreenViewModel) { } } }, - footer = { - CodeButton( - modifier = Modifier - .fillMaxWidth() - .padding(top = CodeTheme.dimens.grid.x3) - .padding(horizontal = CodeTheme.dimens.grid.x3), - onClick = { viewModel.dispatchEvent(Event.OnLogOutClicked) }, - buttonState = ButtonState.Subtle, - ) { - Row( - modifier = Modifier.fillMaxWidth(), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.spacedBy(CodeTheme.dimens.grid.x1, Alignment.CenterHorizontally), - ) { - Image( - painter = painterResource(R.drawable.ic_menu_logout), - colorFilter = ColorFilter.tint(CodeTheme.colors.textSecondary), - contentDescription = null, - ) - - Text( - modifier = Modifier.padding(start = CodeTheme.dimens.grid.x1), - text = stringResource(R.string.action_logout), - style = CodeTheme.typography.textMedium, - color = CodeTheme.colors.textSecondary, - ) - } - } - }, contentPadding = PaddingValues(top = CodeTheme.dimens.grid.x3), onItemClick = { viewModel.dispatchEvent(it.action) diff --git a/apps/flipcash/features/menu/src/main/kotlin/com/flipcash/app/menu/internal/MenuScreenViewModel.kt b/apps/flipcash/features/menu/src/main/kotlin/com/flipcash/app/menu/internal/MenuScreenViewModel.kt index 82c37664c..ca23a852b 100644 --- a/apps/flipcash/features/menu/src/main/kotlin/com/flipcash/app/menu/internal/MenuScreenViewModel.kt +++ b/apps/flipcash/features/menu/src/main/kotlin/com/flipcash/app/menu/internal/MenuScreenViewModel.kt @@ -46,7 +46,6 @@ private val FullMenuList = buildList { @HiltViewModel internal class MenuScreenViewModel @Inject constructor( - private val resources: ResourceHelper, userManager: UserManager, userFlags: UserFlagsCoordinator, authManager: AuthManager, @@ -81,8 +80,6 @@ internal class MenuScreenViewModel @Inject constructor( data class OnStaffUserDetermined(val staff: Boolean) : Event data class OpenScreen(val screen: AppRoute) : Event data object OnSwitchAccountsClicked : Event - data object OnLogOutClicked : Event - data object OnLoggedOutCompletely : Event data class OnSwitchAccountTo(val entropy: String): Event } @@ -149,33 +146,6 @@ internal class MenuScreenViewModel @Inject constructor( onError = { }, onSuccess = { dispatchEvent(Event.OnSwitchAccountTo(it)) } ).launchIn(viewModelScope) - - eventFlow - .filterIsInstance() - .onEach { - BottomBarManager.showAlert( - title = resources.getString(R.string.prompt_title_logout), - message = resources.getString(R.string.prompt_description_logout), - actions = listOf( - BottomBarAction(resources.getString(R.string.action_logout)) { - viewModelScope.launch { - delay(150) // wait for dismiss - authManager.logout() - .onSuccess { - dispatchEvent(Event.OnLoggedOutCompletely) - } - .onFailure { - BottomBarManager.showError( - title = resources.getString(R.string.error_title_failedToLogOut), - message = resources.getString(R.string.error_description_failedToLogOut), - ) - } - } - }, - ), - showCancel = true, - ) - }.launchIn(viewModelScope) } internal companion object { @@ -248,10 +218,8 @@ internal class MenuScreenViewModel @Inject constructor( } Event.CheckForUpdate, - Event.OnLogOutClicked, Event.OnSwitchAccountsClicked, is Event.OpenScreen, - Event.OnLoggedOutCompletely, is Event.OnSwitchAccountTo -> { state -> state } is Event.OnFeatureFlagsUpdated -> { state -> diff --git a/apps/flipcash/features/myaccount/src/main/kotlin/com/flipcash/app/myaccount/MyAccountScreen.kt b/apps/flipcash/features/myaccount/src/main/kotlin/com/flipcash/app/myaccount/MyAccountScreen.kt index 194db81cc..ed6b16492 100644 --- a/apps/flipcash/features/myaccount/src/main/kotlin/com/flipcash/app/myaccount/MyAccountScreen.kt +++ b/apps/flipcash/features/myaccount/src/main/kotlin/com/flipcash/app/myaccount/MyAccountScreen.kt @@ -49,6 +49,15 @@ fun MyAccountScreen() { MyAccountScreen(viewModel) } + LaunchedEffect(viewModel) { + viewModel.eventFlow + .filterIsInstance() + .onEach { + navigator.hide() + navigator.replaceAll(AppRoute.Onboarding.Login()) } + .launchIn(this) + } + LaunchedEffect(viewModel) { viewModel.eventFlow .filterIsInstance() diff --git a/apps/flipcash/features/myaccount/src/main/kotlin/com/flipcash/app/myaccount/internal/MyAccountMenuItems.kt b/apps/flipcash/features/myaccount/src/main/kotlin/com/flipcash/app/myaccount/internal/MyAccountMenuItems.kt index 1bf9d2d3f..b105db6c2 100644 --- a/apps/flipcash/features/myaccount/src/main/kotlin/com/flipcash/app/myaccount/internal/MyAccountMenuItems.kt +++ b/apps/flipcash/features/myaccount/src/main/kotlin/com/flipcash/app/myaccount/internal/MyAccountMenuItems.kt @@ -37,6 +37,14 @@ internal data object VerifyPhone : FullMenuItem( override val action: MyAccountScreenViewModel.Event = MyAccountScreenViewModel.Event.OnVerifyPhoneClicked } +internal data object LogOut : FullMenuItem() { + override val icon: Painter + @Composable get() = painterResource(R.drawable.ic_menu_logout) + override val name: String + @Composable get() = stringResource(R.string.action_logout) + override val action: MyAccountScreenViewModel.Event = MyAccountScreenViewModel.Event.OnLogOutClicked +} + internal data object DeleteAccount: FullMenuItem() { override val icon: Painter @Composable get() = rememberVectorPainter(ImageVector.Delete) diff --git a/apps/flipcash/features/myaccount/src/main/kotlin/com/flipcash/app/myaccount/internal/MyAccountScreenViewModel.kt b/apps/flipcash/features/myaccount/src/main/kotlin/com/flipcash/app/myaccount/internal/MyAccountScreenViewModel.kt index 50827133a..d85c1cf12 100644 --- a/apps/flipcash/features/myaccount/src/main/kotlin/com/flipcash/app/myaccount/internal/MyAccountScreenViewModel.kt +++ b/apps/flipcash/features/myaccount/src/main/kotlin/com/flipcash/app/myaccount/internal/MyAccountScreenViewModel.kt @@ -31,6 +31,7 @@ private val FullMenuList = buildList { add(AccessKey) add(VerifyPhone) add(VerifyEmail) + add(LogOut) add(DeleteAccount) } @@ -68,13 +69,15 @@ internal class MyAccountScreenViewModel @Inject constructor( data class ToggleAccountInfo(val show: Boolean) : Event data object OnAccessKeyClicked : Event data object OnViewAccessKey : Event - data object OnVerifyEmailClicked: Event - data object OnVerifyPhoneClicked: Event + data object OnVerifyEmailClicked : Event + data object OnVerifyPhoneClicked : Event data object OnDeleteAccountClicked : Event data object OnAccountDeleted : Event data object CopyPublicKey : Event data object CopyAccountId : Event data object CopyPushToken : Event + data object OnLogOutClicked : Event + data object OnLoggedOutCompletely : Event } init { @@ -179,6 +182,33 @@ internal class MyAccountScreenViewModel @Inject constructor( ), ) }.launchIn(viewModelScope) + + eventFlow + .filterIsInstance() + .onEach { + BottomBarManager.showAlert( + title = resources.getString(R.string.prompt_title_logout), + message = resources.getString(R.string.prompt_description_logout), + actions = listOf( + BottomBarAction(resources.getString(R.string.action_logout)) { + viewModelScope.launch { + delay(150) // wait for dismiss + authManager.logout() + .onSuccess { + dispatchEvent(Event.OnLoggedOutCompletely) + } + .onFailure { + BottomBarManager.showError( + title = resources.getString(R.string.error_title_failedToLogOut), + message = resources.getString(R.string.error_description_failedToLogOut), + ) + } + } + }, + ), + showCancel = true, + ) + }.launchIn(viewModelScope) } internal companion object { @@ -202,6 +232,8 @@ internal class MyAccountScreenViewModel @Inject constructor( ) } + Event.OnLogOutClicked, + Event.OnLoggedOutCompletely, Event.OnVerifyPhoneClicked, Event.OnVerifyEmailClicked, Event.OnViewAccessKey, @@ -214,7 +246,10 @@ internal class MyAccountScreenViewModel @Inject constructor( Event.OnAccessKeyClicked -> { state -> state } is Event.OnBetaFeaturesUnlocked -> { state -> - state.copy(isBetaEnabled = event.unlocked, items = buildItemList(event.unlocked)) + state.copy( + isBetaEnabled = event.unlocked, + items = buildItemList(event.unlocked) + ) } is Event.ToggleAccountInfo -> { state ->