diff --git a/app/src/main/java/info/nightscout/androidaps/dependencyInjection/WizardModule.kt b/app/src/main/java/info/nightscout/androidaps/dependencyInjection/WizardModule.kt index 1405b8867f..9a9217bc56 100644 --- a/app/src/main/java/info/nightscout/androidaps/dependencyInjection/WizardModule.kt +++ b/app/src/main/java/info/nightscout/androidaps/dependencyInjection/WizardModule.kt @@ -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 diff --git a/app/src/main/java/info/nightscout/androidaps/setupwizard/SWDefinition.kt b/app/src/main/java/info/nightscout/androidaps/setupwizard/SWDefinition.kt index 55b52fe34d..83c1055352 100644 --- a/app/src/main/java/info/nightscout/androidaps/setupwizard/SWDefinition.kt +++ b/app/src/main/java/info/nightscout/androidaps/setupwizard/SWDefinition.kt @@ -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) diff --git a/app/src/main/java/info/nightscout/androidaps/setupwizard/SWIntNumberValidator.java b/app/src/main/java/info/nightscout/androidaps/setupwizard/SWIntNumberValidator.java new file mode 100644 index 0000000000..039f9e1687 --- /dev/null +++ b/app/src/main/java/info/nightscout/androidaps/setupwizard/SWIntNumberValidator.java @@ -0,0 +1,6 @@ +package info.nightscout.androidaps.setupwizard; + +// keep in java, it's easier +public interface SWIntNumberValidator { + boolean isValid(int value); +} diff --git a/app/src/main/java/info/nightscout/androidaps/setupwizard/elements/SWEditIntNumber.kt b/app/src/main/java/info/nightscout/androidaps/setupwizard/elements/SWEditIntNumber.kt new file mode 100644 index 0000000000..ad471cadd3 --- /dev/null +++ b/app/src/main/java/info/nightscout/androidaps/setupwizard/elements/SWEditIntNumber.kt @@ -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 + } + +} \ No newline at end of file