mirror of
https://github.com/ev-map/EVMap.git
synced 2026-05-19 04:16:24 -04:00
@@ -141,17 +141,24 @@ class MapViewModel(application: Application, private val state: SavedStateHandle
|
||||
}
|
||||
val chargerDetails: MediatorLiveData<Resource<ChargeLocation>> by lazy {
|
||||
MediatorLiveData<Resource<ChargeLocation>>().apply {
|
||||
value = state["chargerDetails"]
|
||||
listOf(chargerSparse, referenceData).forEach {
|
||||
addSource(it) { _ ->
|
||||
val charger = chargerSparse.value
|
||||
val refData = referenceData.value
|
||||
if (charger != null && refData != null) {
|
||||
loadChargerDetails(charger, refData)
|
||||
if (charger.id != value?.data?.id) {
|
||||
loadChargerDetails(charger, refData)
|
||||
}
|
||||
} else {
|
||||
value = null
|
||||
}
|
||||
}
|
||||
}
|
||||
observeForever {
|
||||
// persist data in case fragment gets recreated
|
||||
state["chargerDetails"] = it
|
||||
}
|
||||
}
|
||||
}
|
||||
val charger: MediatorLiveData<Resource<ChargeLocation>> by lazy {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package net.vonforst.evmap.viewmodel
|
||||
|
||||
import android.os.Parcelable
|
||||
import androidx.annotation.MainThread
|
||||
import androidx.annotation.Nullable
|
||||
import androidx.lifecycle.*
|
||||
@@ -7,6 +8,8 @@ import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import kotlinx.parcelize.RawValue
|
||||
import java.util.concurrent.atomic.AtomicBoolean
|
||||
|
||||
|
||||
@@ -24,9 +27,13 @@ enum class Status {
|
||||
|
||||
/**
|
||||
* A generic class that holds a value with its loading status.
|
||||
* @param <T>
|
||||
</T> */
|
||||
data class Resource<out T>(val status: Status, val data: T?, val message: String?) {
|
||||
*
|
||||
* Note that this class implements Parcelable for convenience, but will give a runtime error when
|
||||
* trying to write it to a Parcel if the type parameter does not implement Parcelable.
|
||||
*/
|
||||
@Parcelize
|
||||
data class Resource<out T>(val status: Status, val data: @RawValue T?, val message: String?) :
|
||||
Parcelable {
|
||||
companion object {
|
||||
fun <T> success(data: T?): Resource<T> {
|
||||
return Resource(Status.SUCCESS, data, null)
|
||||
|
||||
Reference in New Issue
Block a user