recherche #2

Open
emile.lalorcey wants to merge 4 commits from recherche into main
3 changed files with 122 additions and 114 deletions
Showing only changes of commit 9c6e229826 - Show all commits

View File

@@ -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() {
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)
) {
Text("Gestion la collection de DVD", fontSize = 28.sp)
MyButton("Liste des DVDs") { context.startActivity(Intent(context, ListDvdActivity::class.java)) }
Spacer(modifier = Modifier.height(15.dp))
MyButton("Ajouter un DVD") { context.startActivity(Intent(context, AjoutDvdActivity::class.java)) }
Text(
"Votre collection",
fontSize = 24.sp,
fontWeight = FontWeight.Bold,
modifier = Modifier.padding(bottom = 8.dp)
)
MyButton("Supprimer un DVD") { context.startActivity((Intent(context, SupprDvdActivity::class.java)))}
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
))
)
}
}
@Preview(showBackground = true)
@Composable
fun MenuScreenPreview() {
CollectionDvdTheme {
com.dev.collectiondvd.MenuScreen()
Spacer(modifier = Modifier.height(16.dp))
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.Center
) {
MyButton("Quitter") { onQuit() }
}
}
}

View File

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

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