Compare commits

..

3 Commits

Author SHA1 Message Date
moon
48add55380 add reprint in detail 2026-07-01 23:01:03 +06:30
moon
97d8d2abd9 font applied 2026-07-01 22:06:11 +06:30
moon
714e7d9820 add bypass http 2026-07-01 21:47:53 +06:30
18 changed files with 71 additions and 40 deletions

View File

@ -43,8 +43,8 @@ android {
dimension = "env"
applicationIdSuffix = ".uat"
versionNameSuffix = "-UAT"
versionCode = 3
versionName = "2.1"
versionCode = 10
versionName = "2.8"
buildConfigField("String", "ENV", "\"UAT\"")
resValue("string", "app_name", "MOB-UAT")
}

View File

@ -29,6 +29,8 @@
<application
android:name="com.mob.utsmyanmar.MyApplication"
android:allowBackup="true"
android:networkSecurityConfig="@xml/network_security_config"
android:usesCleartextTraffic="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"

View File

@ -39,7 +39,6 @@ import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.text.TextRange
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.input.TextFieldValue
@ -233,8 +232,7 @@ private fun ManualCardEntryScreen(
singleLine = true,
modifier = Modifier.fillMaxWidth(),
textStyle = MaterialTheme.typography.bodyLarge.copy(
letterSpacing = 2.sp,
fontFamily = FontFamily.Monospace
letterSpacing = 2.sp
)
)
@ -263,8 +261,7 @@ private fun ManualCardEntryScreen(
.width(160.dp)
.focusRequester(expiryFocusRequester),
textStyle = MaterialTheme.typography.bodyLarge.copy(
letterSpacing = 2.sp,
fontFamily = FontFamily.Monospace
letterSpacing = 2.sp
)
)
}
@ -284,7 +281,6 @@ private fun ManualCardEntryScreen(
Text(
text = "**** **** **** ${pan.takeLast(4)}",
style = MaterialTheme.typography.bodyMedium,
fontFamily = FontFamily.Monospace,
letterSpacing = 1.5.sp
)
if (expiry.length == 4) {

View File

@ -35,6 +35,7 @@ import com.mob.utsmyanmar.ui.processing_card.ProcessingCardRoute
import com.mob.utsmyanmar.ui.processing_card.ProcessingCardViewModel
import com.mob.utsmyanmar.ui.refund_rrn.InputRrnRoute
import com.mob.utsmyanmar.ui.refund_rrn.RRNViewModel
import com.mob.utsmyanmar.ui.history_functions.prepareReprintPayDetail
import com.mob.utsmyanmar.ui.sale_void.TranDetailPage
import com.mob.utsmyanmar.ui.sale_void.VoidTraceScreen
import com.mob.utsmyanmar.ui.sale_void.VoidViewModel
@ -55,6 +56,7 @@ import com.mob.utsmyanmar.viewmodel.EmvTransactionProcessViewModel
import com.mob.utsmyanmar.viewmodel.SharedViewModel
import com.mob.utsmyanmar.viewmodel.TransProcessViewModel
import com.utsmyanmar.paylibs.model.TradeData
import com.utsmyanmar.paylibs.utils.enums.TransMenu
import com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType
@RequiresApi(Build.VERSION_CODES.N)
@ -132,7 +134,9 @@ fun AppNavGraph(
},
onNavigateRecentTransaction = { record ->
recentPayDetails.firstOrNull { it.PID == record.pid }?.let { payDetail ->
sharedViewModel.payDetail.value = payDetail
sharedViewModel.setTransMenu(TransMenu.REPRINT)
sharedViewModel.isReprint.value = true
sharedViewModel.payDetail.value = prepareReprintPayDetail(payDetail)
transResultViewModel.onEvent(
TransactionResultEvent.Start,
sharedViewModel

View File

@ -26,7 +26,6 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
@ -178,12 +177,12 @@ fun ReceiptPreview(
) {
Text(
text = "MOB POS",
style = MaterialTheme.typography.headlineLarge.copy(fontFamily = FontFamily.Monospace)
style = MaterialTheme.typography.headlineLarge
)
Spacer(modifier = Modifier.height(8.dp))
Text(
text = "Transaction Receipt",
style = MaterialTheme.typography.bodyMedium.copy(fontFamily = FontFamily.Monospace)
style = MaterialTheme.typography.bodyMedium
)
Spacer(modifier = Modifier.height(16.dp))
ReceiptDivider()
@ -202,14 +201,14 @@ fun ReceiptPreview(
Spacer(modifier = Modifier.height(8.dp))
Text(
text = "Thank You",
style = MaterialTheme.typography.titleMedium.copy(fontFamily = FontFamily.Monospace)
style = MaterialTheme.typography.titleMedium
)
Spacer(modifier = Modifier.height(4.dp))
Text(
text = "Please keep this receipt",
style = MaterialTheme.typography.bodySmall.copy(fontFamily = FontFamily.Monospace)
style = MaterialTheme.typography.bodySmall
)
}
}
@ -227,13 +226,13 @@ fun ReceiptRow(
) {
Text(
text = label,
style = MaterialTheme.typography.bodyMedium.copy(fontFamily = FontFamily.Monospace),
style = MaterialTheme.typography.bodyMedium,
color = Color.Gray
)
Text(
text = value,
style = MaterialTheme.typography.titleSmall.copy(fontFamily = FontFamily.Monospace)
style = MaterialTheme.typography.titleSmall
)
}
}
@ -245,7 +244,6 @@ fun ReceiptDivider() {
.fillMaxWidth()
.padding(vertical = 10.dp),
text = "--------------------------------",
fontFamily = FontFamily.Monospace,
color = Color.Gray
)
}

View File

@ -9,7 +9,6 @@ import com.mob.utsmyanmar.model.TransactionStatus
import com.mob.utsmyanmar.ui.settlement.SettlementViewModel
import com.mob.utsmyanmar.viewmodel.SharedViewModel
import com.mob.utsmyanmar.viewmodel.TransProcessViewModel
import com.utsmyanmar.paylibs.model.enums.TransCVM
import com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType
private const val MOCK_HOST_DELAY_MS = 2000L
@ -84,6 +83,6 @@ fun ProcessingRoute(
}
private fun requiresSignature(payDetail: com.utsmyanmar.paylibs.model.PayDetail?): Boolean {
return payDetail?.transCVM == TransCVM.SIGNATURE && !payDetail.isFreeSign
// return true;
// return payDetail?.transCVM == TransCVM.SIGNATURE && payDetail.isFreeSign == false
return true;
}

View File

@ -53,12 +53,11 @@ fun SignaturePad(
modifier: Modifier = Modifier,
signatureColor: Color = Color.Black,
onBack: () -> Unit = {},
// signatureBlob is null for Digital mode (using stored signature) or when nothing was drawn
onConfirm: (SignatureMode, Bitmap?, signatureBlob: ByteArray?) -> Unit = { _, _, _ -> }
) {
val paths = remember { mutableStateListOf<List<Offset>>() }
val currentPath = remember { mutableStateListOf<Offset>() }
var selectedMode by remember { mutableStateOf(SignatureMode.Manual) }
var selectedMode by remember { mutableStateOf(SignatureMode.Digital) }
var canvasSize by remember { mutableStateOf(Size.Zero) }
var strokeWidth = 6f
@ -67,16 +66,15 @@ fun SignaturePad(
currentPath.clear()
}
fun buildBitmap(): Bitmap? {
if (selectedMode == SignatureMode.Digital) return null
if (selectedMode == SignatureMode.Manual) return null
if (paths.isEmpty() && currentPath.isEmpty()) return null
if (canvasSize.width <= 0f || canvasSize.height <= 0f) return null
val bitmap =
createBitmap(canvasSize.width.toInt(), canvasSize.height.toInt(), Bitmap.Config.RGB_565)
val canvas = AndroidCanvas(bitmap)
canvas.drawColor(android.graphics.Color.WHITE) // fill white background first
canvas.drawColor(android.graphics.Color.WHITE)
val paint = Paint().apply {
color = android.graphics.Color.BLACK
@ -129,15 +127,23 @@ fun SignaturePad(
) {
Box(
modifier = Modifier
.fillMaxWidth(0.85f) // narrower than full width, adjust as needed
.height(180.dp) // fixed height instead of weight(1f)
.fillMaxWidth(0.85f)
.height(180.dp)
.align(Alignment.CenterHorizontally)
.background(Color.White, RoundedCornerShape(16.dp))
.background(
color = if (selectedMode == SignatureMode.Digital) {
Color.White
} else {
Color.White.copy(alpha = 0.55f)
},
shape = RoundedCornerShape(16.dp)
)
.padding(12.dp)
.onSizeChanged { size ->
canvasSize = Size(size.width.toFloat(), size.height.toFloat())
}
.pointerInput(Unit) {
.pointerInput(selectedMode) {
if (selectedMode == SignatureMode.Manual) return@pointerInput
detectDragGestures(
onDragStart = { startOffset ->
currentPath.add(startOffset)
@ -193,7 +199,7 @@ fun SignaturePad(
) {
SignatureModeOption(
title = "Manual Sign",
subtitle = "Customer signs on screen",
subtitle = "Signature on Paper",
selected = selectedMode == SignatureMode.Manual,
onClick = { selectedMode = SignatureMode.Manual },
modifier = Modifier.fillMaxWidth()
@ -203,7 +209,7 @@ fun SignaturePad(
SignatureModeOption(
title = "Digital Sign",
subtitle = "Use stored signature",
subtitle = "Draw on pad",
selected = selectedMode == SignatureMode.Digital,
onClick = { selectedMode = SignatureMode.Digital },
modifier = Modifier.fillMaxWidth()
@ -226,10 +232,6 @@ fun SignaturePad(
Button(
onClick = {
val bitmap = buildBitmap()
if (selectedMode == SignatureMode.Manual && bitmap == null) {
// nothing drawn yet on Manual mode — block confirm
return@Button
}
val signatureBlob = bitmap?.let { bitmapToBlob(it) }
onConfirm(selectedMode, bitmap, signatureBlob)
},
@ -297,4 +299,4 @@ fun SignaturePadPreview() {
MOBPOSTheme {
SignaturePad()
}
}
}

View File

@ -1,77 +1,96 @@
package com.mob.utsmyanmar.ui.theme
import androidx.compose.ui.text.font.Font
import androidx.compose.material3.Typography
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.sp
import com.mob.utsmyanmar.R
private val LibreBaskerville = FontFamily(
Font(R.font.libre_baskerville_regular, FontWeight.Normal)
)
val Typography = Typography(
displayLarge = TextStyle(
fontFamily = LibreBaskerville,
fontWeight = FontWeight.Bold,
fontSize = 32.sp,
lineHeight = 40.sp,
),
displayMedium = TextStyle(
fontFamily = LibreBaskerville,
fontWeight = FontWeight.Bold,
fontSize = 30.sp,
lineHeight = 38.sp,
),
headlineLarge = TextStyle(
fontFamily = LibreBaskerville,
fontWeight = FontWeight.Bold,
fontSize = 24.sp,
lineHeight = 32.sp,
),
headlineMedium = TextStyle(
fontFamily = LibreBaskerville,
fontWeight = FontWeight.Bold,
fontSize = 20.sp,
lineHeight = 28.sp,
),
titleLarge = TextStyle(
fontFamily = LibreBaskerville,
fontWeight = FontWeight.SemiBold,
fontSize = 22.sp,
lineHeight = 28.sp,
),
titleMedium = TextStyle(
fontFamily = LibreBaskerville,
fontWeight = FontWeight.SemiBold,
fontSize = 18.sp,
lineHeight = 26.sp,
),
titleSmall = TextStyle(
fontFamily = LibreBaskerville,
fontWeight = FontWeight.Medium,
fontSize = 14.sp,
lineHeight = 20.sp,
),
bodyLarge = TextStyle(
fontFamily = LibreBaskerville,
fontWeight = FontWeight.Normal,
fontSize = 16.sp,
lineHeight = 24.sp,
letterSpacing = 0.5.sp
),
bodyMedium = TextStyle(
fontFamily = LibreBaskerville,
fontWeight = FontWeight.Normal,
fontSize = 14.sp,
lineHeight = 20.sp,
),
bodySmall = TextStyle(
fontFamily = LibreBaskerville,
fontWeight = FontWeight.Normal,
fontSize = 12.sp,
lineHeight = 16.sp,
),
labelLarge = TextStyle(
fontFamily = LibreBaskerville,
fontWeight = FontWeight.Medium,
fontSize = 14.sp,
lineHeight = 20.sp,
),
labelMedium = TextStyle(
fontFamily = LibreBaskerville,
fontWeight = FontWeight.Medium,
fontSize = 12.sp,
lineHeight = 16.sp,
),
labelSmall = TextStyle(
fontFamily = LibreBaskerville,
fontWeight = FontWeight.Medium,
fontSize = 11.sp,
lineHeight = 16.sp,
letterSpacing = 0.5.sp
)
)
)

Binary file not shown.

View File

@ -1,4 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.MOBPOS" parent="android:style/Theme.Material.Light.NoActionBar"/>
<style name="Theme.MOBPOS" parent="android:style/Theme.Material.Light.NoActionBar">
<item name="fontFamily">@font/libre_baskerville_regular</item>
<item name="android:fontFamily">@font/libre_baskerville_regular</item>
</style>
</resources>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">posuat.myanmarorientalbank.com:5033</domain>
</domain-config>
</network-security-config>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -50,7 +50,7 @@ public abstract class BaseXPrint {
protected String currentTime;
protected static final String typeface_name = "jbm_semibold.ttf";
protected static final String typeface_name = "jetBrainsMonoRegular.ttf";
protected static final String MPU_AID = "A0000004820000000001";
protected static final String HOST_NAME_VM = "VISA/ MASTERCARD";

View File

@ -38,7 +38,7 @@ public class SystemParamsSettings implements Serializable {
private boolean checkExpSwitch = false;
// private String tmsAddress = "http://posuat.myanmarorientalbank.com:5033";
// private String tmsAddress = "http://posuat.myanmarorientalbank.com:5033/api/v1";
private String tmsAddress = "https://sirius-nest.utsmyanmar.com/api/v1";
// private String tmsAddress = "http://128.199.170.203";