diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/navigation/AppNavGraph.kt b/app/src/main/java/com/mob/utsmyanmar/ui/navigation/AppNavGraph.kt index 220364b..7080bbb 100644 --- a/app/src/main/java/com/mob/utsmyanmar/ui/navigation/AppNavGraph.kt +++ b/app/src/main/java/com/mob/utsmyanmar/ui/navigation/AppNavGraph.kt @@ -1,63 +1,52 @@ package com.mob.utsmyanmar.ui.navigation import android.annotation.SuppressLint -import android.net.Uri import androidx.activity.ComponentActivity import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue import androidx.compose.ui.platform.LocalContext -import androidx.hilt.navigation.compose.hiltViewModel -import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.NavHostController import androidx.navigation.NavType import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.navArgument import com.mob.utsmyanmar.model.ProcessCode +import com.mob.utsmyanmar.ui.input_amount.AmountRoute import com.mob.utsmyanmar.ui.cardwaiting.CardWaitingScreen import com.mob.utsmyanmar.ui.cardwaiting.CardWaitingViewModel import com.mob.utsmyanmar.ui.dashboard.DashboardScreen2 -import com.mob.utsmyanmar.ui.dashboard.DashboardViewModel +import com.mob.utsmyanmar.ui.dashboard.SeeMoreScreen import com.mob.utsmyanmar.ui.device_info.DeviceInfoViewModel -import com.mob.utsmyanmar.ui.disable.DisableScreen -import com.mob.utsmyanmar.ui.functions.FunctionsScreen -import com.mob.utsmyanmar.ui.history_functions.HistoryRoute -import com.mob.utsmyanmar.ui.input_amount.AmountRoute -import com.mob.utsmyanmar.ui.manual_entry.InputManualCardRoute -import com.mob.utsmyanmar.ui.notification.NotificationDetailScreen -import com.mob.utsmyanmar.ui.notification.NotificationListScreen -import com.mob.utsmyanmar.ui.notification.NotificationViewModel -import com.mob.utsmyanmar.ui.password_input.InputPassword -import com.mob.utsmyanmar.ui.password_input.PasswordType import com.mob.utsmyanmar.ui.pinpad.PinPadRoute -import com.mob.utsmyanmar.ui.pinpad.PinPadViewModel -import com.mob.utsmyanmar.ui.print_receipt.PrintReceiptScreen import com.mob.utsmyanmar.ui.processing_card.ProcessingCardRoute import com.mob.utsmyanmar.ui.processing_card.ProcessingCardViewModel +import com.mob.utsmyanmar.ui.print_receipt.PrintReceiptScreen import com.mob.utsmyanmar.ui.refund_rrn.InputRrnRoute -import com.mob.utsmyanmar.ui.refund_rrn.RRNViewModel -import com.mob.utsmyanmar.ui.sale_void.TranDetailPage -import com.mob.utsmyanmar.ui.sale_void.VoidTraceScreen -import com.mob.utsmyanmar.ui.sale_void.VoidViewModel -import com.mob.utsmyanmar.ui.sending_to_host.ProcessingRoute -import com.mob.utsmyanmar.ui.settlement.SettlementScreen -import com.mob.utsmyanmar.ui.settlement.SettlementViewModel import com.mob.utsmyanmar.ui.sign_on.SignOnResultScreen import com.mob.utsmyanmar.ui.sign_on.SignOnRoute -import com.mob.utsmyanmar.ui.tms_setup.TmsSetupRoute -import com.mob.utsmyanmar.ui.tms_setup.TmsSetupViewModel -import com.mob.utsmyanmar.ui.transaction_result.TransactionResultEvent +import com.mob.utsmyanmar.ui.sending_to_host.ProcessingRoute +import com.mob.utsmyanmar.ui.settlement.SettlementScreen import com.mob.utsmyanmar.ui.transaction_result.TransactionResultRoute -import com.mob.utsmyanmar.ui.transaction_result.TransactionResultViewModel -import com.mob.utsmyanmar.ui.version.VersionScreen +import com.mob.utsmyanmar.ui.sale_void.TranDetailPage +import com.mob.utsmyanmar.ui.sale_void.VoidViewModel +import com.mob.utsmyanmar.ui.sale_void.VoidTraceScreen import com.mob.utsmyanmar.viewmodel.CardReaderViewModel import com.mob.utsmyanmar.viewmodel.EmvTransactionProcessViewModel +import com.mob.utsmyanmar.ui.pinpad.PinPadViewModel +import com.mob.utsmyanmar.ui.settlement.SettlementViewModel +import com.mob.utsmyanmar.ui.transaction_result.TransactionResultEvent +import com.mob.utsmyanmar.ui.transaction_result.TransactionResultViewModel +import com.mob.utsmyanmar.ui.functions.FunctionsScreen +import com.mob.utsmyanmar.ui.refund_rrn.RRNViewModel +import com.mob.utsmyanmar.ui.tms_setup.TmsSetupRoute +import com.mob.utsmyanmar.ui.tms_setup.TmsSetupViewModel +import com.mob.utsmyanmar.ui.version.VersionScreen import com.mob.utsmyanmar.viewmodel.SharedViewModel import com.mob.utsmyanmar.viewmodel.TransProcessViewModel +import com.utsmyanmar.ecr.data.TransType import com.utsmyanmar.paylibs.model.TradeData import com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType -import sunmi.sunmiui.utils.LogUtil @SuppressLint("ContextCastToActivity") @Composable @@ -76,31 +65,9 @@ fun AppNavGraph( viewModel = tmsSetupViewModel, onNavigateDashboard = { navController.navigate(Routes.Dashboard.route) { - popUpTo(Routes.TmsSetup.route) { inclusive = true } - launchSingleTop = true - } - }, - onNavigateDisable = { message -> - navController.navigate(Routes.Disable.createRoute(message)) { - popUpTo(Routes.TmsSetup.route) { inclusive = true } - launchSingleTop = true - } - } - ) - } - - composable( - route = Routes.Disable.route, - arguments = listOf( - navArgument("message") { type = NavType.StringType } - ) - ) { backStackEntry -> - val message = Uri.decode(backStackEntry.arguments?.getString("message").orEmpty()) - DisableScreen( - message = message, - onRetry = { - navController.navigate(Routes.TmsSetup.route) { - popUpTo(Routes.Disable.route) { inclusive = true } + popUpTo(Routes.TmsSetup.route) { + inclusive = true + } launchSingleTop = true } } @@ -109,28 +76,10 @@ fun AppNavGraph( composable(Routes.Dashboard.route) { val sharedViewModel: SharedViewModel = hiltViewModel(activity) - val dashboardViewModel: DashboardViewModel = hiltViewModel() - val dashboardUiState by dashboardViewModel.uiState.collectAsStateWithLifecycle() - val deviceInfoViewModel: DeviceInfoViewModel = hiltViewModel() - val deviceInfo by deviceInfoViewModel.uiState.collectAsStateWithLifecycle() - val tmsSetupViewModel: TmsSetupViewModel = hiltViewModel() - androidx.compose.runtime.LaunchedEffect(Unit) { deviceInfoViewModel.loadDeviceInfo() } - androidx.compose.runtime.LaunchedEffect(tmsSetupViewModel) { - tmsSetupViewModel.onSyncCompleted.collect { - dashboardViewModel.refreshLastSyncTime() - dashboardViewModel.loadCarouselUrls() - } - } - androidx.compose.runtime.LaunchedEffect(tmsSetupViewModel) { - tmsSetupViewModel.navigateToDisable.collect { message -> - navController.navigate(Routes.Disable.createRoute(message)) { - launchSingleTop = true - } - } - } + val transProcessViewModel: TransProcessViewModel = hiltViewModel(activity) + + transProcessViewModel.resetTransactionStatus() DashboardScreen2( - dashboardUiState = dashboardUiState, - deviceInfo = deviceInfo, onNavigateAmount = { action -> if(action == "Sale"){ sharedViewModel.transactionsType.value = TransactionsType.SALE; @@ -146,6 +95,11 @@ fun AppNavGraph( launchSingleTop = true } }, + onNavigateSeeMore = { + navController.navigate(Routes.SeeMore.route) { + launchSingleTop = true + } + }, onNavigateSettlement = { navController.navigate(Routes.Settlement.route) { launchSingleTop = true @@ -155,47 +109,41 @@ fun AppNavGraph( navController.navigate(Routes.Version.route) }, onNavigateFunctions = { - navController.navigate(Routes.Password.createRoute(Routes.Functions.route, PasswordType.SETTING)) { + navController.navigate(Routes.Functions.route) { launchSingleTop = true } - }, - onNavigateHistory = { - navController.navigate(Routes.Password.createRoute(Routes.History.route, PasswordType.SYSTEM)) { - launchSingleTop = true - } - }, - onNavigateAction = { action -> - when (action) { - "Void" -> { - sharedViewModel.transactionsType.value = TransactionsType.VOID - navController.navigate(Routes.Password.createRoute(Routes.VoidTrace.route, PasswordType.SYSTEM)) { - launchSingleTop = true - } - } - "Pre-Auth Void" -> navController.navigate(Routes.Password.createRoute(Routes.Amount.createRoute(action), PasswordType.SYSTEM)) { - launchSingleTop = true - } - "Pre-Auth Complete Void" -> { - sharedViewModel.transactionsType.value = TransactionsType.PRE_AUTH_COMPLETE_VOID - navController.navigate(Routes.Password.createRoute(Routes.VoidTrace.route, PasswordType.SYSTEM)) { - launchSingleTop = true - } - } - "Refund" -> navController.navigate(Routes.Password.createRoute(Routes.Amount.createRoute(action), PasswordType.SYSTEM)) { - launchSingleTop = true - } - else -> navController.navigate(Routes.Amount.createRoute(action)) { launchSingleTop = true } - } - }, - onNavigateNotifications = { - navController.navigate(Routes.NotificationList.route) { launchSingleTop = true } - }, - onClickLastSync = { - tmsSetupViewModel.downloadConfigs() } ) } + composable(Routes.SeeMore.route) { + val sharedViewModel: SharedViewModel = hiltViewModel(activity) + SeeMoreScreen( + onBack = { navController.popBackStack() }, + onNavigateAmount = { action -> + when (action) { + "Void" -> { + sharedViewModel.transactionsType.value = TransactionsType.VOID + navController.navigate(Routes.VoidTrace.route) { + launchSingleTop = true + } + } + "Pre-Auth Complete Void" -> { + sharedViewModel.transactionsType.value = TransactionsType.PRE_AUTH_COMPLETE_VOID + navController.navigate(Routes.VoidTrace.route) { + launchSingleTop = true + } + } + else -> { + navController.navigate(Routes.Amount.createRoute(action)) { + launchSingleTop = true + } + } + } + } + ) + } + composable(Routes.Version.route){ val deviceInfoViewModel: DeviceInfoViewModel = hiltViewModel(); VersionScreen( @@ -204,57 +152,18 @@ fun AppNavGraph( ) } - composable( - route = Routes.Password.route, - arguments = listOf( - navArgument("destination") { type = NavType.StringType }, - navArgument("passwordType") { type = NavType.StringType } - ) - ) { backStackEntry -> - val destination = Uri.decode(backStackEntry.arguments?.getString("destination").orEmpty()) - val passwordType = backStackEntry.arguments?.getString("passwordType").orEmpty() - InputPassword( - passwordType = passwordType, - onBack = { navController.popBackStack() }, - onPasswordCorrect = { - navController.navigate(destination) { - popUpTo(Routes.Password.route) { inclusive = true } - launchSingleTop = true - } - } - ) - } - composable(Routes.Functions.route) { FunctionsScreen( onBack = { navController.popBackStack() } ) } - composable(Routes.History.route) { - val sharedViewModel: SharedViewModel = hiltViewModel(activity) - val transResultViewModel: TransactionResultViewModel = hiltViewModel(activity) - HistoryRoute( - sharedViewModel = sharedViewModel, - onBack = { navController.popBackStack() }, - onNavigatePrintReceipt = { - transResultViewModel.onEvent( - TransactionResultEvent.Start, - sharedViewModel - ) - navController.navigate(Routes.PrintReceipt.route) { - launchSingleTop = true - } - } - ) - } - composable(Routes.VoidTrace.route) { val voidViewModel: VoidViewModel = hiltViewModel() val sharedViewModel: SharedViewModel = hiltViewModel(activity) VoidTraceScreen( - voidViewModel = voidViewModel, sharedViewModel = sharedViewModel, + voidViewModel = voidViewModel, onNavigateTranDetail = { trace -> navController.navigate(Routes.VoidTranDetail.createRoute(trace)) { launchSingleTop = true @@ -311,6 +220,7 @@ fun AppNavGraph( payDetail.transType = TransactionsType.PRE_AUTH_COMPLETE_VOID.name payDetail.transactionType = TransactionsType.PRE_AUTH_COMPLETE_VOID.value } + val tradeData = TradeData() tradeData.payDetail = payDetail transProcessViewModel.setTradeData(tradeData) @@ -414,14 +324,7 @@ fun AppNavGraph( CardWaitingScreen( viewModel = cardWaitingViewModel, amount = formatAmountForDisplay(sharedViewModel.amount.value), - onManualEntry = { - navController.navigate(Routes.ManualEntry.route) { - popUpTo(Routes.CardWaiting.route) { - inclusive = true - } - launchSingleTop = true - } - }, + onManualEntry = {}, onProcessingCard = { navController.navigate(Routes.ProcessingCard.route) { popUpTo(Routes.CardWaiting.route) { @@ -517,11 +420,11 @@ fun AppNavGraph( composable(Routes.InputRrn.route) { val sharedViewModel: SharedViewModel = hiltViewModel(activity) - val transProcessViewModel: TransProcessViewModel = hiltViewModel(activity) val rrnViewModel: RRNViewModel = hiltViewModel(activity) + val transProcessViewModel: TransProcessViewModel = hiltViewModel(activity) InputRrnRoute( - rrnViewModel = rrnViewModel, transProcessViewModel = transProcessViewModel, + rrnViewModel = rrnViewModel, sharedViewModel = sharedViewModel, onBack = { navController.popBackStack() }, onNavigateProcessing = { @@ -535,27 +438,6 @@ fun AppNavGraph( ) } - composable(Routes.ManualEntry.route) { - val sharedViewModel: SharedViewModel = hiltViewModel(activity) - val transProcessViewModel: TransProcessViewModel = hiltViewModel(activity) - val pinPadViewModel: PinPadViewModel = hiltViewModel(activity) - InputManualCardRoute( - transProcessViewModel = transProcessViewModel, - sharedViewModel = sharedViewModel, - pinPadViewModel = pinPadViewModel, - onBack = { navController.popBackStack() }, - onNavigatePinPad = { - pinPadViewModel.resetSessionState() - navController.navigate(Routes.PinPad.route) { - popUpTo(Routes.ProcessingCard.route) { - inclusive = true - } - launchSingleTop = true - } - }, - ) - } - composable(Routes.Processing.route) { val sharedViewModel: SharedViewModel = hiltViewModel(activity) val transProcessViewModel: TransProcessViewModel = hiltViewModel(activity) @@ -633,34 +515,6 @@ fun AppNavGraph( } ) } - - composable(Routes.NotificationList.route) { - val notificationViewModel: NotificationViewModel = hiltViewModel() - NotificationListScreen( - viewModel = notificationViewModel, - onBack = { navController.popBackStack() }, - onNavigateDetail = { id -> - navController.navigate(Routes.NotificationDetail.createRoute(id)) { - launchSingleTop = true - } - } - ) - } - - composable( - route = Routes.NotificationDetail.route, - arguments = listOf( - navArgument("notificationId") { type = NavType.IntType } - ) - ) { backStackEntry -> - val notificationViewModel: NotificationViewModel = hiltViewModel() - val id = backStackEntry.arguments?.getInt("notificationId") ?: return@composable - NotificationDetailScreen( - viewModel = notificationViewModel, - notificationId = id, - onBack = { navController.popBackStack() } - ) - } } } diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/sending_to_host/SendingToHostRoute.kt b/app/src/main/java/com/mob/utsmyanmar/ui/sending_to_host/SendingToHostRoute.kt index f3ce5a9..ff5d20e 100644 --- a/app/src/main/java/com/mob/utsmyanmar/ui/sending_to_host/SendingToHostRoute.kt +++ b/app/src/main/java/com/mob/utsmyanmar/ui/sending_to_host/SendingToHostRoute.kt @@ -8,12 +8,15 @@ import com.mob.utsmyanmar.viewmodel.SharedViewModel import com.mob.utsmyanmar.viewmodel.TransProcessViewModel import kotlinx.coroutines.delay import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.setValue -import androidx.compose.runtime.saveable.rememberSaveable +import com.mob.utsmyanmar.ui.transaction_result.TransactionResultState +import com.mob.utsmyanmar.viewmodel.ProcessingTransaction +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow +import androidx.compose.runtime.collectAsState import com.mob.utsmyanmar.model.TransactionStatus import com.mob.utsmyanmar.ui.settlement.SettlementViewModel import com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType +import kotlinx.coroutines.channels.Channel private const val MOCK_HOST_DELAY_MS = 2000L @@ -32,7 +35,6 @@ fun ProcessingRoute( val settlementStatus by settlementViewModel.uiState.collectAsStateWithLifecycle() - if(sharedViewModel.transactionsType.value == TransactionsType.SETTLEMENT) { LaunchedEffect(Unit) { settlementViewModel.startSettlementProcess() @@ -50,6 +52,7 @@ fun ProcessingRoute( } } else { LaunchedEffect(Unit) { +// transProcessViewModel.resetTransactionStatus() transProcessViewModel.startOnlineProcess() } @@ -64,15 +67,10 @@ fun ProcessingRoute( sharedViewModel.payDetail.value = transProcessViewModel.payDetailResult.value onNavigateTransactionResult() } - TransResultStatus.REVERSAL_SUCCESS , - TransResultStatus.REVERSAL_FAIL -> { - delay(2500) - onNavigateMain() - } + TransResultStatus.REVERSAL_SUCCESS -> onNavigateMain() + TransResultStatus.REVERSAL_FAIL -> onNavigateMain() else -> {} } - - } } @@ -81,6 +79,7 @@ fun ProcessingRoute( + if(sharedViewModel.transactionsType.value == TransactionsType.SETTLEMENT) { ProcessingScreen(settlementStatus.processingState) } else {