fix carbs limit

This commit is contained in:
Milos Kozak 2021-10-19 12:05:52 +02:00
parent 608fe446c3
commit f7f7ba3a2b
4 changed files with 69 additions and 2 deletions

View file

@ -14,6 +14,7 @@ abstract class WizardModule {
@ContributesAndroidInjector abstract fun swButtonInjector(): SWButton
@ContributesAndroidInjector abstract fun swEditNumberWithUnitsInjector(): SWEditNumberWithUnits
@ContributesAndroidInjector abstract fun swEditNumberInjector(): SWEditNumber
@ContributesAndroidInjector abstract fun swEditIntNumberInjector(): SWEditIntNumber
@ContributesAndroidInjector abstract fun swEditStringInjector(): SWEditString
@ContributesAndroidInjector abstract fun swEditEncryptedPasswordInjector(): SWEditEncryptedPassword
@ContributesAndroidInjector abstract fun swEditUrlInjector(): SWEditUrl

View file

@ -227,7 +227,7 @@ class SWDefinition @Inject constructor(
.updateDelay(5)
.label(R.string.treatmentssafety_maxbolus_title)
.comment(R.string.common_values))
.add(SWEditNumber(injector, 48.0, 1.0, 100.0)
.add(SWEditIntNumber(injector, 48, 1, 100)
.preferenceId(R.string.key_treatmentssafety_maxcarbs)
.updateDelay(5)
.label(R.string.treatmentssafety_maxcarbs_title)
@ -235,7 +235,7 @@ class SWDefinition @Inject constructor(
.validator {
sp.contains(R.string.key_age)
&& sp.getDouble(R.string.key_treatmentssafety_maxbolus, 0.0) > 0
&& sp.getDouble(R.string.key_treatmentssafety_maxcarbs, 0.0) > 0
&& sp.getInt(R.string.key_treatmentssafety_maxcarbs, 0) > 0
}
private val screenInsulin = SWScreen(injector, R.string.configbuilder_insulin)
.skippable(false)

View file

@ -0,0 +1,6 @@
package info.nightscout.androidaps.setupwizard;
// keep in java, it's easier
public interface SWIntNumberValidator {
boolean isValid(int value);
}

View file

@ -0,0 +1,60 @@
package info.nightscout.androidaps.setupwizard.elements
import android.graphics.Typeface
import android.text.Editable
import android.text.TextWatcher
import android.view.View
import android.widget.LinearLayout
import android.widget.TextView
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.setupwizard.SWIntNumberValidator
import info.nightscout.androidaps.utils.SafeParse
import info.nightscout.androidaps.utils.ui.NumberPicker
import java.text.DecimalFormat
class SWEditIntNumber(injector: HasAndroidInjector, private val init: Int, private val min: Int, private val max: Int) : SWItem(injector, Type.NUMBER) {
private val validator: SWIntNumberValidator = SWIntNumberValidator { value -> value in min..max }
private var updateDelay = 0
override fun generateDialog(layout: LinearLayout) {
val context = layout.context
val watcher: TextWatcher = object : TextWatcher {
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
if (validator.isValid(SafeParse.stringToInt(s.toString())))
save(s.toString(), updateDelay.toLong())
}
override fun afterTextChanged(s: Editable) {}
}
val l = TextView(context)
l.id = View.generateViewId()
label?.let { l.setText(it) }
l.setTypeface(l.typeface, Typeface.BOLD)
layout.addView(l)
val initValue = sp.getInt(preferenceId, init)
val numberPicker = NumberPicker(context)
numberPicker.setParams(initValue.toDouble(), min.toDouble(), max.toDouble(), 1.0, DecimalFormat("0"), false, null, watcher)
layout.addView(numberPicker)
val c = TextView(context)
c.id = View.generateViewId()
comment?.let { c.setText(it) }
c.setTypeface(c.typeface, Typeface.ITALIC)
layout.addView(c)
super.generateDialog(layout)
}
fun preferenceId(preferenceId: Int): SWEditIntNumber {
this.preferenceId = preferenceId
return this
}
fun updateDelay(updateDelay: Int): SWEditIntNumber {
this.updateDelay = updateDelay
return this
}
}