CompositeDisposable

This commit is contained in:
Milos Kozak 2019-06-07 14:46:24 +02:00
parent ccf49b5e5a
commit a7451c9b16
2 changed files with 49 additions and 41 deletions

View file

@ -12,8 +12,6 @@ object RxBus {
publisher.onNext(event)
}
fun toObservable(): Observable<Any> = publisher
// Listen should return an Observable and not the publisher
// Using ofType we filter only events that match that class type
fun <T> toObservable(eventType: Class<T>): Observable<T> = publisher.ofType(eventType)

View file

@ -23,10 +23,12 @@ import info.nightscout.androidaps.receivers.NetworkChangeReceiver
import info.nightscout.androidaps.utils.SP
import info.nightscout.androidaps.utils.T
import info.nightscout.androidaps.utils.ToastUtils
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.disposables.Disposable
import org.slf4j.LoggerFactory
import java.util.*
object TidepoolPlugin : PluginBase(PluginDescription()
.mainType(PluginType.GENERAL)
.pluginName(R.string.tidepool)
@ -36,21 +38,63 @@ object TidepoolPlugin : PluginBase(PluginDescription()
.description(R.string.description_tidepool)
) {
private val log = LoggerFactory.getLogger(L.TIDEPOOL)
private var disposable: Disposable? = null
private var disposable: CompositeDisposable = CompositeDisposable()
private val listLog = ArrayList<EventTidepoolStatus>()
@Suppress("DEPRECATION") // API level 24 to replace call
var textLog = Html.fromHtml("")
operator fun CompositeDisposable.plusAssign(disposable: Disposable) {
add(disposable)
}
override fun onStart() {
disposable = RxBus
.toObservable()
.subscribe { event: Any -> onEvent(event) }
disposable += RxBus
.toObservable(EventTidepoolDoUpload::class.java)
.subscribe({ event -> doUpload() }, {})
disposable += RxBus
.toObservable(EventTidepoolResetData::class.java)
.subscribe({
if (TidepoolUploader.connectionStatus != TidepoolUploader.ConnectionStatus.CONNECTED) {
log.debug("Not connected for deleteDataset")
} else {
TidepoolUploader.deleteDataSet()
SP.putLong(R.string.key_tidepool_last_end, 0)
TidepoolUploader.doLogin()
}
}, {})
disposable += RxBus
.toObservable(EventTidepoolStatus::class.java)
.subscribe({ event -> addToLog(event) }, {})
disposable += RxBus
.toObservable(EventNewBG::class.java)
.subscribe({ event ->
if (event.bgReading!!.date!! < TidepoolUploader.getLastEnd())
TidepoolUploader.setLastEnd(event.bgReading!!.date!!)
if (isEnabled(PluginType.GENERAL)
&& (!SP.getBoolean(R.string.key_tidepool_only_while_charging, false) || ChargingStateReceiver.isCharging())
&& (!SP.getBoolean(R.string.key_tidepool_only_while_unmetered, false) || NetworkChangeReceiver.isWifiConnected())
&& RateLimit.ratelimit("tidepool-new-data-upload", T.mins(4).secs().toInt()))
doUpload()
}, {})
disposable += RxBus
.toObservable(EventPreferenceChange::class.java)
.subscribe({ event ->
if (event.isChanged(R.string.key_tidepool_dev_servers)
|| event.isChanged(R.string.key_tidepool_username)
|| event.isChanged(R.string.key_tidepool_password)
)
TidepoolUploader.resetInstance()
}, {})
disposable += RxBus
.toObservable(EventNetworkChange::class.java)
.subscribe({}, {}) // TODO start upload on wifi connect
super.onStart()
}
override fun onStop() {
disposable?.dispose()
disposable.clear()
super.onStop()
}
@ -61,40 +105,6 @@ object TidepoolPlugin : PluginBase(PluginDescription()
TidepoolUploader.doUpload()
}
private fun onEvent(event: Any) {
when (event) {
is EventTidepoolDoUpload -> doUpload()
is EventTidepoolResetData -> {
if (TidepoolUploader.connectionStatus != TidepoolUploader.ConnectionStatus.CONNECTED) {
log.debug("Not connected for deleteDataset")
return
}
TidepoolUploader.deleteDataSet()
SP.putLong(R.string.key_tidepool_last_end, 0)
TidepoolUploader.doLogin()
}
is EventTidepoolStatus -> addToLog(event)
is EventNewBG -> {
if (event.bgReading!!.date!! < TidepoolUploader.getLastEnd())
TidepoolUploader.setLastEnd(event.bgReading!!.date!!)
if (isEnabled(PluginType.GENERAL)
&& (!SP.getBoolean(R.string.key_tidepool_only_while_charging, false) || ChargingStateReceiver.isCharging())
&& (!SP.getBoolean(R.string.key_tidepool_only_while_unmetered, false) || NetworkChangeReceiver.isWifiConnected())
&& RateLimit.ratelimit("tidepool-new-data-upload", T.mins(4).secs().toInt()))
doUpload()
}
is EventPreferenceChange -> {
if (event.isChanged(R.string.key_tidepool_dev_servers)
|| event.isChanged(R.string.key_tidepool_username)
|| event.isChanged(R.string.key_tidepool_password)
)
TidepoolUploader.resetInstance()
}
is EventNetworkChange -> {
} // TODO start upload on wifi connect
}
}
@Synchronized
private fun addToLog(ev: EventTidepoolStatus) {
synchronized(listLog) {