Guest User

Untitled

a guest
Aug 14th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.33 KB | None | 0 0
  1. package com.draewil.driver.viewmodel
  2.  
  3. import android.app.Application
  4. import android.arch.lifecycle.AndroidViewModel
  5. import android.arch.lifecycle.ViewModel
  6. import android.arch.lifecycle.ViewModelProvider
  7. import com.draewil.driver.viewmodel.debug.DebugLocationViewModel
  8. import com.draewil.driver.viewmodel.route.RouteViewModel
  9.  
  10. class ViewModelFactory internal constructor(application: Application) :
  11. ViewModelProvider.AndroidViewModelFactory(application) {
  12.  
  13. private val viewModelCache: MutableMap<String, AndroidViewModel> = mutableMapOf()
  14.  
  15. private val definedViewModels = listOf(
  16. BatteryViewModel::class.java
  17. )
  18.  
  19. override fun <T : ViewModel?> create(modelClass: Class<T>): T {
  20. definedViewModels.firstOrNull {
  21. it.isAssignableFrom(modelClass)
  22. }?.let {
  23. @Suppress("UNCHECKED_CAST")
  24. return getViewModel(modelClass) as T
  25. }
  26. throw IllegalArgumentException("Unknown class: $modelClass")
  27. }
  28.  
  29. private fun <T : ViewModel?> getViewModel(modelClass: Class<T>): ViewModel? =
  30. modelClass.name?.let {
  31. if (viewModelCache.containsKey(it)) {
  32. viewModelCache[it]
  33. } else {
  34. (super.create(modelClass) as AndroidViewModel).apply {
  35. viewModelCache[it] = this
  36. }
  37. }
  38. }
  39.  
  40. }
Add Comment
Please, Sign In to add comment