Advertisement
uscode

Untitled

Jan 25th, 2021
563
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 7.88 KB | None | 0 0
  1. package com.example.mymov.ui.detail
  2.  
  3. import androidx.appcompat.app.AppCompatActivity
  4. import android.os.Bundle
  5. import android.view.Menu
  6. import android.view.MenuItem
  7. import android.view.View
  8. import android.widget.Toast
  9. import androidx.core.content.ContextCompat
  10. import androidx.lifecycle.ViewModelProvider
  11. import com.bumptech.glide.Glide
  12. import com.bumptech.glide.load.resource.bitmap.RoundedCorners
  13. import com.bumptech.glide.request.RequestOptions
  14. import com.example.mymov.R
  15. import com.example.mymov.data.source.local.entity.FilmEntity
  16. import com.example.mymov.data.source.local.entity.TvShowEntity
  17. import com.example.mymov.databinding.ActivityDetailBinding
  18. import com.example.mymov.databinding.ContentDetailFilmBinding
  19. import com.example.mymov.ui.detail.viewmodel.DetailViewModel
  20. import com.example.mymov.viewmodel.ViewModelFactory
  21. import com.example.mymov.vo.Status
  22. import kotlinx.android.synthetic.main.items_film.*
  23.  
  24. class DetailActivity : AppCompatActivity() {
  25.  
  26.     private var _activityDetailBinding : ActivityDetailBinding? = null
  27.  
  28.     private val mainBinding get() = _activityDetailBinding
  29.     private val detailBinding get() = _activityDetailBinding?.detailContent
  30.  
  31.     private lateinit var viewModel: DetailViewModel
  32.     private var menu: Menu? = null
  33.  
  34.     companion object {
  35.         const val url_img = "https://image.tmdb.org/t/p/w185"
  36.         const val EXTRA_FILM = "200"
  37.         const val EXTRA_TV = "201"
  38.     }
  39.  
  40.     override fun onCreate(savedInstanceState: Bundle?) {
  41.         super.onCreate(savedInstanceState)
  42.  
  43.         _activityDetailBinding = ActivityDetailBinding.inflate(layoutInflater)
  44.         setContentView(mainBinding?.root)
  45.         setSupportActionBar(mainBinding?.toolbar)
  46.         supportActionBar?.setDisplayHomeAsUpEnabled(true)
  47.  
  48.         val factory = ViewModelFactory.getInstance(this)
  49.         viewModel = ViewModelProvider(this, factory)[DetailViewModel::class.java]
  50.  
  51.         val extras = intent.extras
  52.         if (extras != null) {
  53.  
  54.             val filmId = extras.getInt(EXTRA_FILM, 0)
  55.             val tvId = extras.getInt(EXTRA_TV, 0)
  56.  
  57.             if (filmId != 0) {
  58.                 viewModel.setSelected(filmId)
  59.  
  60.                 viewModel.film.observe(this, { film ->
  61.                     if (film != null) {
  62.                         when (film.status) {
  63.                             Status.LOADING -> mainBinding?.progressBar?.visibility = View.VISIBLE
  64.                             Status.SUCCESS -> if (film.data != null) {
  65.                                 mainBinding?.progressBar?.visibility = View.GONE
  66.                                 mainBinding?.content?.visibility = View.VISIBLE
  67.                                 populateFilm(film.data as FilmEntity)
  68.                             }
  69.                             Status.ERROR -> {
  70.                                 mainBinding?.progressBar?.visibility = View.GONE
  71.                                 Toast.makeText(applicationContext, "Terjadi Kesalahan", Toast.LENGTH_SHORT).show()
  72.                             }
  73.                         }
  74.                     }
  75.                 })
  76.             } else if ( tvId != 0) {
  77.                 mainBinding?.progressBar?.visibility = View.VISIBLE
  78.                 mainBinding?.content?.visibility = View.INVISIBLE
  79.  
  80.                 viewModel.setSelected(tvId)
  81.  
  82.                 viewModel.tv.observe(this, { tv ->
  83.                     if (tv != null) {
  84.                         when (tv.status) {
  85.                             Status.LOADING -> mainBinding?.content?.visibility = View.VISIBLE
  86.                             Status.SUCCESS -> if (tv.data != null) {
  87.                                 mainBinding?.progressBar?.visibility = View.GONE
  88.                                 mainBinding?.content?.visibility = View.VISIBLE
  89.                                 populateTv(tv.data as TvShowEntity)
  90.                             }
  91.                             Status.ERROR -> {
  92.                                 mainBinding?.progressBar?.visibility = View.GONE
  93.                                 Toast.makeText(applicationContext, "Terjadi Kesalahan", Toast.LENGTH_SHORT).show()
  94.                             }
  95.                         }
  96.                     }
  97.                 })
  98.             }
  99.         }
  100.     }
  101.  
  102.     override fun onCreateOptionsMenu(menu: Menu?): Boolean {
  103.         menuInflater.inflate(R.menu.menu_favorite, menu)
  104.         if (menu == viewModel.film) {
  105.             this.menu = menu
  106.             viewModel.film.observe(this, {filmFav ->
  107.                 if (filmFav != null) {
  108.                     when (filmFav.status) {
  109.                         Status.LOADING -> mainBinding?.progressBar?.visibility = View.VISIBLE
  110.                         Status.SUCCESS -> if (filmFav.data != null) {
  111.                             mainBinding?.progressBar?.visibility = View.GONE
  112.                             val state = filmFav.data.favorite
  113.                             setFavoriteState(state)
  114.                         }
  115.                         Status.ERROR -> {
  116.                             mainBinding?.progressBar?.visibility = View.GONE
  117.                             Toast.makeText(applicationContext, "Terjadi Kesalahan", Toast.LENGTH_SHORT).show()
  118.                         }
  119.                     }
  120.                 }
  121.             })
  122.             return true
  123.         } else if (menu == viewModel.tv) {
  124.             this.menu = menu
  125.             viewModel.tv.observe(this, {tvFav ->
  126.                 if (tvFav != null) {
  127.                     when (tvFav.status) {
  128.                         Status.LOADING -> mainBinding?.progressBar?.visibility = View.VISIBLE
  129.                         Status.SUCCESS -> if (tvFav.data != null) {
  130.                             mainBinding?.progressBar?.visibility = View.GONE
  131.                             val state = tvFav.data.favorite
  132.                             setFavoriteState(state)
  133.                         }
  134.                         Status.ERROR -> {
  135.                             mainBinding?.progressBar?.visibility = View.GONE
  136.                             Toast.makeText(applicationContext, "Terjadi Kesalahan", Toast.LENGTH_SHORT).show()
  137.                         }
  138.                     }
  139.                 }
  140.             })
  141.             return true
  142.         }
  143.         return true
  144.     }
  145.  
  146.     override fun onOptionsItemSelected(item: MenuItem): Boolean {
  147.         if (item.itemId == R.id.action_favorite) {
  148.             viewModel.setFavorite()
  149.             return true
  150.         }
  151.         return super.onOptionsItemSelected(item)
  152.     }
  153.  
  154.     private fun setFavoriteState(state: Boolean){
  155.         if (menu == null) return
  156.         val menuItem = menu?.findItem(R.id.action_favorite)
  157.         if (state) {
  158.             menuItem?.icon = ContextCompat.getDrawable(this, R.drawable.ic_favorite_full_white)
  159.         } else {
  160.             menuItem?.icon = ContextCompat.getDrawable(this, R.drawable.ic_favorite_border)
  161.         }
  162.     }
  163.  
  164.     private fun populateTv(tvShow: TvShowEntity) {
  165.         detailBinding?.title?.text = tvShow.title
  166.         detailBinding?.txtDescription?.text = tvShow.description
  167.  
  168.         detailBinding?.imgPoster?.let {
  169.             Glide.with(this)
  170.                 .load(url_img+tvShow.imagePath)
  171.                 .transforms(RoundedCorners(20))
  172.                 .apply(RequestOptions.placeholderOf(R.drawable.ic_loading)
  173.                     .error(R.drawable.ic_error))
  174.                 .into(it)
  175.         }
  176.     }
  177.  
  178.     private fun populateFilm(film: FilmEntity) {
  179.         detailBinding?.title?.text = film.title
  180.         detailBinding?.txtDescription?.text = film.description
  181.  
  182.         detailBinding?.imgPoster?.let {
  183.             Glide.with(this)
  184.                 .load(url_img+film.imagePath)
  185.                 .transforms(RoundedCorners(20))
  186.                 .apply(RequestOptions.placeholderOf(R.drawable.ic_loading)
  187.                     .error(R.drawable.ic_error))
  188.                 .into(it)
  189.         }
  190.     }
  191.  
  192.     override fun onBackPressed() {
  193.         super.onBackPressed()
  194.  
  195.     }
  196. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement