version screen

This commit is contained in:
moon 2026-05-27 16:55:59 +06:30
parent f80c7c5d1b
commit 4aebd825d2
8 changed files with 252 additions and 4 deletions

View File

@ -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 { }
}

View File

@ -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()
}

View File

@ -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
)

View File

@ -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"
}
}
}

View File

@ -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()

View File

@ -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")
}

View File

@ -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

View File

@ -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()
)
}