Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.07 KB | None | 0 0
  1. package me.alhaz.tutorial.architecturecomponent.views.movies.list
  2.  
  3. import android.content.Context
  4. import android.view.LayoutInflater
  5. import android.view.View
  6. import android.view.ViewGroup
  7. import android.widget.ImageView
  8. import android.widget.TextView
  9. import androidx.paging.PagedListAdapter
  10. import androidx.recyclerview.widget.DiffUtil
  11. import androidx.recyclerview.widget.RecyclerView
  12. import com.bumptech.glide.Glide
  13. import me.alhaz.tutorial.architecturecomponent.BuildConfig
  14. import me.alhaz.tutorial.architecturecomponent.R
  15. import me.alhaz.tutorial.architecturecomponent.models.repositories.movie.local.entity.MovieEntity
  16. import me.alhaz.tutorial.architecturecomponent.models.repositories.movie.remote.response.Movie
  17.  
  18. class MovieListAdapter(val context: Context, val clickListener: (MovieEntity) -> Unit) : PagedListAdapter<MovieEntity, MovieListViewHolder>(diffCallback) {
  19.  
  20. // For Pagination
  21.  
  22. companion object {
  23. private val diffCallback = object: DiffUtil.ItemCallback<MovieEntity>() {
  24. override fun areItemsTheSame(oldItem: MovieEntity, newItem: MovieEntity): Boolean {
  25. return oldItem.id == newItem.id
  26. }
  27.  
  28. override fun areContentsTheSame(oldItem: MovieEntity, newItem: MovieEntity): Boolean {
  29. return oldItem == newItem
  30. }
  31. }
  32. }
  33.  
  34. override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MovieListViewHolder {
  35. return MovieListViewHolder(
  36. LayoutInflater.from(context).inflate(
  37. R.layout.row_movie,
  38. parent,
  39. false
  40. )
  41. )
  42. }
  43.  
  44. override fun onBindViewHolder(holder: MovieListViewHolder, position: Int) {
  45. val movie = getItem(position)
  46. holder.bindItem(context, holder.itemView, movie, clickListener)
  47. }
  48.  
  49. }
  50.  
  51. class MovieListViewHolder(view: View) : RecyclerView.ViewHolder(view) {
  52.  
  53. private val tvYear: TextView = view.findViewById(R.id.tv_year)
  54. private val tvTitle: TextView = view.findViewById(R.id.tv_title)
  55. private val tvRating: TextView = view.findViewById(R.id.tv_rating)
  56. private val tvRuntime: TextView = view.findViewById(R.id.tv_runtime)
  57. private val tvDescription: TextView = view.findViewById(R.id.tv_description)
  58. private val ivPhoto: ImageView = view.findViewById(R.id.iv_photo)
  59.  
  60. fun bindItem(context: Context, view: View, movieEntity: MovieEntity?, clickListener: (MovieEntity) -> Unit) {
  61. movieEntity?.let { movie ->
  62. tvYear.text = movie.releaseDate.split("-").get(0)
  63. tvTitle.text = movie.title
  64. tvRating.text = "${movie.voteAverage}"
  65. tvRuntime.text = getRuntime(movie.runtime)
  66. tvDescription.text = movie.overview
  67.  
  68. Glide.with(context).load(BuildConfig.BASE_IMAGE_URL + movie.posterPath).into(ivPhoto)
  69. view.setOnClickListener {
  70. clickListener(movie)
  71. }
  72. }
  73. }
  74.  
  75. private fun getRuntime(runtime: Long): String {
  76. val hour = (runtime / 60).toString().split(".").get(0)
  77. val minute = runtime.rem(60)
  78. return "${hour}h ${minute}m"
  79. }
  80.  
  81.  
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement