diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/MovieApplicationAPI.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/MovieApplicationAPI.kt index e08f7f5..438381e 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/MovieApplicationAPI.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/MovieApplicationAPI.kt @@ -1,10 +1,8 @@ package fr.iut.pm.movieapplication.api -import fr.iut.pm.movieapplication.api.dtos.MovieDTO import fr.iut.pm.movieapplication.api.dtos.MovieDetailsDTO -import fr.iut.pm.movieapplication.api.dtos.PopularDTO +import fr.iut.pm.movieapplication.api.dtos.ResultDTO import fr.iut.pm.movieapplication.utils.Constants.Companion.API_KEY -import retrofit2.Call import retrofit2.Response import retrofit2.http.GET import retrofit2.http.Path @@ -14,16 +12,16 @@ interface MovieApplicationAPI { // Movie @GET("movie/popular") - suspend fun getPopularMovies(@Query("api_key") apiKey : String = API_KEY, @Query("language") language : String = "fr", @Query("page") page : Int = 1) : Response + suspend fun getPopularMovies(@Query("api_key") apiKey : String = API_KEY, @Query("language") language : String = "fr", @Query("page") page : Int = 1) : Response @GET("movie/now_playing") - suspend fun getNowPlayingMovies(@Query("api_key") apiKey : String = API_KEY, @Query("language") language : String = "fr", @Query("page") page : Int = 1) : Response + suspend fun getNowPlayingMovies(@Query("api_key") apiKey : String = API_KEY, @Query("language") language : String = "fr", @Query("page") page : Int = 1) : Response @GET("movie/upcoming") - suspend fun getUpcomingMovies(@Query("api_key") apiKey: String = API_KEY, @Query("language") language : String = "fr", @Query("page") page : Int = 1) : Response + suspend fun getUpcomingMovies(@Query("api_key") apiKey: String = API_KEY, @Query("language") language : String = "fr", @Query("page") page : Int = 1) : Response @GET("movie/top_rated") - suspend fun getTopRatedMovies(@Query("api_key") apiKey: String = API_KEY, @Query("language") language : String = "fr", @Query("page") page : Int = 1) : Response + suspend fun getTopRatedMovies(@Query("api_key") apiKey: String = API_KEY, @Query("language") language : String = "fr", @Query("page") page : Int = 1) : Response // Movie details @GET("movie/{movie_id}") @@ -32,18 +30,26 @@ interface MovieApplicationAPI { // TvShow @GET("tv/popular") - suspend fun getPopularTvShows(@Query("api_key") apiKey : String = API_KEY, @Query("language") language : String = "fr", @Query("page") page : Int = 1) : Response + suspend fun getPopularTvShows(@Query("api_key") apiKey : String = API_KEY, @Query("language") language : String = "fr", @Query("page") page : Int = 1) : Response @GET("tv/airing_today") - suspend fun getAiringTodayTvShows(@Query("api_key") apiKey: String = API_KEY, @Query("language") language : String = "fr", @Query("page") page : Int = 1) : Response + suspend fun getAiringTodayTvShows(@Query("api_key") apiKey: String = API_KEY, @Query("language") language : String = "fr", @Query("page") page : Int = 1) : Response @GET("tv/on_the_air") - suspend fun getTvOnTheAirTvShows(@Query("api_key") apiKey: String = API_KEY, @Query("language") language : String = "fr", @Query("page") page : Int = 1) : Response + suspend fun getTvOnTheAirTvShows(@Query("api_key") apiKey: String = API_KEY, @Query("language") language : String = "fr", @Query("page") page : Int = 1) : Response @GET("tv/top_rated") - suspend fun getTopRatedTvShows(@Query("api_key") apiKey: String = API_KEY, @Query("language") language : String = "fr", @Query("page") page : Int = 1) : Response + suspend fun getTopRatedTvShows(@Query("api_key") apiKey: String = API_KEY, @Query("language") language : String = "fr", @Query("page") page : Int = 1) : Response @GET("trending/{media_type}/{time_window}") - suspend fun getTrending(@Path("media_type") mediaType : String = "all", @Path("time_window") timeWindow : String = "day", @Query("api_key") apiKey: String = API_KEY ) : Response - + suspend fun getTrending(@Path("media_type") mediaType : String = "all", @Path("time_window") timeWindow : String = "day", @Query("api_key") apiKey: String = API_KEY ) : Response + + @GET("search/multi") + suspend fun searchMedia( + @Query("query") query: String, + @Query("page") page: Int = 1, + @Query("api_key") apiKey: String = API_KEY, + @Query("language") language: String = "fr", + @Query("include_adult") includeAdult: Boolean = true + ): Response @GET("tv/{tv_id}") fun getShowDetails(@Path("tv_id") tvId : Int, @Query("api_key") apiKey: String = API_KEY) diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/MediaResultDTO.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/MediaResultDTO.kt index 2f1029f..13e9c02 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/MediaResultDTO.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/MediaResultDTO.kt @@ -22,16 +22,16 @@ open class MediaResultDTO( @Json(name = "original_title") val originalTitle : String? = null, @Json(name = "original_language") - val originalLanguage : String, + val originalLanguage : String? = null, val title : String? = null, @Json(name = "backdrop_path") val backdropPath : String?, - val popularity : Double, + val popularity : Double?, @Json(name = "vote_count") - val voteCount : Int, + val voteCount : Int?, //val video : Boolean?, @Json(name = "vote_average") - val voteAverage : Double, + val voteAverage : Double?, val name: String? = null, @Json(name = "original_name") val originalName : String? = null, diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/PopularDTO.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/ResultDTO.kt similarity index 93% rename from Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/PopularDTO.kt rename to Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/ResultDTO.kt index 2db4407..f52a776 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/PopularDTO.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/ResultDTO.kt @@ -5,7 +5,7 @@ import com.squareup.moshi.Json -class PopularDTO( +class ResultDTO( @Json(name = "page") val page : Int, @Json(name = "results") diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/repository/MediaRepository.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/repository/api/MediaRepository.kt similarity index 72% rename from Sources/app/src/main/java/fr/iut/pm/movieapplication/repository/MediaRepository.kt rename to Sources/app/src/main/java/fr/iut/pm/movieapplication/repository/api/MediaRepository.kt index 2b9b632..e8b771b 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/repository/MediaRepository.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/repository/api/MediaRepository.kt @@ -1,4 +1,4 @@ -package fr.iut.pm.movieapplication.repository +package fr.iut.pm.movieapplication.repository.api import android.util.Log import fr.iut.pm.movieapplication.api.RetrofitInstance @@ -68,4 +68,25 @@ class MediaRepository { else Log.d("ERROR FAILED", response.message()) listMediaResult } + + suspend fun search(query : String, Page : Int = 1) : List = withContext(Dispatchers.IO) { + val listMediaResult : MutableList = mutableListOf() + + val response = RetrofitInstance.api.searchMedia(query, Page) + if(response.isSuccessful) { + + val listMediaResultDTO = response.body()?.results + Log.d("Response",response.body().toString()) + listMediaResultDTO?.forEach { + if(it?.mediaType == "movie" || it?.mediaType == "tv") { + val mediaResult = it?.let { it1 -> MediaResultMapper.mapToMediaResult(it1) } + mediaResult?.let { it1 -> listMediaResult.add(it1) } + mediaResult?.let { it1 -> Log.d("Movie", it1.title) } + } + + } + } + else Log.d("ERROR FAILED", response.message()) + listMediaResult + } } \ No newline at end of file diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/repository/MovieAPIRepository.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/repository/api/MovieAPIRepository.kt similarity index 98% rename from Sources/app/src/main/java/fr/iut/pm/movieapplication/repository/MovieAPIRepository.kt rename to Sources/app/src/main/java/fr/iut/pm/movieapplication/repository/api/MovieAPIRepository.kt index 2ca77aa..cde6f9b 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/repository/MovieAPIRepository.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/repository/api/MovieAPIRepository.kt @@ -1,4 +1,4 @@ -package fr.iut.pm.movieapplication.repository +package fr.iut.pm.movieapplication.repository.api import android.util.Log import fr.iut.pm.movieapplication.api.RetrofitInstance diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/repository/TvShowRepository.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/repository/api/TvShowRepository.kt similarity index 98% rename from Sources/app/src/main/java/fr/iut/pm/movieapplication/repository/TvShowRepository.kt rename to Sources/app/src/main/java/fr/iut/pm/movieapplication/repository/api/TvShowRepository.kt index 58ccf1d..096de79 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/repository/TvShowRepository.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/repository/api/TvShowRepository.kt @@ -1,4 +1,4 @@ -package fr.iut.pm.movieapplication.repository +package fr.iut.pm.movieapplication.repository.api import android.util.Log import fr.iut.pm.movieapplication.api.RetrofitInstance diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/activity/MainActivity.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/activity/MainActivity.kt index 426b00b..cbe53d2 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/activity/MainActivity.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/activity/MainActivity.kt @@ -7,10 +7,7 @@ import androidx.appcompat.widget.SearchView import androidx.fragment.app.Fragment import com.google.android.material.bottomnavigation.BottomNavigationView import fr.iut.pm.movieapplication.R -import fr.iut.pm.movieapplication.ui.fragments.FavoritesFragment -import fr.iut.pm.movieapplication.ui.fragments.HomeSectionsFragment -import fr.iut.pm.movieapplication.ui.fragments.MoviesFragment -import fr.iut.pm.movieapplication.ui.fragments.TvShowsFragment +import fr.iut.pm.movieapplication.ui.fragments.* class MainActivity : AppCompatActivity() { @@ -18,14 +15,14 @@ class MainActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) - loadFragments(HomeSectionsFragment(this)) + loadFragments(HomeSectionsFragment()) val navigationView = findViewById(R.id.navigation_view) navigationView.setOnItemSelectedListener { when(it.itemId) { R.id.home_page -> { - loadFragments(HomeSectionsFragment(this)) + loadFragments(HomeSectionsFragment()) return@setOnItemSelectedListener true } @@ -57,13 +54,16 @@ class MainActivity : AppCompatActivity() { override fun onQueryTextSubmit(query: String?): Boolean { if(!query.isNullOrEmpty()) { - + loadFragments(SearchResultFragment.newInstance(query)) } return true; } - - override fun onQueryTextChange(newText: String?): Boolean { - return false + //A améliorer + override fun onQueryTextChange(query: String?): Boolean { + if(!query.isNullOrEmpty()) { + loadFragments(SearchResultFragment.newInstance(query)) + } + return true } }) diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/adapter/MediaAdapter.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/adapter/MediaAdapter.kt index ec130b5..9e401c7 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/adapter/MediaAdapter.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/adapter/MediaAdapter.kt @@ -10,17 +10,18 @@ import androidx.recyclerview.widget.RecyclerView import coil.load import fr.iut.pm.movieapplication.databinding.ItemHorizontalHomePageBinding import fr.iut.pm.movieapplication.model.media.MediaResult +import fr.iut.pm.movieapplication.ui.interfaces.MediaSelection import fr.iut.pm.movieapplication.ui.interfaces.MovieSelection import fr.iut.pm.movieapplication.utils.Constants -class MediaAdapter(private val listener : MovieSelection): ListAdapter(DiffUtilMediaCallback) { +class MediaAdapter(private val listener : MediaSelection): ListAdapter(DiffUtilMediaCallback) { private object DiffUtilMediaCallback : DiffUtil.ItemCallback() { override fun areItemsTheSame(oldItem: MediaResult, newItem: MediaResult) = oldItem.id == newItem.id override fun areContentsTheSame(oldItem: MediaResult, newItem: MediaResult) = oldItem == newItem } - class ViewHolder(private val binding : ItemHorizontalHomePageBinding, listener: MovieSelection) + class ViewHolder(private val binding : ItemHorizontalHomePageBinding, listener: MediaSelection) : RecyclerView.ViewHolder(binding.root) { val mediaResult : MediaResult? get() = binding.mediaResult diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/adapter/SearchResultAdapter.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/adapter/SearchResultAdapter.kt index 81c2d51..fe7b982 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/adapter/SearchResultAdapter.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/adapter/SearchResultAdapter.kt @@ -1,4 +1,42 @@ package fr.iut.pm.movieapplication.ui.adapter -class SearchResultAdapter { +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.core.net.toUri +import androidx.recyclerview.widget.DiffUtil +import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.ListAdapter +import coil.load +import fr.iut.pm.movieapplication.databinding.ItemSearchResultsBinding +import fr.iut.pm.movieapplication.model.media.MediaResult +import fr.iut.pm.movieapplication.ui.interfaces.MediaSelection +import fr.iut.pm.movieapplication.utils.Constants + +class SearchResultAdapter(private val listener : MediaSelection) + : ListAdapter(DiffUtilMediaCallback) { + + private object DiffUtilMediaCallback : DiffUtil.ItemCallback() { + override fun areItemsTheSame(oldItem: MediaResult, newItem: MediaResult) = oldItem.id == newItem.id + override fun areContentsTheSame(oldItem: MediaResult, newItem: MediaResult) = oldItem == newItem + } + + class ViewHolder(private val binding : ItemSearchResultsBinding, listener: MediaSelection) + : RecyclerView.ViewHolder(binding.root) { + + val mediaResult : MediaResult? get() = binding.mediaResult + + fun bind(mediaResult : MediaResult) { + binding.mediaResult = mediaResult + val imgUri = mediaResult.posterPath?.let { (Constants.IMG_URL +it).toUri().buildUpon().scheme("https").build() } + binding.itemImage.load(imgUri) + binding.executePendingBindings() + } + } + + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder = + ViewHolder(ItemSearchResultsBinding.inflate(LayoutInflater.from(parent.context)), listener) + + override fun onBindViewHolder(holder: ViewHolder, position: Int) = holder.bind(getItem(position)) + } \ No newline at end of file diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/fragments/HomeSectionsFragment.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/fragments/HomeSectionsFragment.kt index a93adcb..9c771dc 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/fragments/HomeSectionsFragment.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/fragments/HomeSectionsFragment.kt @@ -1,6 +1,7 @@ package fr.iut.pm.movieapplication.ui.fragments import android.os.Bundle +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -10,12 +11,11 @@ import fr.iut.pm.movieapplication.databinding.FragmentHomeSectionsBinding import fr.iut.pm.movieapplication.ui.activity.MainActivity import fr.iut.pm.movieapplication.ui.adapter.MediaAdapter import fr.iut.pm.movieapplication.ui.adapter.HomeItemDecoration +import fr.iut.pm.movieapplication.ui.interfaces.MediaSelection import fr.iut.pm.movieapplication.ui.interfaces.MovieSelection import fr.iut.pm.movieapplication.ui.viewmodel.HomeSectionsVM -class HomeSectionsFragment( - private val context : MainActivity - ) : Fragment(), MovieSelection { +class HomeSectionsFragment() : Fragment(), MediaSelection { private val homeSectionsVM by viewModels() @@ -67,8 +67,7 @@ class HomeSectionsFragment( popularTvShowsAdapter.submitList(it) } } - - override fun onMovieSelected(movieId: Int) { - TODO("Not yet implemented") + override fun onMediaSelected(mediaId: Int) { + Log.d("ITEM SELECTED", mediaId.toString()) } } \ No newline at end of file diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/fragments/SearchResultFragment.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/fragments/SearchResultFragment.kt index 2040680..139da97 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/fragments/SearchResultFragment.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/fragments/SearchResultFragment.kt @@ -1,23 +1,60 @@ package fr.iut.pm.movieapplication.ui.fragments import android.os.Bundle +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels +import fr.iut.pm.movieapplication.databinding.FragmentSearchResultsBinding +import fr.iut.pm.movieapplication.ui.adapter.MediaAdapter +import fr.iut.pm.movieapplication.ui.adapter.SearchResultAdapter +import fr.iut.pm.movieapplication.ui.interfaces.MediaSelection import fr.iut.pm.movieapplication.ui.viewmodel.SearchResultVM import fr.iut.pm.movieapplication.ui.viewmodel.SearchResultVMFactory -class SearchResultFragment : Fragment() { +class SearchResultFragment : Fragment(), MediaSelection { private val searchResultViewModel by viewModels { SearchResultVMFactory(arguments?.getString("query")!!) } - + private val searchResultAdapter = SearchResultAdapter(this) override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { - return super.onCreateView(inflater, container, savedInstanceState) + ): View { + val binding = FragmentSearchResultsBinding.inflate(inflater, container, false) + + binding.lifecycleOwner = viewLifecycleOwner + binding.searchResultsVM = searchResultViewModel + + with(binding.searchResultsItemRecyclerView) { + this.adapter = searchResultAdapter + } + + return binding.root; + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + searchResultViewModel.getSearchResultLiveData().observe(viewLifecycleOwner) { + searchResultAdapter.submitList(it) + } + + } + + override fun onMediaSelected(mediaId: Int) { + Log.d("ITEM SELECTED", mediaId.toString()) + } + + companion object { + fun newInstance(query: String): SearchResultFragment { + val fragment = SearchResultFragment() + val args = Bundle() + args.putString("query", query) + fragment.arguments = args + return fragment + } } } \ No newline at end of file diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/interfaces/MediaSelection.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/interfaces/MediaSelection.kt new file mode 100644 index 0000000..fdff9d6 --- /dev/null +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/interfaces/MediaSelection.kt @@ -0,0 +1,6 @@ +package fr.iut.pm.movieapplication.ui.interfaces + +interface MediaSelection { + + fun onMediaSelected(mediaId : Int) +} \ No newline at end of file diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/viewmodel/HomeSectionsVM.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/viewmodel/HomeSectionsVM.kt index c724078..70a9e9c 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/viewmodel/HomeSectionsVM.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/viewmodel/HomeSectionsVM.kt @@ -4,7 +4,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import fr.iut.pm.movieapplication.model.media.MediaResult -import fr.iut.pm.movieapplication.repository.MediaRepository +import fr.iut.pm.movieapplication.repository.api.MediaRepository import kotlinx.coroutines.launch class HomeSectionsVM : ViewModel() { diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/viewmodel/MoviesDialogVM.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/viewmodel/MoviesDialogVM.kt index ea482ef..cc75ade 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/viewmodel/MoviesDialogVM.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/viewmodel/MoviesDialogVM.kt @@ -3,7 +3,7 @@ package fr.iut.pm.movieapplication.ui.viewmodel import androidx.lifecycle.* import fr.iut.pm.movieapplication.data.database.MovieDataBase import fr.iut.pm.movieapplication.model.media.movie.MovieDetails -import fr.iut.pm.movieapplication.repository.MovieAPIRepository +import fr.iut.pm.movieapplication.repository.api.MovieAPIRepository import fr.iut.pm.movieapplication.repository.local.MovieLocalRepository import kotlinx.coroutines.launch diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/viewmodel/MoviesVM.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/viewmodel/MoviesVM.kt index 23ce2cb..b0016cd 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/viewmodel/MoviesVM.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/viewmodel/MoviesVM.kt @@ -4,7 +4,7 @@ import androidx.lifecycle.* import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import fr.iut.pm.movieapplication.model.media.movie.Movie -import fr.iut.pm.movieapplication.repository.MovieAPIRepository +import fr.iut.pm.movieapplication.repository.api.MovieAPIRepository import fr.iut.pm.movieapplication.utils.Constants.Companion.MAX_PAGE import kotlinx.coroutines.launch diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/viewmodel/SearchResultVM.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/viewmodel/SearchResultVM.kt index ea4d77c..a0c2c15 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/viewmodel/SearchResultVM.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/viewmodel/SearchResultVM.kt @@ -1,16 +1,25 @@ package fr.iut.pm.movieapplication.ui.viewmodel -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.ViewModel -import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.* +import fr.iut.pm.movieapplication.model.media.MediaResult +import fr.iut.pm.movieapplication.repository.api.MediaRepository +import kotlinx.coroutines.launch class SearchResultVM(private var query : String) : ViewModel() { + + private val repository : MediaRepository = MediaRepository() + private var _queryLiveData : MutableLiveData = MutableLiveData() fun getQueryLiveData() : LiveData = _queryLiveData + private var _searchResultLiveData : MutableLiveData> = MutableLiveData() + fun getSearchResultLiveData() : LiveData> = _searchResultLiveData + init { - _queryLiveData.postValue(query) + _queryLiveData.value = query + viewModelScope.launch { + _searchResultLiveData.postValue(repository.search(query)) + } } } diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/viewmodel/TvShowVM.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/viewmodel/TvShowVM.kt index 383b73b..986a083 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/viewmodel/TvShowVM.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/viewmodel/TvShowVM.kt @@ -5,7 +5,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import fr.iut.pm.movieapplication.model.media.tvshow.TvShow -import fr.iut.pm.movieapplication.repository.TvShowRepository +import fr.iut.pm.movieapplication.repository.api.TvShowRepository import fr.iut.pm.movieapplication.ui.adapter.TvShowAdapter import kotlinx.coroutines.launch diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/utils/MediaResultMapper.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/utils/MediaResultMapper.kt index 242c62b..47b5642 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/utils/MediaResultMapper.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/utils/MediaResultMapper.kt @@ -14,16 +14,16 @@ object MediaResultMapper { fun mapToTvShow(mediaResultDTO: MediaResultDTO): TvShow { return TvShow( posterPath = mediaResultDTO.posterPath, - popularity = mediaResultDTO.popularity, + popularity = mediaResultDTO.popularity!!, id = mediaResultDTO.id, backdropPath = mediaResultDTO.backdropPath ?: "", - voteAverage = mediaResultDTO.voteAverage, + voteAverage = mediaResultDTO.voteAverage!!, overview = mediaResultDTO.overview ?: "", firstAirDate = mediaResultDTO.firstAirDate, originCountry = mediaResultDTO.originCountry!!, // genreIds = mediaResultDTO.genreIds, - originalLanguage = mediaResultDTO.originalLanguage, - voteCount = mediaResultDTO.voteCount, + originalLanguage = mediaResultDTO.originalLanguage!!, + voteCount = mediaResultDTO.voteCount!!, name = mediaResultDTO.name!!, originalName = mediaResultDTO.originalName!! ) @@ -38,13 +38,13 @@ object MediaResultMapper { // genreIds = mediaResultDTO.genreIds, id = mediaResultDTO.id, originalTitle = mediaResultDTO.originalTitle!!, - originalLanguage = mediaResultDTO.originalLanguage, + originalLanguage = mediaResultDTO.originalLanguage!!, title = mediaResultDTO.title!!, backdropPath = mediaResultDTO.backdropPath, - popularity = mediaResultDTO.popularity, - voteCount = mediaResultDTO.voteCount, + popularity = mediaResultDTO.popularity!!, + voteCount = mediaResultDTO.voteCount!!, //video = mediaResultDTO.video, - voteAverage = mediaResultDTO.voteAverage + voteAverage = mediaResultDTO.voteAverage!! ) } @@ -58,12 +58,12 @@ object MediaResultMapper { // genreIds = mediaResultDTO.genreIds, id = mediaResultDTO.id, originalTitle = mediaResultDTO.originalTitle ?: mediaResultDTO.originalName!!, //if it's not a movie also it's a tvshow - originalLanguage = mediaResultDTO.originalLanguage, + originalLanguage = mediaResultDTO.originalLanguage!!, title = mediaResultDTO.title ?: mediaResultDTO.name!!, //if it's not a movie also it's a tvshow backdropPath = mediaResultDTO.backdropPath, - popularity = mediaResultDTO.popularity, - voteCount = mediaResultDTO.voteCount, - voteAverage = mediaResultDTO.voteAverage, + popularity = mediaResultDTO.popularity!!, + voteCount = mediaResultDTO.voteCount!!, + voteAverage = mediaResultDTO.voteAverage!!, mediaType = mediaResultDTO.mediaType ) } diff --git a/Sources/app/src/main/res/layout/fragment_home_sections.xml b/Sources/app/src/main/res/layout/fragment_home_sections.xml index 891fe6d..b0a4d4a 100644 --- a/Sources/app/src/main/res/layout/fragment_home_sections.xml +++ b/Sources/app/src/main/res/layout/fragment_home_sections.xml @@ -41,7 +41,7 @@ android:layout_height="250dp" android:orientation="horizontal" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" - tools:listitem="@layout/item_vertical_fragment" /> + tools:listitem="@layout/item_search_results" /> + tools:listitem="@layout/item_search_results" /> - - + tools:listitem="@layout/item_search_results" /> diff --git a/Sources/app/src/main/res/layout/item_vertical_fragment.xml b/Sources/app/src/main/res/layout/item_search_results.xml similarity index 69% rename from Sources/app/src/main/res/layout/item_vertical_fragment.xml rename to Sources/app/src/main/res/layout/item_search_results.xml index 3de6c1a..2f7c485 100644 --- a/Sources/app/src/main/res/layout/item_vertical_fragment.xml +++ b/Sources/app/src/main/res/layout/item_search_results.xml @@ -1,10 +1,21 @@ - + + + + + + + + + app:cardCornerRadius="10dp"> + android:textAlignment="center" + android:text="@{mediaResult.title}"/> + android:textAlignment="center" + android:text="@{mediaResult.releaseDate}"/> + - \ No newline at end of file + + + \ No newline at end of file