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 ce7ee3f..e14fc09 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
@@ -25,14 +25,8 @@ import androidx.compose.material.icons.filled.BarChart
import androidx.compose.material.icons.filled.Check
import androidx.compose.material.icons.filled.ChevronRight
import androidx.compose.material.icons.filled.Dashboard
-import androidx.compose.material.icons.filled.GridView
-import androidx.compose.material.icons.filled.History
-import androidx.compose.material.icons.filled.Link
import androidx.compose.material.icons.filled.Menu
-import androidx.compose.material.icons.filled.PointOfSale
-import androidx.compose.material.icons.filled.QrCode
import androidx.compose.material.icons.filled.Sync
-import androidx.compose.material.icons.filled.Wallet
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.HorizontalDivider
@@ -61,7 +55,6 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.layout.ContentScale
-import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
@@ -75,8 +68,6 @@ 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
import com.utsmyanmar.paylibs.sign_on.EchoTestProcess
import com.utsmyanmar.paylibs.sign_on.SignOnListener
import kotlinx.coroutines.delay
@@ -88,15 +79,15 @@ fun DashboardScreen2(
onNavigateSignOn: () -> Unit = {},
onNavigateSeeMore: () -> Unit = {},
onNavigateSettlement: () -> Unit = {},
- onNavigateVersion:() -> Unit = {},
+ onNavigateVersion: () -> Unit = {},
deviceInfoViewModel: DeviceInfoViewModel = viewModel()
) {
val deviceInfo by deviceInfoViewModel.uiState.collectAsState()
-
+
LaunchedEffect(Unit) {
- deviceInfoViewModel.loadDeviceInfo();
+ deviceInfoViewModel.loadDeviceInfo()
}
-
+
val drawerState = rememberDrawerState(initialValue = DrawerValue.Closed)
val scope = rememberCoroutineScope()
val mainHandler = remember { Handler(Looper.getMainLooper()) }
@@ -104,8 +95,8 @@ fun DashboardScreen2(
var activeHostAction by remember { mutableStateOf("Log-On") }
var isHostActionRunning by remember { mutableStateOf(false) }
var dialogMessage by remember { mutableStateOf("") }
-
- val isOnline = true;
+
+ val isOnline = true
fun confirmationMessage(action: String) = "Do you want to start ${action.lowercase()}?"
fun processingMessage(action: String) = "Sending ${action.lowercase()} request to host..."
@@ -127,18 +118,13 @@ fun DashboardScreen2(
if (!isHostActionRunning) {
showHostActionDialog = false
}
- },
- title = {
+ }, title = {
Text(
- text = activeHostAction,
- color = Color.LegacyRed,
- fontWeight = FontWeight.Bold
+ text = activeHostAction, color = Color.LegacyRed, fontWeight = FontWeight.Bold
)
- },
- text = {
+ }, text = {
Text(text = dialogMessage)
- },
- confirmButton = {
+ }, confirmButton = {
TextButton(
onClick = {
if (isHostActionRunning) return@TextButton
@@ -159,66 +145,58 @@ fun DashboardScreen2(
else -> signOnProcess.enqueueLogOn()
}
- request
- .startSignOn(object : SignOnListener {
- override fun onSuccessSignOn() {
+ request.startSignOn(object : SignOnListener {
+ override fun onSuccessSignOn() {
+ mainHandler.post {
+ isHostActionRunning = false
+ dialogMessage = successMessage(activeHostAction)
+ }
+ }
+
+ override fun onFailureSignOn(resultCode: Int?) {
+ mainHandler.post {
+ isHostActionRunning = false
mainHandler.post {
isHostActionRunning = false
- dialogMessage = successMessage(activeHostAction)
+ dialogMessage = failureMessage(activeHostAction, resultCode)
}
}
+ }
- override fun onFailureSignOn(resultCode: Int?) {
- mainHandler.post {
- isHostActionRunning = false
- mainHandler.post {
- isHostActionRunning = false
- dialogMessage =
- failureMessage(activeHostAction, resultCode)
- }
- }
+
+ override fun onNetworkFailSignOn(message: String?) {
+ mainHandler.post {
+ isHostActionRunning = false
+ dialogMessage = message?.takeIf { it.isNotBlank() }
+ ?: networkFailureMessage(activeHostAction)
}
-
-
- override fun onNetworkFailSignOn(message: String?) {
- mainHandler.post {
- isHostActionRunning = false
- dialogMessage = message?.takeIf { it.isNotBlank() }
- ?: networkFailureMessage(activeHostAction)
- }
- }
- })
- }
- ) {
+ }
+ })
+ }) {
Text(
text = when {
isHostActionRunning -> "Processing"
dialogMessage == confirmationMessage(activeHostAction) -> "Start"
else -> "Close"
- },
- color = Color.LegacyRed
+ }, color = Color.LegacyRed
)
}
- },
- dismissButton = {
+ }, dismissButton = {
if (!isHostActionRunning) {
TextButton(
onClick = {
showHostActionDialog = false
dialogMessage = confirmationMessage(activeHostAction)
- }
- ) {
+ }) {
Text(text = "Cancel", color = Color.Gray)
}
}
- },
- containerColor = Color.White
+ }, containerColor = Color.White
)
}
ModalNavigationDrawer(
- drawerState = drawerState,
- drawerContent = {
+ drawerState = drawerState, drawerContent = {
ModalDrawerSheet(
modifier = Modifier.fillMaxWidth(0.78f),
drawerContainerColor = Color.White,
@@ -230,13 +208,12 @@ fun DashboardScreen2(
.background(Color.IvoryBeige)
.padding(horizontal = 20.dp, vertical = 28.dp)
) {
- Row() {
+ Row {
Box(
modifier = Modifier
.size(80.dp)
.clip(CircleShape)
- .background(Color.White),
- contentAlignment = Alignment.Center
+ .background(Color.White), contentAlignment = Alignment.Center
) {
Image(
painter = painterResource(R.drawable.logo_mob),
@@ -248,7 +225,7 @@ fun DashboardScreen2(
)
}
- Column() {
+ Column {
Text(
text = "MOB Merchant",
color = Color.CrimsonRed,
@@ -262,8 +239,8 @@ fun DashboardScreen2(
fontWeight = FontWeight.Bold
)
Text(
- text = if(isOnline) "Online" else "Offline",
- color = if(isOnline) Color.Success else Color.Error,
+ text = if (isOnline) "Online" else "Offline",
+ color = if (isOnline) Color.Success else Color.Error,
fontSize = 12.sp,
fontWeight = FontWeight.Bold
)
@@ -291,40 +268,56 @@ fun DashboardScreen2(
modifier = Modifier.padding(horizontal = 16.dp)
)
DrawerItem("Function", Icons.Default.Dashboard) {
- scope.launch { drawerState.close()}
+ scope.launch { drawerState.close() }
}
DrawerItem("Version", Icons.Default.Dashboard) {
- scope.launch { drawerState.close()}
- onNavigateVersion();
+ scope.launch { drawerState.close() }
+ onNavigateVersion()
}
}
- }
- ) {
+ }) {
Scaffold(
- containerColor = Color.IvoryBeige,
- topBar = {
+ containerColor = Color.IvoryBeige, topBar = {
AppBar(
title = "Dashboard",
icon = Icons.Default.Menu,
- onIconClick = { scope.launch { drawerState.open() } }
- )
- }
- ) { paddingValues ->
+ onIconClick = { scope.launch { drawerState.open() } })
+ }) { paddingValues ->
Column(
modifier = Modifier
.padding(paddingValues)
.fillMaxSize()
-// .padding(horizontal = 16.dp)
) {
- AdvertisingArea()
- SummaryCard()
- Spacer(modifier = Modifier.height(16.dp))
- MenuGrid(
- onNavigateAmount = onNavigateAmount,
- onNavigateSignOn = onNavigateSignOn,
- onNavigateSeeMore = onNavigateSeeMore,
- onNavigateSettlement = onNavigateSettlement
- )
+ //top section
+ Box(
+ modifier = Modifier
+ .weight(1f)
+ .fillMaxWidth(),
+ ) {
+ AdvertisingArea()
+ }
+ //center section
+ Box(
+ modifier = Modifier
+ .weight(1f)
+ .fillMaxWidth(),
+ contentAlignment = Alignment.Center
+ ) {
+ SummaryCard()
+ }
+ //bottom section
+ Box(
+ modifier = Modifier
+ .weight(1.5f)
+ .fillMaxWidth(),
+ ) {
+ MenuGrid(
+ onNavigateAmount = onNavigateAmount,
+ onNavigateSignOn = onNavigateSignOn,
+ onNavigateSeeMore = onNavigateSeeMore,
+ onNavigateSettlement = onNavigateSettlement
+ )
+ }
}
}
}
@@ -332,23 +325,19 @@ fun DashboardScreen2(
@Composable
private fun DrawerItem(
- title: String,
- icon: ImageVector,
- onClick: () -> Unit
+ title: String, icon: ImageVector, onClick: () -> Unit
) {
NavigationDrawerItem(
label = {
Text(
- text = title,
- fontWeight = FontWeight.Medium
+ text = title, fontWeight = FontWeight.Medium
)
},
selected = false,
onClick = onClick,
icon = {
Icon(
- imageVector = icon,
- contentDescription = title
+ imageVector = icon, contentDescription = title
)
},
modifier = Modifier.padding(horizontal = 12.dp, vertical = 2.dp),
@@ -367,32 +356,27 @@ private fun AdvertisingArea() {
"https://i.ytimg.com/vi/eRUVxGRp1Ms/maxresdefault.jpg",
"https://i.ytimg.com/vi/AwvmgTPd7qw/maxresdefault.jpg",
"https://mma.prnewswire.com/media/2080956/SUNMI_3rd_generation_products_T3_PRO_series_V3_MIX.jpg?p=facebook"
- );
+ )
val pageState = rememberPagerState(pageCount = { imageArray.size })
LaunchedEffect(pageState) {
while (true) {
delay(10000)
- val nextPage = (pageState.currentPage + 1) % imageArray.size;
+ val nextPage = (pageState.currentPage + 1) % imageArray.size
pageState.animateScrollToPage(
- page = nextPage,
- animationSpec = tween(durationMillis = 700)
+ page = nextPage, animationSpec = tween(durationMillis = 700)
)
}
}
Card(
- modifier = Modifier
- .fillMaxWidth()
- .height(170.dp),
+ modifier = Modifier.fillMaxSize(),
shape = RoundedCornerShape(0.dp),
colors = CardDefaults.cardColors(containerColor = Color.White),
) {
HorizontalPager(
- state = pageState,
- modifier = Modifier
- .fillMaxSize()
+ state = pageState, modifier = Modifier.fillMaxSize()
) { page ->
AsyncImage(
model = imageArray[page],
@@ -448,8 +432,7 @@ private fun SummaryCard() {
) {
Row(verticalAlignment = Alignment.Bottom) {
Text(
- text = "Last Sync",
- fontSize = 12.sp
+ text = "Last Sync", fontSize = 12.sp
)
IconCircle(Icons.Default.Sync, Color.CrimsonRed)
}
@@ -476,16 +459,12 @@ private fun SummaryItem(
iconBg: androidx.compose.ui.graphics.Color
) {
Row(
- verticalAlignment = Alignment.Top,
- modifier = Modifier.padding(6.dp)
+ verticalAlignment = Alignment.Top, modifier = Modifier.padding(6.dp)
) {
Column(modifier = Modifier.weight(1f)) {
Text(title, fontSize = 12.sp)
Text(
- value,
- fontSize = 14.sp,
- color = Color.LegacyRed,
- fontWeight = FontWeight.Bold
+ value, fontSize = 14.sp, color = Color.LegacyRed, fontWeight = FontWeight.Bold
)
Text(subtitle, fontSize = 12.sp)
}
@@ -495,8 +474,7 @@ private fun SummaryItem(
@Composable
private fun IconCircle(
- icon: ImageVector,
- color: androidx.compose.ui.graphics.Color
+ icon: ImageVector, color: androidx.compose.ui.graphics.Color
) {
Box(
modifier = Modifier
@@ -525,35 +503,63 @@ private fun MenuGrid(
verticalArrangement = Arrangement.spacedBy(10.dp),
modifier = Modifier.padding(horizontal = 16.dp)
) {
+ Spacer(Modifier.height(8.dp))
Row(horizontalArrangement = Arrangement.spacedBy(10.dp)) {
- MenuCard(
- title = "Sale",
- icon = Icons.Default.PointOfSale,
- modifier = Modifier.weight(1f),
- onClick = { onNavigateAmount("Sale") }
- )
- MenuCard("MMQR", Icons.Default.QrCode, Modifier.weight(1f))
- MenuCard("History", Icons.Default.History, Modifier.weight(1f))
+ MenuCard(title = "Sale", icon = {
+ Icon(
+ painterResource(R.drawable.ic_terminal),
+ contentDescription = "icon",
+ modifier = Modifier.size(40.dp),
+ tint = Color.LegacyRed
+ )
+ }, modifier = Modifier.weight(1f), onClick = { onNavigateAmount("Sale") })
+ MenuCard(title = "MMQR", icon = {
+ Image(
+ painter = painterResource(R.drawable.ic_mmqr_logo),
+ contentDescription = "mmqr image",
+ modifier = Modifier.height(48.dp)
+ )
+ }, modifier = Modifier.weight(1f))
+ MenuCard("History", icon = {
+ Icon(
+ painterResource(R.drawable.ic_history),
+ contentDescription = "icon",
+ modifier = Modifier.size(32.dp),
+ tint = Color.LegacyRed
+ )
+ }, modifier = Modifier.weight(1f))
}
Row(horizontalArrangement = Arrangement.spacedBy(10.dp)) {
MenuCard(
- "Sign On",
- Icons.Default.Link,
- Modifier.weight(1f),
- onClick = onNavigateSignOn
+ title = "Sign On", icon = {
+ Icon(
+ painterResource(R.drawable.ic_sign_on),
+ contentDescription = "icon",
+ modifier = Modifier.size(32.dp),
+ tint = Color.LegacyRed
+ )
+ }, modifier = Modifier.weight(1f), onClick = onNavigateSignOn
)
MenuCard(
- "Settlement",
- Icons.Default.Wallet,
- Modifier.weight(1f),
- onClick = onNavigateSettlement
+ title = "Settlement", icon = {
+ Icon(
+ painterResource(R.drawable.ic_settlement),
+ contentDescription = "icon",
+ modifier = Modifier.size(32.dp),
+ tint = Color.LegacyRed
+ )
+ }, modifier = Modifier.weight(1f), onClick = onNavigateSettlement
)
MenuCard(
- "See More",
- Icons.Default.GridView,
- Modifier.weight(1f),
- onClick = onNavigateSeeMore
+ title = "See More", icon = {
+ Icon(
+ painterResource(R.drawable.ic_see_more),
+ contentDescription = "icon",
+ modifier = Modifier.size(32.dp),
+ tint = Color.LegacyRed
+ )
+ }, modifier = Modifier.weight(1f), onClick = onNavigateSeeMore
)
}
}
@@ -562,7 +568,7 @@ private fun MenuGrid(
@Composable
private fun MenuCard(
title: String,
- icon: ImageVector,
+ icon: @Composable () -> Unit,
modifier: Modifier = Modifier,
onClick: (() -> Unit)? = null
) {
@@ -586,13 +592,7 @@ private fun MenuCard(
.padding(6.dp)
) {
Column {
- Icon(
- imageVector = icon,
- contentDescription = title,
- tint = Color.LegacyRed,
- modifier = Modifier.size(50.dp)
- )
-
+ icon()
Spacer(modifier = Modifier.weight(1f))
Row(
diff --git a/app/src/main/res/drawable/ic_history.xml b/app/src/main/res/drawable/ic_history.xml
new file mode 100644
index 0000000..805faa9
--- /dev/null
+++ b/app/src/main/res/drawable/ic_history.xml
@@ -0,0 +1,24 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_mmqr_logo.xml b/app/src/main/res/drawable/ic_mmqr_logo.xml
new file mode 100644
index 0000000..fd3abd5
--- /dev/null
+++ b/app/src/main/res/drawable/ic_mmqr_logo.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_see_more.xml b/app/src/main/res/drawable/ic_see_more.xml
new file mode 100644
index 0000000..9319397
--- /dev/null
+++ b/app/src/main/res/drawable/ic_see_more.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_settlement.xml b/app/src/main/res/drawable/ic_settlement.xml
new file mode 100644
index 0000000..3e8c587
--- /dev/null
+++ b/app/src/main/res/drawable/ic_settlement.xml
@@ -0,0 +1,24 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_sign_on.xml b/app/src/main/res/drawable/ic_sign_on.xml
new file mode 100644
index 0000000..d57c975
--- /dev/null
+++ b/app/src/main/res/drawable/ic_sign_on.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_terminal.xml b/app/src/main/res/drawable/ic_terminal.xml
new file mode 100644
index 0000000..83e8344
--- /dev/null
+++ b/app/src/main/res/drawable/ic_terminal.xml
@@ -0,0 +1,24 @@
+
+
+
+