feat : Add style to SubmitQuote + Recap & Fix LGM problems

UI-Style
tomivt 1 month ago
parent d452574e42
commit 06de7512e8

@ -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(

@ -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)
}
}

@ -64,7 +64,6 @@ fun QuizMenu(
color = MaterialTheme.colorScheme.onBackground,
style = TextStyle(
fontSize = 25.sp,
fontWeight = FontWeight.Bold,
textAlign = TextAlign.Center
)
)

@ -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,
@ -59,111 +45,65 @@ fun RecapSubmitPage(
navControllerQuiz = { }
) {
Column(
modifier = Modifier.fillMaxSize().background(Color(0xFF100C1B))
) {
// Contenu princiapl
Column(
modifier = Modifier
.weight(0.9f)
.fillMaxSize()
.padding(20.dp),
horizontalAlignment = Alignment.CenterHorizontally
.fillMaxHeight()
.background(MaterialTheme.colorScheme.background)
.padding(20.dp)
) {
Spacer(Modifier.height(20.dp))
Text(
text = "▶ Recap de la citation ◀",
color = Color.White,
style = TextStyle(
fontSize = 25.sp,
fontWeight = FontWeight.Bold,
textAlign = TextAlign.Center
)
),
modifier = Modifier
.fillMaxWidth()
)
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)
.background(backgroundColor, shape = RoundedCornerShape(20.dp))
.fillMaxWidth()
.height(500.dp),
verticalArrangement = Arrangement.SpaceEvenly,
horizontalAlignment = Alignment.CenterHorizontally
) {
InfoQuoteText(
nameId = R.string.source,
text = source
)
Text(
text = "Character : $character"
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))
)
}
}
}
}
}
}
}
@Composable
fun QuoteText2(text: String ){
Spacer(modifier = Modifier.height(10.dp))
Text(
text = text,
modifier = Modifier.padding(start = 10.dp, top = 15.dp),
fontWeight = FontWeight(1000),
text = "\"$quoteContent\"",
fontSize = 20.sp,
color = Color.White
fontWeight = FontWeight.Bold,
color = textColor,
textAlign = TextAlign.Center
)
}
@Composable
fun ImageQuote2(imageUrl : String){
AsyncImage(
model = imageUrl,
contentDescription = "exemple",
modifier = Modifier
.size(150.dp)
.clip(RoundedCornerShape(15.dp))
Text(
text = "Personnage : $character",
fontSize = 16.sp,
fontWeight = FontWeight.Medium,
color = textColor
)
}
@Composable
fun InfoQuoteText2(nameId : Int, text : String){
Column(modifier = Modifier.padding(bottom = 20.dp)){
Text(
text = text,
text = "Source : $source",
fontSize = 16.sp,
fontWeight = FontWeight(400),
modifier = Modifier
.drawBehind {
drawRoundRect(
Color(255,255,255),
cornerRadius = CornerRadius(15.dp.toPx())
fontWeight = FontWeight.Medium,
color = textColor
)
}
.padding(5.dp),
)
}
}
}

@ -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

Loading…
Cancel
Save