From 4aebd825d27c2f6147a35269f8f2474d872ea055 Mon Sep 17 00:00:00 2001 From: moon <56061215+MgKyawLay@users.noreply.github.com> Date: Wed, 27 May 2026 16:55:59 +0630 Subject: [PATCH] version screen --- .../mob/utsmyanmar/ui/amount/AmountScreen.kt | 9 +- .../ui/dashboard/DashboardScreen2.kt | 20 ++ .../ui/device_info/DeviceInfoUiState.kt | 2 + .../ui/device_info/DeviceInfoViewModel.kt | 29 ++- .../utsmyanmar/ui/navigation/AppNavGraph.kt | 13 ++ .../mob/utsmyanmar/ui/navigation/Routes.kt | 1 + .../com/mob/utsmyanmar/ui/preview/Preview.kt | 5 +- .../com/mob/utsmyanmar/ui/version/Version.kt | 177 ++++++++++++++++++ 8 files changed, 252 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/com/mob/utsmyanmar/ui/version/Version.kt diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/amount/AmountScreen.kt b/app/src/main/java/com/mob/utsmyanmar/ui/amount/AmountScreen.kt index 0e52d9b..53a434b 100644 --- a/app/src/main/java/com/mob/utsmyanmar/ui/amount/AmountScreen.kt +++ b/app/src/main/java/com/mob/utsmyanmar/ui/amount/AmountScreen.kt @@ -42,6 +42,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp 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 @Composable @@ -338,7 +339,13 @@ private fun appendAmountValue(current: String, value: String): String { @P2Preview @Composable -fun PreviewAmountScreen() { +fun PreviewAmountScreen2() { + AmountScreen { } +} + +@P3Preview +@Composable +fun PreviewAmountScreen3() { AmountScreen { } } 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 d635937..5a98547 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 @@ -73,6 +73,7 @@ import com.mob.utsmyanmar.R import com.mob.utsmyanmar.ui.components.appbar.AppBar import com.mob.utsmyanmar.ui.device_info.DeviceInfoViewModel import com.mob.utsmyanmar.ui.preview.P2Preview +import com.mob.utsmyanmar.ui.preview.P3Preview import com.mob.utsmyanmar.ui.theme.Color import com.sunmi.pay.hardware.aidl.AidlConstants import com.utsmyanmar.baselib.BaseApplication @@ -87,6 +88,7 @@ fun DashboardScreen2( onNavigateSignOn: () -> Unit = {}, onNavigateSeeMore: () -> Unit = {}, onNavigateSettlement: () -> Unit = {}, + onNavigateVersion:() -> Unit = {}, deviceInfoViewModel: DeviceInfoViewModel = viewModel() ) { val deviceInfo by deviceInfoViewModel.uiState.collectAsState() @@ -283,6 +285,18 @@ fun DashboardScreen2( scope.launch { drawerState.close() } openHostActionDialog("Log-Off") } + Text( + text = "System Management", + fontWeight = FontWeight.Medium, + modifier = Modifier.padding(horizontal = 16.dp) + ) + DrawerItem("Function", Icons.Default.Dashboard) { + scope.launch { drawerState.close()} + } + DrawerItem("Version", Icons.Default.Dashboard) { + scope.launch { drawerState.close()} + onNavigateVersion(); + } } } ) { @@ -610,3 +624,9 @@ private fun MenuCard( fun PreviewDashboardScreen2() { DashboardScreen2() } + +@P3Preview +@Composable +fun PreviewDashboardScreen3() { + DashboardScreen2() +} diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/device_info/DeviceInfoUiState.kt b/app/src/main/java/com/mob/utsmyanmar/ui/device_info/DeviceInfoUiState.kt index 42e7e5e..9499857 100644 --- a/app/src/main/java/com/mob/utsmyanmar/ui/device_info/DeviceInfoUiState.kt +++ b/app/src/main/java/com/mob/utsmyanmar/ui/device_info/DeviceInfoUiState.kt @@ -6,6 +6,8 @@ data class DeviceInfoUiState( val serialNumber: String = "", val deviceModel: String = "", val finalVersion: String = "", + val payHardwareVersion: String = "", + val romVersion: String = "", val isLoading: Boolean = false, val errorMessage: String? = null ) \ No newline at end of file diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/device_info/DeviceInfoViewModel.kt b/app/src/main/java/com/mob/utsmyanmar/ui/device_info/DeviceInfoViewModel.kt index 1ce39ed..abc871a 100644 --- a/app/src/main/java/com/mob/utsmyanmar/ui/device_info/DeviceInfoViewModel.kt +++ b/app/src/main/java/com/mob/utsmyanmar/ui/device_info/DeviceInfoViewModel.kt @@ -6,9 +6,10 @@ import com.utsmyanmar.baselib.BaseApplication import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow +import sunmi.sunmiui.utils.LogUtil class DeviceInfoViewModel : ViewModel() { - + var TAG = DeviceInfoViewModel::class.simpleName; private val _uiState = MutableStateFlow(DeviceInfoUiState()) val uiState = _uiState.asStateFlow() @@ -21,6 +22,9 @@ class DeviceInfoViewModel : ViewModel() { val serialNo = getParams(AidlConstants.SysParam.SN) val deviceModel = getParams(AidlConstants.SysParam.DEVICE_MODEL) val finalVersion = SystemParamsOperation.getInstance().finalVersion ?: "" + val payHardwareVersion = getPayHardwareVersion() + val romVersion = getRomVersion() + _uiState.value = DeviceInfoUiState( hardwareVersion = hardwareVersion, @@ -28,6 +32,8 @@ class DeviceInfoViewModel : ViewModel() { serialNumber = serialNo, deviceModel = deviceModel, finalVersion = finalVersion, + payHardwareVersion = payHardwareVersion, + romVersion = romVersion, isLoading = false ) @@ -49,4 +55,25 @@ class DeviceInfoViewModel : ViewModel() { "" } } + + private fun getPayHardwareVersion():String { + return try { + BaseApplication.getInstance().applicationContext.packageManager.getPackageInfo( + "com.sunmi.pay.hardware_v3", + 0 + ).versionName ?: "PHV?" + } catch (e: Exception) { + e.printStackTrace() + "PHV?" + } + } + + private fun getRomVersion():String { + return try { + android.os.Build.VERSION.RELEASE ?: "UNKNOWN" + }catch (e: Exception){ + LogUtil.d(TAG, "get rom version error " + e) + "UNKNOWN" + } + } } \ 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 1411541..7d70274 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 @@ -17,6 +17,7 @@ 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.SeeMoreScreen +import com.mob.utsmyanmar.ui.device_info.DeviceInfoViewModel import com.mob.utsmyanmar.ui.pinpad.PinPadRoute import com.mob.utsmyanmar.ui.processing_card.ProcessingCardRoute import com.mob.utsmyanmar.ui.processing_card.ProcessingCardViewModel @@ -33,6 +34,7 @@ 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.version.VersionScreen import com.mob.utsmyanmar.viewmodel.SharedViewModel import com.mob.utsmyanmar.viewmodel.TransProcessViewModel import com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType @@ -75,6 +77,9 @@ fun AppNavGraph( navController.navigate(Routes.Settlement.route) { launchSingleTop = true } + }, + onNavigateVersion = { + navController.navigate(Routes.Version.route); } ) } @@ -95,6 +100,14 @@ fun AppNavGraph( } ) } + + composable(Routes.Version.route){ + val deviceInfoViewModel: DeviceInfoViewModel = hiltViewModel(); + VersionScreen( + onBack = {navController.popBackStack()}, + deviceInfoViewModel = deviceInfoViewModel + ) + } 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 7615e6a..3799537 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 @@ -26,4 +26,5 @@ sealed class Routes(val route: String) { data object Processing : Routes("processing") data object TransactionResult : Routes("transaction_result") data object PrintReceipt : Routes("print_receipt") + data object Version : Routes("version") } diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/preview/Preview.kt b/app/src/main/java/com/mob/utsmyanmar/ui/preview/Preview.kt index 3a45370..135c3d7 100644 --- a/app/src/main/java/com/mob/utsmyanmar/ui/preview/Preview.kt +++ b/app/src/main/java/com/mob/utsmyanmar/ui/preview/Preview.kt @@ -13,7 +13,8 @@ annotation class P2Preview @Preview( name = "P3", - device = "spec:width=720px,height=1440px,dpi=320", - showBackground = true + device = "spec:width=720px,height=1600px,dpi=320", + showBackground = true, + showSystemUi = true ) annotation class P3Preview \ No newline at end of file diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/version/Version.kt b/app/src/main/java/com/mob/utsmyanmar/ui/version/Version.kt new file mode 100644 index 0000000..42205e8 --- /dev/null +++ b/app/src/main/java/com/mob/utsmyanmar/ui/version/Version.kt @@ -0,0 +1,177 @@ +package com.mob.utsmyanmar.ui.version + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +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.shape.CircleShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ChevronLeft +import androidx.compose.material.icons.filled.Square +import androidx.compose.material3.Card +import androidx.compose.material3.CardColors +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.Icon +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.viewmodel.compose.viewModel +import com.mob.utsmyanmar.ui.components.appbar.AppBar +import com.mob.utsmyanmar.ui.device_info.DeviceInfoViewModel +import com.mob.utsmyanmar.ui.preview.P3Preview +import com.mob.utsmyanmar.ui.theme.Color + +@Composable +fun VersionScreen( + onBack: () -> Unit, + deviceInfoViewModel: DeviceInfoViewModel +) { + + val deviceInfo by deviceInfoViewModel.uiState.collectAsState(); + val itemSpace = 20.dp; + + LaunchedEffect(Unit) { + deviceInfoViewModel.loadDeviceInfo(); + } + + Scaffold( + topBar = { + AppBar( + title = "Version", + onIconClick = onBack, + icon = Icons.Default.ChevronLeft + ) + }, + containerColor = Color.IvoryBeige + ) + { paddingValues -> + Column( + modifier = Modifier + .padding(paddingValues) + .fillMaxSize() + .padding(16.dp) + ) { + Text("Device Information") + Spacer(Modifier.height(16.dp)) + Card( + colors = CardDefaults.cardColors( + containerColor = Color.White + ) + ) { + Column( + modifier = Modifier.padding(16.dp), + ) { + Item( + title = "PROD NAME", + value = deviceInfo.deviceModel, + icon = Icons.Default.Square + ) + Spacer(Modifier.height(itemSpace)) + Item( + title = "TERMINAL SERIAL", + value = deviceInfo.serialNumber, + icon = Icons.Default.Square + ) + Spacer(Modifier.height(itemSpace)) + Item( + title = "HARDWARE VER", + value = deviceInfo.hardwareVersion, + icon = Icons.Default.Square + ) + Spacer(Modifier.height(itemSpace)) + Item( + title = "FIRMWARE VER", + value = deviceInfo.firmwareVersion, + icon = Icons.Default.Square + ) + Spacer(Modifier.height(itemSpace)) + Item( + title = "S/W VER", + value = deviceInfo.finalVersion, + icon = Icons.Default.Square + ) + Spacer(Modifier.height(itemSpace)) + Item( + title = "PAYHARDWARE SERVICE VER", + value = deviceInfo.payHardwareVersion, + icon = Icons.Default.Square + ) + Spacer(Modifier.height(itemSpace)) + Item( + title = "ROM VER", + value = deviceInfo.romVersion, + icon = Icons.Default.Square + ) + } + } + } + } +} + +@Composable +fun Item( + title: String, + value: String, + icon: ImageVector +) { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically, + ) { + Row( + modifier = Modifier.weight(1.4f), + horizontalArrangement = Arrangement.spacedBy(12.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Box( + modifier = Modifier.size(40.dp).background( + color = Color.CrimsonRed.copy(alpha = 0.2f), + shape = CircleShape + ), + contentAlignment = Alignment.Center + ){ + Icon( + imageVector = icon, + contentDescription = "icon" + ) + } + + Text(text = title) + } + Row( + modifier = Modifier.weight(1f), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Text(text = ":") + Text(text = value) + } + } +} + +@P3Preview +@Composable +fun P3PreviewVersionScreen() { + VersionScreen( + onBack = {}, + deviceInfoViewModel = hiltViewModel() + ) +} \ No newline at end of file