diff --git a/src/app/build.gradle.kts b/src/app/build.gradle.kts index 442bfcdb01c671c10a8a4dd25b13f55f53088a43..8e8fe5ef2338799ebad48f9e90be61f10407da84 100644 --- a/src/app/build.gradle.kts +++ b/src/app/build.gradle.kts @@ -58,9 +58,11 @@ dependencies { implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2") implementation("androidx.activity:activity-compose:1.8.0") implementation(platform("androidx.compose:compose-bom:2023.03.00")) + implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-graphics") implementation("androidx.compose.ui:ui-tooling-preview") + implementation("androidx.compose.material3:material3") implementation("androidx.room:room-runtime:$room_version") @@ -78,4 +80,6 @@ dependencies { implementation("androidx.navigation:navigation-compose:2.5.3") + implementation("android.arch.lifecycle:livedata:1.1.1") + implementation("androidx.compose.ui:ui:1.5.4") } diff --git a/src/app/src/main/java/com/example/moviestudio/database/Application.kt b/src/app/src/main/java/com/example/moviestudio/database/Application.kt index 0b86f57e2b9ce76ec1980571563ccec3c0142e79..3817658bf7cc6f4b848e295223d5d517077b52d4 100644 --- a/src/app/src/main/java/com/example/moviestudio/database/Application.kt +++ b/src/app/src/main/java/com/example/moviestudio/database/Application.kt @@ -13,8 +13,5 @@ class MovieStudioApplication : Application() { override fun onCreate() { super.onCreate() database = AppDatabase.getInstance(this)!! - CoroutineScope(Dispatchers.IO).launch { - database.clearAllTables() // TODO: TO REMOVE AFTER USE OF API - } } } diff --git a/src/app/src/main/java/com/example/moviestudio/database/MovieDao.kt b/src/app/src/main/java/com/example/moviestudio/database/MovieDao.kt index d0cffbdc1707fd367bd11f35c138d9c42950dd44..c17bee0facba483cad7908357e2104a2dcad1f9c 100644 --- a/src/app/src/main/java/com/example/moviestudio/database/MovieDao.kt +++ b/src/app/src/main/java/com/example/moviestudio/database/MovieDao.kt @@ -21,4 +21,7 @@ interface MovieDao { @Query("DELETE FROM movies WHERE id = :movieId") suspend fun deleteMovie(movieId: Int) + + @Query("DELETE FROM movies") + suspend fun deleteMovies() } diff --git a/src/app/src/main/java/com/example/moviestudio/ui/components/ShowMovieModal.kt b/src/app/src/main/java/com/example/moviestudio/ui/components/ShowMovieModal.kt index 7ff4b59633aa78411a43bcd5550e9e57364ac8ea..7848298d50d895346a78a51936e58f7573055783 100644 --- a/src/app/src/main/java/com/example/moviestudio/ui/components/ShowMovieModal.kt +++ b/src/app/src/main/java/com/example/moviestudio/ui/components/ShowMovieModal.kt @@ -58,6 +58,7 @@ import com.example.moviestudio.ui.theme.main import com.example.moviestudio.ui.theme.second import com.example.moviestudio.ui.theme.third import com.example.moviestudio.viewmodels.ShowMovieViewModel +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") @@ -296,7 +297,7 @@ fun ShowMovie( Button( onClick = { Log.i("LIBRARY", "Save informations about the movie") - coroutineScope.launch { + coroutineScope.launch(Dispatchers.IO) { viewModel.insertRating(movie) } }, diff --git a/src/app/src/main/java/com/example/moviestudio/ui/screens/Library.kt b/src/app/src/main/java/com/example/moviestudio/ui/screens/Library.kt index bb6049d6f4ed6d68ce5f3ca9661a3dde1f9797aa..78268b87361bd729fbe23c6ff5f10e97be72ebd3 100644 --- a/src/app/src/main/java/com/example/moviestudio/ui/screens/Library.kt +++ b/src/app/src/main/java/com/example/moviestudio/ui/screens/Library.kt @@ -1,6 +1,7 @@ package com.example.moviestudio.ui.screens import android.annotation.SuppressLint +import android.graphics.fonts.FontStyle import android.util.Log import androidx.compose.foundation.background import androidx.compose.foundation.layout.Column @@ -29,6 +30,8 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.Observer import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavController import com.example.moviestudio.Movie @@ -42,6 +45,8 @@ import com.example.moviestudio.ui.theme.main import com.example.moviestudio.viewmodels.LibraryViewModel import com.example.moviestudio.viewmodels.ShowMovieViewModel import kotlinx.coroutines.launch +import androidx.compose.runtime.DisposableEffect +import kotlinx.coroutines.Dispatchers @SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") @@ -56,6 +61,7 @@ fun Library(navController: NavController) { val coroutineScope = rememberCoroutineScope() var fetchedMovies by remember { mutableStateOf<List<Movie>>(emptyList()) } + LaunchedEffect(true) { fetchedMovies = viewModel.fetchMovies() } @@ -95,6 +101,14 @@ fun Library(navController: NavController) { ) } + if (fetchedMovies.isEmpty()){ + Text( + text = "Aucun film n'a été ajouté à la bibliothèque pour le moment", + color = Color.Gray, + modifier = Modifier.fillMaxWidth().padding(8.dp) + ) + } + // Display movies saved in the library. LazyColumn( modifier = Modifier @@ -107,13 +121,12 @@ fun Library(navController: NavController) { onKnowMoreClick = { viewModel.updateSelectedMovie(movie) viewModel.showMovieDetails() - coroutineScope.launch { + coroutineScope.launch(Dispatchers.IO) { viewModelShow.fetchRating(movie.id) } }, onDeleteClick = { - Log.i("LIBRARY", "REMOVE MOVIE") - coroutineScope.launch { + coroutineScope.launch(Dispatchers.IO) { viewModel.deleteMovie(movie.id.toInt()) fetchedMovies = viewModel.fetchMovies() } diff --git a/src/app/src/main/java/com/example/moviestudio/ui/screens/SearchMovie.kt b/src/app/src/main/java/com/example/moviestudio/ui/screens/SearchMovie.kt index de87968121922b9a71dab5af74e1cd18d60cc1e5..2ad2d7f0ae1b25a9ba89a3421b0039a203cb8f44 100644 --- a/src/app/src/main/java/com/example/moviestudio/ui/screens/SearchMovie.kt +++ b/src/app/src/main/java/com/example/moviestudio/ui/screens/SearchMovie.kt @@ -87,7 +87,6 @@ fun SearchMovie(navController: NavController) { viewModel.showMoviePreview() }, onAddToLibraryClick = { - Log.i("SEARCH", "ADD MOVIE IN LIBRARY ${movie.name}") coroutineScope.launch { viewModel.insertMovie(movie) } diff --git a/src/app/src/main/java/com/example/moviestudio/ui/screens/Settings.kt b/src/app/src/main/java/com/example/moviestudio/ui/screens/Settings.kt index c199b30b9b455473b8f395f83398e381228b12cd..61579f6aadf73fc6bdf91a18da136ff79ed20347 100644 --- a/src/app/src/main/java/com/example/moviestudio/ui/screens/Settings.kt +++ b/src/app/src/main/java/com/example/moviestudio/ui/screens/Settings.kt @@ -15,6 +15,7 @@ import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -29,6 +30,7 @@ import com.example.moviestudio.ui.theme.dark import com.example.moviestudio.ui.theme.main import com.example.moviestudio.ui.theme.second import com.example.moviestudio.viewmodels.SettingsViewModel +import kotlinx.coroutines.launch @SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") @OptIn(ExperimentalMaterial3Api::class) @@ -39,6 +41,8 @@ fun Settings(navController: NavController) { val viewModel = viewModel<SettingsViewModel>() + val coroutineScope = rememberCoroutineScope() + Scaffold( modifier = Modifier.background(Color.Black), topBar = { @@ -69,7 +73,11 @@ fun Settings(navController: NavController) { modifier = Modifier .fillMaxWidth() .padding(6.dp), - onClick = { viewModel.deleteAppData() }, + onClick = { + coroutineScope.launch { + viewModel.deleteAppData() + } + }, colors = ButtonDefaults.buttonColors(containerColor = second) ) { Text(text = "Supprimer les données") diff --git a/src/app/src/main/java/com/example/moviestudio/viewmodels/LibraryViewModel.kt b/src/app/src/main/java/com/example/moviestudio/viewmodels/LibraryViewModel.kt index 966b94ed79f2d86000533cf55ce2e12510d9afb8..08d3e45713bffb66329a12e046e81bcced223faf 100644 --- a/src/app/src/main/java/com/example/moviestudio/viewmodels/LibraryViewModel.kt +++ b/src/app/src/main/java/com/example/moviestudio/viewmodels/LibraryViewModel.kt @@ -4,6 +4,8 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.example.moviestudio.Movie import com.example.moviestudio.UserRating @@ -26,6 +28,9 @@ class LibraryViewModel() : ViewModel() { var isModalVisible by mutableStateOf(false) private set + private val _moviesLiveData = MutableLiveData<List<Movie>>() + val moviesLiveData: LiveData<List<Movie>> get() = _moviesLiveData + val movies = mutableStateListOf<Movie>( Movie( id = 1, @@ -57,7 +62,6 @@ class LibraryViewModel() : ViewModel() { ) - var selectedMovie by mutableStateOf(movies[0]) // TODO @@ -100,10 +104,6 @@ class LibraryViewModel() : ViewModel() { deleteMovie(id) } - suspend fun getAllMovies(): List<Movie> { - return db.movieDao().getAllMovies() - } - suspend fun insertMovie(movieEntity: Movie) { db.movieDao().insertMovie(movieEntity) } diff --git a/src/app/src/main/java/com/example/moviestudio/viewmodels/SettingsViewModel.kt b/src/app/src/main/java/com/example/moviestudio/viewmodels/SettingsViewModel.kt index 1fe9db1a8e20206a301e1e5e9e70d2af3a403d94..b65b7751755b40c817fda935d8e3bf1fdba586c3 100644 --- a/src/app/src/main/java/com/example/moviestudio/viewmodels/SettingsViewModel.kt +++ b/src/app/src/main/java/com/example/moviestudio/viewmodels/SettingsViewModel.kt @@ -2,9 +2,13 @@ package com.example.moviestudio.viewmodels import android.util.Log import androidx.lifecycle.ViewModel +import com.example.moviestudio.database.DatabaseProvider class SettingsViewModel : ViewModel() { - fun deleteAppData() { + val db = DatabaseProvider.getDatabase() + + suspend fun deleteAppData() { Log.i("SETTINGS", "DELETE DATA FROM DB") + db.movieDao().deleteMovies() } }