Advertisement
Guest User

Untitled

a guest
Feb 20th, 2020
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 1.74 KB | None | 0 0
  1. interface SensorRepo {
  2.  
  3.     fun getSensorParamsLiveData(sensorName: String): LiveData<SensorParams>
  4.  
  5.     fun getSensorDataLiveData(sensorName: String): LiveData<List<SensorData>>
  6.  
  7. }
  8.  
  9. class SomeViewModel(sensorRepo: SensorRepo) : ViewModel() {
  10.  
  11.     private val sensorNameLiveData = MutableLiveData<String>()
  12.  
  13.     private val sensorParamsLiveData = Transformations.switchMap(sensorNameLiveData) {
  14.         sensorRepo.getSensorParamsLiveData(it)
  15.     }
  16.  
  17.     private val sensorDataLiveData = Transformations.switchMap(sensorNameLiveData) {
  18.         sensorRepo.getSensorDataLiveData(it)
  19.     }
  20.  
  21.     val sensorLiveData: LiveData<Sensor> = MediatorLiveData<Sensor>().apply {
  22.  
  23.         var lastSensorParams: SensorParams? = null
  24.         var lastSensorData: List<SensorData>? = null
  25.  
  26.         fun update() {
  27.             val sensorParams = lastSensorParams
  28.             val sensorData = lastSensorData
  29.             if (sensorParams == null || sensorData == null) return
  30.  
  31.             postValue(Sensor(sensorParams, sensorData))
  32.         }
  33.  
  34.         addSource(sensorParamsLiveData) { sensorParams ->
  35.             lastSensorParams = sensorParams
  36.             update()
  37.         }
  38.  
  39.         addSource(sensorDataLiveData) { sensorData ->
  40.             lastSensorData = sensorData
  41.             update()
  42.         }
  43.  
  44.     }
  45.  
  46.     data class Sensor(
  47.         val sensorParams: SensorParams,
  48.         val sensorData: List<SensorData>
  49.     )
  50.  
  51. }
  52.  
  53. class SomeFragment : Fragment() {
  54.  
  55.     lateinit var someViewModel: SomeViewModel
  56.  
  57.     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
  58.         someViewModel.sensorLiveData.observe(this, Observer { (sensorParams, sensorData) ->
  59.             // consume sensor params and sensor data
  60.         })
  61.     }
  62.  
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement