diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/navigations/AppNavigator.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/navigations/AppNavigator.kt index 27546de..0e0a6a9 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/navigations/AppNavigator.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/navigations/AppNavigator.kt @@ -163,9 +163,7 @@ fun AppNavigator() { navAccueil = { navController.navigate(Accueil(submitQuote.userIndex)) }, navFavorite = { navController.navigate(Favorite(submitQuote.userIndex)) }, navProfil = { navController.navigate(Profil(submitQuote.userIndex)) }, - navControllerQuiz = { idQuiz -> - navController.navigate(Quiz(submitQuote.userIndex, idQuiz)) - }, + navQuiz = { navController.navigate(QuizMenu(submitQuote.userIndex)) }, navRecap = { quoteContent, character, source -> navController.navigate( RecapSubmit( diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/ProfilPage.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/ProfilPage.kt index 46893a8..8d9aff9 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/ProfilPage.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/ProfilPage.kt @@ -108,14 +108,11 @@ fun ProfilPage(index: Int, SpaceHeightComponent(16) // Bouton - //ButtonProfile(R.string.ButtonAddQuoteprofile, 18, Color.Black, Color.White,navUnLog) // Pas encore de navigation definie - //SpaceHeightComponent(16) + ButtonProfil(R.string.ButtonAddQuoteprofile, 18, MaterialTheme.colorScheme.onPrimary, navSubmitQuote) // Pas encore de navigation definie + SpaceHeightComponent(16) ButtonLanguage(R.string.ButtonLanguageprofile, 18, MaterialTheme.colorScheme.onPrimary, MaterialTheme.colorScheme.background,services, user) SpaceHeightComponent(16) ButtonUnLog(R.string.ButtonUnlogprofile, 18, MaterialTheme.colorScheme.onPrimary, MaterialTheme.colorScheme.background,navUnLog) - - - } } } @@ -219,8 +216,6 @@ fun DisplayEmail(email: String, onEdit: () -> Unit) { } } - - @Composable fun EditUsername(userName: String, index: Int, service : IServices) { var username by remember { mutableStateOf(userName) } @@ -288,8 +283,6 @@ fun DisplayUsername(username: String, onEdit: () -> Unit) { } } - - @Composable fun EditPasswd(index: Int, service: IServices) { var password by remember { mutableStateOf("*******") } // Mot de passe actuel (affiché comme un masque) @@ -476,16 +469,16 @@ fun ButtonLanguage(textResId : Int, size :Int, colorTexte : Color, colorButton : } @Composable -fun ButtonProfil(textResId : Int, size :Int, colorTexte : Color, colorButton : Color,navController: () -> Unit){ +fun ButtonProfil(textResId : Int, size :Int, colorButton : Color,navController: () -> Unit){ val text = stringResource(id = textResId) Button( onClick = { navController() }, - colors = ButtonDefaults.buttonColors(containerColor = colorButton), + colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.background), modifier = Modifier.fillMaxWidth(), ) { - Text(text, fontSize = size.sp, color = colorTexte) + Text(text, fontSize = size.sp, color = MaterialTheme.colorScheme.primary) } } \ No newline at end of file diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizMenu.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizMenu.kt index 35509ac..2223be5 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizMenu.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizMenu.kt @@ -64,7 +64,6 @@ fun QuizMenu( color = MaterialTheme.colorScheme.onBackground, style = TextStyle( fontSize = 25.sp, - fontWeight = FontWeight.Bold, textAlign = TextAlign.Center ) ) diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/RecapSubmitPage.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/RecapSubmitPage.kt index 1c7a3db..65beb66 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/RecapSubmitPage.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/RecapSubmitPage.kt @@ -1,36 +1,21 @@ package com.example.what_the_fantasy.ui.screens -import android.content.Context -import android.content.Intent 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.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Favorite -import androidx.compose.material.icons.filled.FavoriteBorder -import androidx.compose.material.icons.filled.MailOutline -import androidx.compose.material.icons.filled.Share -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton import androidx.compose.material3.Text import androidx.compose.ui.draw.clip -import androidx.compose.ui.draw.drawBehind -import androidx.compose.ui.geometry.CornerRadius -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import com.example.what_the_fantasy.R import coil.compose.AsyncImage import com.example.what_the_fantasy.ui.components.NavBar -import com.example.what_the_fantasy.ui.theme.gradienBox import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.height -import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -38,7 +23,6 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign -import com.example.what_the_fantasy.data.model.Character @Composable @@ -46,10 +30,12 @@ fun RecapSubmitPage( index: Int, navFavorite: (Int) -> Unit, navAccueil: (Int) -> Unit, - navProfil:(Int) -> Unit, - quoteContent : String, + navProfil: (Int) -> Unit, + quoteContent: String, character: String, - source: String + source: String, + backgroundColor: Color = MaterialTheme.colorScheme.onPrimary, + textColor: Color = Color.White ) { NavBar(onQuiz = true, index = index, @@ -60,110 +46,64 @@ fun RecapSubmitPage( ) { Column( - modifier = Modifier.fillMaxSize().background(Color(0xFF100C1B)) + modifier = Modifier + .fillMaxHeight() + .background(MaterialTheme.colorScheme.background) + .padding(20.dp) ) { - // Contenu princiapl + Spacer(Modifier.height(20.dp)) + Text( + text = "▶ Recap de la citation ◀", + color = Color.White, + style = TextStyle( + fontSize = 25.sp, + textAlign = TextAlign.Center + ), + modifier = Modifier + .fillMaxWidth() + ) + Spacer(Modifier.height(20.dp)) Column( modifier = Modifier - .weight(0.9f) - .fillMaxSize() - .padding(20.dp), + .background(backgroundColor, shape = RoundedCornerShape(20.dp)) + .fillMaxWidth() + .height(500.dp), + verticalArrangement = Arrangement.SpaceEvenly, horizontalAlignment = Alignment.CenterHorizontally ) { + AsyncImage( + model = "https://img.freepik.com/vecteurs-libre/personnage-guerrier-fantaisie_1045-185.jpg?size=338&ext=jpg", + contentDescription = "Image de citation", + modifier = Modifier + .size(150.dp) + .clip(RoundedCornerShape(15.dp)) + ) + + Spacer(modifier = Modifier.height(10.dp)) + Text( - text = "▶ Recap de la citation ◀", - color = Color.White, - style = TextStyle( - fontSize = 25.sp, - fontWeight = FontWeight.Bold, - textAlign = TextAlign.Center - ) + text = "\"$quoteContent\"", + fontSize = 20.sp, + fontWeight = FontWeight.Bold, + color = textColor, + textAlign = TextAlign.Center + ) + + Text( + text = "Personnage : $character", + fontSize = 16.sp, + fontWeight = FontWeight.Medium, + color = textColor + ) + + Text( + text = "Source : $source", + fontSize = 16.sp, + fontWeight = FontWeight.Medium, + color = textColor ) - Spacer(Modifier.height(20.dp)) - Column( - modifier = Modifier - .background(brush = gradient, shape = RoundedCornerShape(20.dp)) - .fillMaxSize() - .padding(vertical = 30.dp) - .verticalScroll(rememberScrollState()), - horizontalAlignment = Alignment.CenterHorizontally - ) { - Column(modifier = Modifier - .padding(15.dp) - .drawBehind { - drawRoundRect( - gradienBox, - cornerRadius = CornerRadius(15.dp.toPx()), - ) - } - ) { - Row(modifier = Modifier.padding(15.dp)) { - ImageQuote( - imageUrl = "https://img.freepik.com/vecteurs-libre/personnage-guerrier-fantaisie_1045-185.jpg?size=338&ext=jpg" - ) - Column { - QuoteText( - text = '"' + quoteContent + '"' - ) - } - } - Column(modifier = Modifier - .padding(15.dp) - .fillMaxWidth() - ) { - InfoQuoteText( - nameId = R.string.source, - text = source - ) - Text( - text = "Character : $character" - ) - } - } - } } } } } -@Composable -fun QuoteText2(text: String ){ - Text( - text = text, - modifier = Modifier.padding(start = 10.dp, top = 15.dp), - fontWeight = FontWeight(1000), - fontSize = 20.sp, - color = Color.White - ) -} - -@Composable -fun ImageQuote2(imageUrl : String){ - AsyncImage( - model = imageUrl, - contentDescription = "exemple", - modifier = Modifier - .size(150.dp) - .clip(RoundedCornerShape(15.dp)) - ) -} - -@Composable -fun InfoQuoteText2(nameId : Int, text : String){ - Column(modifier = Modifier.padding(bottom = 20.dp)){ - - Text( - text = text, - fontSize = 16.sp, - fontWeight = FontWeight(400), - modifier = Modifier - .drawBehind { - drawRoundRect( - Color(255,255,255), - cornerRadius = CornerRadius(15.dp.toPx()) - ) - } - .padding(5.dp), - ) - } -} \ No newline at end of file diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/SubmitQuotePage.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/SubmitQuotePage.kt index 675dfac..ce90418 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/SubmitQuotePage.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/SubmitQuotePage.kt @@ -14,8 +14,10 @@ import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Text +import androidx.compose.material3.TextField import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -43,7 +45,7 @@ fun SubmitQuotePage( navFavorite: (Int) -> Unit, navAccueil: (Int) -> Unit, navProfil:(Int) -> Unit, - navControllerQuiz: (Int) -> Unit, + navQuiz: (Int) -> Unit, navRecap: (String, String, String) -> Unit ) { NavBar( @@ -51,13 +53,13 @@ fun SubmitQuotePage( navControllerFavorite = navFavorite, navControllerAccueil = navAccueil, navControllerProfil = navProfil, - navControllerQuiz = navControllerQuiz + navControllerQuiz = navQuiz ) { Box( modifier = Modifier .fillMaxSize() - .background(colorBackground) - .verticalScroll(rememberScrollState()), + .verticalScroll(rememberScrollState()) + .background(MaterialTheme.colorScheme.background,), contentAlignment = Alignment.Center ){ Column( @@ -65,11 +67,11 @@ fun SubmitQuotePage( .fillMaxWidth(0.9f) .padding(20.dp) .clip(RoundedCornerShape(16.dp)) - .background(gradienBox) + .background(MaterialTheme.colorScheme.onPrimary) .padding(20.dp), horizontalAlignment = Alignment.CenterHorizontally ) { - TitlePageComponent(R.string.titleSubmitQuote, Color.White) + TitlePageComponent(R.string.titleSubmitQuote, MaterialTheme.colorScheme.primary) SpaceHeightComponent(20) SubmitQuoteButton( quoteTextField(R.string.quote), @@ -79,12 +81,13 @@ fun SubmitQuotePage( yearTextField(R.string.year), R.string.titleButtonSubmit, 18, - Color.White, - Color.Black, + MaterialTheme.colorScheme.background, + MaterialTheme.colorScheme.primary, navRecap ) SpaceHeightComponent(20) - BackButton(R.string.titleButtonBack, 12, Color.White,navProfil, index) + // Bouton profile deja disponible dans la navbar + //BackButton(R.string.titleButtonBack, 12, Color.White,navProfil, index) } } } @@ -95,11 +98,12 @@ fun SubmitQuotePage( fun quoteTextField(textQuoteResId : Int) : String{ val textQuote = stringResource(id = textQuoteResId) var quote by remember { mutableStateOf("") } - Column(modifier = Modifier.padding(top = 16.dp)) { + Column(modifier = Modifier + .padding(top = 16.dp)) { OutlinedTextField( value = quote, onValueChange = { quote = it }, - label = { Text(textQuote, color = Color.White) }, + label = { Text(textQuote, color = MaterialTheme.colorScheme.primary) }, modifier = Modifier .fillMaxWidth() .padding(top = 8.dp), @@ -119,7 +123,7 @@ fun characterTextField(textCharacterResId : Int) : String{ OutlinedTextField( value = character, onValueChange = { character = it }, - label = { Text(textCharacter, color = Color.White) }, + label = { Text(textCharacter, color = MaterialTheme.colorScheme.primary) }, modifier = Modifier .fillMaxWidth() .padding(top = 8.dp), @@ -138,7 +142,7 @@ fun sourceTextField(textSourceResId : Int) : String{ OutlinedTextField( value = source, onValueChange = { source = it }, - label = { Text(textSource, color = Color.White) }, + label = { Text(textSource, color = MaterialTheme.colorScheme.primary) }, modifier = Modifier .fillMaxWidth() .padding(top = 8.dp), @@ -158,7 +162,7 @@ fun timeCodeTextField(textTimeCodeResId : Int) : String{ OutlinedTextField( value = timeCode, onValueChange = { timeCode = it }, - label = { Text(textTimeCode, color = Color.White) }, + label = { Text(textTimeCode, color = MaterialTheme.colorScheme.primary) }, modifier = Modifier .fillMaxWidth() .padding(top = 8.dp), @@ -178,7 +182,7 @@ fun yearTextField(textYearResId : Int) : String{ OutlinedTextField( value = year, onValueChange = { year = it }, - label = { Text(textYear, color = Color.White) }, + label = { Text(textYear, color = MaterialTheme.colorScheme.primary) }, modifier = Modifier .fillMaxWidth() .padding(top = 8.dp), @@ -238,11 +242,10 @@ fun validSubmitQuote(quote : String, character : String, source: String, timeCod val timeCodeRegex = """^\d{1}:\d{2}:\d{2}$""".toRegex() val movieTitleRegex = """^[A-Za-z0-9\s\-\(\):]+$""".toRegex() val characterRegex = """^[A-Za-zÀ-ÿ\s\-']+$""".toRegex() - val invalidRegex = """^[a-zA-Z0-9]*$""".toRegex() - val isNotBlank = quote.isNotBlank() && quote.matches(quoteRegex) && !quote.matches(invalidRegex) && quote.length in 3..100 && - character.isNotBlank() && character.matches(characterRegex) && character.length in 3..50 && !character.matches(invalidRegex) && - source.isNotBlank() && source.matches(movieTitleRegex) && source.length in 3..50 && !source.matches(invalidRegex) && + val isNotBlank = quote.isNotBlank() && quote.matches(quoteRegex) && quote.length in 3..100 && + character.isNotBlank() && character.matches(characterRegex) && character.length in 3..50 && + source.isNotBlank() && source.matches(movieTitleRegex) && source.length in 3..50 && timeCode.isNotBlank() && timeCode.matches(timeCodeRegex) && year.isNotBlank() && year.all { it.isDigit() } && year.length == 4 && year.toInt() in 1900..2025 return isNotBlank