Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example.mymov.ui.detail
- import androidx.appcompat.app.AppCompatActivity
- import android.os.Bundle
- import android.view.Menu
- import android.view.MenuItem
- import android.view.View
- import android.widget.Toast
- import androidx.core.content.ContextCompat
- import androidx.lifecycle.ViewModelProvider
- import com.bumptech.glide.Glide
- import com.bumptech.glide.load.resource.bitmap.RoundedCorners
- import com.bumptech.glide.request.RequestOptions
- import com.example.mymov.R
- import com.example.mymov.data.source.local.entity.FilmEntity
- import com.example.mymov.data.source.local.entity.TvShowEntity
- import com.example.mymov.databinding.ActivityDetailBinding
- import com.example.mymov.databinding.ContentDetailFilmBinding
- import com.example.mymov.ui.detail.viewmodel.DetailViewModel
- import com.example.mymov.viewmodel.ViewModelFactory
- import com.example.mymov.vo.Status
- import kotlinx.android.synthetic.main.items_film.*
- class DetailActivity : AppCompatActivity() {
- private var _activityDetailBinding : ActivityDetailBinding? = null
- private val mainBinding get() = _activityDetailBinding
- private val detailBinding get() = _activityDetailBinding?.detailContent
- private lateinit var viewModel: DetailViewModel
- private var menu: Menu? = null
- companion object {
- const val url_img = "https://image.tmdb.org/t/p/w185"
- const val EXTRA_FILM = "200"
- const val EXTRA_TV = "201"
- }
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- _activityDetailBinding = ActivityDetailBinding.inflate(layoutInflater)
- setContentView(mainBinding?.root)
- setSupportActionBar(mainBinding?.toolbar)
- supportActionBar?.setDisplayHomeAsUpEnabled(true)
- val factory = ViewModelFactory.getInstance(this)
- viewModel = ViewModelProvider(this, factory)[DetailViewModel::class.java]
- val extras = intent.extras
- if (extras != null) {
- val filmId = extras.getInt(EXTRA_FILM, 0)
- val tvId = extras.getInt(EXTRA_TV, 0)
- if (filmId != 0) {
- viewModel.setSelected(filmId)
- viewModel.film.observe(this, { film ->
- if (film != null) {
- when (film.status) {
- Status.LOADING -> mainBinding?.progressBar?.visibility = View.VISIBLE
- Status.SUCCESS -> if (film.data != null) {
- mainBinding?.progressBar?.visibility = View.GONE
- mainBinding?.content?.visibility = View.VISIBLE
- populateFilm(film.data as FilmEntity)
- }
- Status.ERROR -> {
- mainBinding?.progressBar?.visibility = View.GONE
- Toast.makeText(applicationContext, "Terjadi Kesalahan", Toast.LENGTH_SHORT).show()
- }
- }
- }
- })
- } else if ( tvId != 0) {
- mainBinding?.progressBar?.visibility = View.VISIBLE
- mainBinding?.content?.visibility = View.INVISIBLE
- viewModel.setSelected(tvId)
- viewModel.tv.observe(this, { tv ->
- if (tv != null) {
- when (tv.status) {
- Status.LOADING -> mainBinding?.content?.visibility = View.VISIBLE
- Status.SUCCESS -> if (tv.data != null) {
- mainBinding?.progressBar?.visibility = View.GONE
- mainBinding?.content?.visibility = View.VISIBLE
- populateTv(tv.data as TvShowEntity)
- }
- Status.ERROR -> {
- mainBinding?.progressBar?.visibility = View.GONE
- Toast.makeText(applicationContext, "Terjadi Kesalahan", Toast.LENGTH_SHORT).show()
- }
- }
- }
- })
- }
- }
- }
- override fun onCreateOptionsMenu(menu: Menu?): Boolean {
- menuInflater.inflate(R.menu.menu_favorite, menu)
- if (menu == viewModel.film) {
- this.menu = menu
- viewModel.film.observe(this, {filmFav ->
- if (filmFav != null) {
- when (filmFav.status) {
- Status.LOADING -> mainBinding?.progressBar?.visibility = View.VISIBLE
- Status.SUCCESS -> if (filmFav.data != null) {
- mainBinding?.progressBar?.visibility = View.GONE
- val state = filmFav.data.favorite
- setFavoriteState(state)
- }
- Status.ERROR -> {
- mainBinding?.progressBar?.visibility = View.GONE
- Toast.makeText(applicationContext, "Terjadi Kesalahan", Toast.LENGTH_SHORT).show()
- }
- }
- }
- })
- return true
- } else if (menu == viewModel.tv) {
- this.menu = menu
- viewModel.tv.observe(this, {tvFav ->
- if (tvFav != null) {
- when (tvFav.status) {
- Status.LOADING -> mainBinding?.progressBar?.visibility = View.VISIBLE
- Status.SUCCESS -> if (tvFav.data != null) {
- mainBinding?.progressBar?.visibility = View.GONE
- val state = tvFav.data.favorite
- setFavoriteState(state)
- }
- Status.ERROR -> {
- mainBinding?.progressBar?.visibility = View.GONE
- Toast.makeText(applicationContext, "Terjadi Kesalahan", Toast.LENGTH_SHORT).show()
- }
- }
- }
- })
- return true
- }
- return true
- }
- override fun onOptionsItemSelected(item: MenuItem): Boolean {
- if (item.itemId == R.id.action_favorite) {
- viewModel.setFavorite()
- return true
- }
- return super.onOptionsItemSelected(item)
- }
- private fun setFavoriteState(state: Boolean){
- if (menu == null) return
- val menuItem = menu?.findItem(R.id.action_favorite)
- if (state) {
- menuItem?.icon = ContextCompat.getDrawable(this, R.drawable.ic_favorite_full_white)
- } else {
- menuItem?.icon = ContextCompat.getDrawable(this, R.drawable.ic_favorite_border)
- }
- }
- private fun populateTv(tvShow: TvShowEntity) {
- detailBinding?.title?.text = tvShow.title
- detailBinding?.txtDescription?.text = tvShow.description
- detailBinding?.imgPoster?.let {
- Glide.with(this)
- .load(url_img+tvShow.imagePath)
- .transforms(RoundedCorners(20))
- .apply(RequestOptions.placeholderOf(R.drawable.ic_loading)
- .error(R.drawable.ic_error))
- .into(it)
- }
- }
- private fun populateFilm(film: FilmEntity) {
- detailBinding?.title?.text = film.title
- detailBinding?.txtDescription?.text = film.description
- detailBinding?.imgPoster?.let {
- Glide.with(this)
- .load(url_img+film.imagePath)
- .transforms(RoundedCorners(20))
- .apply(RequestOptions.placeholderOf(R.drawable.ic_loading)
- .error(R.drawable.ic_error))
- .into(it)
- }
- }
- override fun onBackPressed() {
- super.onBackPressed()
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement