ajout recherche

This commit is contained in:
MalcuitEmile
2025-12-17 16:21:53 +01:00
parent 31715ba3fe
commit 9c6e229826
3 changed files with 122 additions and 114 deletions

View File

@@ -6,61 +6,149 @@ import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize 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.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.Divider
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
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.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
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 androidx.lifecycle.ViewModelProvider
import com.dev.collectiondvd.data.local.AppDatabase
import com.dev.collectiondvd.data.repository.LocalDvdRepository
import com.dev.collectiondvd.ui.screen.AjoutDvdActivity import com.dev.collectiondvd.ui.screen.AjoutDvdActivity
import com.dev.collectiondvd.ui.screen.ListDvdActivity
import com.dev.collectiondvd.ui.screen.SupprDvdActivity import com.dev.collectiondvd.ui.screen.SupprDvdActivity
import com.dev.collectiondvd.ui.theme.CollectionDvdTheme import com.dev.collectiondvd.ui.theme.CollectionDvdTheme
import com.dev.collectiondvd.ui.theme.MyButton import com.dev.collectiondvd.ui.theme.MyButton
import com.dev.collectiondvd.viewmodel.LocalDvdViewModel
import com.dev.collectiondvd.viewmodel.factory.LocalDvdViewModelFactory
import java.nio.file.WatchEvent
import kotlin.system.exitProcess import kotlin.system.exitProcess
class MainActivity : ComponentActivity() { class MainActivity : ComponentActivity() {
private lateinit var viewModel: LocalDvdViewModel
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContent { MenuScreen() } val database = AppDatabase.getDatabase(applicationContext)
val dvdDao = database.dvdDao()
val repository = LocalDvdRepository(dvdDao)
val factory = LocalDvdViewModelFactory(repository)
viewModel = ViewModelProvider(this, factory).get(LocalDvdViewModel::class.java)
setContent { MenuScreen(onQuit = { finish() }, viewModel = viewModel) }
} }
} }
@Composable
fun MenuScreen() {
val context = LocalContext.current
@Composable
fun MenuScreen(
viewModel: LocalDvdViewModel,
onQuit: () -> Unit
) {
val context = LocalContext.current
val dvds by viewModel.dvds.collectAsState(initial = emptyList())
var searchQuery by remember { mutableStateOf("") }
// 🔍 Filtrage
val filteredDvds = dvds.filter { dvd ->
val query = searchQuery.lowercase()
dvd.titre.orEmpty().lowercase().contains(query) ||
dvd.realisateur.orEmpty().lowercase().contains(query) ||
dvd.genre.orEmpty().lowercase().contains(query) ||
dvd.annee.orEmpty().lowercase().contains(query)
}
Column( Column(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.padding(16.dp), .padding(8.dp)
verticalArrangement = Arrangement.spacedBy(12.dp), ) {
horizontalAlignment = Alignment.CenterHorizontally, Spacer(modifier = Modifier.height(15.dp))
Text(
"Votre collection",
fontSize = 24.sp,
fontWeight = FontWeight.Bold,
modifier = Modifier.padding(bottom = 8.dp)
)
OutlinedTextField(
value = searchQuery,
onValueChange = { searchQuery = it },
label = { Text("Rechercher un DVD") },
modifier = Modifier
.fillMaxWidth()
.padding(bottom = 8.dp),
singleLine = true
)
if (filteredDvds.isEmpty()) {
Box(
modifier = Modifier.weight(1f),
contentAlignment = Alignment.Center
) {
Text("Aucun DVD correspondant")
}
} else {
LazyColumn(modifier = Modifier.weight(1f)) {
items(filteredDvds, key = { it.id }) { dvd ->
Column(modifier = Modifier.padding(8.dp)) {
Text(dvd.titre.orEmpty(), fontWeight = FontWeight.Bold)
Text("Réalisateur : ${dvd.realisateur.orEmpty()}")
Text("Année : ${dvd.annee.orEmpty()}")
Text("Genre : ${dvd.genre.orEmpty()}")
Divider()
}
}
}
}
Row(modifier = Modifier.fillMaxWidth()){
MyButton("+ Ajouter") {
context.startActivity(
Intent(
context,
AjoutDvdActivity::class.java
)
)
}
MyButton("- Supprimer") {
context.startActivity(
(Intent(
context,
SupprDvdActivity::class.java
))
)
}
}
Spacer(modifier = Modifier.height(16.dp))
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.Center
) { ) {
Text("Gestion la collection de DVD", fontSize = 28.sp) MyButton("Quitter") { onQuit() }
MyButton("Liste des DVDs") { context.startActivity(Intent(context, ListDvdActivity::class.java)) } }
MyButton("Ajouter un DVD") { context.startActivity(Intent(context, AjoutDvdActivity::class.java)) }
MyButton("Supprimer un DVD") { context.startActivity((Intent(context, SupprDvdActivity::class.java)))}
}
}
@Preview(showBackground = true)
@Composable
fun MenuScreenPreview() {
CollectionDvdTheme {
com.dev.collectiondvd.MenuScreen()
} }
} }

View File

@@ -30,6 +30,7 @@ import com.dev.collectiondvd.data.repository.LocalDvdRepository
import com.dev.collectiondvd.ui.theme.MyButton import com.dev.collectiondvd.ui.theme.MyButton
import com.dev.collectiondvd.viewmodel.LocalDvdViewModel import com.dev.collectiondvd.viewmodel.LocalDvdViewModel
import com.dev.collectiondvd.viewmodel.factory.LocalDvdViewModelFactory import com.dev.collectiondvd.viewmodel.factory.LocalDvdViewModelFactory
import org.intellij.lang.annotations.JdkConstants
class AjoutDvdActivity : ComponentActivity() { class AjoutDvdActivity : ComponentActivity() {
@@ -69,6 +70,9 @@ fun AjoutDvdScreen(onQuit: () -> Unit, onAdd: (Dvd) -> Unit){
verticalArrangement = Arrangement.spacedBy(16.dp), verticalArrangement = Arrangement.spacedBy(16.dp),
horizontalAlignment = Alignment.CenterHorizontally horizontalAlignment = Alignment.CenterHorizontally
) { ) {
Spacer(modifier = Modifier.height(12.dp))
Text("Ajouter un dvd", Text("Ajouter un dvd",
fontSize = 26.sp, fontSize = 26.sp,
style = MaterialTheme.typography.titleLarge, style = MaterialTheme.typography.titleLarge,
@@ -102,8 +106,11 @@ fun AjoutDvdScreen(onQuit: () -> Unit, onAdd: (Dvd) -> Unit){
Spacer(modifier = Modifier.height(20.dp)) Spacer(modifier = Modifier.height(20.dp))
Column { Row(
MyButton("Ajouter") { Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.Center
) {
MyButton("Valider") {
if(titre.isNotBlank()){ if(titre.isNotBlank()){
onAdd( onAdd(
Dvd( Dvd(
@@ -115,6 +122,9 @@ fun AjoutDvdScreen(onQuit: () -> Unit, onAdd: (Dvd) -> Unit){
) )
} }
} }
MyButton("Quitter") { onQuit() }
} }
} }

View File

@@ -1,90 +0,0 @@
package com.dev.collectiondvd.ui.screen
import android.graphics.ColorSpace
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.Divider
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.font.Font
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import com.dev.collectiondvd.data.local.AppDatabase
import com.dev.collectiondvd.data.repository.LocalDvdRepository
import com.dev.collectiondvd.ui.theme.MyButton
import com.dev.collectiondvd.viewmodel.LocalDvdViewModel
import com.dev.collectiondvd.viewmodel.factory.LocalDvdViewModelFactory
class ListDvdActivity : ComponentActivity() {
private lateinit var viewModel: LocalDvdViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val database = AppDatabase.getDatabase(applicationContext)
val dvdDao = database.dvdDao()
val repository = LocalDvdRepository(dvdDao)
val factory = LocalDvdViewModelFactory(repository)
viewModel = ViewModelProvider(this, factory).get(LocalDvdViewModel::class.java)
setContent { ListDvdScreen(onQuit = { finish() }, viewModel = viewModel) }
}
}
@Composable
fun ListDvdScreen(
viewModel: LocalDvdViewModel,
onQuit: ()-> Unit
){
val dvds by viewModel.dvds.collectAsState(initial = emptyList())
Column(
modifier = Modifier
.fillMaxSize()
.padding(8.dp)
)
{
Text(
"Vos Dvds",
fontSize = 24.sp,
fontWeight = FontWeight.Bold,
modifier = Modifier.padding(bottom = 8.dp)
)
if(dvds.isEmpty()){
Box(
modifier = Modifier.weight(1f),
contentAlignment = Alignment.Center
){
Text("Aucun Dvd dans votre collection")
}
} else {
LazyColumn(modifier = Modifier.weight(1f)) {
items ( dvds, key = { it.id}) { dvd ->
Column(modifier = Modifier.padding(8.dp)) {
Text(dvd.titre.orEmpty())
Text(dvd.realisateur.orEmpty())
Text(dvd.annee.orEmpty())
Text(dvd.genre.orEmpty())
Divider()
}
}
}
}
MyButton("Quitter") { onQuit() }
}
}