diff --git a/CineCool/app/build.gradle b/CineCool/app/build.gradle index 4f08370..e5353a1 100644 --- a/CineCool/app/build.gradle +++ b/CineCool/app/build.gradle @@ -74,4 +74,8 @@ dependencies { implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'androidx.fragment:fragment-ktx:1.5.6' implementation 'androidx.multidex:multidex:2.0.1' + implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' + implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1' + implementation 'com.github.bumptech.glide:glide:4.12.0' + annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' } \ No newline at end of file diff --git a/CineCool/app/src/main/AndroidManifest.xml b/CineCool/app/src/main/AndroidManifest.xml index 2d2c14a..248342b 100644 --- a/CineCool/app/src/main/AndroidManifest.xml +++ b/CineCool/app/src/main/AndroidManifest.xml @@ -1,9 +1,13 @@ + + + + , + val total_pages: Int, + val total_results: Int +) + +data class Movie( + val id: Int, + val title: String, + val poster_path: String?, + val overview: String +) diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/API/Repository.kt b/CineCool/app/src/main/java/fr/iut/cinecool/API/Repository.kt new file mode 100644 index 0000000..5894918 --- /dev/null +++ b/CineCool/app/src/main/java/fr/iut/cinecool/API/Repository.kt @@ -0,0 +1,13 @@ +package fr.iut.cinecool.API + +class Repository { + private val apiService = ApiClient.apiService + + suspend fun getPopularMovies(apiKey: String, page: Int): MovieResponse { + return apiService.getPopularMovies(apiKey, page) + } + + suspend fun searchMovies(apiKey: String, query: String, page: Int): MovieResponse { + return apiService.searchMovies(apiKey, query, page) + } +} diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/DetailActivity.kt b/CineCool/app/src/main/java/fr/iut/cinecool/DetailActivity.kt index 2ecf9c7..32975b8 100644 --- a/CineCool/app/src/main/java/fr/iut/cinecool/DetailActivity.kt +++ b/CineCool/app/src/main/java/fr/iut/cinecool/DetailActivity.kt @@ -1,17 +1,7 @@ package fr.iut.cinecool import android.os.Bundle -import android.widget.ImageButton -import android.widget.ImageView -import android.widget.TextView import androidx.appcompat.app.AppCompatActivity -import fr.iut.cinecool.interfaces.ITheMovieDbApiCallback -import fr.iut.cinecool.model.Movie -import fr.iut.cinecool.model.MovieAPI -import fr.iut.cinecool.services.TheMovieDbApiClient -import retrofit2.Call -import retrofit2.Response -import javax.security.auth.callback.Callback class DetailActivity : AppCompatActivity() { diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/MainActivity.kt b/CineCool/app/src/main/java/fr/iut/cinecool/MainActivity.kt index df7894a..d6d302e 100644 --- a/CineCool/app/src/main/java/fr/iut/cinecool/MainActivity.kt +++ b/CineCool/app/src/main/java/fr/iut/cinecool/MainActivity.kt @@ -7,7 +7,7 @@ import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val loginButton = findViewById(R.id.loginButton) diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/MovieViewModel.kt b/CineCool/app/src/main/java/fr/iut/cinecool/MovieViewModel.kt new file mode 100644 index 0000000..14f1a2a --- /dev/null +++ b/CineCool/app/src/main/java/fr/iut/cinecool/MovieViewModel.kt @@ -0,0 +1,29 @@ +package fr.iut.cinecool + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import kotlinx.coroutines.launch +import androidx.lifecycle.MutableLiveData +import fr.iut.cinecool.API.Movie +import fr.iut.cinecool.API.Repository + +class MovieViewModel : ViewModel() { + private val repository = Repository() + + val popularMovies = MutableLiveData>() + val searchResults = MutableLiveData>() + + fun getPopularMovies(apiKey: String, page: Int) { + viewModelScope.launch { + val movies = repository.getPopularMovies(apiKey, page) + popularMovies.postValue(movies.results) + } + } + + fun searchMovies(apiKey: String, query: String, page: Int) { + viewModelScope.launch { + val movies = repository.searchMovies(apiKey, query, page) + searchResults.postValue(movies.results) + } + } +} diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/MoviesFragment.kt b/CineCool/app/src/main/java/fr/iut/cinecool/MoviesFragment.kt index cd2b969..80deb28 100644 --- a/CineCool/app/src/main/java/fr/iut/cinecool/MoviesFragment.kt +++ b/CineCool/app/src/main/java/fr/iut/cinecool/MoviesFragment.kt @@ -6,36 +6,63 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Button +import androidx.fragment.app.viewModels import android.widget.LinearLayout import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import fr.iut.cinecool.adapter.MovieAdapter +import fr.iut.cinecool.databinding.FragmentMoviesBinding import fr.iut.cinecool.model.Movie import fr.iut.cinecool.model.Stub class MoviesFragment : Fragment() { - private lateinit var recycler: RecyclerView - private lateinit var movieList: ArrayList + private var _binding: FragmentMoviesBinding? = null + private val binding get() = _binding!! private lateinit var movieAdapter: MovieAdapter + + private val movieViewModel: MovieViewModel by viewModels() + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - // Inflate the layout for this fragment - val view = inflater.inflate(R.layout.fragment_movies, container, false) - val button = view.findViewById