diff --git a/app/src/main/java/in/sminnovations/attendanceapp/screens/home/ui/home.kt b/app/src/main/java/in/sminnovations/attendanceapp/screens/home/ui/home.kt index 3b36423..ecfa7cf 100644 --- a/app/src/main/java/in/sminnovations/attendanceapp/screens/home/ui/home.kt +++ b/app/src/main/java/in/sminnovations/attendanceapp/screens/home/ui/home.kt @@ -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()