wildantechnoart77

MovieViewModel

Jul 4th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 2.77 KB | None | 0 0
  1. package com.wildan.moviecatalogue.viewmodel
  2.  
  3. import android.arch.lifecycle.ViewModel
  4. import android.arch.lifecycle.MutableLiveData
  5. import com.wildan.moviecatalogue.model.movie.MovieResult
  6. import android.arch.lifecycle.LiveData
  7. import android.content.Context
  8. import com.wildan.moviecatalogue.model.movie.MovieResponse
  9. import com.wildan.moviecatalogue.network.ConnectivityStatus
  10. import com.wildan.moviecatalogue.network.NetworkError
  11. import com.wildan.moviecatalogue.repository.MovieRepositoryImp
  12. import com.wildan.moviecatalogue.view.MovieView
  13. import io.reactivex.android.schedulers.AndroidSchedulers
  14. import io.reactivex.disposables.CompositeDisposable
  15. import io.reactivex.schedulers.Schedulers
  16. import io.reactivex.subscribers.ResourceSubscriber
  17. import retrofit2.HttpException
  18. import java.net.SocketTimeoutException
  19.  
  20. class MovieViewModel : ViewModel(), MovieView.ViewModel {
  21.  
  22.     private val listMovies = MutableLiveData<ArrayList<MovieResult>>()
  23.     private val compositeDisposable = CompositeDisposable()
  24.  
  25.     fun getMovies(): LiveData<ArrayList<MovieResult>> {
  26.         return listMovies
  27.     }
  28.  
  29.     override fun setMovie(
  30.         apiKey: String,
  31.         page: Int,
  32.         language: String,
  33.         view: MovieView.View,
  34.         context: Context,
  35.         movie: MovieRepositoryImp
  36.     ) {
  37.  
  38.         view.showProgressBar()
  39.  
  40.         compositeDisposable.add(
  41.             movie.getMovieData(apiKey, page, language)
  42.                 .observeOn(AndroidSchedulers.mainThread())
  43.                 .subscribeOn(Schedulers.io())
  44.                 .subscribeWith(object : ResourceSubscriber<MovieResponse>() {
  45.                     override fun onComplete() {
  46.                         view.hideProgressBar()
  47.                     }
  48.  
  49.                     override fun onNext(t: MovieResponse?) {
  50.                         t?.let { view.getMovieData(it) }
  51.                         listMovies.postValue(t?.movieResult)
  52.                     }
  53.  
  54.                     override fun onError(t: Throwable?) {
  55.                         view.hideProgressBar()
  56.  
  57.                         if (ConnectivityStatus.isConnected(context)) {
  58.                             when (t) {
  59.                                 is HttpException -> // non 200 error codes
  60.                                     NetworkError.handleError(t, context)
  61.                                 is SocketTimeoutException -> // connection errors
  62.                                     view.noInternetConnection("Connection Timeout!")
  63.                             }
  64.                         } else {
  65.                             view.noInternetConnection("Tidak Terhubung Dengan Internet!")
  66.                         }
  67.                     }
  68.  
  69.                 })
  70.         )
  71.  
  72.     }
  73.  
  74.     override fun onDestroy() {
  75.         compositeDisposable.dispose()
  76.     }
  77. }
Add Comment
Please, Sign In to add comment