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 05a2a6d..3b5ee78 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 @@ -6,15 +6,53 @@ import androidx.compose.animation.core.tween 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.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.layout.width import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.* -import androidx.compose.material3.* -import androidx.compose.runtime.* +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.Menu +import androidx.compose.material.icons.filled.Sync +import androidx.compose.material3.AlertDialog +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.DrawerValue +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ModalDrawerSheet +import androidx.compose.material3.ModalNavigationDrawer +import androidx.compose.material3.NavigationDrawerItem +import androidx.compose.material3.NavigationDrawerItemDefaults +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.material3.VerticalDivider +import androidx.compose.material3.rememberDrawerState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip @@ -23,6 +61,7 @@ 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.TextOverflow +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.lifecycle.viewmodel.compose.viewModel @@ -54,7 +93,7 @@ fun DashboardScreen2( deviceInfoViewModel.loadDeviceInfo() } - val drawerState = rememberDrawerState(initialValue = DrawerValue.Closed) + val drawerState = rememberDrawerState(initialValue = DrawerValue.Open) val scope = rememberCoroutineScope() val mainHandler = remember { Handler(Looper.getMainLooper()) } var showHostActionDialog by remember { mutableStateOf(false) } @@ -215,32 +254,96 @@ fun DashboardScreen2( } Spacer(modifier = Modifier.height(10.dp)) + Text( + text = "Connection Settings", + fontWeight = FontWeight.Medium, + modifier = Modifier.padding(horizontal = 16.dp) + ) + + Item( + title = "Echo Test", subTitle = "Test Connection Status", + onClick = { + scope.launch { drawerState.close() } + openHostActionDialog("Echo Test") + }, + leadingIcon = { + Icon( + painterResource(R.drawable.ic_up_down_arrow), + contentDescription = "icon", + tint = Color.LegacyRed + ) + }, + trailingIcon = {}, + ) + Item( + title = "Log-On", subTitle = "Log on to System", + onClick = { + scope.launch { drawerState.close() } + openHostActionDialog("Log-On") + }, + leadingIcon = { + Icon( + painterResource(R.drawable.ic_lock), + contentDescription = "icon", + tint = Color.LegacyRed + ) + }, + trailingIcon = {}, + ) + Item( + title = "Log-Off", subTitle = "Log off from System", + onClick = { + scope.launch { drawerState.close() } + openHostActionDialog("Log-Off") + }, + leadingIcon = { + Icon( + painterResource(R.drawable.ic_cancel_circle), + contentDescription = "icon", + tint = Color.LegacyRed + ) + }, + trailingIcon = {}, + ) - DrawerItem("Log-On", Icons.Default.Dashboard) { - scope.launch { drawerState.close() } - openHostActionDialog("Log-On") - } - DrawerItem("Echo Test", Icons.Default.Sync) { - scope.launch { drawerState.close() } - openHostActionDialog("Echo Test") - } - DrawerItem("Log-Off", Icons.Default.Dashboard) { - scope.launch { drawerState.close() } - openHostActionDialog("Log-Off") - } Text( text = "System Management", fontWeight = FontWeight.Medium, modifier = Modifier.padding(horizontal = 16.dp) ) - DrawerItem("Function", Icons.Default.Dashboard) { - scope.launch { drawerState.close() } - onNavigateFunctions() - } - DrawerItem("Version", Icons.Default.Dashboard) { - scope.launch { drawerState.close() } - onNavigateVersion() - } + + Item( + title = "Functions", subTitle = "System Function Settings", + onClick = { + scope.launch { drawerState.close() } + onNavigateFunctions() + }, + leadingIcon = { + Icon( + painterResource(R.drawable.ic_four_boxes), + contentDescription = "icon", + tint = Color.LegacyRed, + modifier = Modifier.size(16.dp) + ) + }, + trailingIcon = {}, + ) + Item( + title = "Version", subTitle = "View App Version Info", + onClick = { + scope.launch { drawerState.close() } + onNavigateVersion() + }, + leadingIcon = { + Icon( + painterResource(R.drawable.ic_version), + contentDescription = "icon", + tint = Color.LegacyRed + ) + }, + trailingIcon = {}, + ) + } }) { Scaffold( @@ -597,3 +700,71 @@ fun PreviewDashboardScreen2() { fun PreviewDashboardScreen3() { DashboardScreen2() } + + +@Preview +@Composable +fun PreviewItem() { + Item( + onClick = {}, + title = "title", + subTitle = "sub-title" + ) +} + + +@Composable +fun Item( + onClick: () -> Unit, + title: String, + subTitle: String, + leadingIcon: (@Composable () -> Unit)? = null, + trailingIcon: (@Composable () -> Unit)? = null, +) { + Button( + onClick = onClick, + colors = ButtonDefaults.buttonColors( + containerColor = Color.White, + contentColor = Color.Black + ), + modifier = Modifier.fillMaxWidth() + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + modifier = Modifier + .fillMaxWidth() + ) { + // Square icon background + leadingIcon?.let { + Box( + contentAlignment = Alignment.Center, + modifier = Modifier + .size(40.dp) + .clip(RoundedCornerShape(16.dp)) // change to RectangleShape for sharp corners + .background(Color.LegacyRed.copy(alpha = 0.1f)) + .padding(8.dp) + ) { + it() + } + } + + Spacer(modifier = Modifier.width(12.dp)) + + Column( + modifier = Modifier + .weight(1f) + .padding(horizontal = 8.dp) + ) { + Text(text = title) + Text( + text = subTitle, + style = MaterialTheme.typography.bodySmall, + color = Color.Gray + ) + } + + trailingIcon?.invoke() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/functions/FunctionsScreen.kt b/app/src/main/java/com/mob/utsmyanmar/ui/functions/FunctionsScreen.kt index 3211b17..095401a 100644 --- a/app/src/main/java/com/mob/utsmyanmar/ui/functions/FunctionsScreen.kt +++ b/app/src/main/java/com/mob/utsmyanmar/ui/functions/FunctionsScreen.kt @@ -1,13 +1,11 @@ package com.mob.utsmyanmar.ui.functions -import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement 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.layout.width @@ -17,7 +15,6 @@ import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material.icons.filled.ChevronRight -import androidx.compose.material.icons.filled.OnDeviceTraining import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ElevatedButton import androidx.compose.material3.Icon @@ -30,15 +27,19 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource 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.preview.P2Preview import com.mob.utsmyanmar.ui.preview.P3Preview import com.mob.utsmyanmar.ui.theme.Color -import com.mob.utsmyanmar.R +import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation + @Composable fun FunctionsScreen( onBack: () -> Unit = {} ) { + val tmsAddress = SystemParamsOperation.getInstance().tmsAddress + Scaffold( containerColor = Color.IvoryBeige, topBar = { @@ -139,7 +140,7 @@ fun FunctionsScreen( FunctionButton( onClick = {}, title = "TMS Server Url", - subTitle = "Detail for bound hosts", + subTitle = tmsAddress, leadingIcon = { Icon( modifier = Modifier.size(24.dp), @@ -232,4 +233,4 @@ fun PreviewFunctionButton() { title = "title", subTitle = "sub-title" ) -} \ No newline at end of file +} diff --git a/app/src/main/res/drawable/ic_cancel_circle.xml b/app/src/main/res/drawable/ic_cancel_circle.xml new file mode 100644 index 0000000..1d7afd1 --- /dev/null +++ b/app/src/main/res/drawable/ic_cancel_circle.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_four_boxes.xml b/app/src/main/res/drawable/ic_four_boxes.xml new file mode 100644 index 0000000..a8f1aa6 --- /dev/null +++ b/app/src/main/res/drawable/ic_four_boxes.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_lock.xml b/app/src/main/res/drawable/ic_lock.xml index bb9afa0..6ef732a 100644 --- a/app/src/main/res/drawable/ic_lock.xml +++ b/app/src/main/res/drawable/ic_lock.xml @@ -1,25 +1,9 @@ - + android:width="24dp" + android:height="24dp" + android:viewportWidth="960" + android:viewportHeight="960"> + android:pathData="M240,880q-33,0 -56.5,-23.5T160,800v-400q0,-33 23.5,-56.5T240,320h40v-80q0,-83 58.5,-141.5T480,40q83,0 141.5,58.5T680,240v80h40q33,0 56.5,23.5T800,400v400q0,33 -23.5,56.5T720,880L240,880ZM240,800h480v-400L240,400v400ZM536.5,656.5Q560,633 560,600t-23.5,-56.5Q513,520 480,520t-56.5,23.5Q400,567 400,600t23.5,56.5Q447,680 480,680t56.5,-23.5ZM360,320h240v-80q0,-50 -35,-85t-85,-35q-50,0 -85,35t-35,85v80ZM240,800v-400,400Z" + android:fillColor="#e3e3e3"/> diff --git a/app/src/main/res/drawable/ic_up_down_arrow.xml b/app/src/main/res/drawable/ic_up_down_arrow.xml new file mode 100644 index 0000000..87e3175 --- /dev/null +++ b/app/src/main/res/drawable/ic_up_down_arrow.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_version.xml b/app/src/main/res/drawable/ic_version.xml index 77b3fea..916b16d 100644 --- a/app/src/main/res/drawable/ic_version.xml +++ b/app/src/main/res/drawable/ic_version.xml @@ -1,24 +1,12 @@ - + android:width="800dp" + android:height="800dp" + android:viewportWidth="24" + android:viewportHeight="24"> + android:pathData="M20.245,14.75C21.18,15.364 21.137,16.787 20.117,17.326L12.935,21.122C12.35,21.432 11.65,21.432 11.066,21.122L3.884,17.326C2.863,16.787 2.82,15.364 3.755,14.75L3.818,14.789L3.818,14.789L11.065,18.622C11.65,18.931 12.35,18.931 12.935,18.622L20.116,14.826C20.161,14.802 20.204,14.777 20.245,14.75ZM20.245,10.75C21.139,11.337 21.139,12.665 20.244,13.251L20.117,13.326L12.935,17.122C12.403,17.403 11.777,17.429 11.228,17.199L11.066,17.122L3.884,13.326C2.863,12.787 2.82,11.364 3.755,10.75L3.818,10.789L3.818,10.789L11.065,14.622C11.597,14.903 12.224,14.929 12.773,14.699L12.935,14.622L20.116,10.826C20.161,10.802 20.204,10.777 20.245,10.75ZM12.935,2.878L20.116,6.674C21.182,7.237 21.182,8.763 20.116,9.326L12.935,13.123C12.35,13.432 11.65,13.432 11.065,13.123L3.884,9.326C2.818,8.763 2.818,7.237 3.884,6.674L11.065,2.878C11.65,2.569 12.35,2.569 12.935,2.878Z" + android:strokeWidth="1" + android:fillColor="#09244B" + android:fillType="nonZero" + android:strokeColor="#00000000"/>