try to fix closed BolusProggressDialog and storing carbs if bolus was canceled
This commit is contained in:
parent
0db34981d4
commit
dcf3c9cc57
6 changed files with 66 additions and 42 deletions
|
@ -221,11 +221,14 @@ class CommandQueueImplementation @Inject constructor(
|
|||
// Check if pump store carbs
|
||||
// If not, it's not necessary add command to the queue and initiate connection
|
||||
// Assuming carbs in the future and carbs with duration are NOT stores anyway
|
||||
|
||||
var carbsRunnable = Runnable { }
|
||||
if ((detailedBolusInfo.carbs > 0) &&
|
||||
(!activePlugin.activePump.pumpDescription.storesCarbInfo ||
|
||||
detailedBolusInfo.carbsDuration != 0L ||
|
||||
(detailedBolusInfo.carbsTimestamp ?: detailedBolusInfo.timestamp) > dateUtil.now())
|
||||
) {
|
||||
carbsRunnable = Runnable {
|
||||
disposable += repository.runTransactionForResult(detailedBolusInfo.insertCarbsTransaction())
|
||||
.subscribeBy(
|
||||
onSuccess = { result ->
|
||||
|
@ -238,10 +241,14 @@ class CommandQueueImplementation @Inject constructor(
|
|||
callback?.result(PumpEnactResult(injector).enacted(false).success(false))?.run()
|
||||
}
|
||||
)
|
||||
}
|
||||
// Do not process carbs anymore
|
||||
detailedBolusInfo.carbs = 0.0
|
||||
// if no insulin just exit
|
||||
if (detailedBolusInfo.insulin == 0.0) return true
|
||||
if (detailedBolusInfo.insulin == 0.0) {
|
||||
carbsRunnable.run() // store carbs
|
||||
return true
|
||||
}
|
||||
|
||||
}
|
||||
var type = if (detailedBolusInfo.bolusType == DetailedBolusInfo.BolusType.SMB) CommandType.SMB_BOLUS else CommandType.BOLUS
|
||||
|
@ -277,10 +284,10 @@ class CommandQueueImplementation @Inject constructor(
|
|||
if (detailedBolusInfo.bolusType == DetailedBolusInfo.BolusType.SMB) {
|
||||
add(CommandSMBBolus(injector, detailedBolusInfo, callback))
|
||||
} else {
|
||||
add(CommandBolus(injector, detailedBolusInfo, callback, type))
|
||||
add(CommandBolus(injector, detailedBolusInfo, callback, type, carbsRunnable))
|
||||
if (type == CommandType.BOLUS) { // Bring up bolus progress dialog (start here, so the dialog is shown when the bolus is requested,
|
||||
// not when the Bolus command is starting. The command closes the dialog upon completion).
|
||||
showBolusProgressDialog(detailedBolusInfo.insulin, detailedBolusInfo.context)
|
||||
showBolusProgressDialog(detailedBolusInfo)
|
||||
// Notify Wear about upcoming bolus
|
||||
rxBus.send(EventBolusRequested(detailedBolusInfo.insulin))
|
||||
}
|
||||
|
@ -307,7 +314,7 @@ class CommandQueueImplementation @Inject constructor(
|
|||
@Synchronized
|
||||
override fun cancelAllBoluses() {
|
||||
if (!isRunning(CommandType.BOLUS)) {
|
||||
rxBus.send(EventDismissBolusProgressIfRunning(PumpEnactResult(injector).success(true).enacted(false)))
|
||||
rxBus.send(EventDismissBolusProgressIfRunning(PumpEnactResult(injector).success(true).enacted(false), null))
|
||||
}
|
||||
removeAll(CommandType.BOLUS)
|
||||
removeAll(CommandType.SMB_BOLUS)
|
||||
|
@ -573,14 +580,16 @@ class CommandQueueImplementation @Inject constructor(
|
|||
return result
|
||||
}
|
||||
|
||||
private fun showBolusProgressDialog(insulin: Double, ctx: Context?) {
|
||||
if (ctx != null) {
|
||||
private fun showBolusProgressDialog(detailedBolusInfo: DetailedBolusInfo) {
|
||||
if (detailedBolusInfo.context != null) {
|
||||
val bolusProgressDialog = BolusProgressDialog()
|
||||
bolusProgressDialog.setInsulin(insulin)
|
||||
bolusProgressDialog.show((ctx as AppCompatActivity).supportFragmentManager, "BolusProgress")
|
||||
bolusProgressDialog.setInsulin(detailedBolusInfo.insulin)
|
||||
bolusProgressDialog.setTimestamp(detailedBolusInfo.timestamp)
|
||||
bolusProgressDialog.show((detailedBolusInfo.context as AppCompatActivity).supportFragmentManager, "BolusProgress")
|
||||
} else {
|
||||
val i = Intent()
|
||||
i.putExtra("insulin", insulin)
|
||||
i.putExtra("insulin", detailedBolusInfo.insulin)
|
||||
i.putExtra("timestamp", detailedBolusInfo.timestamp)
|
||||
i.setClass(context, BolusProgressHelperActivity::class.java)
|
||||
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
context.startActivity(i)
|
||||
|
|
|
@ -46,7 +46,7 @@ class QueueThread internal constructor(
|
|||
val secondsElapsed = (System.currentTimeMillis() - connectionStartTime) / 1000
|
||||
val pump = activePlugin.activePump
|
||||
if (!pump.isConnected() && secondsElapsed > Constants.PUMP_MAX_CONNECTION_TIME_IN_SECONDS) {
|
||||
rxBus.send(EventDismissBolusProgressIfRunning(null))
|
||||
rxBus.send(EventDismissBolusProgressIfRunning(null, null))
|
||||
rxBus.send(EventPumpStatusChanged(rh.gs(R.string.connectiontimedout)))
|
||||
aapsLogger.debug(LTag.PUMPQUEUE, "timed out")
|
||||
pump.stopConnecting()
|
||||
|
|
|
@ -15,7 +15,8 @@ class CommandBolus(
|
|||
injector: HasAndroidInjector,
|
||||
private val detailedBolusInfo: DetailedBolusInfo,
|
||||
callback: Callback?,
|
||||
type: CommandType
|
||||
type: CommandType,
|
||||
private val carbsRunnable: Runnable
|
||||
) : Command(injector, type, callback) {
|
||||
|
||||
@Inject lateinit var rxBus: RxBus
|
||||
|
@ -23,8 +24,9 @@ class CommandBolus(
|
|||
|
||||
override fun execute() {
|
||||
val r = activePlugin.activePump.deliverTreatment(detailedBolusInfo)
|
||||
if (r.success) carbsRunnable.run()
|
||||
BolusProgressDialog.bolusEnded = true
|
||||
rxBus.send(EventDismissBolusProgressIfRunning(r))
|
||||
rxBus.send(EventDismissBolusProgressIfRunning(r, detailedBolusInfo.timestamp))
|
||||
aapsLogger.debug(LTag.PUMPQUEUE, "Result success: ${r.success} enacted: ${r.enacted}")
|
||||
callback?.result(r)?.run()
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ class BolusProgressHelperActivity : DialogAppCompatActivity() {
|
|||
BolusProgressDialog()
|
||||
.setHelperActivity(this)
|
||||
.setInsulin(intent.getDoubleExtra("insulin", 0.0))
|
||||
.setTimestamp(intent.getLongExtra("timestamp", 0L))
|
||||
.show(supportFragmentManager, "BolusProgress")
|
||||
}
|
||||
}
|
|
@ -25,6 +25,7 @@ import info.nightscout.androidaps.utils.FabricPrivacy
|
|||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||
import info.nightscout.androidaps.utils.rx.AapsSchedulers
|
||||
import io.reactivex.disposables.CompositeDisposable
|
||||
import io.reactivex.rxkotlin.plusAssign
|
||||
import javax.inject.Inject
|
||||
|
||||
class BolusProgressDialog : DaggerDialogFragment() {
|
||||
|
@ -40,15 +41,22 @@ class BolusProgressDialog : DaggerDialogFragment() {
|
|||
private val disposable = CompositeDisposable()
|
||||
|
||||
companion object {
|
||||
|
||||
var bolusEnded = false
|
||||
var stopPressed = false
|
||||
}
|
||||
|
||||
private var running = true
|
||||
private var amount = 0.0
|
||||
var timestamp: Long = 0L
|
||||
private var state: String? = null
|
||||
private var helpActivity: BolusProgressHelperActivity? = null
|
||||
|
||||
fun setTimestamp(timestamp: Long): BolusProgressDialog {
|
||||
this.timestamp = timestamp
|
||||
return this
|
||||
}
|
||||
|
||||
fun setInsulin(amount: Double): BolusProgressDialog {
|
||||
this.amount = amount
|
||||
bolusEnded = false
|
||||
|
@ -66,8 +74,10 @@ class BolusProgressDialog : DaggerDialogFragment() {
|
|||
// onDestroyView.
|
||||
private val binding get() = _binding!!
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
|
||||
savedInstanceState: Bundle?): View {
|
||||
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)
|
||||
isCancelable = false
|
||||
|
@ -80,6 +90,7 @@ class BolusProgressDialog : DaggerDialogFragment() {
|
|||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
savedInstanceState?.let {
|
||||
amount = it.getDouble("amount")
|
||||
timestamp = it.getLong("timestamp")
|
||||
}
|
||||
binding.title.text = rh.gs(R.string.goingtodeliver, amount)
|
||||
binding.stop.setOnClickListener {
|
||||
|
@ -111,17 +122,18 @@ class BolusProgressDialog : DaggerDialogFragment() {
|
|||
if (bolusEnded) dismiss()
|
||||
else running = true
|
||||
|
||||
disposable.add(rxBus
|
||||
disposable += rxBus
|
||||
.toObservable(EventPumpStatusChanged::class.java)
|
||||
.observeOn(aapsSchedulers.main)
|
||||
.subscribe({ binding.status.text = it.getStatus(rh) }, fabricPrivacy::logException)
|
||||
)
|
||||
disposable.add(rxBus
|
||||
disposable += rxBus
|
||||
.toObservable(EventDismissBolusProgressIfRunning::class.java)
|
||||
.observeOn(aapsSchedulers.main)
|
||||
.subscribe({ if (running) dismiss() }, fabricPrivacy::logException)
|
||||
)
|
||||
disposable.add(rxBus
|
||||
.subscribe({
|
||||
if (it.bolusTimestamp == null || it.bolusTimestamp == timestamp)
|
||||
if (running) dismiss()
|
||||
}, fabricPrivacy::logException)
|
||||
disposable += rxBus
|
||||
.toObservable(EventOverviewBolusProgress::class.java)
|
||||
.observeOn(aapsSchedulers.main)
|
||||
.subscribe({
|
||||
|
@ -134,7 +146,6 @@ class BolusProgressDialog : DaggerDialogFragment() {
|
|||
}
|
||||
state = it.status
|
||||
}, fabricPrivacy::logException)
|
||||
)
|
||||
}
|
||||
|
||||
override fun dismiss() {
|
||||
|
@ -161,6 +172,7 @@ class BolusProgressDialog : DaggerDialogFragment() {
|
|||
super.onSaveInstanceState(outState)
|
||||
outState.putString("state", state)
|
||||
outState.putDouble("amount", amount)
|
||||
outState.putLong("timestamp", timestamp)
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
|
|
|
@ -3,4 +3,4 @@ package info.nightscout.androidaps.plugins.general.overview.events
|
|||
import info.nightscout.androidaps.data.PumpEnactResult
|
||||
import info.nightscout.androidaps.events.Event
|
||||
|
||||
class EventDismissBolusProgressIfRunning(val result: PumpEnactResult?) : Event()
|
||||
class EventDismissBolusProgressIfRunning(val result: PumpEnactResult?, val bolusTimestamp: Long?) : Event()
|
Loading…
Reference in a new issue