From 73610783694a04e17d2e35f85fd568040e179163 Mon Sep 17 00:00:00 2001 From: moon <56061215+MgKyawLay@users.noreply.github.com> Date: Wed, 10 Jun 2026 15:55:40 +0630 Subject: [PATCH] function settings screen added --- .../ui/dashboard/DashboardScreen2.kt | 2 + .../ui/functions/FunctionsScreen.kt | 235 ++++++++++++++++++ .../utsmyanmar/ui/navigation/AppNavGraph.kt | 16 +- .../mob/utsmyanmar/ui/navigation/Routes.kt | 1 + .../main/res/drawable/ic_address_global.xml | 9 + .../res/drawable/ic_circle_download_arrow.xml | 12 + app/src/main/res/drawable/ic_clear.xml | 9 + .../main/res/drawable/ic_database_config.xml | 52 ++++ app/src/main/res/drawable/ic_device_info.xml | 28 +++ app/src/main/res/drawable/ic_refresh.xml | 9 + 10 files changed, 371 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/com/mob/utsmyanmar/ui/functions/FunctionsScreen.kt create mode 100644 app/src/main/res/drawable/ic_address_global.xml create mode 100644 app/src/main/res/drawable/ic_circle_download_arrow.xml create mode 100644 app/src/main/res/drawable/ic_clear.xml create mode 100644 app/src/main/res/drawable/ic_database_config.xml create mode 100644 app/src/main/res/drawable/ic_device_info.xml create mode 100644 app/src/main/res/drawable/ic_refresh.xml diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/dashboard/DashboardScreen2.kt b/app/src/main/java/com/mob/utsmyanmar/ui/dashboard/DashboardScreen2.kt index 9ea31d9..05a2a6d 100644 --- a/app/src/main/java/com/mob/utsmyanmar/ui/dashboard/DashboardScreen2.kt +++ b/app/src/main/java/com/mob/utsmyanmar/ui/dashboard/DashboardScreen2.kt @@ -45,6 +45,7 @@ fun DashboardScreen2( onNavigateSeeMore: () -> Unit = {}, onNavigateSettlement: () -> Unit = {}, onNavigateVersion: () -> Unit = {}, + onNavigateFunctions: () -> Unit = {}, deviceInfoViewModel: DeviceInfoViewModel = viewModel() ) { val deviceInfo by deviceInfoViewModel.uiState.collectAsState() @@ -234,6 +235,7 @@ fun DashboardScreen2( ) DrawerItem("Function", Icons.Default.Dashboard) { scope.launch { drawerState.close() } + onNavigateFunctions() } DrawerItem("Version", Icons.Default.Dashboard) { scope.launch { drawerState.close() } diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/functions/FunctionsScreen.kt b/app/src/main/java/com/mob/utsmyanmar/ui/functions/FunctionsScreen.kt new file mode 100644 index 0000000..3211b17 --- /dev/null +++ b/app/src/main/java/com/mob/utsmyanmar/ui/functions/FunctionsScreen.kt @@ -0,0 +1,235 @@ +package com.mob.utsmyanmar.ui.functions + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.ArrowBack +import androidx.compose.material.icons.filled.ChevronRight +import androidx.compose.material.icons.filled.OnDeviceTraining +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.ElevatedButton +import androidx.compose.material3.Icon +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.res.painterResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.mob.utsmyanmar.ui.components.appbar.AppBar +import com.mob.utsmyanmar.ui.preview.P2Preview +import com.mob.utsmyanmar.ui.preview.P3Preview +import com.mob.utsmyanmar.ui.theme.Color +import com.mob.utsmyanmar.R +@Composable +fun FunctionsScreen( + onBack: () -> Unit = {} +) { + Scaffold( + containerColor = Color.IvoryBeige, + topBar = { + AppBar( + title = "Settings", + icon = Icons.AutoMirrored.Filled.ArrowBack, + onIconClick = onBack + ) + } + ) { paddingValues -> + Column( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues) + .padding(16.dp).verticalScroll(rememberScrollState()), + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + Text(text = "General Settings") + FunctionButton( + onClick = {}, + title = "App Version", + subTitle = "1.0-uat", + leadingIcon = { + Icon( + modifier = Modifier.size(24.dp), + painter = painterResource(R.drawable.ic_device_info), + contentDescription = "icon", + tint = Color.LegacyRed + ) + } + ) + + FunctionButton( + onClick = {}, + title = "Host Config", + subTitle = "Detail for bound hosts", + leadingIcon = { + Icon( + modifier = Modifier.size(24.dp), + painter = painterResource(R.drawable.ic_database_config), + contentDescription = "icon", + tint = Color.LegacyRed + ) + }, + trailingIcon = { + Icon( + imageVector = Icons.Default.ChevronRight, + contentDescription = "icon", + tint = Color.LegacyRed + ) + } + ) + + Text(text = "System Configuration") + + FunctionButton( + onClick = {}, + title = "Clear Batch", + subTitle = "Detail for bound hosts", + leadingIcon = { + Icon( + modifier = Modifier.size(24.dp), + painter = painterResource(R.drawable.ic_refresh), + contentDescription = "icon", + tint = Color.LegacyRed + ) + }, + trailingIcon = { + Icon( + imageVector = Icons.Default.ChevronRight, + contentDescription = "icon", + tint = Color.LegacyRed + ) + } + ) + + FunctionButton( + onClick = {}, + title = "Clear Reversal", + subTitle = "Detail for bound hosts", + leadingIcon = { + Icon( + modifier = Modifier.size(24.dp), + painter = painterResource(R.drawable.ic_clear), + contentDescription = "icon", + tint = Color.LegacyRed + ) + }, + trailingIcon = { + Icon( + imageVector = Icons.Default.ChevronRight, + contentDescription = "icon", + tint = Color.LegacyRed + ) + } + ) + + FunctionButton( + onClick = {}, + title = "TMS Server Url", + subTitle = "Detail for bound hosts", + leadingIcon = { + Icon( + modifier = Modifier.size(24.dp), + painter = painterResource(R.drawable.ic_address_global), + contentDescription = "icon", + tint = Color.LegacyRed + ) + }, + ) + + FunctionButton( + onClick = {}, + title = "Download Config", + subTitle = "Download terminal config from host", + leadingIcon = { + Icon( + modifier = Modifier.size(24.dp), + painter = painterResource(R.drawable.ic_circle_download_arrow), + contentDescription = "icon", + tint = Color.LegacyRed + ) + }, + trailingIcon = { + Icon( + imageVector = Icons.Default.ChevronRight, + contentDescription = "icon", + tint = Color.LegacyRed + ) + } + ) + } + } +} + +@Composable +fun FunctionButton( + onClick: () -> Unit, + title: String, + subTitle: String, + leadingIcon: (@Composable () -> Unit)? = null, + trailingIcon: (@Composable () -> Unit)? = null, +) { + ElevatedButton( + onClick = onClick, + shape = RoundedCornerShape(12.dp), + colors = ButtonDefaults.buttonColors( + containerColor = Color.White, + contentColor = Color.Black + ), + modifier = Modifier.fillMaxWidth() + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 16.dp) + ) { + leadingIcon?.invoke() + Spacer(modifier = Modifier.width(12.dp)) + Column(modifier = Modifier + .weight(1f) + .padding(horizontal = 8.dp)) { + Text(text = title) + Text( + text = subTitle, + style = MaterialTheme.typography.bodySmall, + color = Color.Gray + ) + } + + trailingIcon?.invoke() + } + } +} + + +@P3Preview +@P2Preview +@Composable +fun PreviewFunctionsScreen() { + FunctionsScreen() +} + +@Preview +@Composable +fun PreviewFunctionButton() { + FunctionButton( + onClick = {}, + title = "title", + subTitle = "sub-title" + ) +} \ No newline at end of file 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 27c3f46..e1b3e35 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 @@ -37,6 +37,7 @@ 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.tms_setup.TmsSetupRoute import com.mob.utsmyanmar.ui.tms_setup.TmsSetupViewModel import com.mob.utsmyanmar.ui.version.VersionScreen @@ -79,7 +80,7 @@ fun AppNavGraph( sharedViewModel.transactionsType.value = TransactionsType.SALE; sharedViewModel.processCode.value = ProcessCode.SALE_PURCHASE + ProcessCode.SMART + ProcessCode.TO_ACCOUNT; } - + navController.navigate(Routes.Amount.createRoute(action)) { launchSingleTop = true } @@ -100,7 +101,12 @@ fun AppNavGraph( } }, onNavigateVersion = { - navController.navigate(Routes.Version.route); + navController.navigate(Routes.Version.route) + }, + onNavigateFunctions = { + navController.navigate(Routes.Functions.route) { + launchSingleTop = true + } } ) } @@ -130,6 +136,12 @@ fun AppNavGraph( ) } + composable(Routes.Functions.route) { + FunctionsScreen( + onBack = { navController.popBackStack() } + ) + } + composable(Routes.VoidTrace.route) { val voidViewModel: VoidViewModel = hiltViewModel() 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 3f3923d..c798df9 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 @@ -28,4 +28,5 @@ sealed class Routes(val route: String) { data object TransactionResult : Routes("transaction_result") data object PrintReceipt : Routes("print_receipt") data object Version : Routes("version") + data object Functions : Routes("functions") } diff --git a/app/src/main/res/drawable/ic_address_global.xml b/app/src/main/res/drawable/ic_address_global.xml new file mode 100644 index 0000000..d335b02 --- /dev/null +++ b/app/src/main/res/drawable/ic_address_global.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_circle_download_arrow.xml b/app/src/main/res/drawable/ic_circle_download_arrow.xml new file mode 100644 index 0000000..dfe40fa --- /dev/null +++ b/app/src/main/res/drawable/ic_circle_download_arrow.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_clear.xml b/app/src/main/res/drawable/ic_clear.xml new file mode 100644 index 0000000..327d968 --- /dev/null +++ b/app/src/main/res/drawable/ic_clear.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_database_config.xml b/app/src/main/res/drawable/ic_database_config.xml new file mode 100644 index 0000000..5ff7b01 --- /dev/null +++ b/app/src/main/res/drawable/ic_database_config.xml @@ -0,0 +1,52 @@ + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_device_info.xml b/app/src/main/res/drawable/ic_device_info.xml new file mode 100644 index 0000000..aad74f6 --- /dev/null +++ b/app/src/main/res/drawable/ic_device_info.xml @@ -0,0 +1,28 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_refresh.xml b/app/src/main/res/drawable/ic_refresh.xml new file mode 100644 index 0000000..147ea32 --- /dev/null +++ b/app/src/main/res/drawable/ic_refresh.xml @@ -0,0 +1,9 @@ + + +