🚧 add the request for the home

Now display the trends and the most popular media
features/retrofit/1
Jordan ARTZET 2 years ago
parent 838819f7b8
commit 86f7de2588

@ -1,9 +1,8 @@
package fr.iut.pm.movieapplication.api package fr.iut.pm.movieapplication.api
import fr.iut.pm.movieapplication.api.config.GlobalImageConfig
import fr.iut.pm.movieapplication.api.config.ImageConfig
import fr.iut.pm.movieapplication.api.dtos.MovieResultDTO import fr.iut.pm.movieapplication.api.dtos.MovieResultDTO
import fr.iut.pm.movieapplication.api.dtos.PopularDTO import fr.iut.pm.movieapplication.api.dtos.PopularDTO
import fr.iut.pm.movieapplication.utils.Constants.Companion.API_KEY
import retrofit2.Call import retrofit2.Call
import retrofit2.http.GET import retrofit2.http.GET
import retrofit2.http.Path import retrofit2.http.Path
@ -12,9 +11,12 @@ import retrofit2.http.Query
interface MovieApplicationAPI { interface MovieApplicationAPI {
@GET("movie/popular") @GET("movie/popular")
fun getPopularMovies(@Query("api_key") apiKey : String) : Call<PopularDTO> fun getPopularMovies(@Query("api_key") apiKey : String = API_KEY) : Call<PopularDTO>
@GET("trending/{media_type}/{time_window}")
fun getTrending(@Path("media_type") mediaType : String = "all", @Path("time_window") timeWindow : String = "day", @Query("api_key") apiKey: String = API_KEY ) : Call<PopularDTO>
@GET("movie/{movie_id") @GET("movie/{movie_id")
fun getMovieDetails(@Path("movie_id") movieId : Int, @Query("api_key") apiKey: String) : Call<MovieResultDTO> fun getMovieDetails(@Path("movie_id") movieId : Int, @Query("api_key") apiKey: String = API_KEY) : Call<MovieResultDTO>
} }

@ -19,5 +19,5 @@ object RetrofitInstance {
.addConverterFactory(MoshiConverterFactory.create(moshi)) .addConverterFactory(MoshiConverterFactory.create(moshi))
.build() .build()
val api = retrofit.create(MovieApplicationAPI::class.java) val api: MovieApplicationAPI = retrofit.create(MovieApplicationAPI::class.java)
} }

@ -4,7 +4,6 @@ import android.util.Log
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.api.dtos.PopularDTO
import fr.iut.pm.movieapplication.model.Movie import fr.iut.pm.movieapplication.model.Movie
import fr.iut.pm.movieapplication.utils.Constants
import fr.iut.pm.movieapplication.utils.Constants.Companion.API_KEY import fr.iut.pm.movieapplication.utils.Constants.Companion.API_KEY
import fr.iut.pm.movieapplication.utils.Mapper import fr.iut.pm.movieapplication.utils.Mapper
import retrofit2.Call import retrofit2.Call
@ -17,7 +16,7 @@ class MovieRepository() {
val listMovie : MutableList<Movie> = mutableListOf() val listMovie : MutableList<Movie> = mutableListOf()
RetrofitInstance.api.getPopularMovies(API_KEY).enqueue(object : RetrofitInstance.api.getPopularMovies().enqueue(object :
Callback<PopularDTO> { Callback<PopularDTO> {
override fun onResponse(call: Call<PopularDTO>, response: Response<PopularDTO>) { override fun onResponse(call: Call<PopularDTO>, response: Response<PopularDTO>) {
if (response.isSuccessful) { if (response.isSuccessful) {
@ -41,4 +40,27 @@ class MovieRepository() {
}) })
} }
fun getTrends(callback: (List<Movie>) -> Unit) {
val listMovie : MutableList<Movie> = mutableListOf()
RetrofitInstance.api.getTrending().enqueue(object : Callback<PopularDTO> {
override fun onResponse(call: Call<PopularDTO>, response: Response<PopularDTO>) {
if(response.isSuccessful) {
Log.d("Response",response.body().toString())
val popularDTO = response.body()
popularDTO?.results?.forEach {
val movie = Mapper.MapToMovie(it)
listMovie.add(movie)
movie.title?.let { it1 -> Log.d("Movie", it1) }
}
}
callback(listMovie)
}
override fun onFailure(call: Call<PopularDTO>, t: Throwable) {
Log.d("Error failure", t.message.toString())
}
})
}
} }

@ -9,6 +9,7 @@ import com.google.android.material.bottomnavigation.BottomNavigationView
import fr.iut.pm.movieapplication.R import fr.iut.pm.movieapplication.R
import fr.iut.pm.movieapplication.api.RetrofitInstance import fr.iut.pm.movieapplication.api.RetrofitInstance
import fr.iut.pm.movieapplication.api.config.GlobalImageConfig import fr.iut.pm.movieapplication.api.config.GlobalImageConfig
import fr.iut.pm.movieapplication.repository.MovieRepository
import fr.iut.pm.movieapplication.ui.fragments.HomeSectionsFragment import fr.iut.pm.movieapplication.ui.fragments.HomeSectionsFragment
import fr.iut.pm.movieapplication.ui.fragments.MoviesFragment import fr.iut.pm.movieapplication.ui.fragments.MoviesFragment
import fr.iut.pm.movieapplication.utils.Constants import fr.iut.pm.movieapplication.utils.Constants
@ -18,6 +19,9 @@ import kotlinx.coroutines.launch
import retrofit2.awaitResponse import retrofit2.awaitResponse
class MainActivity : AppCompatActivity() { class MainActivity : AppCompatActivity() {
val movieRepository : MovieRepository = MovieRepository()
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main) setContentView(R.layout.activity_main)

@ -14,7 +14,9 @@ import fr.iut.pm.movieapplication.ui.adapter.HomeItemAdapter
import fr.iut.pm.movieapplication.ui.adapter.HomeItemDecoration import fr.iut.pm.movieapplication.ui.adapter.HomeItemDecoration
import fr.iut.pm.movieapplication.ui.viewmodel.HomeSectionsVM import fr.iut.pm.movieapplication.ui.viewmodel.HomeSectionsVM
class HomeSectionsFragment(private val context : MainActivity) : Fragment() { class HomeSectionsFragment(
private val context : MainActivity
) : Fragment() {
private lateinit var homeSectionsViewModel : HomeSectionsVM private lateinit var homeSectionsViewModel : HomeSectionsVM
@ -22,15 +24,18 @@ class HomeSectionsFragment(private val context : MainActivity) : Fragment() {
val view = inflater.inflate(R.layout.fragment_home_sections, container, false) val view = inflater.inflate(R.layout.fragment_home_sections, container, false)
//get the trends RecyclerView //get the trends RecyclerView
context.movieRepository.getTrends {
val homeTrendsRecyclerView = view?.findViewById<RecyclerView>(R.id.home_trends_recycler_view) val homeTrendsRecyclerView = view?.findViewById<RecyclerView>(R.id.home_trends_recycler_view)
homeTrendsRecyclerView?.adapter = HomeItemAdapter(context,R.layout.item_horizontal_home_page,ArrayList<Movie>()) homeTrendsRecyclerView?.adapter = HomeItemAdapter(context,R.layout.item_horizontal_home_page,it)
homeTrendsRecyclerView?.addItemDecoration(HomeItemDecoration()) homeTrendsRecyclerView?.addItemDecoration(HomeItemDecoration())
}
//get the popularity RecyclerView //get the popularity RecyclerView
context.movieRepository.getPopularMovies {
val homePopularityRecyclerView = view?.findViewById<RecyclerView>(R.id.home_popularity_recycler_view) val homePopularityRecyclerView = view?.findViewById<RecyclerView>(R.id.home_popularity_recycler_view)
homePopularityRecyclerView?.adapter = HomeItemAdapter(context,R.layout.item_horizontal_home_page,ArrayList<Movie>()) homePopularityRecyclerView?.adapter = HomeItemAdapter(context,R.layout.item_horizontal_home_page,it)
homePopularityRecyclerView?.addItemDecoration(HomeItemDecoration()) homePopularityRecyclerView?.addItemDecoration(HomeItemDecoration())
}
//get the free RecyclerView //get the free RecyclerView
val homeFreeRecyclerView = view?.findViewById<RecyclerView>(R.id.home_free_recycler_view) val homeFreeRecyclerView = view?.findViewById<RecyclerView>(R.id.home_free_recycler_view)
homeFreeRecyclerView?.adapter = HomeItemAdapter(context,R.layout.item_horizontal_home_page,ArrayList()) homeFreeRecyclerView?.adapter = HomeItemAdapter(context,R.layout.item_horizontal_home_page,ArrayList())

@ -30,10 +30,7 @@ class MoviesFragment(
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_movies, container, false) val view = inflater.inflate(R.layout.fragment_movies, container, false)
context.movieRepository.getPopularMovies { listMovies ->
val repository = MovieRepository()
repository.getPopularMovies { listMovies ->
val moviesRecyclerView = view?.findViewById<RecyclerView>(R.id.movies_item_recycler_view) val moviesRecyclerView = view?.findViewById<RecyclerView>(R.id.movies_item_recycler_view)
moviesRecyclerView?.adapter = HomeItemAdapter(context, R.layout.item_vertical_fragment, listMovies) moviesRecyclerView?.adapter = HomeItemAdapter(context, R.layout.item_vertical_fragment, listMovies)
moviesRecyclerView ?. layoutManager = GridLayoutManager (context, 2) moviesRecyclerView ?. layoutManager = GridLayoutManager (context, 2)

@ -10,13 +10,13 @@
android:id="@+id/cardView" android:id="@+id/cardView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="200dp" android:layout_height="200dp"
app:cardCornerRadius="15dp" app:cardCornerRadius="5dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"> app:layout_constraintTop_toTopOf="parent">
<ImageView <ImageView
android:id="@+id/home_section_item_image" android:id="@+id/item_image"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/black" android:background="@color/black"
@ -26,7 +26,7 @@
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>
<TextView <TextView
android:id="@+id/home_section_item_name" android:id="@+id/item_name"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Nom du film" android:text="Nom du film"
@ -35,12 +35,12 @@
app:layout_constraintTop_toBottomOf="@+id/cardView" /> app:layout_constraintTop_toBottomOf="@+id/cardView" />
<TextView <TextView
android:id="@+id/home_section_item_date" android:id="@+id/item_date"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="23 nov 2012" android:text="23 nov 2012"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/home_section_item_name" /> app:layout_constraintTop_toBottomOf="@+id/item_name" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="200dp" android:layout_width="175dp"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<androidx.cardview.widget.CardView <androidx.cardview.widget.CardView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="300dp" android:layout_height="250dp"
android:layout_marginLeft="10dp" android:layout_marginLeft="10dp"
android:layout_marginStart="10dp" android:layout_marginStart="10dp"
android:layout_marginEnd="10dp" android:layout_marginEnd="10dp"
@ -21,14 +21,14 @@
<ImageView <ImageView
android:id="@+id/item_image" android:id="@+id/item_image"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="250dp" android:layout_height="210dp"
android:scaleType="centerCrop" android:scaleType="centerCrop"
android:background="@color/black" /> android:background="@color/black" />
<TextView <TextView
android:id="@+id/item_name" android:id="@+id/item_name"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="25dp" android:layout_height="20dp"
android:layout_gravity="center" android:layout_gravity="center"
android:textAlignment="center" android:textAlignment="center"
/> />
@ -36,7 +36,7 @@
<TextView <TextView
android:id="@+id/item_date" android:id="@+id/item_date"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="25dp" android:layout_height="20dp"
android:layout_gravity="center" android:layout_gravity="center"
android:textAlignment="center" android:textAlignment="center"
/> />

Loading…
Cancel
Save