personalised error message , now it shows the check out time if already checked Out

This commit is contained in:
sathwikcs
2024-10-25 16:42:49 +05:30
parent de07673a29
commit e435e0ff14

View File

@@ -7,17 +7,16 @@ import androidx.compose.animation.expandVertically
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.animation.shrinkVertically
import androidx.compose.foundation.background
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.fillMaxHeight
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.wrapContentHeight
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack
@@ -37,14 +36,16 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.withStyle
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.hilt.navigation.compose.hiltViewModel
import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.isGranted
import com.google.accompanist.permissions.rememberPermissionState
import `in`.sminnovations.attendanceapp.screens.home.ui.componets.LargeButton
import `in`.sminnovations.attendanceapp.screens.home.ui.componets.QRCodeScannerScreen
import `in`.sminnovations.attendanceapp.screens.home.ui.componets.RequestPermissions
import `in`.sminnovations.attendanceapp.screens.home.viewModel.HomeViewModel
@@ -55,6 +56,7 @@ fun HomeScreen(viewModel: HomeViewModel = hiltViewModel()) {
val isScanning by viewModel.isScanning.collectAsState()
val qrCodeValue by viewModel.qrCodeValue.collectAsState()
val userName by viewModel.userName.collectAsState()
val checkedOutTime by viewModel.checkedOut.collectAsState()
val isLoading by viewModel.isLoading.collectAsState()
val isCheckedIn by viewModel.isCheckedIn.collectAsState()
val isCheckedOut by viewModel.isCheckedOut.collectAsState()
@@ -165,6 +167,71 @@ fun HomeScreen(viewModel: HomeViewModel = hiltViewModel()) {
}
}
errorMessage?.let { message ->
AnimatedVisibility(
visible = message != "" && message != null,
enter = expandVertically(expandFrom = Alignment.Bottom) + fadeIn(),
exit = shrinkVertically(shrinkTowards = Alignment.Bottom) + fadeOut()
) {
Box(
contentAlignment = Alignment.TopCenter,
modifier = Modifier
.fillMaxSize()
.padding(20.dp)
) {
Column {
if (userName != null && userName != "") {
Text(
text = buildAnnotatedString {
append("This Error Message is for ")
withStyle(style = SpanStyle(color = Color.Green)) {
append(userName)
}
},
color = MaterialTheme.colorScheme.error,
fontWeight = FontWeight.Bold,
letterSpacing = 2.sp,
lineHeight = 40.sp,
fontSize = 20.sp,
modifier = Modifier.padding(8.dp)
)
}
OutlinedCard(
modifier = Modifier
.wrapContentSize()
.padding(16.dp)
) {
Text(
text = message,
letterSpacing = 2.sp,
lineHeight = 40.sp,
fontSize = 30.sp,
fontWeight = FontWeight.Bold,
modifier = Modifier.padding(10.dp, 7.dp),
color = MaterialTheme.colorScheme.error
)
}
if (checkedOutTime !="") {
Spacer(modifier = Modifier.height(15.dp))
Text(
text = "check Out Time",
lineHeight = 40.sp,
fontSize = 30.sp,
fontWeight = FontWeight.Bold
)
Spacer(modifier = Modifier.height(15.dp))
Text(
text = checkedOutTime,
lineHeight = 40.sp,
fontSize = 30.sp,
fontWeight = FontWeight.Bold,
color = Color.Green
)
}
}
}
}
}
// Loading Indicator
if (isLoading) {
@@ -177,48 +244,33 @@ fun HomeScreen(viewModel: HomeViewModel = hiltViewModel()) {
OutlinedCard(modifier = Modifier
.fillMaxWidth()
.fillMaxHeight(.4f)
.wrapContentHeight()
.align(Alignment.BottomCenter)
.padding(10.dp), onClick = { }) {
Box(modifier = Modifier.fillMaxSize()) {
errorMessage?.let { message ->
OutlinedCard(
modifier = Modifier
.wrapContentSize()
.align(Alignment.TopCenter)
.padding(16.dp)
) {
Text(
text = message,
color = MaterialTheme.colorScheme.error,
fontWeight = FontWeight.Bold,
modifier = Modifier
.background(Color(0xFFFFCDD2)) // Light red background for error
.padding(8.dp)
)
}
}
.padding(10.dp), onClick ={
if (isScanning) {
viewModel.stopScanning()
} else {
viewModel.startScanning()
}
}
) {
Box(modifier = Modifier.fillMaxWidth()) {
Column(Modifier.align(Alignment.BottomCenter)) {
Row(
Modifier.fillMaxWidth(),
Modifier
.wrapContentHeight()
.fillMaxWidth()
.padding(bottom = 24.dp, top = 24.dp),
horizontalArrangement = Arrangement.Center,
verticalAlignment = Alignment.CenterVertically
) {
LargeButton(text = if (isScanning) "Close Scanner" else "Open Scanner",
onClick = if (isScanning) {
{
viewModel.stopScanning()
}
} else {
{
viewModel.startScanning()
}
},
modifier = Modifier.padding(bottom = 24.dp))
verticalAlignment = Alignment.CenterVertically,
) {
Text(
text = if (isScanning) "Close Scanner" else "Open Scanner",
fontSize = 18.sp,
fontWeight = FontWeight.Bold,
modifier =Modifier.padding(20.dp,10.dp)
)
}
LaunchedEffect(qrCodeValue) {
viewModel.login()