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)) }, navAccueil = { navController.navigate(Accueil(submitQuote.userIndex)) },
navFavorite = { navController.navigate(Favorite(submitQuote.userIndex)) }, navFavorite = { navController.navigate(Favorite(submitQuote.userIndex)) },
navProfil = { navController.navigate(Profil(submitQuote.userIndex)) }, navProfil = { navController.navigate(Profil(submitQuote.userIndex)) },
navControllerQuiz = { idQuiz -> navQuiz = { navController.navigate(QuizMenu(submitQuote.userIndex)) },
navController.navigate(Quiz(submitQuote.userIndex, idQuiz))
},
navRecap = { quoteContent, character, source -> navRecap = { quoteContent, character, source ->
navController.navigate( navController.navigate(
RecapSubmit( RecapSubmit(

@ -108,14 +108,11 @@ fun ProfilPage(index: Int,
SpaceHeightComponent(16) SpaceHeightComponent(16)
// Bouton // Bouton
//ButtonProfile(R.string.ButtonAddQuoteprofile, 18, Color.Black, Color.White,navUnLog) // Pas encore de navigation definie ButtonProfil(R.string.ButtonAddQuoteprofile, 18, MaterialTheme.colorScheme.onPrimary, navSubmitQuote) // Pas encore de navigation definie
//SpaceHeightComponent(16) SpaceHeightComponent(16)
ButtonLanguage(R.string.ButtonLanguageprofile, 18, MaterialTheme.colorScheme.onPrimary, MaterialTheme.colorScheme.background,services, user) ButtonLanguage(R.string.ButtonLanguageprofile, 18, MaterialTheme.colorScheme.onPrimary, MaterialTheme.colorScheme.background,services, user)
SpaceHeightComponent(16) SpaceHeightComponent(16)
ButtonUnLog(R.string.ButtonUnlogprofile, 18, MaterialTheme.colorScheme.onPrimary, MaterialTheme.colorScheme.background,navUnLog) ButtonUnLog(R.string.ButtonUnlogprofile, 18, MaterialTheme.colorScheme.onPrimary, MaterialTheme.colorScheme.background,navUnLog)
} }
} }
} }
@ -219,8 +216,6 @@ fun DisplayEmail(email: String, onEdit: () -> Unit) {
} }
} }
@Composable @Composable
fun EditUsername(userName: String, index: Int, service : IServices) { fun EditUsername(userName: String, index: Int, service : IServices) {
var username by remember { mutableStateOf(userName) } var username by remember { mutableStateOf(userName) }
@ -288,8 +283,6 @@ fun DisplayUsername(username: String, onEdit: () -> Unit) {
} }
} }
@Composable @Composable
fun EditPasswd(index: Int, service: IServices) { fun EditPasswd(index: Int, service: IServices) {
var password by remember { mutableStateOf("*******") } // Mot de passe actuel (affiché comme un masque) 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 @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) val text = stringResource(id = textResId)
Button( Button(
onClick = { onClick = {
navController() navController()
}, },
colors = ButtonDefaults.buttonColors(containerColor = colorButton), colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.background),
modifier = Modifier.fillMaxWidth(), 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, color = MaterialTheme.colorScheme.onBackground,
style = TextStyle( style = TextStyle(
fontSize = 25.sp, fontSize = 25.sp,
fontWeight = FontWeight.Bold,
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
) )

@ -1,36 +1,21 @@
package com.example.what_the_fantasy.ui.screens 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.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column 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.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size 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.material3.Text
import androidx.compose.ui.draw.clip 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.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import com.example.what_the_fantasy.R
import coil.compose.AsyncImage import coil.compose.AsyncImage
import com.example.what_the_fantasy.ui.components.NavBar 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.Spacer
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier 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.TextStyle
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import com.example.what_the_fantasy.data.model.Character
@Composable @Composable
@ -46,10 +30,12 @@ fun RecapSubmitPage(
index: Int, index: Int,
navFavorite: (Int) -> Unit, navFavorite: (Int) -> Unit,
navAccueil: (Int) -> Unit, navAccueil: (Int) -> Unit,
navProfil:(Int) -> Unit, navProfil: (Int) -> Unit,
quoteContent : String, quoteContent: String,
character: String, character: String,
source: String source: String,
backgroundColor: Color = MaterialTheme.colorScheme.onPrimary,
textColor: Color = Color.White
) { ) {
NavBar(onQuiz = true, NavBar(onQuiz = true,
index = index, index = index,
@ -60,110 +46,64 @@ fun RecapSubmitPage(
) { ) {
Column( 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( Column(
modifier = Modifier modifier = Modifier
.weight(0.9f) .background(backgroundColor, shape = RoundedCornerShape(20.dp))
.fillMaxSize() .fillMaxWidth()
.padding(20.dp), .height(500.dp),
verticalArrangement = Arrangement.SpaceEvenly,
horizontalAlignment = Alignment.CenterHorizontally horizontalAlignment = Alignment.CenterHorizontally
) { ) {
Text( AsyncImage(
text = "▶ Recap de la citation ◀", model = "https://img.freepik.com/vecteurs-libre/personnage-guerrier-fantaisie_1045-185.jpg?size=338&ext=jpg",
color = Color.White, contentDescription = "Image de citation",
style = TextStyle(
fontSize = 25.sp,
fontWeight = FontWeight.Bold,
textAlign = TextAlign.Center
)
)
Spacer(Modifier.height(20.dp))
Column(
modifier = Modifier modifier = Modifier
.background(brush = gradient, shape = RoundedCornerShape(20.dp)) .size(150.dp)
.fillMaxSize() .clip(RoundedCornerShape(15.dp))
.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 Spacer(modifier = Modifier.height(10.dp))
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 Text(
fun ImageQuote2(imageUrl : String){ text = "\"$quoteContent\"",
AsyncImage( fontSize = 20.sp,
model = imageUrl, fontWeight = FontWeight.Bold,
contentDescription = "exemple", color = textColor,
modifier = Modifier textAlign = TextAlign.Center
.size(150.dp) )
.clip(RoundedCornerShape(15.dp))
)
}
@Composable Text(
fun InfoQuoteText2(nameId : Int, text : String){ text = "Personnage : $character",
Column(modifier = Modifier.padding(bottom = 20.dp)){ fontSize = 16.sp,
fontWeight = FontWeight.Medium,
color = textColor
)
Text( Text(
text = text, text = "Source : $source",
fontSize = 16.sp, fontSize = 16.sp,
fontWeight = FontWeight(400), fontWeight = FontWeight.Medium,
modifier = Modifier color = textColor
.drawBehind { )
drawRoundRect( }
Color(255,255,255), }
cornerRadius = CornerRadius(15.dp.toPx())
)
}
.padding(5.dp),
)
} }
} }

@ -14,8 +14,10 @@ import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TextField
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
@ -43,7 +45,7 @@ fun SubmitQuotePage(
navFavorite: (Int) -> Unit, navFavorite: (Int) -> Unit,
navAccueil: (Int) -> Unit, navAccueil: (Int) -> Unit,
navProfil:(Int) -> Unit, navProfil:(Int) -> Unit,
navControllerQuiz: (Int) -> Unit, navQuiz: (Int) -> Unit,
navRecap: (String, String, String) -> Unit navRecap: (String, String, String) -> Unit
) { ) {
NavBar( NavBar(
@ -51,13 +53,13 @@ fun SubmitQuotePage(
navControllerFavorite = navFavorite, navControllerFavorite = navFavorite,
navControllerAccueil = navAccueil, navControllerAccueil = navAccueil,
navControllerProfil = navProfil, navControllerProfil = navProfil,
navControllerQuiz = navControllerQuiz navControllerQuiz = navQuiz
) { ) {
Box( Box(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.background(colorBackground) .verticalScroll(rememberScrollState())
.verticalScroll(rememberScrollState()), .background(MaterialTheme.colorScheme.background,),
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
){ ){
Column( Column(
@ -65,11 +67,11 @@ fun SubmitQuotePage(
.fillMaxWidth(0.9f) .fillMaxWidth(0.9f)
.padding(20.dp) .padding(20.dp)
.clip(RoundedCornerShape(16.dp)) .clip(RoundedCornerShape(16.dp))
.background(gradienBox) .background(MaterialTheme.colorScheme.onPrimary)
.padding(20.dp), .padding(20.dp),
horizontalAlignment = Alignment.CenterHorizontally horizontalAlignment = Alignment.CenterHorizontally
) { ) {
TitlePageComponent(R.string.titleSubmitQuote, Color.White) TitlePageComponent(R.string.titleSubmitQuote, MaterialTheme.colorScheme.primary)
SpaceHeightComponent(20) SpaceHeightComponent(20)
SubmitQuoteButton( SubmitQuoteButton(
quoteTextField(R.string.quote), quoteTextField(R.string.quote),
@ -79,12 +81,13 @@ fun SubmitQuotePage(
yearTextField(R.string.year), yearTextField(R.string.year),
R.string.titleButtonSubmit, R.string.titleButtonSubmit,
18, 18,
Color.White, MaterialTheme.colorScheme.background,
Color.Black, MaterialTheme.colorScheme.primary,
navRecap navRecap
) )
SpaceHeightComponent(20) 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{ fun quoteTextField(textQuoteResId : Int) : String{
val textQuote = stringResource(id = textQuoteResId) val textQuote = stringResource(id = textQuoteResId)
var quote by remember { mutableStateOf("") } var quote by remember { mutableStateOf("") }
Column(modifier = Modifier.padding(top = 16.dp)) { Column(modifier = Modifier
.padding(top = 16.dp)) {
OutlinedTextField( OutlinedTextField(
value = quote, value = quote,
onValueChange = { quote = it }, onValueChange = { quote = it },
label = { Text(textQuote, color = Color.White) }, label = { Text(textQuote, color = MaterialTheme.colorScheme.primary) },
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.padding(top = 8.dp), .padding(top = 8.dp),
@ -119,7 +123,7 @@ fun characterTextField(textCharacterResId : Int) : String{
OutlinedTextField( OutlinedTextField(
value = character, value = character,
onValueChange = { character = it }, onValueChange = { character = it },
label = { Text(textCharacter, color = Color.White) }, label = { Text(textCharacter, color = MaterialTheme.colorScheme.primary) },
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.padding(top = 8.dp), .padding(top = 8.dp),
@ -138,7 +142,7 @@ fun sourceTextField(textSourceResId : Int) : String{
OutlinedTextField( OutlinedTextField(
value = source, value = source,
onValueChange = { source = it }, onValueChange = { source = it },
label = { Text(textSource, color = Color.White) }, label = { Text(textSource, color = MaterialTheme.colorScheme.primary) },
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.padding(top = 8.dp), .padding(top = 8.dp),
@ -158,7 +162,7 @@ fun timeCodeTextField(textTimeCodeResId : Int) : String{
OutlinedTextField( OutlinedTextField(
value = timeCode, value = timeCode,
onValueChange = { timeCode = it }, onValueChange = { timeCode = it },
label = { Text(textTimeCode, color = Color.White) }, label = { Text(textTimeCode, color = MaterialTheme.colorScheme.primary) },
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.padding(top = 8.dp), .padding(top = 8.dp),
@ -178,7 +182,7 @@ fun yearTextField(textYearResId : Int) : String{
OutlinedTextField( OutlinedTextField(
value = year, value = year,
onValueChange = { year = it }, onValueChange = { year = it },
label = { Text(textYear, color = Color.White) }, label = { Text(textYear, color = MaterialTheme.colorScheme.primary) },
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.padding(top = 8.dp), .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 timeCodeRegex = """^\d{1}:\d{2}:\d{2}$""".toRegex()
val movieTitleRegex = """^[A-Za-z0-9\s\-\(\):]+$""".toRegex() val movieTitleRegex = """^[A-Za-z0-9\s\-\(\):]+$""".toRegex()
val characterRegex = """^[A-Za-zÀ-ÿ\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 && val isNotBlank = quote.isNotBlank() && quote.matches(quoteRegex) && quote.length in 3..100 &&
character.isNotBlank() && character.matches(characterRegex) && character.length in 3..50 && !character.matches(invalidRegex) && character.isNotBlank() && character.matches(characterRegex) && character.length in 3..50 &&
source.isNotBlank() && source.matches(movieTitleRegex) && source.length in 3..50 && !source.matches(invalidRegex) && source.isNotBlank() && source.matches(movieTitleRegex) && source.length in 3..50 &&
timeCode.isNotBlank() && timeCode.matches(timeCodeRegex) && timeCode.isNotBlank() && timeCode.matches(timeCodeRegex) &&
year.isNotBlank() && year.all { it.isDigit() } && year.length == 4 && year.toInt() in 1900..2025 year.isNotBlank() && year.all { it.isDigit() } && year.length == 4 && year.toInt() in 1900..2025
return isNotBlank return isNotBlank

Loading…
Cancel
Save