From 9c6e2298262e8c804fa5ba6dea633ff3a0024f99 Mon Sep 17 00:00:00 2001 From: MalcuitEmile Date: Wed, 17 Dec 2025 16:21:53 +0100 Subject: [PATCH] ajout recherche --- .../com/dev/collectiondvd/MainActivity.kt | 132 +++++++++++++++--- .../ui/screen/AjoutDvdActivity.kt | 14 +- .../ui/screen/ListDvdActivity.kt | 90 ------------ 3 files changed, 122 insertions(+), 114 deletions(-) delete mode 100644 app/src/main/java/com/dev/collectiondvd/ui/screen/ListDvdActivity.kt diff --git a/app/src/main/java/com/dev/collectiondvd/MainActivity.kt b/app/src/main/java/com/dev/collectiondvd/MainActivity.kt index 9d4796d..5657d17 100644 --- a/app/src/main/java/com/dev/collectiondvd/MainActivity.kt +++ b/app/src/main/java/com/dev/collectiondvd/MainActivity.kt @@ -6,61 +6,149 @@ import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge 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.Spacer 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.lazy.LazyColumn +import androidx.compose.foundation.lazy.items import androidx.compose.material3.Button +import androidx.compose.material3.Divider +import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Scaffold import androidx.compose.material3.Text 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.Modifier import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp 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.ListDvdActivity import com.dev.collectiondvd.ui.screen.SupprDvdActivity import com.dev.collectiondvd.ui.theme.CollectionDvdTheme 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 class MainActivity : ComponentActivity() { + private lateinit var viewModel: LocalDvdViewModel override fun onCreate(savedInstanceState: Bundle?) { 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( modifier = Modifier .fillMaxSize() - .padding(16.dp), - verticalArrangement = Arrangement.spacedBy(12.dp), - horizontalAlignment = Alignment.CenterHorizontally, + .padding(8.dp) + ) { + 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("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() + MyButton("Quitter") { onQuit() } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/dev/collectiondvd/ui/screen/AjoutDvdActivity.kt b/app/src/main/java/com/dev/collectiondvd/ui/screen/AjoutDvdActivity.kt index 1d29b77..80cf6ed 100644 --- a/app/src/main/java/com/dev/collectiondvd/ui/screen/AjoutDvdActivity.kt +++ b/app/src/main/java/com/dev/collectiondvd/ui/screen/AjoutDvdActivity.kt @@ -30,6 +30,7 @@ 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 +import org.intellij.lang.annotations.JdkConstants class AjoutDvdActivity : ComponentActivity() { @@ -69,6 +70,9 @@ fun AjoutDvdScreen(onQuit: () -> Unit, onAdd: (Dvd) -> Unit){ verticalArrangement = Arrangement.spacedBy(16.dp), horizontalAlignment = Alignment.CenterHorizontally ) { + + Spacer(modifier = Modifier.height(12.dp)) + Text("Ajouter un dvd", fontSize = 26.sp, style = MaterialTheme.typography.titleLarge, @@ -102,8 +106,11 @@ fun AjoutDvdScreen(onQuit: () -> Unit, onAdd: (Dvd) -> Unit){ Spacer(modifier = Modifier.height(20.dp)) - Column { - MyButton("Ajouter") { + Row( + Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.Center + ) { + MyButton("Valider") { if(titre.isNotBlank()){ onAdd( Dvd( @@ -115,6 +122,9 @@ fun AjoutDvdScreen(onQuit: () -> Unit, onAdd: (Dvd) -> Unit){ ) } } + + MyButton("Quitter") { onQuit() } + } } diff --git a/app/src/main/java/com/dev/collectiondvd/ui/screen/ListDvdActivity.kt b/app/src/main/java/com/dev/collectiondvd/ui/screen/ListDvdActivity.kt deleted file mode 100644 index 4f97478..0000000 --- a/app/src/main/java/com/dev/collectiondvd/ui/screen/ListDvdActivity.kt +++ /dev/null @@ -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() } - } -} \ No newline at end of file