recherche #2
@@ -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() }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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() }
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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() }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user