Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.wildan.moviecatalogue.fragment
- import android.arch.lifecycle.Observer
- import android.arch.lifecycle.ViewModelProviders
- import android.os.Bundle
- import android.support.v4.app.Fragment
- import android.support.v4.widget.SwipeRefreshLayout
- import android.support.v7.widget.LinearLayoutManager
- import android.support.v7.widget.RecyclerView
- import android.view.LayoutInflater
- import android.view.View
- import android.view.ViewGroup
- import android.widget.Toast
- import com.wildan.moviecatalogue.R
- import com.wildan.moviecatalogue.adapter.ListMovieAdapter
- import com.wildan.moviecatalogue.model.movie.MovieResponse
- import com.wildan.moviecatalogue.model.movie.MovieResult
- import com.wildan.moviecatalogue.network.BaseApiService
- import com.wildan.moviecatalogue.network.NetworkClient
- import com.wildan.moviecatalogue.repository.MovieRepositoryImp
- import com.wildan.moviecatalogue.utils.UtilsConstant.Companion.API_KEY
- import com.wildan.moviecatalogue.view.MovieView
- import com.wildan.moviecatalogue.viewmodel.MovieViewModel
- import java.util.*
- import kotlin.collections.ArrayList
- import kotlin.properties.Delegates
- class MovieFragment : Fragment(), MovieView.View {
- private lateinit var rvMovie: RecyclerView
- private lateinit var movieViewModel: MovieViewModel
- private var baseApiService: BaseApiService? = null
- private var adapter by Delegates.notNull<ListMovieAdapter>()
- private var page: Int = 1
- private var totalPage: Int? = null
- private var isLoading by Delegates.notNull<Boolean>()
- private lateinit var swipeRefresh: SwipeRefreshLayout
- private lateinit var mLayoutManager: RecyclerView.LayoutManager
- private lateinit var lastLocale: String
- override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
- return inflater.inflate(R.layout.fragment_movie, container, false)
- }
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
- rvMovie = view.findViewById(R.id.rv_movie)
- swipeRefresh = view.findViewById(R.id.swipe_refresh)
- prepare(view)
- scrollListener()
- showListMovie()
- swipeRefresh.setOnRefreshListener {
- showListMovie()
- }
- }
- override fun setRetainInstance(retain: Boolean) {
- super.setRetainInstance(retain)
- Toast.makeText(context, "State Disimpan", Toast.LENGTH_LONG).show()
- }
- private fun prepare(view: View) {
- movieViewModel = ViewModelProviders.of(this).get(MovieViewModel::class.java)
- movieViewModel.getMovies().observe(this, getMovie)
- adapter = ListMovieAdapter(context)
- adapter.notifyDataSetChanged()
- rvMovie.setHasFixedSize(true)
- mLayoutManager = LinearLayoutManager(context)
- rvMovie.layoutManager = mLayoutManager
- baseApiService = NetworkClient.getClient(view.context)
- ?.create(BaseApiService::class.java)
- rvMovie.adapter = adapter
- }
- private val getMovie =
- Observer<ArrayList<MovieResult>> { movieItems ->
- if (movieItems != null) {
- if (page == 1) {
- adapter.setData(movieItems)
- } else {
- adapter.refreshAdapter(movieItems)
- }
- }
- }
- private fun scrollListener() {
- rvMovie.addOnScrollListener(object : RecyclerView.OnScrollListener() {
- override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
- val linearLayoutManager = recyclerView.layoutManager as LinearLayoutManager
- val countItem = linearLayoutManager.itemCount
- val lastVisiblePosition = linearLayoutManager.findLastCompletelyVisibleItemPosition()
- val isLastPosition = countItem.minus(1) == lastVisiblePosition
- if (!isLoading && isLastPosition && page != totalPage) {
- page = page.plus(1)
- showListMovie()
- }
- }
- })
- }
- private fun showListMovie() {
- val repository = baseApiService?.let { MovieRepositoryImp(it) }
- lastLocale = Locale.getDefault().language.toString()
- when (Locale.getDefault().language.toString()) {
- "en" -> context?.let {
- repository?.let { it1 ->
- movieViewModel.setMovie(
- API_KEY, page = page, language = "en", view = this,
- context = it, movie = it1
- )
- }
- }
- "in" -> context?.let {
- repository?.let { it1 ->
- movieViewModel.setMovie(
- API_KEY, page = page, language = "id", view = this,
- context = it, movie = it1
- )
- }
- }
- }
- }
- /*
- override fun onResume() {
- super.onResume()
- if (lastLocale != Locale.getDefault().language.toString()) {
- showListMovie()
- }
- }
- */
- override fun showProgressBar() {
- isLoading = true
- swipeRefresh.isRefreshing = true
- rvMovie.visibility = View.GONE
- }
- override fun hideProgressBar() {
- isLoading = false
- swipeRefresh.isRefreshing = false
- rvMovie.visibility = View.VISIBLE
- }
- override fun getMovieData(movie: MovieResponse) {
- totalPage = movie.totalPages
- }
- override fun noInternetConnection(message: String) {
- Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
- }
- }
Add Comment
Please, Sign In to add comment