diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/components/appbar/AppBar.kt b/app/src/main/java/com/mob/utsmyanmar/ui/components/appbar/AppBar.kt index 51ebc6d..dfb9a9e 100644 --- a/app/src/main/java/com/mob/utsmyanmar/ui/components/appbar/AppBar.kt +++ b/app/src/main/java/com/mob/utsmyanmar/ui/components/appbar/AppBar.kt @@ -1,7 +1,11 @@ package com.mob.utsmyanmar.ui.components.appbar -import android.graphics.drawable.Icon -import androidx.compose.material3.* +import androidx.compose.material3.CenterAlignedTopAppBar +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.font.FontWeight @@ -12,8 +16,8 @@ import com.mob.utsmyanmar.ui.theme.White @Composable fun AppBar( title: String, + icon: ImageVector? = null, onIconClick: (() -> Unit)? = null, - icon: ImageVector ) { CenterAlignedTopAppBar( title = { @@ -23,19 +27,21 @@ fun AppBar( fontWeight = FontWeight.SemiBold ) }, + navigationIcon = { - if (onIconClick != null) { + if (icon != null && onIconClick != null) { IconButton( onClick = onIconClick ) { Icon( - imageVector = icon, - "Appbar icon", + imageVector = icon, + contentDescription = "App bar icon", tint = White ) } } }, + colors = TopAppBarDefaults.topAppBarColors( containerColor = Primary ) 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 94b9e4c..aa86cec 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 @@ -18,6 +18,7 @@ import com.mob.utsmyanmar.ui.dashboard.DashboardScreen import com.mob.utsmyanmar.ui.pinpad.PinPadRoute 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.transaction_result.TransactionResultRoute import com.mob.utsmyanmar.viewmodel.CardReaderViewModel import com.mob.utsmyanmar.viewmodel.EmvTransactionProcessViewModel @@ -173,8 +174,8 @@ fun AppNavGraph( } }, onNavigatePrintReceipt = { - navController.navigate(Routes.Dashboard.route) { - popUpTo(Routes.Dashboard.route) { + navController.navigate(Routes.PrintReceipt.route) { + popUpTo(Routes.TransactionResult.route) { inclusive = false } launchSingleTop = true @@ -185,5 +186,18 @@ fun AppNavGraph( onShowPrinterDialog = {} ) } + + composable(Routes.PrintReceipt.route) { + PrintReceiptScreen( + onDone = { + navController.navigate(Routes.Dashboard.route) { + popUpTo(Routes.Dashboard.route) { + inclusive = false + } + launchSingleTop = true + } + } + ) + } } } diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/navigation/Routes.kt b/app/src/main/java/com/mob/utsmyanmar/ui/navigation/Routes.kt index 6f167f2..01a0d93 100644 --- a/app/src/main/java/com/mob/utsmyanmar/ui/navigation/Routes.kt +++ b/app/src/main/java/com/mob/utsmyanmar/ui/navigation/Routes.kt @@ -9,4 +9,5 @@ sealed class Routes(val route: String) { data object ProcessingCard : Routes("processing_card") data object PinPad : Routes("pin_pad") data object TransactionResult : Routes("transaction_result") + data object PrintReceipt : Routes("print_receipt") } diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/print_receipt/PrintReceiptScreen.kt b/app/src/main/java/com/mob/utsmyanmar/ui/print_receipt/PrintReceiptScreen.kt new file mode 100644 index 0000000..badc699 --- /dev/null +++ b/app/src/main/java/com/mob/utsmyanmar/ui/print_receipt/PrintReceiptScreen.kt @@ -0,0 +1,63 @@ +package com.mob.utsmyanmar.ui.print_receipt + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Button +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.mob.utsmyanmar.ui.components.appbar.AppBar + +@Composable +fun PrintReceiptScreen( + onDone: () -> Unit +) { + Scaffold( + topBar = { + AppBar(title = "Print Receipt") + } + ) { paddingValues -> + Column( + modifier = Modifier + .padding(paddingValues) + .fillMaxSize() + .padding(16.dp), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + text = "Print Receipt", + style = MaterialTheme.typography.titleLarge.copy( + fontSize = 24.sp, + fontWeight = FontWeight.SemiBold + ) + ) + + Button( + modifier = Modifier + .fillMaxWidth() + .padding(top = 24.dp), + onClick = onDone + ) { + Text(text = "Back to Dashboard") + } + } + } +} + +@Preview(showBackground = true, showSystemUi = true) +@Composable +fun PreviewPrintReceiptScreen() { + PrintReceiptScreen { } +} + diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/transaction_result/TransactionResultRoute.kt b/app/src/main/java/com/mob/utsmyanmar/ui/transaction_result/TransactionResultRoute.kt index eb7416f..3c82eec 100644 --- a/app/src/main/java/com/mob/utsmyanmar/ui/transaction_result/TransactionResultRoute.kt +++ b/app/src/main/java/com/mob/utsmyanmar/ui/transaction_result/TransactionResultRoute.kt @@ -27,6 +27,18 @@ fun TransactionResultRoute( ) } + LaunchedEffect(Unit) { + viewModel.uiEvent.collect { event -> + when (event) { + TransactionResultUiEvent.NavigateMain -> onNavigateMain() + TransactionResultUiEvent.NavigatePrintReceipt -> onNavigatePrintReceipt() + is TransactionResultUiEvent.ShowError -> onShowError(event.message) + is TransactionResultUiEvent.ShowSuccess -> onShowSuccess(event.message) + is TransactionResultUiEvent.ShowPrinterDialog -> onShowPrinterDialog(event.message) + } + } + } + TransactionResultScreen( state = state, onEvent = { diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/transaction_result/TransactionResultViewModel.kt b/app/src/main/java/com/mob/utsmyanmar/ui/transaction_result/TransactionResultViewModel.kt index 043af4f..bc83585 100644 --- a/app/src/main/java/com/mob/utsmyanmar/ui/transaction_result/TransactionResultViewModel.kt +++ b/app/src/main/java/com/mob/utsmyanmar/ui/transaction_result/TransactionResultViewModel.kt @@ -35,7 +35,7 @@ class TransactionResultViewModel @Inject constructor( companion object { private const val TAG = "TransactionResultVM" - private const val RESULT_TIMEOUT = 1000L + private const val RESULT_TIMEOUT = 3000L } private val _state = MutableStateFlow(TransactionResultState()) @@ -278,4 +278,4 @@ class TransactionResultViewModel @Inject constructor( _uiEvent.send(event) } } -} \ No newline at end of file +}