:recycler: refactor and clean the code

features/api/requests/2
Jordan ARTZET 2 years ago
parent e29247f3ce
commit 635a458cad

@ -1,15 +1,9 @@
package fr.iut.pm.movieapplication.repository package fr.iut.pm.movieapplication.repository
import android.util.Log import android.util.Log
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.liveData
import fr.iut.pm.movieapplication.api.RetrofitInstance import fr.iut.pm.movieapplication.api.RetrofitInstance
import fr.iut.pm.movieapplication.api.dtos.PopularDTO
import fr.iut.pm.movieapplication.model.media.MediaResult
import fr.iut.pm.movieapplication.model.media.movie.Movie import fr.iut.pm.movieapplication.model.media.movie.Movie
import fr.iut.pm.movieapplication.utils.MediaResultMapper import fr.iut.pm.movieapplication.utils.MediaResultMapper
import kotlinx.coroutines.Dispatchers
class MovieRepository { class MovieRepository {

@ -17,7 +17,6 @@ import fr.iut.pm.movieapplication.ui.fragments.TvShowsFragment
class MainActivity : AppCompatActivity() { class MainActivity : AppCompatActivity() {
val movieRepository : MovieRepository = MovieRepository()
val mediaRepository : MediaRepository = MediaRepository() val mediaRepository : MediaRepository = MediaRepository()
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@ -47,13 +46,7 @@ class MainActivity : AppCompatActivity() {
else -> false else -> false
} }
} }
/*
//Trends fragment injected in main activity
val transaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.fragment_container, HomeSectionsFragment())
transaction.addToBackStack(null)
transaction.commit()
*/
if(Build.VERSION.SDK_INT < 33) { if(Build.VERSION.SDK_INT < 33) {
// Hide the status bar. // Hide the status bar.
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN

@ -1,12 +0,0 @@
package fr.iut.pm.movieapplication.ui.adapter
import android.graphics.Rect
import android.view.View
import androidx.recyclerview.widget.RecyclerView
class CategoryItemDecoration : RecyclerView.ItemDecoration() {
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
outRect.bottom = 50
}
}

@ -1,16 +1,12 @@
package fr.iut.pm.movieapplication.ui.adapter package fr.iut.pm.movieapplication.ui.adapter
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.core.net.toUri import androidx.core.net.toUri
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import coil.load import coil.load
import fr.iut.pm.movieapplication.R
import fr.iut.pm.movieapplication.databinding.ItemMovieCategoryBinding import fr.iut.pm.movieapplication.databinding.ItemMovieCategoryBinding
import fr.iut.pm.movieapplication.model.media.movie.Movie import fr.iut.pm.movieapplication.model.media.movie.Movie
import fr.iut.pm.movieapplication.utils.Constants import fr.iut.pm.movieapplication.utils.Constants

@ -1,38 +1,22 @@
package fr.iut.pm.movieapplication.ui.fragments package fr.iut.pm.movieapplication.ui.fragments
import android.os.Bundle import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.AdapterView import android.widget.AdapterView
import android.widget.ArrayAdapter import android.widget.ArrayAdapter
import android.widget.Spinner
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.lifecycle.Observer
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import fr.iut.pm.movieapplication.R import fr.iut.pm.movieapplication.R
import fr.iut.pm.movieapplication.databinding.FragmentMoviesBinding import fr.iut.pm.movieapplication.databinding.FragmentMoviesBinding
import fr.iut.pm.movieapplication.model.media.movie.Movie
import fr.iut.pm.movieapplication.ui.adapter.MovieAdapter
import fr.iut.pm.movieapplication.ui.viewmodel.MoviesVM import fr.iut.pm.movieapplication.ui.viewmodel.MoviesVM
import fr.iut.pm.movieapplication.utils.Constants.Companion.PAGE_SIZE
class MoviesFragment( class MoviesFragment(
) : Fragment() { ) : Fragment() {
private var isLoading = false
private var isLastPage = false
private var currentPage = 1
private var currentList : MutableList<Movie> = mutableListOf()
private val moviesVM by viewModels<MoviesVM>() private val moviesVM by viewModels<MoviesVM>()
lateinit var spinner: Spinner
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
@ -41,25 +25,25 @@ class MoviesFragment(
binding.moviesVM = moviesVM binding.moviesVM = moviesVM
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
val adapter = ArrayAdapter.createFromResource( val adapter = ArrayAdapter.createFromResource(
requireContext(), requireContext(),
R.array.movie_filter, R.array.movie_filter,
android.R.layout.simple_spinner_item android.R.layout.simple_spinner_item
) )
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
with(binding.categorySpinner) with(binding.categorySpinner)
{ {
this.adapter = adapter this.adapter = adapter
onItemSelectedListener = object : AdapterView.OnItemSelectedListener { onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected( override fun onItemSelected(
parent: AdapterView<*>?, parent: AdapterView<*>?,
view: View?, view: View?,
position: Int, position: Int,
id: Long id: Long
) { ) {
moviesVM.getDataFilter(selectedItem.toString()) moviesVM.getData(selectedItem.toString())
} }
override fun onNothingSelected(parent: AdapterView<*>?) { override fun onNothingSelected(parent: AdapterView<*>?) {

@ -9,14 +9,31 @@ import fr.iut.pm.movieapplication.ui.adapter.MovieAdapter
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
class MoviesVM() : ViewModel() { class MoviesVM() : ViewModel() {
//Movie repository /**
* The movie repository used to get our data
*/
private val repository = MovieRepository() private val repository = MovieRepository()
//Live data
/**
* The MutableLiveData
*/
private var _moviesLiveData : MutableLiveData<List<Movie>> = MutableLiveData<List<Movie>>() private var _moviesLiveData : MutableLiveData<List<Movie>> = MutableLiveData<List<Movie>>()
/**
* Getter of the LiveData
*/
fun getMoviesLiveData() : LiveData<List<Movie>> = _moviesLiveData fun getMoviesLiveData() : LiveData<List<Movie>> = _moviesLiveData
/**
* The current data filter
*/
private var currentFilter = "" private var currentFilter = ""
/**
* The adapter of the RecyclerView (set on the RecyclerView in the view)
*/
val moviesAdapter = MovieAdapter() val moviesAdapter = MovieAdapter()
val scrollListener = object : RecyclerView.OnScrollListener() { val scrollListener = object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
val layoutManager = recyclerView.layoutManager as GridLayoutManager val layoutManager = recyclerView.layoutManager as GridLayoutManager
@ -33,13 +50,13 @@ class MoviesVM() : ViewModel() {
private var currentPage = 1 private var currentPage = 1
/**
fun getDataFilter(filter : String) { * Get the data with a given filter
* @param filter filter applied to get data
//_moviesLiveData.value = mutableListOf() */
fun getData(filter : String) {
currentFilter = filter currentFilter = filter
currentPage = 1 currentPage = 1
when(currentFilter) { when(currentFilter) {
"Populaires" -> viewModelScope.launch { "Populaires" -> viewModelScope.launch {
_moviesLiveData.postValue(repository.getPopularMovies()) _moviesLiveData.postValue(repository.getPopularMovies())
@ -57,7 +74,11 @@ class MoviesVM() : ViewModel() {
} }
fun getMoreData(page : Int = 1) { /**
* Get more data with the actual filter
* @param page page from which the data are obtained
*/
private fun getMoreData(page : Int = 1) {
var movies : List<Movie> var movies : List<Movie>
when(currentFilter) { when(currentFilter) {
"Populaires" -> viewModelScope.launch { "Populaires" -> viewModelScope.launch {
@ -81,13 +102,3 @@ class MoviesVM() : ViewModel() {
} }
} }
class MoviesVMFactory : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return MoviesVM() as T
}
}

@ -1,9 +0,0 @@
package fr.iut.pm.movieapplication.ui.viewmodel
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
inline fun <VM : ViewModel> viewModelFactory(crossinline f: () -> VM) =
object : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T = f() as T
}
Loading…
Cancel
Save