From d9134e84f48829059335576118220e463a224af5 Mon Sep 17 00:00:00 2001
From: moon <56061215+MgKyawLay@users.noreply.github.com>
Date: Sun, 10 May 2026 00:09:31 +0630
Subject: [PATCH] added amount screen
---
.../gradle-9.4.1-bin.zip.lck | 0
.../gradle-9.4.1-bin.zip.part | 0
.idea/deploymentTargetSelector.xml | 7 +
app/build.gradle.kts | 1 +
.../com/mob/ustmm/ui/amount/AmountScreen.kt | 313 ++++++++++++++++++
.../mob/ustmm/ui/components/SquareButton.kt | 95 ++++++
.../ui/dashboard/BottomDashboardButton.kt | 62 ----
.../ustmm/ui/dashboard/DashboardMenuButton.kt | 64 ----
.../mob/ustmm/ui/dashboard/DashboardScreen.kt | 155 ++++++---
.../mob/ustmm/ui/navigation/AppNavGraph.kt | 29 +-
.../com/mob/ustmm/ui/navigation/Routes.kt | 9 +-
app/src/main/res/drawable/ic_left_arrow.xml | 24 ++
app/src/main/res/drawable/ic_sale.xml | 24 ++
app/src/main/res/drawable/logo_mob.png | Bin 0 -> 30204 bytes
gradle/libs.versions.toml | 2 +
15 files changed, 610 insertions(+), 175 deletions(-)
create mode 100644 .gradle-local/wrapper/dists/gradle-9.4.1-bin/arn2x92ynaizyzdaamcbpbhtj/gradle-9.4.1-bin.zip.lck
create mode 100644 .gradle-local/wrapper/dists/gradle-9.4.1-bin/arn2x92ynaizyzdaamcbpbhtj/gradle-9.4.1-bin.zip.part
create mode 100644 app/src/main/java/com/mob/ustmm/ui/amount/AmountScreen.kt
create mode 100644 app/src/main/java/com/mob/ustmm/ui/components/SquareButton.kt
delete mode 100644 app/src/main/java/com/mob/ustmm/ui/dashboard/BottomDashboardButton.kt
delete mode 100644 app/src/main/java/com/mob/ustmm/ui/dashboard/DashboardMenuButton.kt
create mode 100644 app/src/main/res/drawable/ic_left_arrow.xml
create mode 100644 app/src/main/res/drawable/ic_sale.xml
create mode 100644 app/src/main/res/drawable/logo_mob.png
diff --git a/.gradle-local/wrapper/dists/gradle-9.4.1-bin/arn2x92ynaizyzdaamcbpbhtj/gradle-9.4.1-bin.zip.lck b/.gradle-local/wrapper/dists/gradle-9.4.1-bin/arn2x92ynaizyzdaamcbpbhtj/gradle-9.4.1-bin.zip.lck
new file mode 100644
index 0000000..e69de29
diff --git a/.gradle-local/wrapper/dists/gradle-9.4.1-bin/arn2x92ynaizyzdaamcbpbhtj/gradle-9.4.1-bin.zip.part b/.gradle-local/wrapper/dists/gradle-9.4.1-bin/arn2x92ynaizyzdaamcbpbhtj/gradle-9.4.1-bin.zip.part
new file mode 100644
index 0000000..e69de29
diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml
index ca16a99..c7b5db6 100644
--- a/.idea/deploymentTargetSelector.xml
+++ b/.idea/deploymentTargetSelector.xml
@@ -4,6 +4,13 @@
+
+
+
+
+
+
+
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 08acc47..e94f37c 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -42,6 +42,7 @@ android {
dependencies {
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.activity.compose)
+ implementation(libs.androidx.compose.foundation)
implementation(libs.androidx.compose.material3)
implementation(libs.androidx.compose.ui)
implementation(libs.androidx.compose.ui.graphics)
diff --git a/app/src/main/java/com/mob/ustmm/ui/amount/AmountScreen.kt b/app/src/main/java/com/mob/ustmm/ui/amount/AmountScreen.kt
new file mode 100644
index 0000000..d6e5611
--- /dev/null
+++ b/app/src/main/java/com/mob/ustmm/ui/amount/AmountScreen.kt
@@ -0,0 +1,313 @@
+package com.mob.ustmm.ui.amount
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.*
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.material3.Button
+import androidx.compose.material3.ButtonDefaults
+import androidx.compose.material3.CenterAlignedTopAppBar
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.Scaffold
+import androidx.compose.material3.Text
+import androidx.compose.material3.TopAppBarDefaults
+import androidx.compose.runtime.*
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalConfiguration
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.mob.ustmm.R
+import com.mob.ustmm.ui.theme.MOBPOSTheme
+import com.mob.ustmm.ui.theme.Primary
+import com.mob.ustmm.ui.theme.White
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun AmountScreen(
+ action: String,
+ onBackClick: () -> Unit,
+ onCancelClick: () -> Unit = {},
+ onNextClick: (String) -> Unit = {}
+) {
+
+ var amount by remember { mutableStateOf("0") }
+
+ val config = LocalConfiguration.current
+ val isSmallScreen = config.screenHeightDp < 700
+
+ Scaffold(
+ topBar = {
+ CenterAlignedTopAppBar(
+ title = {
+ Text(
+ text = action.uppercase(),
+ color = White,
+ fontSize = 16.sp,
+ fontWeight = FontWeight.SemiBold
+ )
+ },
+ navigationIcon = {
+ IconButton(onClick = onBackClick) {
+ Icon(
+ painter = painterResource(R.drawable.ic_left_arrow),
+ contentDescription = "Back",
+ modifier = Modifier.size(24.dp),
+ tint = White
+ )
+ }
+ },
+ colors = TopAppBarDefaults.topAppBarColors(
+ containerColor = Primary
+ )
+ )
+ },
+ containerColor = White
+ ) { paddingValues ->
+
+ Column(
+ modifier = Modifier
+ .fillMaxSize()
+ .padding(paddingValues)
+ .background(White)
+ .verticalScroll(rememberScrollState())
+ .padding(horizontal = if (isSmallScreen) 20.dp else 24.dp),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ verticalArrangement = Arrangement.SpaceBetween
+ ) {
+
+ Spacer(
+ modifier = Modifier.height(
+ 16.dp
+ )
+ )
+
+ AmountBox(
+ amount = amount,
+ height = if (isSmallScreen) 115.dp else 142.dp
+ )
+
+ Spacer(
+ modifier = Modifier.height(
+ 100.dp
+ )
+ )
+
+ Keypad(
+ buttonHeight = if (isSmallScreen) 60.dp else 74.dp,
+ buttonSpacing = if (isSmallScreen) 8.dp else 12.dp,
+ onKeyClick = { key ->
+
+ amount = when (key) {
+
+ "del" -> {
+ if (amount.length <= 1) {
+ "0"
+ } else {
+ amount.dropLast(1)
+ }
+ }
+
+ "." -> {
+ if (amount.contains(".")) {
+ amount
+ } else {
+ "$amount."
+ }
+ }
+
+ else -> {
+ if (amount == "0") {
+ key
+ } else {
+ amount + key
+ }
+ }
+ }
+ }
+ )
+
+ Spacer(
+ modifier = Modifier.height(
+ if (isSmallScreen) 14.dp else 18.dp
+ )
+ )
+
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.spacedBy(14.dp)
+ ) {
+
+ Button(
+ onClick = onCancelClick,
+ modifier = Modifier
+ .weight(1f)
+ .height(if (isSmallScreen) 58.dp else 68.dp),
+ shape = RoundedCornerShape(18.dp),
+ colors = ButtonDefaults.buttonColors(
+ containerColor = White,
+ contentColor = Primary
+ ),
+ border = ButtonDefaults.outlinedButtonBorder
+ ) {
+ Text(
+ text = "Cancel",
+ fontSize = if (isSmallScreen) 18.sp else 20.sp,
+ fontWeight = FontWeight.Bold
+ )
+ }
+
+ Button(
+ onClick = {
+ onNextClick(amount)
+ },
+ modifier = Modifier
+ .weight(1f)
+ .height(if (isSmallScreen) 58.dp else 68.dp),
+ shape = RoundedCornerShape(18.dp),
+ colors = ButtonDefaults.buttonColors(
+ containerColor = Primary,
+ contentColor = White
+ )
+ ) {
+ Text(
+ text = "Next",
+ fontSize = if (isSmallScreen) 18.sp else 20.sp,
+ fontWeight = FontWeight.Bold
+ )
+ }
+ }
+
+ Spacer(modifier = Modifier.height(12.dp))
+ }
+ }
+}
+
+@Composable
+private fun AmountBox(
+ amount: String,
+ height: Dp
+) {
+
+ Box(
+ modifier = Modifier
+ .fillMaxWidth()
+ .height(height)
+ .background(
+ color = Primary,
+ shape = RoundedCornerShape(20.dp)
+ )
+ .padding(horizontal = 24.dp),
+ contentAlignment = Alignment.CenterEnd
+ ) {
+
+ Row(
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+
+ Text(
+ text = amount,
+ color = White,
+ fontSize = 26.sp,
+ fontWeight = FontWeight.Bold
+ )
+
+ Spacer(modifier = Modifier.width(14.dp))
+
+ Box(
+ modifier = Modifier
+ .background(
+ color = White,
+ shape = RoundedCornerShape(10.dp)
+ )
+ .padding(
+ horizontal = 16.dp,
+ vertical = 6.dp
+ )
+ ) {
+
+ Text(
+ text = "MMK",
+ color = Primary,
+ fontSize = 20.sp,
+ fontWeight = FontWeight.Bold
+ )
+ }
+ }
+ }
+}
+
+@Composable
+private fun Keypad(
+ buttonHeight: Dp,
+ buttonSpacing: Dp,
+ onKeyClick: (String) -> Unit
+) {
+
+ val keys = listOf(
+ listOf("1", "2", "3"),
+ listOf("4", "5", "6"),
+ listOf("7", "8", "9"),
+ listOf(".", "0", "del")
+ )
+
+ Column(
+ verticalArrangement = Arrangement.spacedBy(buttonSpacing)
+ ) {
+
+ keys.forEach { row ->
+
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.spacedBy(8.dp)
+ ) {
+
+ row.forEach { key ->
+
+ Button(
+ onClick = {
+ onKeyClick(key)
+ },
+ modifier = Modifier
+ .weight(1f)
+ .height(buttonHeight),
+ shape = RoundedCornerShape(18.dp),
+ colors = ButtonDefaults.buttonColors(
+ containerColor = Primary,
+ contentColor = White
+ ),
+ contentPadding = PaddingValues(0.dp)
+ ) {
+
+ Text(
+ text = key,
+ fontSize = if (buttonHeight < 70.dp) 20.sp else 22.sp,
+ fontWeight = FontWeight.Bold
+ )
+ }
+ }
+ }
+ }
+ }
+}
+
+@Preview(showBackground = true, showSystemUi = false)
+@Composable
+private fun AmountScreenPreview() {
+
+ MOBPOSTheme {
+
+ AmountScreen(
+ action = "Amount",
+ onBackClick = {}
+ )
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/mob/ustmm/ui/components/SquareButton.kt b/app/src/main/java/com/mob/ustmm/ui/components/SquareButton.kt
new file mode 100644
index 0000000..658b268
--- /dev/null
+++ b/app/src/main/java/com/mob/ustmm/ui/components/SquareButton.kt
@@ -0,0 +1,95 @@
+package com.mob.ustmm.ui.components
+
+import androidx.compose.foundation.BorderStroke
+import androidx.compose.foundation.layout.*
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material3.*
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.Shape
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.mob.ustmm.R
+import com.mob.ustmm.ui.theme.MOBPOSTheme
+import com.mob.ustmm.ui.theme.Primary
+import com.mob.ustmm.ui.theme.White
+
+@Composable
+fun SquareButton(
+ title: String,
+ icon: Int,
+ modifier: Modifier = Modifier,
+ enabled: Boolean = true,
+ containerColor: Color = White,
+ contentColor: Color = Primary,
+ iconTint: Color = contentColor,
+ disabledContainerColor: Color = White,
+ disabledContentColor: Color = Primary,
+ border: BorderStroke? = null,
+ shape: Shape = RoundedCornerShape(20.dp),
+ onClick: () -> Unit
+) {
+ Button(
+ onClick = onClick,
+ enabled = enabled,
+ modifier = modifier
+ .height(180.dp),
+ shape = shape,
+ border = border,
+ colors = ButtonDefaults.buttonColors(
+ containerColor = containerColor,
+ contentColor = contentColor,
+ disabledContainerColor = disabledContainerColor,
+ disabledContentColor = disabledContentColor
+ ),
+ contentPadding = PaddingValues(12.dp)
+ ) {
+ Column(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ verticalArrangement = Arrangement.Center
+ ) {
+ Icon(
+ painter = painterResource(icon),
+ contentDescription = title,
+ tint = if (enabled) iconTint else disabledContentColor,
+ modifier = Modifier.size(60.dp)
+ )
+
+ Spacer(modifier = Modifier.height(10.dp))
+
+ Text(
+ text = title,
+ fontSize = 24.sp,
+ fontWeight = FontWeight.SemiBold,
+ textAlign = TextAlign.Center,
+ maxLines = 1
+ )
+ }
+ }
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SquareButtonPreview() {
+ MOBPOSTheme {
+ SquareButton(
+ title = "Sale",
+ icon = R.drawable.ic_menu,
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(16.dp),
+ containerColor = White,
+ contentColor = White,
+ iconTint = Primary,
+ border = null,
+ onClick = {}
+ )
+ }
+}
diff --git a/app/src/main/java/com/mob/ustmm/ui/dashboard/BottomDashboardButton.kt b/app/src/main/java/com/mob/ustmm/ui/dashboard/BottomDashboardButton.kt
deleted file mode 100644
index b98b3a3..0000000
--- a/app/src/main/java/com/mob/ustmm/ui/dashboard/BottomDashboardButton.kt
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.mob.ustmm.ui.dashboard
-
-import androidx.compose.foundation.layout.Arrangement
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.PaddingValues
-import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.height
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.compose.material3.Button
-import androidx.compose.material3.ButtonDefaults
-import androidx.compose.material3.SegmentedButtonDefaults.Icon
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.unit.dp
-import androidx.compose.ui.unit.sp
-
-@Composable
-fun BottomDashboardButton(
- text: String,
- icon: Int,
- modifier: Modifier = Modifier,
- enabled: Boolean = true,
- onClick: () -> Unit
-) {
- Button(
- onClick = onClick,
- enabled = enabled,
- modifier = modifier
- .padding(8.dp)
- .height(81.dp),
- shape = RoundedCornerShape(12.dp),
- colors = ButtonDefaults.buttonColors(
- containerColor = Color.Yellow,
- contentColor = Color.White,
- disabledContainerColor = Color.Gray,
- disabledContentColor = Color.White
- ),
- contentPadding = PaddingValues(12.dp)
- ) {
- Column(
- horizontalAlignment = Alignment.CenterHorizontally,
- verticalArrangement = Arrangement.Center
- ) {
-// Icon(
-// painter = painterResource(id = icon),
-// contentDescription = null,
-// tint = Color.White
-// )
-
- Spacer(modifier = Modifier.height(4.dp))
-
- Text(
- text = text,
- fontSize = 17.sp
- )
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/mob/ustmm/ui/dashboard/DashboardMenuButton.kt b/app/src/main/java/com/mob/ustmm/ui/dashboard/DashboardMenuButton.kt
deleted file mode 100644
index 402bec1..0000000
--- a/app/src/main/java/com/mob/ustmm/ui/dashboard/DashboardMenuButton.kt
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.mob.ustmm.ui.dashboard
-
-import androidx.compose.foundation.BorderStroke
-import androidx.compose.foundation.layout.Arrangement
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.PaddingValues
-import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.height
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.compose.material3.Button
-import androidx.compose.material3.ButtonDefaults
-import androidx.compose.material3.Icon
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.res.painterResource
-import androidx.compose.ui.unit.dp
-import androidx.compose.ui.unit.sp
-
-@Composable
-fun DashboardMenuButton(
- text: String,
- icon: Int,
- modifier: Modifier = Modifier,
- enabled: Boolean = true,
- onClick: () -> Unit
-) {
- Button(
- onClick = onClick,
- enabled = enabled,
- modifier = modifier
- .padding(8.dp)
- .height(81.dp),
- shape = RoundedCornerShape(8.dp),
- colors = ButtonDefaults.buttonColors(
- containerColor = Color.White,
- contentColor = Color.Yellow,
- disabledContainerColor = Color.LightGray,
- disabledContentColor = Color.Gray
- ),
- border = BorderStroke(1.dp, Color.Black),
- contentPadding = PaddingValues(8.dp)
- ) {
- Column(
- horizontalAlignment = Alignment.CenterHorizontally,
- verticalArrangement = Arrangement.Center
- ) {
- Icon(
- painter = painterResource(id = icon),
- contentDescription = null
- )
-
- Spacer(modifier = Modifier.height(4.dp))
-
- Text(
- text = text,
- fontSize = 14.sp
- )
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/mob/ustmm/ui/dashboard/DashboardScreen.kt b/app/src/main/java/com/mob/ustmm/ui/dashboard/DashboardScreen.kt
index f55942e..9706173 100644
--- a/app/src/main/java/com/mob/ustmm/ui/dashboard/DashboardScreen.kt
+++ b/app/src/main/java/com/mob/ustmm/ui/dashboard/DashboardScreen.kt
@@ -4,25 +4,21 @@ import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
-import androidx.compose.foundation.layout.Arrangement
-import androidx.compose.foundation.pager.HorizontalPager
-import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.rememberCoroutineScope
-import androidx.compose.ui.*
+import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
-import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.font.FontWeight
-import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.mob.ustmm.R
+import com.mob.ustmm.ui.components.SquareButton
+import com.mob.ustmm.ui.theme.MOBPOSTheme
import com.mob.ustmm.ui.theme.*
-import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
@OptIn(ExperimentalMaterial3Api::class)
@@ -30,6 +26,7 @@ import kotlinx.coroutines.launch
fun DashboardScreen(
settlementEnabled: Boolean,
wavePayEnabled: Boolean,
+ onAmountClick: (String) -> Unit,
onTransactionClick: () -> Unit,
onSettlementClick: () -> Unit,
onHistoryClick: () -> Unit,
@@ -38,28 +35,7 @@ fun DashboardScreen(
) {
val drawerState = rememberDrawerState(initialValue = DrawerValue.Closed)
val scope = rememberCoroutineScope()
-
-
- val images = listOf(
- R.drawable.box_christmas_delivery_gift_package_present_svgrepo_com,
- R.drawable.buy_ecommerce_finance_payment_pos_shop_svgrepo_com,
- R.drawable.appointment_calendar_date_event_month_plan_svgrepo_com
- )
- val startPage = Int.MAX_VALUE / 2;
-
- val pagerState = rememberPagerState(
- initialPage = startPage,
- pageCount = { Int.MAX_VALUE }
- )
- LaunchedEffect(Unit) {
- while(true){
- delay(3000)
- pagerState.animateScrollToPage(
- pagerState.currentPage + 1
- )
- }
- }
ModalNavigationDrawer(
drawerState = drawerState,
@@ -129,7 +105,7 @@ fun DashboardScreen(
onWavePayClick()
}
.padding(horizontal = 24.dp, vertical = 14.dp),
- color = if (wavePayEnabled) Black else White,
+ color = if (wavePayEnabled) Black else White,
fontSize = 16.sp
)
}
@@ -139,7 +115,6 @@ fun DashboardScreen(
topBar = {
CenterAlignedTopAppBar(
title = {
-
Text(text = "Dashboard", color = White, fontWeight = FontWeight.SemiBold)
},
navigationIcon = {
@@ -150,7 +125,11 @@ fun DashboardScreen(
}
}
) {
- Icon(painter = painterResource(R.drawable.ic_menu), contentDescription = "Menu Icon", tint = White)
+ Icon(
+ painter = painterResource(R.drawable.ic_menu),
+ contentDescription = "Menu Icon",
+ tint = White
+ )
}
},
colors = TopAppBarDefaults.topAppBarColors(
@@ -158,20 +137,116 @@ fun DashboardScreen(
)
)
}
- ) { paddingValues ->
+ ) { paddingValues ->
Column(
- modifier = Modifier.fillMaxSize().padding(paddingValues).background(White)
+ modifier = Modifier
+ .fillMaxSize()
+ .padding(paddingValues)
+ .background(White)
) {
- HorizontalPager(state = pagerState) { page ->
- val index = page % images.size;
+ Box(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(20.dp),
+ contentAlignment = Alignment.Center
+ ) {
Image(
- painter = painterResource(images[index]),
- contentDescription = "Banner images",
- modifier = Modifier.fillMaxSize(),
- contentScale = ContentScale.Crop
+ painter = painterResource(R.drawable.logo_mob),
+ contentDescription = "Mob logo"
)
}
+
+ Box(
+ modifier = Modifier
+ .fillMaxSize()
+ .background(
+ color = Primary,
+ shape = RoundedCornerShape(
+ topStart = 16.dp,
+ topEnd = 16.dp,
+ bottomStart = 0.dp,
+ bottomEnd = 0.dp
+ )
+ )
+ ) {
+ Column(
+ modifier = Modifier
+ .fillMaxSize()
+ .padding(16.dp),
+ verticalArrangement = Arrangement.spacedBy(12.dp)
+ ) {
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.spacedBy(12.dp)
+ ) {
+ SquareButton(
+ title = "Sale",
+ icon = R.drawable.ic_sale,
+ modifier = Modifier.weight(1f),
+ containerColor = White,
+ contentColor = Primary,
+ iconTint = Primary,
+ border = null,
+ onClick = { onAmountClick("Sale") },
+ )
+ SquareButton(
+ title = "Sign On",
+ icon = R.drawable.ic_menu,
+ modifier = Modifier.weight(1f),
+ containerColor = White,
+ contentColor = Primary,
+ iconTint = Primary,
+ border = null,
+ onClick = { onAmountClick("Sign On") }
+ )
+ }
+
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.spacedBy(12.dp)
+ ) {
+ SquareButton(
+ title = "Settlement",
+ icon = R.drawable.ic_menu,
+ modifier = Modifier.weight(1f),
+ enabled = settlementEnabled,
+ containerColor = White,
+ contentColor = Primary,
+ iconTint = Primary,
+ border = null,
+ onClick = onSettlementClick
+ )
+ SquareButton(
+ title = "Others",
+ icon = R.drawable.ic_menu,
+ modifier = Modifier.weight(1f),
+ containerColor = White,
+ contentColor = Primary,
+ iconTint = Primary,
+ border = null,
+ onClick = onCardClick
+ )
+ }
+ }
+ }
}
}
}
}
+
+@Preview(showBackground = true, showSystemUi = true)
+@Composable
+private fun DashboardScreenPreview() {
+ MOBPOSTheme {
+ DashboardScreen(
+ settlementEnabled = true,
+ wavePayEnabled = true,
+ onAmountClick = {},
+ onTransactionClick = {},
+ onSettlementClick = {},
+ onHistoryClick = {},
+ onCardClick = {},
+ onWavePayClick = {}
+ )
+ }
+}
diff --git a/app/src/main/java/com/mob/ustmm/ui/navigation/AppNavGraph.kt b/app/src/main/java/com/mob/ustmm/ui/navigation/AppNavGraph.kt
index 67ce050..2df137c 100644
--- a/app/src/main/java/com/mob/ustmm/ui/navigation/AppNavGraph.kt
+++ b/app/src/main/java/com/mob/ustmm/ui/navigation/AppNavGraph.kt
@@ -1,15 +1,16 @@
package com.mob.ustmm.ui.navigation
-
import androidx.compose.runtime.Composable
+import androidx.navigation.NavHostController
+import androidx.navigation.NavType
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
-import androidx.navigation.NavHostController
+import androidx.navigation.navArgument
+import com.mob.ustmm.ui.amount.AmountScreen
import com.mob.ustmm.ui.dashboard.DashboardScreen
-
@Composable
- fun AppNavGraph(
+fun AppNavGraph(
navController: NavHostController
) {
NavHost(
@@ -20,6 +21,9 @@ import com.mob.ustmm.ui.dashboard.DashboardScreen
DashboardScreen(
settlementEnabled = true,
wavePayEnabled = true,
+ onAmountClick = { action ->
+ navController.navigate(Routes.Amount.createRoute(action))
+ },
onTransactionClick = {},
onSettlementClick = {},
onHistoryClick = {},
@@ -27,6 +31,19 @@ import com.mob.ustmm.ui.dashboard.DashboardScreen
onWavePayClick = {}
)
}
-
+
+ composable(
+ route = Routes.Amount.route,
+ arguments = listOf(
+ navArgument("action") {
+ type = NavType.StringType
+ }
+ )
+ ) { backStackEntry ->
+ AmountScreen(
+ action = backStackEntry.arguments?.getString("action").orEmpty(),
+ onBackClick = { navController.popBackStack() }
+ )
+ }
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/mob/ustmm/ui/navigation/Routes.kt b/app/src/main/java/com/mob/ustmm/ui/navigation/Routes.kt
index b93424b..8e75413 100644
--- a/app/src/main/java/com/mob/ustmm/ui/navigation/Routes.kt
+++ b/app/src/main/java/com/mob/ustmm/ui/navigation/Routes.kt
@@ -1,5 +1,8 @@
package com.mob.ustmm.ui.navigation
-sealed class Routes(val route: String){
- data object Dashboard: Routes("dashboard")
-}
\ No newline at end of file
+sealed class Routes(val route: String) {
+ data object Dashboard : Routes("dashboard")
+ data object Amount : Routes("amount/{action}") {
+ fun createRoute(action: String): String = "amount/$action"
+ }
+}
diff --git a/app/src/main/res/drawable/ic_left_arrow.xml b/app/src/main/res/drawable/ic_left_arrow.xml
new file mode 100644
index 0000000..ef8fd74
--- /dev/null
+++ b/app/src/main/res/drawable/ic_left_arrow.xml
@@ -0,0 +1,24 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_sale.xml b/app/src/main/res/drawable/ic_sale.xml
new file mode 100644
index 0000000..866c086
--- /dev/null
+++ b/app/src/main/res/drawable/ic_sale.xml
@@ -0,0 +1,24 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/logo_mob.png b/app/src/main/res/drawable/logo_mob.png
new file mode 100644
index 0000000000000000000000000000000000000000..ac9889869f79fd72535e4814080cb0002a90e3f9
GIT binary patch
literal 30204
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⁡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