signature pad fix

This commit is contained in:
moon 2026-07-17 14:52:46 +06:30
parent ee91e6f787
commit b3cb166f1a
3 changed files with 253 additions and 178 deletions

View File

@ -40,8 +40,8 @@ android {
dimension = "env" dimension = "env"
applicationIdSuffix = ".uat" applicationIdSuffix = ".uat"
versionNameSuffix = "-UAT" versionNameSuffix = "-UAT"
versionCode = 12 versionCode = 14
versionName = "3.0" versionName = "3.2"
buildConfigField("String", "ENV", "\"UAT\"") buildConfigField("String", "ENV", "\"UAT\"")
resValue("string", "app_name", "MOB-UAT") resValue("string", "app_name", "MOB-UAT")
} }

View File

@ -25,24 +25,25 @@ class DashboardMenuItem(
val onClick: () -> Unit val onClick: () -> Unit
) )
val settlementEnabled = false
val voidEnabled = true
val refundEnabled = true
val preAuthEnabled = true
val preAuthVoidEnabled = true
val preAuthCompleteEnabled = true
val preAuthCompleteVoidEnabled = true
val cashAdvEnabled = true
fun buildMenuItems( fun buildMenuItems(
onNavigateAmount: (String) -> Unit, onNavigateAmount: (String) -> Unit,
onNavigateSignOn: () -> Unit, onNavigateSignOn: () -> Unit,
onNavigateSettlement: () -> Unit, onNavigateSettlement: () -> Unit,
onNavigateHistory: () -> Unit, onNavigateHistory: () -> Unit,
onNavigateAction: (String) -> Unit onNavigateAction: (String) -> Unit
): List<DashboardMenuItem> = buildList { ): List<DashboardMenuItem> {
val sp = SystemParamsOperation.getInstance()
val settlementEnabled = sp.settlementStatus
val voidEnabled = sp.voidStatus
val refundEnabled = sp.refundStatus
val preAuthEnabled = sp.preAuthStatus
val preAuthVoidEnabled = sp.preAuthStatus
val preAuthCompleteEnabled = sp.preAuthStatus
val preAuthCompleteVoidEnabled = sp.preAuthStatus
val cashAdvEnabled = sp.cashAdvanceStatus
val mmqrEnabled = sp.mmqrStatus
return buildList {
val mmqrEnabled = SystemParamsOperation.getInstance().mmqrStatus
add( add(
DashboardMenuItem( DashboardMenuItem(
@ -228,6 +229,5 @@ fun buildMenuItems(
) { onNavigateAmount("Cash Adv") } ) { onNavigateAmount("Cash Adv") }
) )
} }
}
} }

View File

@ -1,6 +1,7 @@
package com.mob.utsmyanmar.ui.signature_pad package com.mob.utsmyanmar.ui.signature_pad
import android.graphics.Bitmap import android.graphics.Bitmap
import androidx.compose.foundation.background
import androidx.compose.foundation.border import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
@ -15,10 +16,13 @@ import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Card import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults import androidx.compose.material3.CardDefaults
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
@ -37,6 +41,8 @@ fun SignaturePad(
onConfirm: (Bitmap?, ByteArray?) -> Unit = { _, _ -> } onConfirm: (Bitmap?, ByteArray?) -> Unit = { _, _ -> }
) { ) {
var signaturePadAdapter: SignaturePadAdapter? = null var signaturePadAdapter: SignaturePadAdapter? = null
var selectedMode by remember { mutableStateOf(SignatureMode.Digital) }
val isManualMode = selectedMode == SignatureMode.Manual
val scaledWidth = 300 val scaledWidth = 300
@ -69,33 +75,102 @@ fun SignaturePad(
.padding(16.dp), .padding(16.dp),
verticalArrangement = Arrangement.spacedBy(16.dp) verticalArrangement = Arrangement.spacedBy(16.dp)
) { ) {
if (isManualMode) {
Card(
modifier = Modifier
.fillMaxWidth()
.height(200.dp),
shape = RoundedCornerShape(8.dp),
colors = CardDefaults.cardColors(containerColor = Color.White),
border = androidx.compose.foundation.BorderStroke(
width = 1.dp,
color = AppColor.Gray.copy(alpha = 0.35f)
)
) {
Column(
modifier = Modifier
.fillMaxSize()
.padding(16.dp),
verticalArrangement = Arrangement.Center,
horizontalAlignment = androidx.compose.ui.Alignment.CenterHorizontally
) {
Text(
text = "Manual Signature",
style = MaterialTheme.typography.titleMedium,
color = AppColor.Gray
)
Text(
text = "Customer need to sign on paper",
style = MaterialTheme.typography.bodySmall,
color = AppColor.Gray.copy(alpha = 0.7f)
)
}
}
} else {
SignaturePadView( SignaturePadView(
onReady = { signaturePadAdapter = it }, onReady = { signaturePadAdapter = it },
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.height(200.dp) .height(200.dp)
.border(width = 1.dp, color = AppColor.LegacyRed) .background(AppColor.White)
.border(width = 1.dp, color = AppColor.LegacyRed, shape = RoundedCornerShape(8.dp)),
) )
}
Column(
modifier = Modifier.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(12.dp)
) {
SignatureModeOption(
title = "Digital",
subtitle = "Sign on screen",
selected = !isManualMode,
onClick = { selectedMode = SignatureMode.Digital },
modifier = Modifier.fillMaxWidth()
)
SignatureModeOption(
title = "Manual",
subtitle = "Sign on paper",
selected = isManualMode,
onClick = { selectedMode = SignatureMode.Manual },
modifier = Modifier.fillMaxWidth()
)
}
Row( Row(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(12.dp) horizontalArrangement = Arrangement.spacedBy(12.dp)
) { ) {
OutlinedButton( Button(
onClick = { signaturePadAdapter?.clear() }, onClick = {
if (!isManualMode) {
signaturePadAdapter?.clear()
}
},
colors = ButtonDefaults.buttonColors(
containerColor = AppColor.White,
contentColor = Color.White
),
modifier = Modifier modifier = Modifier
.weight(1f) .weight(1f)
.height(50.dp) .height(50.dp),
enabled = !isManualMode
) { ) {
Text("Clear") Text("Clear", color = AppColor.Black)
} }
Button( Button(
onClick = { onClick = {
if (isManualMode) {
onConfirm(null, null)
} else {
val rawBitmap = signaturePadAdapter?.getSignatureBitmap() val rawBitmap = signaturePadAdapter?.getSignatureBitmap()
val bitmap = rawBitmap?.let { scaleBitmap(it) } val bitmap = rawBitmap?.let { scaleBitmap(it) }
val signatureBlob = bitmap?.let { bitmapToBlob(it) } val signatureBlob = bitmap?.let { bitmapToBlob(it) }
onConfirm(bitmap, signatureBlob) onConfirm(bitmap, signatureBlob)
}
}, },
modifier = Modifier modifier = Modifier
.weight(1f) .weight(1f)