From 36b28612c1c5e6fb3dcb85cbaf87fbfbd7ddaa57 Mon Sep 17 00:00:00 2001 From: jbr7rr <> Date: Sun, 3 Sep 2023 18:17:34 +0200 Subject: [PATCH] Medtrum: Adjust min/max of insulin settings according to pumpType Revert some formatting --- .../ValidatingEditTextPreference.kt | 8 + .../nightscout/pump/medtrum/MedtrumPlugin.kt | 106 ++-- .../pump/medtrum/encryption/Crypt.kt | 518 +----------------- .../src/main/res/xml/pref_medtrum_pump.xml | 2 +- 4 files changed, 85 insertions(+), 549 deletions(-) diff --git a/core/validators/src/main/java/info/nightscout/core/validators/ValidatingEditTextPreference.kt b/core/validators/src/main/java/info/nightscout/core/validators/ValidatingEditTextPreference.kt index 7c37716c68..eb4431f79e 100644 --- a/core/validators/src/main/java/info/nightscout/core/validators/ValidatingEditTextPreference.kt +++ b/core/validators/src/main/java/info/nightscout/core/validators/ValidatingEditTextPreference.kt @@ -35,6 +35,14 @@ class ValidatingEditTextPreference(ctx: Context, attrs: AttributeSet, defStyleAt holder.isDividerAllowedBelow = false } + fun setMinNumber(min: Int) { + this.validatorParameters.minNumber = min + } + + fun setMaxNumber(max: Int) { + this.validatorParameters.maxNumber = max + } + private fun obtainValidatorParameters(attrs: AttributeSet): DefaultEditTextValidator.Parameters { val typedArray = context.obtainStyledAttributes(attrs, R.styleable.FormEditText, 0, 0) return DefaultEditTextValidator.Parameters( diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt index 41ca1468ef..d6e97dbe88 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt @@ -15,6 +15,7 @@ import dagger.android.HasAndroidInjector import info.nightscout.core.ui.dialogs.OKDialog import info.nightscout.core.ui.toast.ToastUtils import info.nightscout.core.utils.fabric.FabricPrivacy +import info.nightscout.core.validators.ValidatingEditTextPreference import info.nightscout.interfaces.constraints.Constraint import info.nightscout.interfaces.constraints.Constraints import info.nightscout.interfaces.notifications.Notification @@ -127,33 +128,41 @@ import kotlin.math.abs override fun preprocessPreferences(preferenceFragment: PreferenceFragmentCompat) { super.preprocessPreferences(preferenceFragment) + + preprocessSerialSettings(preferenceFragment) + preprocessAlarmSettings(preferenceFragment) + preprocessMaxInsulinSettings(preferenceFragment) + } + + private fun preprocessSerialSettings(preferenceFragment: PreferenceFragmentCompat) { val serialSetting = preferenceFragment.findPreference(rh.gs(R.string.key_sn_input)) - serialSetting?.isEnabled = !isInitialized() - serialSetting?.setOnBindEditTextListener { editText -> - editText.addTextChangedListener(object : TextWatcher { - override fun afterTextChanged(newValue: Editable?) { - val newSN = newValue.toString().toLongOrNull(radix = 16) - val newDeviceType = MedtrumSnUtil().getDeviceTypeFromSerial(newSN ?: 0) - if (newDeviceType == MedtrumSnUtil.INVALID) { - editText.error = rh.gs(R.string.sn_input_invalid) - } else { - editText.error = null + serialSetting?.apply { + isEnabled = !isInitialized() + setOnBindEditTextListener { editText -> + editText.addTextChangedListener(object : TextWatcher { + override fun afterTextChanged(newValue: Editable?) { + val newSN = newValue?.toString()?.toLongOrNull(radix = 16) ?: 0 + val newDeviceType = MedtrumSnUtil().getDeviceTypeFromSerial(newSN) + editText.error = if (newDeviceType == MedtrumSnUtil.INVALID) { + rh.gs(R.string.sn_input_invalid) + } else { + null + } } - } - override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { - // Nothing to do here - } + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + // Nothing to do here + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + // Nothing to do here + } + }) + } + setOnPreferenceChangeListener { _, newValue -> + val newSN = (newValue as? String)?.toLongOrNull(radix = 16) ?: 0 + val newDeviceType = MedtrumSnUtil().getDeviceTypeFromSerial(newSN) - override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { - // Nothing to do here - } - }) - } - serialSetting?.setOnPreferenceChangeListener { _, newValue -> - if (newValue is String) { - val newSN = newValue.toLongOrNull(radix = 16) - val newDeviceType = MedtrumSnUtil().getDeviceTypeFromSerial(newSN ?: 0) when { newDeviceType == MedtrumSnUtil.INVALID -> { preferenceFragment.activity?.let { activity -> @@ -171,28 +180,61 @@ import kotlin.math.abs else -> true } - } else { - false } } + } + private fun preprocessAlarmSettings(preferenceFragment: PreferenceFragmentCompat) { val alarmSetting = preferenceFragment.findPreference(rh.gs(R.string.key_alarm_setting)) val allAlarmEntries = preferenceFragment.resources.getStringArray(R.array.alarmSettings) val allAlarmValues = preferenceFragment.resources.getStringArray(R.array.alarmSettingsValues) if (allAlarmEntries.size < 8 || allAlarmValues.size < 8) { aapsLogger.error(LTag.PUMP, "Alarm settings array is not complete") - return + } else { + when (medtrumPump.pumpType()) { + PumpType.MEDTRUM_NANO, PumpType.MEDTRUM_300U -> { + alarmSetting?.apply { + entries = arrayOf(allAlarmEntries[6], allAlarmEntries[7]) // "Beep", "Silent" + entryValues = arrayOf(allAlarmValues[6], allAlarmValues[7]) // "6", "7" + } + } + + else -> { + // Use default + } + } + } + } + + private fun preprocessMaxInsulinSettings(preferenceFragment: PreferenceFragmentCompat) { + val hourlyMaxSetting = preferenceFragment.findPreference(rh.gs(R.string.key_hourly_max_insulin)) + val dailyMaxSetting = preferenceFragment.findPreference(rh.gs(R.string.key_daily_max_insulin)) + + val hourlyMaxValue = hourlyMaxSetting?.text?.toIntOrNull() ?: 0 + val newDailyMaxMinValue = if (hourlyMaxValue > 20) hourlyMaxValue else 20 + dailyMaxSetting?.setMinNumber(newDailyMaxMinValue) + + val pumpTypeSettings = when (medtrumPump.pumpType()) { + PumpType.MEDTRUM_NANO -> Pair(40, 180) // maxHourlyMax, maxDailyMax + PumpType.MEDTRUM_300U -> Pair(60, 270) + else -> Pair(40, 180) } - when (medtrumPump.pumpType()) { - PumpType.MEDTRUM_NANO, PumpType.MEDTRUM_300U -> { - alarmSetting?.entries = arrayOf(allAlarmEntries[6], allAlarmEntries[7]) // "Beep", "Silent" - alarmSetting?.entryValues = arrayOf(allAlarmValues[6], allAlarmValues[7]) // "6", "7" + hourlyMaxSetting?.apply { + setMaxNumber(pumpTypeSettings.first) + val hourlyCurrentValue = text?.toIntOrNull() ?: 0 + if (hourlyCurrentValue > pumpTypeSettings.first) { + text = pumpTypeSettings.first.toString() } + } - else -> { - // Use default + dailyMaxSetting?.apply { + setMaxNumber(pumpTypeSettings.second) + val dailyCurrentValue = text?.toIntOrNull() ?: 0 + when { + dailyCurrentValue < newDailyMaxMinValue -> text = newDailyMaxMinValue.toString() + dailyCurrentValue > pumpTypeSettings.second -> text = pumpTypeSettings.second.toString() } } } diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/encryption/Crypt.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/encryption/Crypt.kt index d6ee470b0b..cf958b224a 100644 --- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/encryption/Crypt.kt +++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/encryption/Crypt.kt @@ -5,522 +5,8 @@ import info.nightscout.pump.medtrum.extension.toLong class Crypt { - private val RIJNDEAL_S_BOX: IntArray = intArrayOf( - 99, - 124, - 119, - 123, - 242, - 107, - 111, - 197, - 48, - 1, - 103, - 43, - 254, - 215, - 171, - 118, - 202, - 130, - 201, - 125, - 250, - 89, - 71, - 240, - 173, - 212, - 162, - 175, - 156, - 164, - 114, - 192, - 183, - 253, - 147, - 38, - 54, - 63, - 247, - 204, - 52, - 165, - 229, - 241, - 113, - 216, - 49, - 21, - 4, - 199, - 35, - 195, - 24, - 150, - 5, - 154, - 7, - 18, - 128, - 226, - 235, - 39, - 178, - 117, - 9, - 131, - 44, - 26, - 27, - 110, - 90, - 160, - 82, - 59, - 214, - 179, - 41, - 227, - 47, - 132, - 83, - 209, - 0, - 237, - 32, - 252, - 177, - 91, - 106, - 203, - 190, - 57, - 74, - 76, - 88, - 207, - 208, - 239, - 170, - 251, - 67, - 77, - 51, - 133, - 69, - 249, - 2, - 127, - 80, - 60, - 159, - 168, - 81, - 163, - 64, - 143, - 146, - 157, - 56, - 245, - 188, - 182, - 218, - 33, - 16, - 255, - 243, - 210, - 205, - 12, - 19, - 236, - 95, - 151, - 68, - 23, - 196, - 167, - 126, - 61, - 100, - 93, - 25, - 115, - 96, - 129, - 79, - 220, - 34, - 42, - 144, - 136, - 70, - 238, - 184, - 20, - 222, - 94, - 11, - 219, - 224, - 50, - 58, - 10, - 73, - 6, - 36, - 92, - 194, - 211, - 172, - 98, - 145, - 149, - 228, - 121, - 231, - 200, - 55, - 109, - 141, - 213, - 78, - 169, - 108, - 86, - 244, - 234, - 101, - 122, - 174, - 8, - 186, - 120, - 37, - 46, - 28, - 166, - 180, - 198, - 232, - 221, - 116, - 31, - 75, - 189, - 139, - 138, - 112, - 62, - 181, - 102, - 72, - 3, - 246, - 14, - 97, - 53, - 87, - 185, - 134, - 193, - 29, - 158, - 225, - 248, - 152, - 17, - 105, - 217, - 142, - 148, - 155, - 30, - 135, - 233, - 206, - 85, - 40, - 223, - 140, - 161, - 137, - 13, - 191, - 230, - 66, - 104, - 65, - 153, - 45, - 15, - 176, - 84, - 187, - 22 - ) - private val RIJNDEAL_INVERSE_S_BOX: IntArray = intArrayOf( - 82, - 9, - 106, - 213, - 48, - 54, - 165, - 56, - 191, - 64, - 163, - 158, - 129, - 243, - 215, - 251, - 124, - 227, - 57, - 130, - 155, - 47, - 255, - 135, - 52, - 142, - 67, - 68, - 196, - 222, - 233, - 203, - 84, - 123, - 148, - 50, - 166, - 194, - 35, - 61, - 238, - 76, - 149, - 11, - 66, - 250, - 195, - 78, - 8, - 46, - 161, - 102, - 40, - 217, - 36, - 178, - 118, - 91, - 162, - 73, - 109, - 139, - 209, - 37, - 114, - 248, - 246, - 100, - 134, - 104, - 152, - 22, - 212, - 164, - 92, - 204, - 93, - 101, - 182, - 146, - 108, - 112, - 72, - 80, - 253, - 237, - 185, - 218, - 94, - 21, - 70, - 87, - 167, - 141, - 157, - 132, - 144, - 216, - 171, - 0, - 140, - 188, - 211, - 10, - 247, - 228, - 88, - 5, - 184, - 179, - 69, - 6, - 208, - 44, - 30, - 143, - 202, - 63, - 15, - 2, - 193, - 175, - 189, - 3, - 1, - 19, - 138, - 107, - 58, - 145, - 17, - 65, - 79, - 103, - 220, - 234, - 151, - 242, - 207, - 206, - 240, - 180, - 230, - 115, - 150, - 172, - 116, - 34, - 231, - 173, - 53, - 133, - 226, - 249, - 55, - 232, - 28, - 117, - 223, - 110, - 71, - 241, - 26, - 113, - 29, - 41, - 197, - 137, - 111, - 183, - 98, - 14, - 170, - 24, - 190, - 27, - 252, - 86, - 62, - 75, - 198, - 210, - 121, - 32, - 154, - 219, - 192, - 254, - 120, - 205, - 90, - 244, - 31, - 221, - 168, - 51, - 136, - 7, - 199, - 49, - 177, - 18, - 16, - 89, - 39, - 128, - 236, - 95, - 96, - 81, - 127, - 169, - 25, - 181, - 74, - 13, - 45, - 229, - 122, - 159, - 147, - 201, - 156, - 239, - 160, - 224, - 59, - 77, - 174, - 42, - 245, - 176, - 200, - 235, - 187, - 60, - 131, - 83, - 153, - 97, - 23, - 43, - 4, - 126, - 186, - 119, - 214, - 38, - 225, - 105, - 20, - 99, - 85, - 33, - 12, - 125 - ) + private val RIJNDEAL_S_BOX: IntArray = intArrayOf(99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118, 202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192, 183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21, 4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117, 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132, 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207, 208, 239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168, 81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210, 205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115, 96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219, 224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121, 231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8, 186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138, 112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158, 225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223, 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22) + private val RIJNDEAL_INVERSE_S_BOX: IntArray = intArrayOf(82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215, 251, 124, 227, 57, 130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222, 233, 203, 84, 123, 148, 50, 166, 194, 35, 61, 238, 76, 149, 11, 66, 250, 195, 78, 8, 46, 161, 102, 40, 217, 36, 178, 118, 91, 162, 73, 109, 139, 209, 37, 114, 248, 246, 100, 134, 104, 152, 22, 212, 164, 92, 204, 93, 101, 182, 146, 108, 112, 72, 80, 253, 237, 185, 218, 94, 21, 70, 87, 167, 141, 157, 132, 144, 216, 171, 0, 140, 188, 211, 10, 247, 228, 88, 5, 184, 179, 69, 6, 208, 44, 30, 143, 202, 63, 15, 2, 193, 175, 189, 3, 1, 19, 138, 107, 58, 145, 17, 65, 79, 103, 220, 234, 151, 242, 207, 206, 240, 180, 230, 115, 150, 172, 116, 34, 231, 173, 53, 133, 226, 249, 55, 232, 28, 117, 223, 110, 71, 241, 26, 113, 29, 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, 27, 252, 86, 62, 75, 198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, 244, 31, 221, 168, 51, 136, 7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95, 96, 81, 127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156, 239, 160, 224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131, 83, 153, 97, 23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12, 125) private val MED_CIPHER: Long = 1344751489 diff --git a/pump/medtrum/src/main/res/xml/pref_medtrum_pump.xml b/pump/medtrum/src/main/res/xml/pref_medtrum_pump.xml index 64081101e5..505e1cd747 100644 --- a/pump/medtrum/src/main/res/xml/pref_medtrum_pump.xml +++ b/pump/medtrum/src/main/res/xml/pref_medtrum_pump.xml @@ -44,7 +44,7 @@ android:title="@string/daily_max_insulin_title" android:dialogMessage="@string/daily_max_insulin_summary" validate:maxNumber="180" - validate:minNumber="25" + validate:minNumber="20" validate:testType="numericRange" />