parent
0fd619f41b
commit
95750999e5
@ -1,4 +1,4 @@
|
|||||||
package fr.iut.pm.movieapplication.repository
|
package fr.iut.pm.movieapplication.repository.api
|
||||||
|
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import fr.iut.pm.movieapplication.api.RetrofitInstance
|
import fr.iut.pm.movieapplication.api.RetrofitInstance
|
@ -1,4 +1,4 @@
|
|||||||
package fr.iut.pm.movieapplication.repository
|
package fr.iut.pm.movieapplication.repository.api
|
||||||
|
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import fr.iut.pm.movieapplication.api.RetrofitInstance
|
import fr.iut.pm.movieapplication.api.RetrofitInstance
|
@ -1,4 +1,42 @@
|
|||||||
package fr.iut.pm.movieapplication.ui.adapter
|
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<MediaResult, SearchResultAdapter.ViewHolder>(DiffUtilMediaCallback) {
|
||||||
|
|
||||||
|
private object DiffUtilMediaCallback : DiffUtil.ItemCallback<MediaResult>() {
|
||||||
|
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))
|
||||||
|
|
||||||
}
|
}
|
@ -1,23 +1,60 @@
|
|||||||
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 androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.viewModels
|
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.SearchResultVM
|
||||||
import fr.iut.pm.movieapplication.ui.viewmodel.SearchResultVMFactory
|
import fr.iut.pm.movieapplication.ui.viewmodel.SearchResultVMFactory
|
||||||
|
|
||||||
class SearchResultFragment : Fragment() {
|
class SearchResultFragment : Fragment(), MediaSelection {
|
||||||
|
|
||||||
private val searchResultViewModel by viewModels<SearchResultVM> { SearchResultVMFactory(arguments?.getString("query")!!) }
|
private val searchResultViewModel by viewModels<SearchResultVM> { SearchResultVMFactory(arguments?.getString("query")!!) }
|
||||||
|
private val searchResultAdapter = SearchResultAdapter(this)
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View? {
|
): View {
|
||||||
return super.onCreateView(inflater, container, savedInstanceState)
|
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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
package fr.iut.pm.movieapplication.ui.interfaces
|
||||||
|
|
||||||
|
interface MediaSelection {
|
||||||
|
|
||||||
|
fun onMediaSelected(mediaId : Int)
|
||||||
|
}
|
Loading…
Reference in new issue