diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/local/CommentStub.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/local/CommentStub.kt new file mode 100644 index 0000000..0009b0c --- /dev/null +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/local/CommentStub.kt @@ -0,0 +1,39 @@ +package com.example.what_the_fantasy.data.local + +import com.example.what_the_fantasy.data.model.Comment +import com.example.what_the_fantasy.data.model.User + +object CommentStub { + val comments: MutableList = mutableListOf( + Comment("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("Trop bien","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("encore un Test","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("Je suis la ","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("J'en ai rien a foutre de la citation","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("Android c'est bien","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("je sais plus quoi mettre donc ca va être le bordel","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("Et un test de plus","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("La bombe à été activer","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("J'aime pas les *****","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("Test","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("Trop bien","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("encore un Test","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("Je suis la ","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("J'en ai rien a foutre de la citation","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("Android c'est bien","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("je sais plus quoi mettre donc ca va être le bordel","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("Et un test de plus","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("La bombe à été activer","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("J'aime pas les *****","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("Test","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("Trop bien","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("encore un Test","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("Je suis la ","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("J'en ai rien a foutre de la citation","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("Android c'est bien","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("je sais plus quoi mettre donc ca va être le bordel","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("Et un test de plus","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("La bombe à été activer","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + Comment("J'aime pas les *****","Dev","21-12-2005", "https://img.freepik.com/vecteurs-libre/personnage-guerrier-homme-fantaisie_1045-194.jpg?size=338&ext=jpg"), + ) +} \ No newline at end of file diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/local/FavoriteStub.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/local/FavoriteStub.kt index b092123..b977a10 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/local/FavoriteStub.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/local/FavoriteStub.kt @@ -6,7 +6,7 @@ import com.example.what_the_fantasy.data.model.Favorite object FavoriteStub { val favorites: MutableList = mutableListOf( - Favorite(users[0], mutableListOf(quotes[0], quotes[0], quotes[0])), // Aragorn123 aime ces citations + Favorite(users[0], mutableListOf(quotes[0], quotes[1], quotes[12])), // Aragorn123 aime ces citations Favorite(users[1], mutableListOf(quotes[5], quotes[6], quotes[7])), // Legolas456 aime ces citations Favorite(users[2], mutableListOf(quotes[8], quotes[9], quotes[10])), // Gandalf789 aime ces citations Favorite(users[3], mutableListOf(quotes[11], quotes[12], quotes[13])), // FrodoBaggins aime ces citations diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/local/QuestionStub.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/local/QuestionStub.kt index 19833ec..b786637 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/local/QuestionStub.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/local/QuestionStub.kt @@ -97,4 +97,6 @@ object QuestionStub { val allQuestions: List = listOf( question1, question2, question3, question4, question5, question6, question7, question8, question9, question10 ) + + val shuffleRandomQuestions: List = allQuestions.shuffled().take(10) } \ No newline at end of file diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/model/Comment.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/model/Comment.kt new file mode 100644 index 0000000..2289d09 --- /dev/null +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/model/Comment.kt @@ -0,0 +1,8 @@ +package com.example.what_the_fantasy.data.model + +data class Comment( + val content : String, + val user : String, + val date : String, + val img : String +) \ No newline at end of file diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/model/SrcType.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/model/SrcType.kt index 6e8671f..a5c6112 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/model/SrcType.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/model/SrcType.kt @@ -1,7 +1,10 @@ package com.example.what_the_fantasy.data.model +import androidx.compose.ui.res.stringResource +import com.example.what_the_fantasy.R + enum class SrcType (val value: String) { - Movie("@string/movie"), - VideoGame("@string/videoGame"), - Series("@string/series"), + Movie("movie" ), + VideoGame("videoGame"), + Series("series"), } \ No newline at end of file diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/services/IServices.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/services/IServices.kt index 6804fbc..eb0de96 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/services/IServices.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/services/IServices.kt @@ -1,6 +1,7 @@ package com.example.what_the_fantasy.data.services import com.example.what_the_fantasy.data.model.Favorite +import com.example.what_the_fantasy.data.model.Comment import com.example.what_the_fantasy.data.model.Quote import com.example.what_the_fantasy.data.model.User @@ -11,18 +12,23 @@ interface IServices { fun EditImage(imageURL : String, index : Int) fun ChangeLangage(user: User) + fun AddFav(userId: Int, QuoteId : Int) + fun SupFav(userId: Int, QuoteId : Int) + fun AddComment(content : String) fun CreateUser(username : String, email : String, passwd : String, services : IServices) : Boolean fun getFavorite(user: User): List fun getAllUsers(): List - + fun getComment(quoteId : Int) : List fun getUserById(id: Int): User? fun SearchQuote(quote : String) fun getQuote( id : Int): Quote? - fun isFavorite(id : Int): Boolean + fun isFavorite(id : Int, user: User): Boolean fun getAllFavorite(): List fun getAllQuote(): List fun getSomeQuotes(nb: Int, page: Int) : MutableList + + fun search(type : String ,search:String ,indexCount: Int): List } \ No newline at end of file diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/services/ServicesAPI.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/services/ServicesAPI.kt index e7595df..9033c65 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/services/ServicesAPI.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/services/ServicesAPI.kt @@ -1,64 +1,89 @@ package com.example.what_the_fantasy.data.services +import com.example.what_the_fantasy.data.model.Comment import com.example.what_the_fantasy.data.model.Favorite import com.example.what_the_fantasy.data.model.Quote import com.example.what_the_fantasy.data.model.User +//import com.example.what_the_fantasy.ui.navigations.Destination -//class ServicesAPI : IServices { -// override fun EditUsername(username: String, index : Int) : Boolean { -// TODO("Not yet implemented") -// } -// -// override fun EditEmail(email: String, index : Int) : Boolean { -// TODO("Not yet implemented") -// } -// -// override fun EditPasswd(passwd: String, index : Int) { -// TODO("Not yet implemented") -// } -// -// override fun EditImage(imageURL: String, index : Int) { -// TODO("Not yet implemented") -// } -// -// override fun ChangeLangage(user: User) { -// TODO("Not yet implemented") -// } -// -// override fun CreateUser(username: String, email: String, passwd: String, services: IServices) : Boolean { -// TODO("Not yet implemented") -// } -// -// override fun SearchQuote(quote: String) { -// TODO("Not yet implemented") -// } -// -// override fun getQuote(id: Int): Quote? { -// TODO("Not yet implemented") -// } -// -// override fun isFavorite(id: Int): Boolean { -// TODO("Not yet implemented") -// } -// -// override fun getAllFavorite(): List { -// TODO("Not yet implemented") -// } - -// override fun getAllQuote(): List { -// TODO("Not yet implemented") -// } -// -// override fun getFavorite(user: User): Favorite { -// TODO("Not yet implemented") -// } -// -// override fun getAllUsers(): List { -// TODO("Not yet implemented") -// } -// -// override fun getUserById(id: Int): User? { -// TODO("Not yet implemented") -// } -// -//} \ No newline at end of file +class ServicesAPI : IServices { + override fun EditUsername(username: String, index : Int): Boolean { + TODO("Not yet implemented") + } + + override fun EditEmail(email: String, index : Int): Boolean { + TODO("Not yet implemented") + } + + override fun EditPasswd(passwd: String, index : Int) { + TODO("Not yet implemented") + } + + override fun EditImage(imageURL: String, index : Int) { + TODO("Not yet implemented") + } + + override fun ChangeLangage(user: User) { + TODO("Not yet implemented") + } + + override fun AddFav(userId: Int, QuoteId: Int) { + TODO("Not yet implemented") + } + + override fun SupFav(userId: Int, QuoteId: Int) { + TODO("Not yet implemented") + } + + override fun AddComment(content: String) { + TODO("Not yet implemented") + } + + override fun CreateUser(username: String, email: String, passwd: String, services: IServices) : Boolean { + TODO("Not yet implemented") + } + + override fun getFavorite(user: User): List { + TODO("Not yet implemented") + } + + override fun SearchQuote(quote: String) { + TODO("Not yet implemented") + } + + override fun getQuote(id: Int): Quote? { + TODO("Not yet implemented") + } + + override fun isFavorite(id: Int, user: User): Boolean { + TODO("Not yet implemented") + } + + override fun getAllFavorite(): List { + TODO("Not yet implemented") + } + + override fun getAllQuote(): List { + TODO("Not yet implemented") + } + + override fun getSomeQuotes(nb: Int, page: Int): MutableList { + TODO("Not yet implemented") + } + + override fun getAllUsers(): List { + TODO("Not yet implemented") + } + + override fun getComment(quoteId: Int): List { + TODO("Not yet implemented") + } + + override fun getUserById(id: Int): User? { + TODO("Not yet implemented") + } + + override fun search(type : String ,search:String ,indexCount: Int): List{ + TODO("Not yet implemented") + } +} \ No newline at end of file diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/services/ServicesStub.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/services/ServicesStub.kt index 1b5e0b7..61f0201 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/services/ServicesStub.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/services/ServicesStub.kt @@ -1,12 +1,16 @@ package com.example.what_the_fantasy.data.services import android.annotation.SuppressLint +import android.util.Log import com.example.what_the_fantasy.data.local.UserStub.users import com.example.what_the_fantasy.data.model.User import com.example.what_the_fantasy.Logs.LogsUsers import com.example.what_the_fantasy.data.local.FavoriteStub.favorites import com.example.what_the_fantasy.data.local.QuoteStub.quotes import com.example.what_the_fantasy.data.model.Favorite +import com.example.what_the_fantasy.data.local.CommentStub.comments +import com.example.what_the_fantasy.data.local.QuoteStub +import com.example.what_the_fantasy.data.model.Comment import com.example.what_the_fantasy.data.model.Quote import com.example.what_the_fantasy.data.model.SrcLanguage import com.example.what_the_fantasy.ui.components.hashPassword @@ -63,6 +67,20 @@ class ServicesStub : IServices { logsUser.logDebugUserLangage(user, "ChangeLangue") } + override fun AddFav(userId: Int, QuoteId: Int) { + return + } + + override fun SupFav(userId: Int, QuoteId: Int) { + return + } + + override fun AddComment(content: String) { + return + TODO("Not yet implemented") + //comments.add(Comment(content = content,)) + } + override fun CreateUser(username: String, email: String, passwd: String, services : IServices) : Boolean { val date =dateDuJour() val passwordhash = hashPassword(passwd) @@ -83,7 +101,7 @@ class ServicesStub : IServices { override fun getFavorite(user: User): List { val favorite = favorites - return favorite[0].quote + return favorite[user.id-1].quote //return emptyList() } @@ -91,6 +109,8 @@ class ServicesStub : IServices { override fun getAllQuote(): List = quotes override fun getAllUsers(): List = users + override fun getComment(quoteId: Int): List = comments + override fun getUserById(id: Int): User? { return (users.find { it.id == id+1 }) } @@ -100,7 +120,7 @@ class ServicesStub : IServices { } override fun getQuote(id: Int): Quote? { - return (quotes.find { it.id == id+1 }) + return (quotes.find { it.id == id }) } override fun getSomeQuotes(nb: Int, page: Int): MutableList { @@ -111,9 +131,9 @@ class ServicesStub : IServices { return quotes.subList(fromIndex, toIndex).toMutableList() } - - override fun isFavorite(id: Int): Boolean { - TODO("Not yet implemented") + override fun isFavorite(id: Int, user: User): Boolean { + var quote = getFavorite(user) + return quote.find{ it.id == id } != null } @@ -149,4 +169,22 @@ class ServicesStub : IServices { } return false } + + override fun search(type : String ,search:String ,indexCount: Int): List { + return (getAllQuote().filter { + when (type) { + "personnage" -> { + it.character.uppercase().contains(search.uppercase()) + } + + "titre" -> { + it.source.uppercase().contains(search.uppercase()) + } + + else -> { + it.content.uppercase().contains(search.uppercase()) + } + } + }.take(indexCount)) + } } \ No newline at end of file diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/components/NavBar.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/components/NavBar.kt index a69a6dc..01216d0 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/components/NavBar.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/components/NavBar.kt @@ -31,6 +31,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.example.what_the_fantasy.R import com.example.what_the_fantasy.ui.theme.* @@ -40,11 +41,11 @@ fun NavBar(onProfile : Boolean = false , onFavorite : Boolean = false , onAccueil : Boolean = false , onQuiz : Boolean = false , - index:Int, - navControllerProfil: (Int) -> Unit, - navControllerFavorite:(Int) -> Unit, - navControllerAccueil: (Int) -> Unit, - navControllerQuiz: (Int) -> Unit, + navControllerProfil: () -> Unit = {}, + navControllerFavorite:() -> Unit = {}, + navControllerAccueil: () -> Unit = {}, + navControllerQuiz: () -> Unit = {}, + navControllerSearch: () -> Unit = {}, content : @Composable ()-> Unit ) { @@ -64,26 +65,17 @@ fun NavBar(onProfile : Boolean = false , Arrangement.SpaceBetween, verticalAlignment = Alignment.Bottom ) { - ButtonIconVectorInt(Icons.Rounded.AccountCircle,"Profile",navControllerProfil,index,onProfile) - - - IconButton(onClick = { theme=!theme}, - modifier = Modifier.size(60.dp) - .clip(RoundedCornerShape(0)) - ) { - Icon(painterResource( - if(theme)R.drawable.dark_mode_toggle_icon - else R.drawable.light_mode_toggle_icon), - contentDescription = "Dark mode", - modifier = Modifier.fillMaxSize(), - tint = MaterialTheme.colorScheme.primary - ) - } + ButtonIconVector(Icons.Rounded.AccountCircle,stringResource(R.string.NavProfile),navControllerProfil,onProfile) + + ButtonIconVector(Icons.Rounded.Search,stringResource(R.string.NavSearch),navControllerSearch,false) + } } - Box(modifier = Modifier.background(Color.Black).fillMaxHeight(0.90f)){ + Box(modifier = Modifier + .background(Color.Black) + .fillMaxHeight(0.90f)){ content() } @@ -97,20 +89,20 @@ fun NavBar(onProfile : Boolean = false , verticalAlignment = Alignment.CenterVertically ) { - ButtonIconPainterInt(painterResource( + ButtonIconPainter(painterResource( if(onFavorite)R.drawable.favorite_button_full else R.drawable.favorite_button_empty - ),"Favorite",navControllerFavorite,index,onFavorite) + ), stringResource(R.string.NavFavorite) ,navControllerFavorite,onFavorite) - ButtonIconPainterInt(painterResource( + ButtonIconPainter(painterResource( if(onAccueil)R.drawable.home_button_full else R.drawable.home_button_empty - ),"Accueil",navControllerAccueil,index,onAccueil) + ),stringResource(R.string.NavHome),navControllerAccueil,onAccueil) - ButtonIconPainterInt(painterResource( + ButtonIconPainter(painterResource( if(onQuiz)R.drawable.quiz_button_full else R.drawable.quiz_button_empty - ),"Quiz",navControllerQuiz,index,onQuiz) + ),stringResource(R.string.NavQuiz),navControllerQuiz,onQuiz) } } @@ -118,8 +110,8 @@ fun NavBar(onProfile : Boolean = false , } @Composable -fun ButtonIconVectorInt(img : ImageVector, name : String, nav : (Int)->Unit ,index: Int,onPage : Boolean){ - IconButton(onClick = {nav(index)}, +fun ButtonIconVector(img : ImageVector, name : String, nav : ()->Unit,onPage : Boolean){ + IconButton(onClick = {nav()}, enabled = !onPage, colors = IconButtonColors(Color.Transparent, MaterialTheme.colorScheme.onBackground,//couleur quand il n'est pas selectionné Color.Transparent, MaterialTheme.colorScheme.primary),//couleur quand il est selectionné @@ -136,8 +128,8 @@ fun ButtonIconVectorInt(img : ImageVector, name : String, nav : (Int)->Unit ,ind @Composable -fun ButtonIconPainterInt(img : Painter, name : String, nav : (Int)->Unit,index: Int,onPage : Boolean){ - IconButton(onClick = {nav(index)}, +fun ButtonIconPainter(img : Painter, name : String, nav : ()->Unit,onPage : Boolean){ + IconButton(onClick = {nav()}, enabled = !onPage, colors = IconButtonColors(Color.Transparent,MaterialTheme.colorScheme.onBackground,//couleur quand il n'est pas selectionné Color.Transparent, MaterialTheme.colorScheme.primary),//couleur quand il est selectionné @@ -147,7 +139,7 @@ fun ButtonIconPainterInt(img : Painter, name : String, nav : (Int)->Unit,index: Icon(img, contentDescription = name, modifier = Modifier - .fillMaxSize() + .size(50.dp) ) } } \ No newline at end of file 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..1e50e85 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 @@ -38,13 +38,13 @@ data class Quiz(val userIndex: Int, val idQuiz: Int) data class QuizEnd(val userIndex: Int, val idQuiz: Int, val pts: Int) @Serializable -data class OneQuote(val quoteId: Int, val userIndex: Int) +data class QuizRandom(val userIndex: Int) @Serializable -data class Quote(val quoteId: Int, val userIndex: Int) +data class OneQuote(val quoteId: Int, val userIndex: Int) @Serializable -data object Search +data class Search(val userIndex: Int,val type : String = "contenue", val search: String = "") @Serializable data object SignUp @@ -88,14 +88,8 @@ fun AppNavigator() { navFavorite = { navController.navigate(Favorite(accueil.userIndex)) }, navQuiz = { navController.navigate(QuizMenu(accueil.userIndex)) }, navProfil = { navController.navigate(Profil(accueil.userIndex)) }, - navQuote = { quoteId -> - navController.navigate( - OneQuote( - quoteId, - accueil.userIndex - ) - ) - }, + navQuote = { quoteId -> navController.navigate(OneQuote(quoteId,accueil.userIndex)) }, + navSearch = { navController.navigate(Search(accueil.userIndex))}, services = services ) } @@ -106,14 +100,8 @@ fun AppNavigator() { navAccueil = { navController.navigate(Accueil(favorite.userIndex)) }, navQuiz = { navController.navigate(QuizMenu(favorite.userIndex)) }, navProfil = { navController.navigate(Profil(favorite.userIndex)) }, - navQuote = { quoteId -> - navController.navigate( - OneQuote( - quoteId, - favorite.userIndex - ) - ) - }, + navQuote = { quoteId -> navController.navigate(OneQuote(quoteId,favorite.userIndex)) }, + navSearch = { navController.navigate(Search(favorite.userIndex))}, services = services ) } @@ -130,6 +118,7 @@ fun AppNavigator() { popUpTo(profil) { inclusive = true } } }, + navSearch = { navController.navigate(Search(profil.userIndex))}, services = services ) } @@ -137,15 +126,29 @@ fun AppNavigator() { val quote: OneQuote = it.toRoute() QuotePage( quoteId = quote.quoteId, + service = services, index = quote.userIndex, navAccueil = { navController.navigate(Accueil(quote.userIndex)) }, navQuiz = { navController.navigate(QuizMenu(quote.userIndex)) }, navProfil = { navController.navigate(Profil(quote.userIndex)) }, navFavorite = { navController.navigate(Favorite(quote.userIndex)) }, - service = services + navSearch = { navController.navigate(Search(quote.userIndex))} ) } - composable { SearchPage() } + composable { + val search: Search = it.toRoute() + SearchPage( + navAccueil = { navController.navigate(Accueil(search.userIndex)) }, + navFavorite = { navController.navigate(Favorite(search.userIndex)) }, + navQuiz = { navController.navigate(QuizMenu(search.userIndex)) }, + navProfil = { navController.navigate(Profil(search.userIndex)) }, + navQuote = { quoteId -> navController.navigate(OneQuote(quoteId,search.userIndex)) }, + navSearch = {type,newSearch -> navController.navigate(Search(search.userIndex,type,newSearch))}, + services = services, + type = search.type, + search = search.search + ) + } composable { SignUpPage( navControllerLogin = { @@ -159,13 +162,10 @@ fun AppNavigator() { composable { val submitQuote: SubmitQuote = it.toRoute() SubmitQuotePage( - index = submitQuote.userIndex, 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( @@ -187,26 +187,28 @@ fun AppNavigator() { source = recapSubmit.source, navAccueil = { navController.navigate(Accueil(recapSubmit.userIndex)) }, navFavorite = { navController.navigate(Favorite(recapSubmit.userIndex)) }, - navProfil = { navController.navigate(Profil(recapSubmit.userIndex)) } - ) + navProfil = { navController.navigate(Profil(recapSubmit.userIndex)) }, + navSearch = { navController.navigate(Search(recapSubmit.userIndex))}, + navQuiz = { navController.navigate(QuizMenu(recapSubmit.userIndex)) } + ) } composable { val quizMenu: QuizMenu = it.toRoute() QuizMenu( - index = quizMenu.userIndex, navAccueil = { navController.navigate(Accueil(quizMenu.userIndex)) }, navFavorite = { navController.navigate(Favorite(quizMenu.userIndex)) }, navProfil = { navController.navigate(Profil(quizMenu.userIndex)) }, + navSearch = { navController.navigate(Search(quizMenu.userIndex))}, navControllerQuiz = { idQuiz -> navController.navigate(Quiz(quizMenu.userIndex, idQuiz)) - } + }, + navControllerRandomQuiz = { navController.navigate(QuizRandom(quizMenu.userIndex)) } ) } composable { val quiz: Quiz = it.toRoute() QuizPage( - index = quiz.userIndex, navAccueil = { navController.navigate(Accueil(quiz.userIndex)) }, navFavorite = { navController.navigate(Favorite(quiz.userIndex)) }, navProfil = { navController.navigate(Profil(quiz.userIndex)) }, @@ -214,6 +216,7 @@ fun AppNavigator() { navControllerQuizEnd = { idQuiz, pts -> navController.navigate(QuizEnd(quiz.userIndex, idQuiz, pts)) }, + navSearch = { navController.navigate(Search(quiz.userIndex))}, idQuiz = quiz.idQuiz ) } @@ -222,11 +225,25 @@ fun AppNavigator() { QuizEndPage( idQuiz = quizEnd.idQuiz, points = quizEnd.pts, - index = quizEnd.userIndex, navAccueil = { navController.navigate(Accueil(quizEnd.userIndex)) }, navFavorite = { navController.navigate(Favorite(quizEnd.userIndex)) }, navProfil = { navController.navigate(Profil(quizEnd.userIndex)) }, - navQuiz = { navController.navigate(QuizMenu(quizEnd.userIndex)) } + navQuiz = { navController.navigate(QuizMenu(quizEnd.userIndex)) }, + navSearch = { navController.navigate(Search(quizEnd.userIndex))} + ) + } + + composable { + val quizRandom: QuizRandom = it.toRoute() + QuizRandom( + navAccueil = { navController.navigate(Accueil(quizRandom.userIndex)) }, + navFavorite = { navController.navigate(Favorite(quizRandom.userIndex)) }, + navProfil = { navController.navigate(Profil(quizRandom.userIndex)) }, + navQuiz = { navController.navigate(QuizMenu(quizRandom.userIndex)) }, + navSearch = { navController.navigate(Search(quizRandom.userIndex)) }, + navControllerQuizEnd = { idQuiz, pts -> + navController.navigate(QuizEnd(quizRandom.userIndex, idQuiz, pts)) + }, ) } } diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/AccueilPage.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/AccueilPage.kt index f2c1d71..7053bbd 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/AccueilPage.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/AccueilPage.kt @@ -29,12 +29,15 @@ import kotlinx.coroutines.delay @Composable fun AccueilPage( index: Int, - navFavorite: (Int) -> Unit, - navQuiz: (Int) -> Unit, - navProfil: (Int) -> Unit, + navFavorite: () -> Unit, + navQuiz: () -> Unit, + navProfil: () -> Unit, + navSearch: () -> Unit, navQuote: (Int) -> Unit, services: IServices + ) { + var itemCount by remember { mutableStateOf(15) } val dailyQuote = DailyQuoteStub.dailyQuote val user = services.getUserById(index) ?: return @@ -71,11 +74,11 @@ fun AccueilPage( NavBar( onAccueil = true, - index = index, navControllerFavorite = navFavorite, navControllerAccueil = { }, navControllerProfil = navProfil, - navControllerQuiz = navQuiz + navControllerQuiz = navQuiz, + navControllerSearch = navSearch ) { Column( modifier = Modifier @@ -84,7 +87,7 @@ fun AccueilPage( ) { LazyColumn(modifier = Modifier.weight(1f), state = state) { item { - Column(Modifier.clickable { navQuote(dailyQuote.id - 1) }) { + Column(Modifier.clickable { navQuote(dailyQuote.id) }) { Text( text = titleDalyQuote, color = MaterialTheme.colorScheme.onBackground, @@ -110,7 +113,7 @@ fun AccueilPage( items(quotes) { quote -> if (quote.language == user.langage) { - Column(Modifier.clickable { navQuote(quote.id - 1) }) { + Column(Modifier.clickable { navQuote(quote.id ) }) { QuoteLittle(quote) Spacer(modifier = Modifier.height(16.dp)) } diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/FavoritePage.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/FavoritePage.kt index 647aab2..03f86c4 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/FavoritePage.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/FavoritePage.kt @@ -26,9 +26,10 @@ import com.example.what_the_fantasy.ui.theme.colorBackground @Composable fun FavoritePage( index: Int, - navAccueil: (Int) -> Unit, - navQuiz: (Int) -> Unit, - navProfil: (Int) -> Unit, + navAccueil: () -> Unit, + navQuiz: () -> Unit, + navProfil: () -> Unit, + navSearch: () -> Unit, navQuote: (Int) -> Unit, services: IServices ) { @@ -38,11 +39,10 @@ fun FavoritePage( val TitlePage = stringResource(R.string.TitleFavorite) NavBar(onFavorite = true, - index = index, - navControllerFavorite = { }, navControllerAccueil = navAccueil, navControllerProfil = navProfil, - navControllerQuiz = navQuiz + navControllerQuiz = navQuiz, + navControllerSearch = navSearch ) { Box( modifier = Modifier diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/LoginPage.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/LoginPage.kt index b08a21d..c185d7c 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/LoginPage.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/LoginPage.kt @@ -86,6 +86,7 @@ fun IdentifiantTextField(textIdentifiantResId : Int) : String{ .fillMaxWidth() .padding(top = 8.dp), keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text), + maxLines = 1, shape = RoundedCornerShape(16.dp) ) } @@ -106,6 +107,7 @@ fun PassWdTextField(textpasswdResId : Int) : String{ .fillMaxWidth() .padding(top = 8.dp), keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password), + maxLines = 1, visualTransformation = if (passwordVisible) VisualTransformation.None else PasswordVisualTransformation(), trailingIcon = { IconButton(onClick = { passwordVisible = !passwordVisible }) { 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..131ffeb 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 @@ -57,9 +57,10 @@ import com.example.what_the_fantasy.ui.theme.gradienBox @Composable fun ProfilPage(index: Int, - navFavorite: (Int) -> Unit, - navAccueil: (Int) -> Unit, - navQuiz: (Int) -> Unit, + navFavorite: () -> Unit, + navAccueil: () -> Unit, + navQuiz: () -> Unit, + navSearch: () -> Unit, navUnLog: () -> Unit, navSubmitQuote: () -> Unit, services: IServices @@ -67,11 +68,10 @@ fun ProfilPage(index: Int, val user = services.getUserById(index) ?: return NavBar(onProfile = true, - index = index, navControllerFavorite = navFavorite, navControllerAccueil = navAccueil, - navControllerProfil = {}, - navControllerQuiz = navQuiz + navControllerQuiz = navQuiz, + navControllerSearch = navSearch ) { Box( @@ -90,29 +90,29 @@ fun ProfilPage(index: Int, horizontalAlignment = Alignment.CenterHorizontally ) { - // Titre - TitlePageComponent(R.string.titleProfile, Color.White) - SpaceHeightComponent(16) + // Titre + TitlePageComponent(R.string.titleProfile, MaterialTheme.colorScheme.onBackground) + SpaceHeightComponent(16) - // Image de profil - ImageProfil(user.imgUrl, 120) - SpaceHeightComponent(16) + // Image de profil + ImageProfil(user.imgUrl, 120) + SpaceHeightComponent(16) - EditUsername(user.username, index, services)// Édition du Username - SpaceHeightComponent(16) + EditUsername(user.username, index, services)// Édition du Username + SpaceHeightComponent(16) - EditEmail(user.email,index, services)// Édition du Email - Spacer(modifier = Modifier.height(8.dp)) + EditEmail(user.email,index, services)// Édition du Email + Spacer(modifier = Modifier.height(8.dp)) - EditPasswd(index, services) - SpaceHeightComponent(16) + EditPasswd(index, services) + SpaceHeightComponent(16) - // Bouton - //ButtonProfile(R.string.ButtonAddQuoteprofile, 18, Color.Black, Color.White,navUnLog) // 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) + // Bouton + ButtonProfile(R.string.ButtonAddQuoteprofile, 18, MaterialTheme.colorScheme.primary, MaterialTheme.colorScheme.background,navSubmitQuote) // Pas encore de navigation definie + SpaceHeightComponent(16) + ButtonLanguage(R.string.ButtonLanguageprofile, 18, MaterialTheme.colorScheme.primary, MaterialTheme.colorScheme.background,services, user) + SpaceHeightComponent(16) + ButtonUnLog(R.string.ButtonUnlogprofile, 18, MaterialTheme.colorScheme.primary, MaterialTheme.colorScheme.background,navUnLog) @@ -431,12 +431,12 @@ fun DisplayPassword(onEdit: () -> Unit) { text = "*****", fontSize = 18.sp, fontWeight = FontWeight.Bold, - color = MaterialTheme.colorScheme.onPrimary + color = MaterialTheme.colorScheme.primary ) Icon( imageVector = Icons.Default.Edit, contentDescription = "Modifier", - tint = MaterialTheme.colorScheme.onPrimary, + tint =MaterialTheme.colorScheme.primary, modifier = Modifier.size(16.dp).padding(start = 8.dp) ) } @@ -452,10 +452,10 @@ fun ButtonUnLog(textResId : Int, size :Int, colorTexte : Color, colorButton : Co navController() logsUser.unlogInformationUserConnect("UserUnLog") }, - colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.background), + colors = ButtonDefaults.buttonColors(containerColor = colorButton), modifier = Modifier.fillMaxWidth(), ) { - Text(text, fontSize = size.sp, color = MaterialTheme.colorScheme.primary) + Text(text, fontSize = size.sp, color = colorTexte) } } @@ -471,12 +471,12 @@ fun ButtonLanguage(textResId : Int, size :Int, colorTexte : Color, colorButton : colors = ButtonDefaults.buttonColors(containerColor = colorButton), modifier = Modifier.fillMaxWidth(), ) { - Text("${text} (${currentLangage.value})", fontSize = size.sp, color = MaterialTheme.colorScheme.primary) + Text("${text} (${currentLangage.value})", fontSize = size.sp, color = colorTexte) } } @Composable -fun ButtonProfil(textResId : Int, size :Int, colorTexte : Color, colorButton : Color,navController: () -> Unit){ +fun ButtonProfile(textResId : Int, size :Int, colorTexte : Color, colorButton : Color,navController: () -> Unit){ val text = stringResource(id = textResId) Button( diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizEndPage.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizEndPage.kt index bad6590..74ffee1 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizEndPage.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizEndPage.kt @@ -8,6 +8,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset +import androidx.compose.material3.MaterialTheme import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle @@ -15,6 +16,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import com.example.what_the_fantasy.data.local.QuestionStub import com.example.what_the_fantasy.data.local.QuizStub import com.example.what_the_fantasy.ui.components.NavBar @@ -28,17 +30,19 @@ val gradient = Brush.linearGradient( fun QuizEndPage( idQuiz: Int, points: Int, - index: Int, - navFavorite: (Int) -> Unit, - navAccueil: (Int) -> Unit, - navProfil:(Int) -> Unit, - navQuiz: (Int) -> Unit, + navFavorite: () -> Unit, + navAccueil: () -> Unit, + navProfil:() -> Unit, + navQuiz: () -> Unit, + navSearch: () -> Unit, ) { - NavBar(index = index, + NavBar( navControllerFavorite = navFavorite, navControllerAccueil = navAccueil, navControllerProfil = navProfil, - navControllerQuiz = navQuiz) { + navControllerQuiz = navQuiz, + navControllerSearch = navSearch + ) { Column( modifier = Modifier.fillMaxSize().background(Color(0xFF100C1B)) ) { @@ -63,16 +67,16 @@ fun QuizEndPage( Spacer(modifier = Modifier.height(16.dp)) Column( modifier = Modifier - .background(brush = gradient, shape = RoundedCornerShape(20.dp)) + .background(color = MaterialTheme.colorScheme.onPrimary, shape = RoundedCornerShape(20.dp)) .padding(30.dp) .fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.SpaceEvenly ) { - val quiz = QuizStub.getQuizById(idQuiz) - val nbQuestions = quiz?.questions?.size + val quizName = if (idQuiz == -1) "Random Quiz" else QuizStub.getQuizById(idQuiz)?.name ?: "Quiz Inconnu" + Text( - text = "${quiz?.name}", + text = quizName, color = Color.White, style = TextStyle( fontSize = 25.sp, @@ -80,6 +84,7 @@ fun QuizEndPage( textAlign = TextAlign.Center ) ) + val nbQuestions = 10 Text( text = "Nombres de Questions : $nbQuestions", color = Color.White, 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..5fb37bf 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 @@ -3,6 +3,7 @@ package com.example.what_the_fantasy.ui.screens import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.clickable +import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -12,6 +13,7 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.verticalScroll @@ -34,27 +36,30 @@ import com.example.what_the_fantasy.ui.components.NavBar @Composable fun QuizMenu( - index: Int, - navFavorite: (Int) -> Unit, - navAccueil: (Int) -> Unit, - navProfil:(Int) -> Unit, - navControllerQuiz: (Int) -> Unit + navFavorite: () -> Unit, + navAccueil: () -> Unit, + navProfil:() -> Unit, + navSearch: () -> Unit, + navControllerQuiz: (Int) -> Unit, + navControllerRandomQuiz:() -> Unit ) { NavBar(onQuiz = true, - index = index, navControllerFavorite = navFavorite, navControllerAccueil = navAccueil, navControllerProfil = navProfil, - navControllerQuiz = { } + navControllerSearch = navSearch ) { - Column( - modifier = Modifier.fillMaxSize().background(MaterialTheme.colorScheme.background) + Row( + modifier = Modifier + .fillMaxSize() + .background(MaterialTheme.colorScheme.background) + .horizontalScroll(state = rememberScrollState()) ) { // Contenu princiapl Column( modifier = Modifier - .weight(0.9f) + .width(400.dp) .fillMaxSize() .padding(20.dp), horizontalAlignment = Alignment.CenterHorizontally @@ -120,6 +125,66 @@ fun QuizMenu( } } } + + Column( + modifier = Modifier + .width(400.dp) + .fillMaxSize() + .padding(20.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + text = "▶ Mini-Jeux ◀", + color = MaterialTheme.colorScheme.onBackground, + style = TextStyle( + fontSize = 25.sp, + fontWeight = FontWeight.Bold, + textAlign = TextAlign.Center + ) + ) + Spacer(Modifier.height(20.dp)) + Column( + modifier = Modifier + .background(MaterialTheme.colorScheme.onPrimary, shape = RoundedCornerShape(20.dp)) + .fillMaxSize() + .padding(vertical = 30.dp) + .verticalScroll(rememberScrollState()), + horizontalAlignment = Alignment.CenterHorizontally + ) { + val context = LocalContext.current + val imageResId = context.resources.getIdentifier( + "quiz", + "drawable", + context.packageName + ) + Column( + modifier = Modifier + .size(width = 150.dp, height = 145.dp) + .clickable { navControllerRandomQuiz() }, + ) { + Image( + painter = painterResource(id = imageResId), + contentDescription = "Random Quiz", + modifier = Modifier + .size(width = 150.dp, height = 100.dp) + .clip(shape = RoundedCornerShape(20.dp)), + contentScale = ContentScale.Crop + ) + Spacer(Modifier.height(10.dp)) + Text( + text = "Random Quiz", + style = TextStyle( + fontSize = 17.sp, + fontWeight = FontWeight.Medium, + textAlign = TextAlign.Center, + 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/QuizPage.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizPage.kt index 14048e4..0bfc05c 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizPage.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizPage.kt @@ -22,11 +22,11 @@ import com.example.what_the_fantasy.ui.components.NavBar @Composable fun QuizPage( - index: Int, - navFavorite: (Int) -> Unit, - navAccueil: (Int) -> Unit, - navProfil:(Int) -> Unit, - navQuiz: (Int) -> Unit, + navFavorite: () -> Unit, + navAccueil: () -> Unit, + navProfil:() -> Unit, + navQuiz: () -> Unit, + navSearch: () -> Unit, navControllerQuizEnd: (Int, Int) -> Unit, @@ -56,11 +56,12 @@ fun QuizPage( if (idCurrentQuestion < questions.size - 1) idCurrentQuestion++ else navControllerQuizEnd(idQuiz, pts) // Retour menu } - NavBar(index = index, + NavBar( navControllerFavorite = navFavorite, navControllerAccueil = navAccueil, navControllerProfil = navProfil, - navControllerQuiz = navQuiz + navControllerQuiz = navQuiz, + navControllerSearch = navSearch ){ Column ( modifier = Modifier.fillMaxSize().background(Color(0xFF100C1B)) diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizRandom.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizRandom.kt new file mode 100644 index 0000000..e13b60b --- /dev/null +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizRandom.kt @@ -0,0 +1,159 @@ +package com.example.what_the_fantasy.ui.screens + +import android.util.Log +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.Brush +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 androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.example.what_the_fantasy.data.local.QuestionStub +import com.example.what_the_fantasy.ui.components.NavBar + +@Composable +fun QuizRandom( + navFavorite: () -> Unit, + navAccueil: () -> Unit, + navProfil:() -> Unit, + navQuiz: () -> Unit, + navSearch: () -> Unit, + navControllerQuizEnd: (Int, Int) -> Unit, +) { + val questions = QuestionStub.shuffleRandomQuestions + var idCurrentQuestion by remember { mutableIntStateOf(0) } + var pts by remember { mutableIntStateOf(0) } + var lifes by remember { mutableIntStateOf(3) } + + val gradient = Brush.linearGradient( + colors = listOf(MaterialTheme.colorScheme.onPrimary, MaterialTheme.colorScheme.onPrimary), + start = Offset(0f, 1000f), + end = Offset(1000f, 0f) + ) + + fun onAnswerSelected(answer: String) { + val currentQuestion = questions[idCurrentQuestion] + val correctAnswer = mapOf( + "A" to currentQuestion.ansA, + "B" to currentQuestion.ansB, + "C" to currentQuestion.ansC, + "D" to currentQuestion.ansD + )[currentQuestion.correctAns] + + if (answer == correctAnswer) pts++ + else { + lifes -= 1 + Log.d("Quiz Debug", "Lifes -1 :, $lifes") + } + if (idCurrentQuestion < questions.size - 1 && lifes > 0) idCurrentQuestion++ + else { + navControllerQuizEnd(-1, pts) + Log.d("Quiz Debug", "Game over lifes : $lifes") + } // Retour menu + } + NavBar( + navControllerFavorite = navFavorite, + navControllerAccueil = navAccueil, + navControllerProfil = navProfil, + navControllerQuiz = navQuiz, + navControllerSearch = navSearch + ){ + Column ( + modifier = Modifier.fillMaxSize().background(Color(0xFF100C1B)) + ) { + // Contenu princiapl + Column( + modifier = Modifier + .weight(0.8f) + .fillMaxWidth() + .padding(horizontal = 50.dp, vertical = 20.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + val question = questions[idCurrentQuestion] + + Column( + horizontalAlignment = Alignment.CenterHorizontally, + ) { + if (questions != null) { + Text( + text = "▶ Random Quiz ◀", + color = Color.White, + style = TextStyle( + fontSize = 20.sp, + fontWeight = FontWeight.Bold, + textAlign = TextAlign.Center + ) + ) + } + Spacer(Modifier.height(20.dp)) + Column( + modifier = Modifier + .background(brush = gradient, shape = RoundedCornerShape(20.dp)) + .height(800.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + "Question ${idCurrentQuestion + 1}", + color = Color.White, + fontSize = 18.sp, + modifier = Modifier + .padding(top = 20.dp) + .weight(0.1f), + style = TextStyle( + fontSize = 25.sp, + fontWeight = FontWeight.Bold, + textAlign = TextAlign.Center + ) + ) + Text( + question.question, + color = Color.White, + fontSize = 15.sp, + modifier = Modifier + .padding(horizontal = 25.dp) + .weight(0.1f), + textAlign = TextAlign.Center + ) + Column( + modifier = Modifier + .weight(0.7f) + .fillMaxHeight() + .padding(vertical = 30.dp), + verticalArrangement = Arrangement.SpaceBetween + + ) { + listOf( + question.ansA, + question.ansB, + question.ansC, + question.ansD + ).forEach { answer -> + Box( + modifier = Modifier + .width(220.dp) + .height(50.dp) + .background(Color.White, shape = RoundedCornerShape(16.dp)) + .clickable { onAnswerSelected(answer) } + .padding(horizontal = 8.dp), + contentAlignment = Alignment.Center + ) { + Text(answer, color = Color.Black, fontSize = 18.sp) + } + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuotePage.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuotePage.kt index 16dcfac..c82842b 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuotePage.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuotePage.kt @@ -2,24 +2,44 @@ package com.example.what_the_fantasy.ui.screens import android.content.Context import android.content.Intent +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.expandVertically +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.shrinkVertically +import androidx.compose.animation.slideInVertically +import androidx.compose.animation.slideOutVertically 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.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.ArrowBack +import androidx.compose.material.icons.automirrored.filled.Send 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.MaterialTheme 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 +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip @@ -33,6 +53,7 @@ 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.data.model.Comment import com.example.what_the_fantasy.data.services.IServices import com.example.what_the_fantasy.ui.components.NavBar import com.example.what_the_fantasy.ui.theme.colorBackground @@ -41,39 +62,44 @@ import com.example.what_the_fantasy.ui.theme.iconText import com.example.what_the_fantasy.ui.theme.likeIcon import com.example.what_the_fantasy.ui.theme.whiteBackcgroundText +var isCommentVisible by mutableStateOf(false) + @Composable fun QuotePage( quoteId : Int, service : IServices, index : Int, - navAccueil: (Int) -> Unit, - navFavorite:(Int) -> Unit, - navQuiz: (Int) -> Unit, - navProfil:(Int) -> Unit) + navAccueil: () -> Unit, + navFavorite:() -> Unit, + navQuiz: () -> Unit, + navSearch: () -> Unit, + navProfil:() -> Unit) { - var quote = service.getQuote(quoteId) ?: return + // utiliser ViewModel + val quote = service.getQuote(quoteId) ?: return val context = LocalContext.current - NavBar(onProfile = true, - index = index, + val user = service.getUserById(index) ?: return + val favorite by remember { mutableStateOf(service.isFavorite(id = quoteId, user = user)) } + + NavBar( navControllerFavorite = navFavorite, navControllerAccueil = navAccueil, navControllerProfil = navProfil, - navControllerQuiz = navQuiz + navControllerQuiz = navQuiz, + navControllerSearch = navSearch ) { Box( modifier = Modifier .fillMaxSize() - .background(colorBackground), + .background(MaterialTheme.colorScheme.background), contentAlignment = Alignment.Center ) { Column(modifier = Modifier .padding(15.dp) - .drawBehind { - drawRoundRect( - gradienBox, - cornerRadius = CornerRadius(15.dp.toPx()), - ) - } + .background( + color = MaterialTheme.colorScheme.primary, + shape = RoundedCornerShape(15.dp) + ) ) { Row(modifier = Modifier.padding(15.dp)) { ImageQuote( @@ -82,12 +108,11 @@ fun QuotePage( Column { FunctionalIcon( - // --/!\-- a modifier --/!\-- - // isFavorite = service.isFavorite(id) - // -------------------------- - true, + isFavorite = favorite, + userId = index, id = quoteId, - context = context + context = context, + service = service ) QuoteText( text = '"' + quote.content + '"' @@ -118,6 +143,24 @@ fun QuotePage( } } } + AnimatedVisibility( + visible = isCommentVisible, + enter = expandVertically( + expandFrom = Alignment.CenterVertically + ) + fadeIn( + initialAlpha = 0.3f + ) + slideInVertically( + initialOffsetY = { -40 } + ), + exit = slideOutVertically() + shrinkVertically() + fadeOut() + ) { + Box(modifier = Modifier.fillMaxWidth().background(MaterialTheme.colorScheme.primary).fillMaxSize()){ + Column { + AddComment(index, service) + LstComment(service.getComment(quoteId)) + } + } + } } } @@ -130,7 +173,7 @@ fun QuoteText(text: String ){ modifier = Modifier.padding(start = 10.dp, top = 15.dp), fontWeight = FontWeight(1000), fontSize = 20.sp, - color = iconText + color = MaterialTheme.colorScheme.onPrimary ) } @@ -146,7 +189,7 @@ fun ImageQuote(imageUrl : String){ } @Composable -fun FunctionalIcon(isFavorite: Boolean, id : Int, context : Context){ +fun FunctionalIcon(isFavorite: Boolean, userId : Int, id : Int, context : Context, service: IServices){ Row(modifier = Modifier .fillMaxWidth() ) { @@ -156,13 +199,13 @@ fun FunctionalIcon(isFavorite: Boolean, id : Int, context : Context){ val sendIntent = Intent().apply { action = Intent.ACTION_SEND // lien a changer quand le site sra deployer - putExtra(Intent.EXTRA_TEXT, "http://wfWebsite/quote/" + id.toString() ) + putExtra(Intent.EXTRA_TEXT, "http://wfWebsite/quote/$id") type = "text/plain" - addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) // Ajout pour compatibilité + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) } val shareIntent = Intent.createChooser(sendIntent, null) - shareIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) // Ajout aussi ici + shareIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) context.startActivity(shareIntent) }, @@ -171,42 +214,44 @@ fun FunctionalIcon(isFavorite: Boolean, id : Int, context : Context){ Icon( Icons.Default.Share, contentDescription = stringResource(R.string.share), - tint = iconText, + tint = MaterialTheme.colorScheme.onPrimary, ) } IconButton( - onClick = { }, //Go to comment + onClick = { + isCommentVisible = !isCommentVisible + }, modifier = Modifier.padding(start = 20.dp) ){ Icon( Icons.Default.MailOutline, contentDescription = stringResource(R.string.comment), - tint = iconText, + tint = MaterialTheme.colorScheme.onPrimary, ) } if(isFavorite){ IconButton( - onClick = { }, //Go to comment + onClick = { service.SupFav(userId = userId, QuoteId = id)}, //sup fav modifier = Modifier.padding(start = 20.dp) ){ Icon( Icons.Default.Favorite, contentDescription = stringResource(R.string.favorite), - tint = likeIcon, + tint = MaterialTheme.colorScheme.onPrimary, ) } } else{ IconButton( - onClick = { }, //Go to comment + onClick = { service.AddFav(userId = userId, QuoteId = id)}, //add fav modifier = Modifier.padding(start = 50.dp) ){ Icon( Icons.Default.FavoriteBorder, contentDescription = stringResource(R.string.favorite), - tint = iconText + tint = MaterialTheme.colorScheme.onPrimary ) } } @@ -220,22 +265,20 @@ fun InfoQuoteText(nameId : Int, text : String){ text = stringResource(id = nameId), fontSize = 18.sp, fontWeight = FontWeight(500), - color = iconText + color = MaterialTheme.colorScheme.onPrimary ) Text( text = text, - color = whiteBackcgroundText, + color = MaterialTheme.colorScheme.onBackground, fontSize = 16.sp, fontWeight = FontWeight(400), modifier = Modifier - .drawBehind { - drawRoundRect( - Color(255,255,255), - cornerRadius = CornerRadius(15.dp.toPx()) - ) - } - .padding(5.dp), + .background( + color = MaterialTheme.colorScheme.background, + shape = RoundedCornerShape(15.dp) + ) + .padding(5.dp) ) } } @@ -244,11 +287,84 @@ fun InfoQuoteText(nameId : Int, text : String){ fun LikeInfo(likes : Int){ Text( text = likes.toString(), - color = iconText + color = MaterialTheme.colorScheme.onPrimary ) Icon( Icons.Default.Favorite, contentDescription = stringResource(R.string.favorite), - tint = iconText, + tint = MaterialTheme.colorScheme.onPrimary, + ) +} + +@Composable +fun AddComment(userId : Int, service: IServices){ + var text by remember { mutableStateOf("") } + Row(modifier = Modifier.padding(bottom = 15.dp, top = 15.dp)){ + IconButton( + onClick = { isCommentVisible = !isCommentVisible}, + ){ + Icon( + Icons.AutoMirrored.Filled.ArrowBack, + contentDescription = stringResource(R.string.send), + tint = MaterialTheme.colorScheme.onPrimary + ) + } + TextField( + value = text, + onValueChange = { text = it }, + label = { Text(stringResource(R.string.comment)) }, + modifier = Modifier + .width(300.dp) ) -} \ No newline at end of file + IconButton( + onClick = { service.AddComment(text)}, //send comment + ){ + Icon( + Icons.AutoMirrored.Filled.Send, + contentDescription = stringResource(R.string.send), + tint = MaterialTheme.colorScheme.onPrimary + ) + } + } +} + +@Composable +fun LstComment(lst : List){ + LazyColumn( + verticalArrangement = Arrangement.spacedBy(4.dp), + ) { + items( + items = lst, + ) { + Column( + modifier = Modifier.padding(5.dp) + .fillMaxSize() + .background( + color = MaterialTheme.colorScheme.onPrimary, + shape = RoundedCornerShape(15.dp) + ) + ) { + Row { + AsyncImage( + model = it.img, + contentDescription = stringResource(R.string.profilePict), + modifier = Modifier + .size(50.dp) + .clip(RoundedCornerShape(50)) + ) + Text( + text = it.user + " " + it.date, + modifier = Modifier.padding(start = 15.dp) + ) + } + Row { + Text( + text = it.content, + modifier = Modifier.padding(15.dp), + ) + } + } + } + } +} + 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..007197e 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 @@ -31,6 +31,7 @@ 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 @@ -44,23 +45,27 @@ import com.example.what_the_fantasy.data.model.Character @Composable fun RecapSubmitPage( index: Int, - navFavorite: (Int) -> Unit, - navAccueil: (Int) -> Unit, - navProfil:(Int) -> Unit, + navFavorite: () -> Unit, + navAccueil: () -> Unit, + navProfil:() -> Unit, + navQuiz: () -> Unit, + navSearch: () -> Unit, quoteContent : String, character: String, source: String ) { - NavBar(onQuiz = true, - index = index, + NavBar( navControllerFavorite = navFavorite, navControllerAccueil = navAccueil, navControllerProfil = navProfil, - navControllerQuiz = { } + navControllerQuiz = navQuiz, + navControllerSearch = navSearch ) { Column( - modifier = Modifier.fillMaxSize().background(Color(0xFF100C1B)) + modifier = Modifier + .fillMaxSize() + .background(MaterialTheme.colorScheme.background) ) { // Contenu princiapl Column( @@ -72,7 +77,7 @@ fun RecapSubmitPage( ) { Text( text = "▶ Recap de la citation ◀", - color = Color.White, + color = MaterialTheme.colorScheme.onBackground, style = TextStyle( fontSize = 25.sp, fontWeight = FontWeight.Bold, @@ -133,7 +138,7 @@ fun QuoteText2(text: String ){ modifier = Modifier.padding(start = 10.dp, top = 15.dp), fontWeight = FontWeight(1000), fontSize = 20.sp, - color = Color.White + color = MaterialTheme.colorScheme.background ) } diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/SearchPage.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/SearchPage.kt index 3d081c1..4dbc806 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/SearchPage.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/SearchPage.kt @@ -1,8 +1,187 @@ package com.example.what_the_fantasy.ui.screens +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.IntrinsicSize +import androidx.compose.foundation.layout.Row +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.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.selection.selectable +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.rounded.Search +import androidx.compose.material3.Button +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.RadioButton +import androidx.compose.material3.SearchBar +import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.input.pointer.motionEventSpy +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.Role +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.text.input.TextFieldValue +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.example.what_the_fantasy.R +import com.example.what_the_fantasy.data.local.DailyQuoteStub +import com.example.what_the_fantasy.data.local.QuoteStub +import com.example.what_the_fantasy.data.model.SrcType +import com.example.what_the_fantasy.data.services.IServices +import com.example.what_the_fantasy.data.services.ServicesStub import com.example.what_the_fantasy.ui.components.NavBar +import com.example.what_the_fantasy.ui.components.QuoteLittle +import com.example.what_the_fantasy.ui.theme.colorBackground +import com.example.what_the_fantasy.ui.theme.colorNavBar @Composable -fun SearchPage() { +fun SearchPage( + navFavorite: () -> Unit, + navAccueil: () -> Unit, + navProfil:() -> Unit, + navQuiz: () -> Unit, + navQuote: (Int) -> Unit, + navSearch: (String,String) -> Unit, + services: IServices, + + type : String, + search:String + ) { + var itemCount by remember { mutableStateOf(15) } + val quotes = services.search(type,search,itemCount) + + var newSearch by remember { mutableStateOf(search) } + val filtre = listOf("contenue","personnage","titre") + val (newFiltre, onFiltreSelected) = remember { mutableStateOf(type) } + + NavBar( + onAccueil = true, + navControllerFavorite = navFavorite, + navControllerAccueil = navAccueil, + navControllerProfil = navProfil, + navControllerQuiz = navQuiz, + navControllerSearch = {navSearch("contenue","")} + ) { + Column( + modifier = Modifier + .fillMaxSize() + .background(MaterialTheme.colorScheme.background) + ) { + + Text( + text = "▶ "+stringResource(R.string.TitleSearch)+" ◀", + color = MaterialTheme.colorScheme.onBackground, + fontSize = 24.sp, + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + textAlign = TextAlign.Center + ) + Column (horizontalAlignment = Alignment.CenterHorizontally + ){ + OutlinedTextField( + value = newSearch, + onValueChange = { newSearch = it }, + textStyle = TextStyle(color = MaterialTheme.colorScheme.onBackground), + modifier = Modifier + .padding(top = 2.dp) + .fillMaxWidth() + .height(50.dp), + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text), + maxLines = 1, + shape = CircleShape, // Bords arrondis + trailingIcon = { + IconButton(onClick = { navSearch(newFiltre, newSearch) } , + modifier = Modifier + .size(50.dp) + .clip(CircleShape) + ) { + Icon(Icons.Rounded.Search, + contentDescription = stringResource(R.string.TitleSearch), + Modifier + .fillMaxSize() + .background(MaterialTheme.colorScheme.primary,CircleShape) + ) + } + } + ) + Row(horizontalArrangement = Arrangement.SpaceAround) { + filtre.forEach{ type -> + Row( + Modifier + .height(56.dp) + .selectable( + selected = (type == newFiltre), + onClick = { onFiltreSelected(type) }, + role = Role.RadioButton + ) + .padding(horizontal = 16.dp), + verticalAlignment = Alignment.CenterVertically + ) { + RadioButton( + selected = (type == newFiltre), + onClick = null // null recommended for accessibility with screen readers + ) + Text( + text = type, + style = MaterialTheme.typography.bodyLarge, + modifier = Modifier.padding(start = 16.dp), + color = MaterialTheme.colorScheme.onBackground + ) + } + } + } + } + LazyColumn(modifier = Modifier.weight(1f)) { + items(quotes) { quote -> + Column(Modifier.clickable {navQuote(quote.id)} + ) { + QuoteLittle(quote) + } + } + if (itemCount < quotes.size) { + item { + LaunchedEffect(itemCount) { + itemCount += 15 + } + Box( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + contentAlignment = Alignment.Center + ) { + CircularProgressIndicator() + } + } + } + } + } + } } \ No newline at end of file diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/SignUpPage.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/SignUpPage.kt index cce938e..f9f0fa3 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/SignUpPage.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/SignUpPage.kt @@ -17,6 +17,7 @@ import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Icon import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -53,7 +54,7 @@ fun SignUpPage(navControllerLogin: () -> Unit, services : IServices) { Box( modifier = Modifier .fillMaxSize() - .background(colorBackground) + .background(MaterialTheme.colorScheme.background) .verticalScroll(rememberScrollState()), contentAlignment = Alignment.Center ){ @@ -62,20 +63,20 @@ fun SignUpPage(navControllerLogin: () -> Unit, services : IServices) { .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.titleSignUp,Color.White) + TitlePageComponent(R.string.titleSignUp,MaterialTheme.colorScheme.onBackground) IdentifiantTextFieldSign(R.string.IdentifiantLogin,identifiant = username,onValueChange = { username = it }) EmailTextFieldSign(R.string.EmailSignUp, email, onValueChange = { email = it }) PassWdTextFieldSign(R.string.PasswdLogin,password, onValueChange = { password = it },passwordVisible,onPasswordVisibilityChange = { passwordVisible = !passwordVisible }) PassWdConfirmTextFieldSign(R.string.ConfirmPassWdSignUp,confirmPassword,onValueChange = { confirmPassword = it },passwordVisible,onPasswordVisibilityChange = { passwordVisible = !passwordVisible }) SpaceHeightComponent(16) - ConnexionButtonSign(R.string.ButtonSignUp,18, Color.White, Color.Black, username, email, password, confirmPassword, services, navControllerLogin) + ConnexionButtonSign(R.string.ButtonSignUp,18, MaterialTheme.colorScheme.background, MaterialTheme.colorScheme.onBackground, username, email, password, confirmPassword, services, navControllerLogin) SpaceHeightComponent(16) - ReturnLogin(R.string.ButtonLogin,12, Color.White, navController = navControllerLogin) + ReturnLogin(R.string.ButtonLogin,12, MaterialTheme.colorScheme.primary, navController = navControllerLogin) } } 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..5bb111b 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,6 +14,7 @@ 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.runtime.Composable @@ -39,24 +40,22 @@ import com.example.what_the_fantasy.ui.theme.gradienBox @Composable fun SubmitQuotePage( - index: Int, - navFavorite: (Int) -> Unit, - navAccueil: (Int) -> Unit, - navProfil:(Int) -> Unit, - navControllerQuiz: (Int) -> Unit, + navFavorite: () -> Unit, + navAccueil: () -> Unit, + navProfil:() -> Unit, + navQuiz: () -> Unit, navRecap: (String, String, String) -> Unit ) { NavBar( - index = index, navControllerFavorite = navFavorite, navControllerAccueil = navAccueil, navControllerProfil = navProfil, - navControllerQuiz = navControllerQuiz + navControllerQuiz = navQuiz ) { Box( modifier = Modifier .fillMaxSize() - .background(colorBackground) + .background(MaterialTheme.colorScheme.background) .verticalScroll(rememberScrollState()), contentAlignment = Alignment.Center ){ @@ -65,11 +64,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.onBackground) SpaceHeightComponent(20) SubmitQuoteButton( quoteTextField(R.string.quote), @@ -79,12 +78,12 @@ fun SubmitQuotePage( yearTextField(R.string.year), R.string.titleButtonSubmit, 18, - Color.White, - Color.Black, + MaterialTheme.colorScheme.background, + MaterialTheme.colorScheme.onBackground, navRecap ) SpaceHeightComponent(20) - BackButton(R.string.titleButtonBack, 12, Color.White,navProfil, index) + BackButton(R.string.titleButtonBack, 12, Color.White,navProfil) } } } @@ -99,7 +98,7 @@ fun quoteTextField(textQuoteResId : Int) : String{ OutlinedTextField( value = quote, onValueChange = { quote = it }, - label = { Text(textQuote, color = Color.White) }, + label = { Text(textQuote, color = MaterialTheme.colorScheme.onBackground) }, modifier = Modifier .fillMaxWidth() .padding(top = 8.dp), @@ -119,7 +118,7 @@ fun characterTextField(textCharacterResId : Int) : String{ OutlinedTextField( value = character, onValueChange = { character = it }, - label = { Text(textCharacter, color = Color.White) }, + label = { Text(textCharacter, color = MaterialTheme.colorScheme.onBackground) }, modifier = Modifier .fillMaxWidth() .padding(top = 8.dp), @@ -138,7 +137,7 @@ fun sourceTextField(textSourceResId : Int) : String{ OutlinedTextField( value = source, onValueChange = { source = it }, - label = { Text(textSource, color = Color.White) }, + label = { Text(textSource, color = MaterialTheme.colorScheme.onBackground) }, modifier = Modifier .fillMaxWidth() .padding(top = 8.dp), @@ -158,7 +157,7 @@ fun timeCodeTextField(textTimeCodeResId : Int) : String{ OutlinedTextField( value = timeCode, onValueChange = { timeCode = it }, - label = { Text(textTimeCode, color = Color.White) }, + label = { Text(textTimeCode, color = MaterialTheme.colorScheme.onBackground) }, modifier = Modifier .fillMaxWidth() .padding(top = 8.dp), @@ -178,7 +177,7 @@ fun yearTextField(textYearResId : Int) : String{ OutlinedTextField( value = year, onValueChange = { year = it }, - label = { Text(textYear, color = Color.White) }, + label = { Text(textYear, color = MaterialTheme.colorScheme.onBackground) }, modifier = Modifier .fillMaxWidth() .padding(top = 8.dp), @@ -241,22 +240,22 @@ fun validSubmitQuote(quote : String, character : String, source: String, timeCod 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) && + 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) &&*/ timeCode.isNotBlank() && timeCode.matches(timeCodeRegex) && year.isNotBlank() && year.all { it.isDigit() } && year.length == 4 && year.toInt() in 1900..2025 return isNotBlank } @Composable -fun BackButton(titleResId : Int, size : Int, color : Color, navController: (Int) -> Unit, user: Int) { +fun BackButton(titleResId : Int, size : Int, color : Color, navController: () -> Unit) { val title = stringResource(id = titleResId) Text( text = title, fontSize = size.sp, color = color, modifier = Modifier.clickable { - navController(user) + navController() } ) } diff --git a/What_The_Fantasy/app/src/main/res/values-fr/strings.xml b/What_The_Fantasy/app/src/main/res/values-fr/strings.xml index 0bd5230..dc586f4 100644 --- a/What_The_Fantasy/app/src/main/res/values-fr/strings.xml +++ b/What_The_Fantasy/app/src/main/res/values-fr/strings.xml @@ -13,6 +13,7 @@ Favoris Likes Image de profil + Envoyer //Page Login Connexion au compte @@ -68,4 +69,16 @@ Time Code Année Champs Invalides + + //NavBar + Favoris + Profile + Accueil + Quiz + Recherche + + //Page Search + Recherche + + \ No newline at end of file diff --git a/What_The_Fantasy/app/src/main/res/values/strings.xml b/What_The_Fantasy/app/src/main/res/values/strings.xml index 8e12c0e..2b59c0a 100644 --- a/What_The_Fantasy/app/src/main/res/values/strings.xml +++ b/What_The_Fantasy/app/src/main/res/values/strings.xml @@ -8,10 +8,11 @@ Character Source Share - comment - favorite - likes + Comment + Favorite + Likes Profile picture + Send //Page Login Account login @@ -64,4 +65,16 @@ Time Code Year Invalid Fields + + //NavBar + Favorite + Profile + Home + Quiz + Search + + //Page Search + Search + + \ No newline at end of file