AndroidAPS/app/src/main/java/info/nightscout/androidaps/dialogs/BolusProgressDialog.kt

174 lines
6.4 KiB
Kotlin
Raw Normal View History

2019-12-20 21:52:37 +01:00
package info.nightscout.androidaps.dialogs
import android.app.Activity
import android.os.Bundle
import android.os.SystemClock
2019-12-20 23:05:35 +01:00
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.Window
import android.view.WindowManager
2019-12-30 00:53:44 +01:00
import dagger.android.support.DaggerDialogFragment
2019-12-20 21:52:37 +01:00
import info.nightscout.androidaps.R
import info.nightscout.androidaps.activities.BolusProgressHelperActivity
import info.nightscout.androidaps.events.EventPumpStatusChanged
2020-01-10 23:14:58 +01:00
import info.nightscout.androidaps.interfaces.CommandQueueProvider
2019-12-30 00:53:44 +01:00
import info.nightscout.androidaps.logging.AAPSLogger
import info.nightscout.androidaps.logging.LTag
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
2019-12-20 21:52:37 +01:00
import info.nightscout.androidaps.plugins.general.overview.events.EventDismissBolusProgressIfRunning
import info.nightscout.androidaps.plugins.general.overview.events.EventOverviewBolusProgress
import info.nightscout.androidaps.utils.FabricPrivacy
2019-12-30 00:53:44 +01:00
import info.nightscout.androidaps.utils.resources.ResourceHelper
2019-12-20 21:52:37 +01:00
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
import kotlinx.android.synthetic.main.dialog_bolusprogress.*
2019-12-30 00:53:44 +01:00
import javax.inject.Inject
class BolusProgressDialog : DaggerDialogFragment() {
@Inject lateinit var aapsLogger: AAPSLogger
@Inject lateinit var rxBus: RxBusWrapper
@Inject lateinit var resourceHelper: ResourceHelper
2020-01-10 23:14:58 +01:00
@Inject lateinit var commandQueue: CommandQueueProvider
2020-01-03 14:30:39 +01:00
@Inject lateinit var fabricPrivacy: FabricPrivacy
2019-12-20 21:52:37 +01:00
private val disposable = CompositeDisposable()
companion object {
@JvmField
var bolusEnded = false
2020-03-04 23:33:34 +01:00
2019-12-20 21:52:37 +01:00
@JvmField
var stopPressed = false
}
private var running = true
private var amount = 0.0
private var state: String? = null
private var helpActivity: BolusProgressHelperActivity? = null
fun setInsulin(amount: Double): BolusProgressDialog {
this.amount = amount
bolusEnded = false
return this
}
fun setHelperActivity(activity: BolusProgressHelperActivity): BolusProgressDialog {
helpActivity = activity
return this
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
dialog?.window?.requestFeature(Window.FEATURE_NO_TITLE)
dialog?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
2020-01-17 17:16:36 +01:00
isCancelable = false
2019-12-20 21:52:37 +01:00
dialog?.setCanceledOnTouchOutside(false)
return inflater.inflate(R.layout.dialog_bolusprogress, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
2020-03-04 23:33:34 +01:00
savedInstanceState?.let {
amount = it.getDouble("amount")
}
2019-12-30 00:53:44 +01:00
overview_bolusprogress_title.text = resourceHelper.gs(R.string.overview_bolusprogress_goingtodeliver, amount)
2019-12-20 21:52:37 +01:00
overview_bolusprogress_stop.setOnClickListener {
2019-12-30 00:53:44 +01:00
aapsLogger.debug(LTag.UI, "Stop bolus delivery button pressed")
2019-12-20 21:52:37 +01:00
stopPressed = true
overview_bolusprogress_stoppressed.visibility = View.VISIBLE
overview_bolusprogress_stop.visibility = View.INVISIBLE
2020-01-10 23:14:58 +01:00
commandQueue.cancelAllBoluses()
2019-12-20 21:52:37 +01:00
}
2019-12-30 00:53:44 +01:00
val defaultState = resourceHelper.gs(R.string.waitingforpump)
2019-12-20 21:52:37 +01:00
overview_bolusprogress_progressbar.max = 100
2019-12-30 00:53:44 +01:00
state = savedInstanceState?.getString("state", defaultState) ?: defaultState
2019-12-20 21:52:37 +01:00
overview_bolusprogress_status.text = state
stopPressed = false
}
override fun onStart() {
super.onStart()
dialog?.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
}
override fun onResume() {
super.onResume()
2019-12-30 00:53:44 +01:00
aapsLogger.debug(LTag.UI, "onResume")
2020-01-10 23:14:58 +01:00
if (!commandQueue.bolusInQueue())
2019-12-20 21:52:37 +01:00
bolusEnded = true
if (bolusEnded) dismiss()
else running = true
2019-12-30 00:53:44 +01:00
disposable.add(rxBus
.toObservable(EventPumpStatusChanged::class.java)
2019-12-20 23:05:35 +01:00
.observeOn(AndroidSchedulers.mainThread())
2020-01-03 17:06:06 +01:00
.subscribe({ overview_bolusprogress_status.text = it.getStatus(resourceHelper) }) { fabricPrivacy.logException(it) }
2019-12-20 21:52:37 +01:00
)
2019-12-30 00:53:44 +01:00
disposable.add(rxBus
.toObservable(EventDismissBolusProgressIfRunning::class.java)
2019-12-20 23:05:35 +01:00
.observeOn(AndroidSchedulers.mainThread())
2020-01-03 14:30:39 +01:00
.subscribe({ if (running) dismiss() }) { fabricPrivacy.logException(it) }
2019-12-20 21:52:37 +01:00
)
2019-12-30 00:53:44 +01:00
disposable.add(rxBus
.toObservable(EventOverviewBolusProgress::class.java)
2019-12-20 23:05:35 +01:00
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
2019-12-30 00:53:44 +01:00
aapsLogger.debug(LTag.UI, "Status: ${it.status} Percent: ${it.percent}")
2019-12-20 23:05:35 +01:00
overview_bolusprogress_status.text = it.status
overview_bolusprogress_progressbar.progress = it.percent
if (it.percent == 100) {
overview_bolusprogress_stop.visibility = View.INVISIBLE
scheduleDismiss()
}
state = it.status
2020-01-03 14:30:39 +01:00
}) { fabricPrivacy.logException(it) }
2019-12-20 21:52:37 +01:00
)
}
override fun dismiss() {
2019-12-30 00:53:44 +01:00
aapsLogger.debug(LTag.UI, "dismiss")
2019-12-20 21:52:37 +01:00
try {
super.dismiss()
} catch (e: IllegalStateException) {
// dialog not running yet. onResume will try again. Set bolusEnded to make extra
// sure onResume will catch this
bolusEnded = true
2019-12-30 00:53:44 +01:00
aapsLogger.error("Unhandled exception", e)
2019-12-20 21:52:37 +01:00
}
helpActivity?.finish()
}
override fun onPause() {
super.onPause()
2019-12-30 00:53:44 +01:00
aapsLogger.debug(LTag.UI, "onPause")
2019-12-20 21:52:37 +01:00
running = false
disposable.clear()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString("state", state)
2020-03-04 23:33:34 +01:00
outState.putDouble("amount", amount)
2019-12-20 21:52:37 +01:00
}
private fun scheduleDismiss() {
2019-12-30 00:53:44 +01:00
aapsLogger.debug(LTag.UI, "scheduleDismiss")
2019-12-20 21:52:37 +01:00
Thread(Runnable {
SystemClock.sleep(5000)
bolusEnded = true
val activity: Activity? = activity
activity?.runOnUiThread {
if (running) {
2019-12-30 00:53:44 +01:00
aapsLogger.debug(LTag.UI, "executing")
2019-12-20 21:52:37 +01:00
try {
dismiss()
} catch (e: Exception) {
2019-12-30 00:53:44 +01:00
aapsLogger.error("Unhandled exception", e)
2019-12-20 21:52:37 +01:00
}
}
}
}).start()
}
2020-01-17 17:16:36 +01:00
}