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