wildantechnoart77

MovieFragment

Jul 4th, 2019
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 5.68 KB | None | 0 0
  1. package com.wildan.moviecatalogue.fragment
  2.  
  3. import android.arch.lifecycle.Observer
  4. import android.arch.lifecycle.ViewModelProviders
  5. import android.os.Bundle
  6. import android.support.v4.app.Fragment
  7. import android.support.v4.widget.SwipeRefreshLayout
  8. import android.support.v7.widget.LinearLayoutManager
  9. import android.support.v7.widget.RecyclerView
  10. import android.view.LayoutInflater
  11. import android.view.View
  12. import android.view.ViewGroup
  13. import android.widget.Toast
  14. import com.wildan.moviecatalogue.R
  15. import com.wildan.moviecatalogue.adapter.ListMovieAdapter
  16. import com.wildan.moviecatalogue.model.movie.MovieResponse
  17. import com.wildan.moviecatalogue.model.movie.MovieResult
  18. import com.wildan.moviecatalogue.network.BaseApiService
  19. import com.wildan.moviecatalogue.network.NetworkClient
  20. import com.wildan.moviecatalogue.repository.MovieRepositoryImp
  21. import com.wildan.moviecatalogue.utils.UtilsConstant.Companion.API_KEY
  22. import com.wildan.moviecatalogue.view.MovieView
  23. import com.wildan.moviecatalogue.viewmodel.MovieViewModel
  24. import java.util.*
  25. import kotlin.collections.ArrayList
  26. import kotlin.properties.Delegates
  27.  
  28. class MovieFragment : Fragment(), MovieView.View {
  29.  
  30.     private lateinit var rvMovie: RecyclerView
  31.     private lateinit var movieViewModel: MovieViewModel
  32.     private var baseApiService: BaseApiService? = null
  33.     private var adapter by Delegates.notNull<ListMovieAdapter>()
  34.     private var page: Int = 1
  35.     private var totalPage: Int? = null
  36.     private var isLoading by Delegates.notNull<Boolean>()
  37.     private lateinit var swipeRefresh: SwipeRefreshLayout
  38.     private lateinit var mLayoutManager: RecyclerView.LayoutManager
  39.     private lateinit var lastLocale: String
  40.  
  41.     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
  42.         return inflater.inflate(R.layout.fragment_movie, container, false)
  43.     }
  44.  
  45.     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
  46.         super.onViewCreated(view, savedInstanceState)
  47.  
  48.         rvMovie = view.findViewById(R.id.rv_movie)
  49.         swipeRefresh = view.findViewById(R.id.swipe_refresh)
  50.  
  51.         prepare(view)
  52.         scrollListener()
  53.  
  54.         showListMovie()
  55.  
  56.         swipeRefresh.setOnRefreshListener {
  57.             showListMovie()
  58.         }
  59.     }
  60.  
  61.     override fun setRetainInstance(retain: Boolean) {
  62.         super.setRetainInstance(retain)
  63.         Toast.makeText(context, "State Disimpan", Toast.LENGTH_LONG).show()
  64.     }
  65.  
  66.     private fun prepare(view: View) {
  67.         movieViewModel = ViewModelProviders.of(this).get(MovieViewModel::class.java)
  68.         movieViewModel.getMovies().observe(this, getMovie)
  69.        
  70.         adapter = ListMovieAdapter(context)
  71.         adapter.notifyDataSetChanged()
  72.  
  73.         rvMovie.setHasFixedSize(true)
  74.         mLayoutManager = LinearLayoutManager(context)
  75.         rvMovie.layoutManager = mLayoutManager
  76.  
  77.         baseApiService = NetworkClient.getClient(view.context)
  78.             ?.create(BaseApiService::class.java)
  79.  
  80.         rvMovie.adapter = adapter
  81.     }
  82.  
  83.     private val getMovie =
  84.         Observer<ArrayList<MovieResult>> { movieItems ->
  85.             if (movieItems != null) {
  86.                 if (page == 1) {
  87.                     adapter.setData(movieItems)
  88.                 } else {
  89.                     adapter.refreshAdapter(movieItems)
  90.                 }
  91.             }
  92.         }
  93.  
  94.     private fun scrollListener() {
  95.         rvMovie.addOnScrollListener(object : RecyclerView.OnScrollListener() {
  96.             override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
  97.                 val linearLayoutManager = recyclerView.layoutManager as LinearLayoutManager
  98.                 val countItem = linearLayoutManager.itemCount
  99.                 val lastVisiblePosition = linearLayoutManager.findLastCompletelyVisibleItemPosition()
  100.                 val isLastPosition = countItem.minus(1) == lastVisiblePosition
  101.                 if (!isLoading && isLastPosition && page != totalPage) {
  102.                     page = page.plus(1)
  103.                     showListMovie()
  104.                 }
  105.             }
  106.         })
  107.     }
  108.  
  109.     private fun showListMovie() {
  110.         val repository = baseApiService?.let { MovieRepositoryImp(it) }
  111.         lastLocale = Locale.getDefault().language.toString()
  112.         when (Locale.getDefault().language.toString()) {
  113.             "en" -> context?.let {
  114.                 repository?.let { it1 ->
  115.                     movieViewModel.setMovie(
  116.                         API_KEY, page = page, language = "en", view = this,
  117.                         context = it, movie = it1
  118.                     )
  119.                 }
  120.             }
  121.             "in" -> context?.let {
  122.                 repository?.let { it1 ->
  123.                     movieViewModel.setMovie(
  124.                         API_KEY, page = page, language = "id", view = this,
  125.                         context = it, movie = it1
  126.                     )
  127.                 }
  128.             }
  129.         }
  130.     }
  131.  
  132.     /*
  133.      override fun onResume() {
  134.         super.onResume()
  135.         if (lastLocale != Locale.getDefault().language.toString()) {
  136.             showListMovie()
  137.         }
  138.     }
  139.      */
  140.  
  141.     override fun showProgressBar() {
  142.         isLoading = true
  143.         swipeRefresh.isRefreshing = true
  144.         rvMovie.visibility = View.GONE
  145.     }
  146.  
  147.     override fun hideProgressBar() {
  148.         isLoading = false
  149.         swipeRefresh.isRefreshing = false
  150.         rvMovie.visibility = View.VISIBLE
  151.     }
  152.  
  153.     override fun getMovieData(movie: MovieResponse) {
  154.         totalPage = movie.totalPages
  155.     }
  156.  
  157.     override fun noInternetConnection(message: String) {
  158.         Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
  159.     }
  160. }
Add Comment
Please, Sign In to add comment