diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 1d7c9ee..3210c8f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -67,6 +67,10 @@ dependencies { implementation(libs.rxandroid) implementation(libs.retrofit) implementation(libs.converter.gson) + // Core icons (usually included with material library) + implementation( libs.androidx.compose.material.icons.core) + // Extended icons (full set of icons) + implementation(libs.androidx.compose.material.icons.extended) // splash screen implementation(libs.androidx.core.splashscreen) // local libs diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/components/appbar/AppBar.kt b/app/src/main/java/com/mob/utsmyanmar/ui/components/appbar/AppBar.kt new file mode 100644 index 0000000..51ebc6d --- /dev/null +++ b/app/src/main/java/com/mob/utsmyanmar/ui/components/appbar/AppBar.kt @@ -0,0 +1,43 @@ +package com.mob.utsmyanmar.ui.components.appbar + +import android.graphics.drawable.Icon +import androidx.compose.material3.* +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.text.font.FontWeight +import com.mob.utsmyanmar.ui.theme.Primary +import com.mob.utsmyanmar.ui.theme.White + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun AppBar( + title: String, + onIconClick: (() -> Unit)? = null, + icon: ImageVector +) { + CenterAlignedTopAppBar( + title = { + Text( + text = title, + color = White, + fontWeight = FontWeight.SemiBold + ) + }, + navigationIcon = { + if (onIconClick != null) { + IconButton( + onClick = onIconClick + ) { + Icon( + imageVector = icon, + "Appbar icon", + tint = White + ) + } + } + }, + colors = TopAppBarDefaults.topAppBarColors( + containerColor = Primary + ) + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/dashboard/DashboardScreen.kt b/app/src/main/java/com/mob/utsmyanmar/ui/dashboard/DashboardScreen.kt index 022f9b4..ffe2e73 100644 --- a/app/src/main/java/com/mob/utsmyanmar/ui/dashboard/DashboardScreen.kt +++ b/app/src/main/java/com/mob/utsmyanmar/ui/dashboard/DashboardScreen.kt @@ -5,6 +5,8 @@ import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Menu import androidx.compose.material3.* import androidx.compose.runtime.Composable import androidx.compose.runtime.rememberCoroutineScope @@ -20,6 +22,7 @@ import com.mob.utsmyanmar.ui.theme.MOBPOSTheme import com.mob.utsmyanmar.ui.theme.* import kotlinx.coroutines.launch import com.mob.utsmyanmar.R +import com.mob.utsmyanmar.ui.components.appbar.AppBar @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -113,28 +116,14 @@ fun DashboardScreen( ) { Scaffold( topBar = { - CenterAlignedTopAppBar( - title = { - Text(text = "Dashboard", color = White, fontWeight = FontWeight.SemiBold) - }, - navigationIcon = { - IconButton( - onClick = { - scope.launch { - drawerState.open() - } - } - ) { - Icon( - painter = painterResource(R.drawable.ic_menu), - contentDescription = "Menu Icon", - tint = White - ) + AppBar( + title = "Dashboard", + icon = Icons.Default.Menu, + onIconClick = { + scope.launch { + drawerState.open() } - }, - colors = TopAppBarDefaults.topAppBarColors( - containerColor = Primary - ) + } ) } ) { paddingValues -> diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/transaction_result/TransactionResultScreen.kt b/app/src/main/java/com/mob/utsmyanmar/ui/transaction_result/TransactionResultScreen.kt index d8412ef..7d81cc1 100644 --- a/app/src/main/java/com/mob/utsmyanmar/ui/transaction_result/TransactionResultScreen.kt +++ b/app/src/main/java/com/mob/utsmyanmar/ui/transaction_result/TransactionResultScreen.kt @@ -1,41 +1,185 @@ package com.mob.utsmyanmar.ui.transaction_result 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.shape.RoundedCornerShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ChevronLeft import androidx.compose.material3.Button +import androidx.compose.material3.ButtonColors +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.CenterAlignedTopAppBar import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.blur +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.mob.utsmyanmar.R +import com.mob.utsmyanmar.ui.components.appbar.AppBar +import com.mob.utsmyanmar.ui.theme.Black +import com.mob.utsmyanmar.ui.theme.Primary +import com.mob.utsmyanmar.ui.theme.White +@OptIn(ExperimentalMaterial3Api::class) @Composable fun TransactionResultScreen( state: TransactionResultState, - onEvent: (TransactionResultEvent) -> Unit + onEvent: (TransactionResultEvent) -> Unit, ) { - Column( - modifier = Modifier.fillMaxSize(), - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center - ) { - Text(text = state.title) - - if (state.message.isNotEmpty()) { - Text(text = state.message) + Scaffold( + topBar = { + AppBar( + title = "Transaction Results", + icon = Icons.Default.ChevronLeft, + onIconClick = { TransactionResultEvent.BackClick } + ) } - - if (state.isLoading) { - CircularProgressIndicator() - } - - Button( - onClick = { - onEvent(TransactionResultEvent.BackClick) - } + ) { paddingValues -> + Column( + modifier = Modifier + .padding(paddingValues) + .fillMaxSize() + .padding(16.dp), + verticalArrangement = Arrangement.SpaceBetween ) { - Text("Back") + Column() { + + Card( + colors = CardDefaults.cardColors( + containerColor = White + ), + modifier = Modifier + .fillMaxWidth() + .height(200.dp), + elevation = CardDefaults.cardElevation( + defaultElevation = 6.dp + ) + ) { + Column( + modifier = Modifier.fillMaxSize(), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + Spacer(modifier = Modifier.height(16.dp)) + Icon( + painter = painterResource(R.drawable.ic_success), + modifier = Modifier.size(100.dp), + tint = Primary, + contentDescription = "success icon" + ) + Spacer(modifier = Modifier.height(16.dp)) + Text( + text = "Transaction Status", + textAlign = TextAlign.Center, + color = Black + ) + Spacer(modifier = Modifier.height(16.dp)) + Text( + text = state.message, + textAlign = TextAlign.Center, + color = Black + ) + } + } + + Spacer(Modifier.height(24.dp)) + + Card( + colors = CardDefaults.cardColors( + containerColor = Primary + ), + modifier = Modifier.fillMaxWidth().height(200.dp), + elevation = CardDefaults.cardElevation( + defaultElevation = 6.dp + ) + ) { + Column( + modifier = Modifier + .fillMaxSize() + .padding(16.dp), + ) { + Spacer(modifier = Modifier.height(16.dp)) + Text(text = "Transaction Details", color = White) + Spacer(modifier = Modifier.height(8.dp)) + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween + ) { + Text(text = "Amount", color = White) + Text(text = "1,000 MMK", color = White) + } + Spacer(modifier = Modifier.height(8.dp)) + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween + ) { + Text(text = "Transaction Type", color = White) + Text(text = "MPU", color = White) + } + Spacer(modifier = Modifier.height(8.dp)) + HorizontalDivider(thickness = 1.dp, color = White) + Spacer(modifier = Modifier.height(8.dp)) + Column( + modifier = Modifier.fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text(text = "Transaction Amount", color = White) + Spacer(modifier = Modifier.height(8.dp)) + Text(text = "500.00 MMMK", color = White) + Spacer(modifier = Modifier.height(8.dp)) + Text(text = "Received", color = White) + } + } + + } + } + + Button( + modifier = Modifier + .fillMaxWidth() + .height(50.dp), + colors = ButtonColors( + containerColor = Primary, + contentColor = White, + disabledContainerColor = Primary, + disabledContentColor = White, + ), + shape = RoundedCornerShape(12.dp), + onClick = {} + ) { + Text("Transaction Completed") + } } } +} + +@Preview(showBackground = true, showSystemUi = true) +@Composable +fun TransactionResultScreenPreview() { + TransactionResultScreen( + state = TransactionResultState( + title = "Transaction Success", + message = "Transaction Approved", + isLoading = false + ), + onEvent = {} + ) } \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_success.xml b/app/src/main/res/drawable/ic_success.xml new file mode 100644 index 0000000..65468a0 --- /dev/null +++ b/app/src/main/res/drawable/ic_success.xml @@ -0,0 +1,24 @@ + + + + diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index bff8d05..158b468 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -22,6 +22,8 @@ rxjava = "3.1.12" hiltNavigationCompose = "1.2.0" [libraries] +androidx-compose-material-icons-core = { module = "androidx.compose.material:material-icons-core" } +androidx-compose-material-icons-extended = { module = "androidx.compose.material:material-icons-extended" } androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } androidx-core-splashscreen = { module = "androidx.core:core-splashscreen", version.ref = "coreSplashscreen" } androidx-navigation-compose = { module = "androidx.navigation:navigation-compose", version.ref = "navigationCompose" } diff --git a/paysdk-lib/build/.transforms/546922b0e6e1b92e9ae79c179919ac74/results.bin b/paysdk-lib/build/.transforms/546922b0e6e1b92e9ae79c179919ac74/results.bin new file mode 100644 index 0000000..c790d94 --- /dev/null +++ b/paysdk-lib/build/.transforms/546922b0e6e1b92e9ae79c179919ac74/results.bin @@ -0,0 +1 @@ +o/PayLib-release-1.4.64-runtime diff --git a/paysdk-lib/build/.transforms/546922b0e6e1b92e9ae79c179919ac74/transformed/PayLib-release-1.4.64-runtime/PayLib-release-1.4.64-runtime_dex/classes.dex b/paysdk-lib/build/.transforms/546922b0e6e1b92e9ae79c179919ac74/transformed/PayLib-release-1.4.64-runtime/PayLib-release-1.4.64-runtime_dex/classes.dex new file mode 100644 index 0000000..2dc28a9 Binary files /dev/null and b/paysdk-lib/build/.transforms/546922b0e6e1b92e9ae79c179919ac74/transformed/PayLib-release-1.4.64-runtime/PayLib-release-1.4.64-runtime_dex/classes.dex differ diff --git a/sunmiui-lib/build/.transforms/360e6abff80f5af95785e1591221d7f8/results.bin b/sunmiui-lib/build/.transforms/360e6abff80f5af95785e1591221d7f8/results.bin new file mode 100644 index 0000000..800956c --- /dev/null +++ b/sunmiui-lib/build/.transforms/360e6abff80f5af95785e1591221d7f8/results.bin @@ -0,0 +1 @@ +o/sunmiui-1.1.27-runtime diff --git a/sunmiui-lib/build/.transforms/360e6abff80f5af95785e1591221d7f8/transformed/sunmiui-1.1.27-runtime/sunmiui-1.1.27-runtime_dex/classes.dex b/sunmiui-lib/build/.transforms/360e6abff80f5af95785e1591221d7f8/transformed/sunmiui-1.1.27-runtime/sunmiui-1.1.27-runtime_dex/classes.dex new file mode 100644 index 0000000..a06cd2e Binary files /dev/null and b/sunmiui-lib/build/.transforms/360e6abff80f5af95785e1591221d7f8/transformed/sunmiui-1.1.27-runtime/sunmiui-1.1.27-runtime_dex/classes.dex differ