diff --git a/app/src/main/java/info/nightscout/androidaps/activities/ProfileHelperActivity.kt b/app/src/main/java/info/nightscout/androidaps/activities/ProfileHelperActivity.kt index 03c3362d9a..36a548d0f2 100644 --- a/app/src/main/java/info/nightscout/androidaps/activities/ProfileHelperActivity.kt +++ b/app/src/main/java/info/nightscout/androidaps/activities/ProfileHelperActivity.kt @@ -241,10 +241,10 @@ class ProfileHelperActivity : NoSplashAppCompatActivity() { } ToastUtils.showToastInUiThread(this, R.string.invalidinput) } - binding.age.editText?.id?.let { binding.ageLabel.labelFor = it } - binding.tdd.editText?.id?.let { binding.tddLabel.labelFor = it } - binding.weight.editText?.id?.let { binding.weightLabel.labelFor = it } - binding.basalPctFromTdd.editText?.id?.let { binding.basalPctFromTddLabel.labelFor = it } + binding.ageLabel.labelFor = binding.age.editTextId + binding.tddLabel.labelFor = binding.tdd.editTextId + binding.weightLabel.labelFor = binding.weight.editTextId + binding.basalPctFromTddLabel.labelFor = binding.basalPctFromTdd.editTextId switchTab(0, typeSelected[0], false) } diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/CalibrationDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/CalibrationDialog.kt index bd5daaf965..303df14f60 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/CalibrationDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/CalibrationDialog.kt @@ -64,7 +64,7 @@ class CalibrationDialog : DialogFragmentWithDate() { binding.bg.setParams(savedInstanceState?.getDouble("bg") ?: bg, 36.0, 500.0, 1.0, DecimalFormat("0"), false, binding.okcancel.ok) binding.units.text = if (units == GlucoseUnit.MMOL) rh.gs(R.string.mmol) else rh.gs(R.string.mgdl) - binding.bg.editText?.id?.let { binding.bgLabel.labelFor = it } + binding.bgLabel.labelFor = binding.bg.editTextId } override fun onDestroyView() { diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/CarbsDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/CarbsDialog.kt index 59921a1611..cdf688b4c3 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/CarbsDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/CarbsDialog.kt @@ -199,9 +199,9 @@ class CarbsDialog : DialogFragmentWithDate() { binding.hypoTt.isChecked = false binding.activityTt.isChecked = false } - binding.duration.editText?.id?.let { binding.durationLabel.labelFor = it } - binding.time.editText?.id?.let { binding.timeLabel.labelFor = it } - binding.carbs.editText?.id?.let { binding.carbsLabel.labelFor = it } + binding.durationLabel.labelFor = binding.duration.editTextId + binding.timeLabel.labelFor = binding.time.editTextId + binding.carbsLabel.labelFor = binding.carbs.editTextId } override fun onDestroyView() { diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt index 03cb215a7f..994613c38f 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt @@ -165,8 +165,8 @@ class CareDialog : DialogFragmentWithDate() { ?: 0.0, 0.0, Constants.MAX_PROFILE_SWITCH_DURATION, 10.0, DecimalFormat("0"), false, binding.okcancel.ok) if (options == EventType.NOTE || options == EventType.QUESTION || options == EventType.ANNOUNCEMENT || options == EventType.EXERCISE) binding.notesLayout.root.visibility = View.VISIBLE // independent to preferences - binding.bg.editText?.id?.let { binding.bgLabel.labelFor = it } - binding.duration.editText?.id?.let { binding.durationLabel.labelFor = it } + binding.bgLabel.labelFor = binding.bg.editTextId + binding.durationLabel.labelFor = binding.duration.editTextId } override fun onDestroyView() { diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/ExtendedBolusDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/ExtendedBolusDialog.kt index 56e7856de9..e4f45c4e1e 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/ExtendedBolusDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/ExtendedBolusDialog.kt @@ -75,8 +75,8 @@ class ExtendedBolusDialog : DialogFragmentWithDate() { val extendedMaxDuration = pumpDescription.extendedBolusMaxDuration binding.duration.setParams(savedInstanceState?.getDouble("duration") ?: extendedDurationStep, extendedDurationStep, extendedMaxDuration, extendedDurationStep, DecimalFormat("0"), false, binding.okcancel.ok) - binding.insulin.editText?.id?.let { binding.insulinLabel.labelFor = it } - binding.duration.editText?.id?.let { binding.durationLabel.labelFor = it } + binding.insulinLabel.labelFor = binding.insulin.editTextId + binding.durationLabel.labelFor = binding.duration.editTextId } override fun onDestroyView() { diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/FillDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/FillDialog.kt index 3d6e2850fd..c52ca8436b 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/FillDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/FillDialog.kt @@ -99,7 +99,7 @@ class FillDialog : DialogFragmentWithDate() { } else { binding.fillPresetButton3.visibility = View.GONE } - binding.fillInsulinamount.editText?.id?.let { binding.fillLabel.labelFor = it } + binding.fillLabel.labelFor = binding.fillInsulinamount.editTextId } override fun onDestroyView() { diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/InsulinDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/InsulinDialog.kt index 53e5474dd1..5739902be0 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/InsulinDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/InsulinDialog.kt @@ -150,8 +150,8 @@ class InsulinDialog : DialogFragmentWithDate() { binding.recordOnly.setOnCheckedChangeListener { _, isChecked: Boolean -> binding.timeLayout.visibility = isChecked.toVisibility() } - binding.amount.editText?.id?.let { binding.insulinLabel.labelFor = it } - binding.time.editText?.id?.let { binding.timeLabel.labelFor = it } + binding.insulinLabel.labelFor = binding.amount.editTextId + binding.timeLabel.labelFor = binding.time.editTextId } override fun onDestroyView() { diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/ProfileSwitchDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/ProfileSwitchDialog.kt index c5e3059087..d7c7ecb809 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/ProfileSwitchDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/ProfileSwitchDialog.kt @@ -152,9 +152,9 @@ class ProfileSwitchDialog : DialogFragmentWithDate() { } } binding.ttLayout.visibility = View.GONE - binding.duration.editText?.id?.let { binding.durationLabel.labelFor = it } - binding.percentage.editText?.id?.let { binding.percentageLabel.labelFor = it } - binding.timeshift.editText?.id?.let { binding.timeshiftLabel.labelFor = it } + binding.durationLabel.labelFor = binding.duration.editTextId + binding.percentageLabel.labelFor = binding.percentage.editTextId + binding.timeshiftLabel.labelFor = binding.timeshift.editTextId } override fun onDestroyView() { diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/TempBasalDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/TempBasalDialog.kt index 438ed77193..62bd73862d 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/TempBasalDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/TempBasalDialog.kt @@ -89,9 +89,9 @@ class TempBasalDialog : DialogFragmentWithDate() { binding.percentLayout.visibility = View.GONE binding.absoluteLayout.visibility = View.VISIBLE } - binding.basalPercentInput.editText?.id?.let { binding.basalPercentLabel.labelFor = it } - binding.basalAbsoluteInput.editText?.id?.let { binding.basalAbsoluteLabel.labelFor = it } - binding.duration.editText?.id?.let { binding.durationLabel.labelFor = it } + binding.basalPercentLabel.labelFor = binding.basalPercentInput.editTextId + binding.basalAbsoluteLabel.labelFor = binding.basalAbsoluteInput.editTextId + binding.durationLabel.labelFor = binding.duration.editTextId } override fun onDestroyView() { diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/TempTargetDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/TempTargetDialog.kt index dba15262a5..a1885c2d4e 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/TempTargetDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/TempTargetDialog.kt @@ -123,8 +123,8 @@ class TempTargetDialog : DialogFragmentWithDate() { longClick(it) return@setOnLongClickListener true } - binding.duration.editText?.id?.let { binding.durationLabel.labelFor = it } - binding.temptarget.editText?.id?.let { binding.temptargetLabel.labelFor = it } + binding.durationLabel.labelFor = binding.duration.editTextId + binding.temptargetLabel.labelFor = binding.temptarget.editTextId } } diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/TreatmentDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/TreatmentDialog.kt index 5ca98c146b..ff3dbfb30f 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/TreatmentDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/TreatmentDialog.kt @@ -108,8 +108,8 @@ class TreatmentDialog : DialogFragmentWithDate() { binding.insulin.setParams(savedInstanceState?.getDouble("insulin") ?: 0.0, 0.0, maxInsulin, pumpDescription.bolusStep, DecimalFormatter.pumpSupportedBolusFormat(activePlugin.activePump), false, binding.okcancel.ok, textWatcher) binding.recordOnlyLayout.visibility = View.GONE - binding.insulin.editText?.id?.let { binding.insulinLabel.labelFor = it } - binding.carbs.editText?.id?.let { binding.carbsLabel.labelFor = it } + binding.insulinLabel.labelFor = binding.insulin.editTextId + binding.carbsLabel.labelFor = binding.carbs.editTextId } override fun onDestroyView() { diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt index 13fc6cc0b8..841344fae3 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt @@ -248,10 +248,10 @@ class WizardDialog : DaggerDialogFragment() { } private fun setA11yLabels() { - binding.bgInput.editText?.id?.let { binding.bgInputLabel.labelFor = it } - binding.carbsInput.editText?.id?.let { binding.carbsInputLabel.labelFor = it } - binding.correctionInput.editText?.id?.let { binding.correctionInputLabel.labelFor = it } - binding.carbTimeInput.editText?.id?.let { binding.carbTimeInputLabel.labelFor = it } + binding.bgInputLabel.labelFor = binding.bgInput.editTextId + binding.carbsInputLabel.labelFor = binding.carbsInput.editTextId + binding.correctionInputLabel.labelFor = binding.correctionInput.editTextId + binding.carbTimeInputLabel.labelFor = binding.carbTimeInput.editTextId } override fun onDestroyView() { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfileFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfileFragment.kt index 21cef09f87..63312f8df9 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfileFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfileFragment.kt @@ -115,9 +115,7 @@ class LocalProfileFragment : DaggerFragment() { override fun onTabUnselected(tab: TabLayout.Tab) {} override fun onTabReselected(tab: TabLayout.Tab) {} }) - - binding.dia.editText?.id?.let { binding.diaLabel.labelFor = it } - + binding.diaLabel.labelFor = binding.dia.editTextId binding.unlock.setOnClickListener { queryProtection() } } diff --git a/core/src/main/java/info/nightscout/androidaps/utils/ui/MinutesNumberPicker.kt b/core/src/main/java/info/nightscout/androidaps/utils/ui/MinutesNumberPicker.kt index fa809b5480..aa2575d996 100644 --- a/core/src/main/java/info/nightscout/androidaps/utils/ui/MinutesNumberPicker.kt +++ b/core/src/main/java/info/nightscout/androidaps/utils/ui/MinutesNumberPicker.kt @@ -13,18 +13,18 @@ class MinutesNumberPicker constructor(context: Context, attrs: AttributeSet? = n } override fun updateEditText() { - if (currentValue == 0.0 && !allowZero) editText?.setText("") + if (currentValue == 0.0 && !allowZero) binding.editText.setText("") else { - if (focused) editText?.setText(DecimalFormat("0").format(currentValue)) + if (focused) binding.editText.setText(DecimalFormat("0").format(currentValue)) else { val hours = (currentValue / 60).toInt() val minutes = (currentValue - hours * 60).toInt() val formatted = if (hours != 0) String.format(context.getString(R.string.format_hour_minute), hours, minutes) else DecimalFormat("0").format(currentValue) - editText?.setText(formatted) + binding.editText.setText(formatted) } } } -} \ No newline at end of file +} diff --git a/core/src/main/java/info/nightscout/androidaps/utils/ui/NumberPicker.kt b/core/src/main/java/info/nightscout/androidaps/utils/ui/NumberPicker.kt index 027b235d12..b4cecb63f1 100644 --- a/core/src/main/java/info/nightscout/androidaps/utils/ui/NumberPicker.kt +++ b/core/src/main/java/info/nightscout/androidaps/utils/ui/NumberPicker.kt @@ -19,11 +19,9 @@ import android.view.accessibility.AccessibilityEvent import android.view.accessibility.AccessibilityManager import android.view.inputmethod.InputMethodManager import android.widget.Button -import android.widget.ImageButton import android.widget.LinearLayout -import com.google.android.material.textfield.TextInputEditText -import com.google.android.material.textfield.TextInputLayout import info.nightscout.androidaps.core.R +import info.nightscout.androidaps.core.databinding.NumberPickerLayoutBinding import info.nightscout.androidaps.extensions.toVisibility import info.nightscout.androidaps.utils.ToastUtils import info.nightscout.shared.SafeParse @@ -41,10 +39,6 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL fun onValueChanged(value: Double) } - var editText: TextInputEditText? = null - private var minusButton: ImageButton? = null - private var plusButton: ImageButton? = null - var textInputLayout: TextInputLayout? = null var currentValue = 0.0 var minValue = 0.0 var maxValue = 1.0 @@ -57,6 +51,7 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL private var mUpdater: ScheduledExecutorService? = null private var mOnValueChangedListener: OnValueChangedListener? = null private var mCustomContentDescription: String? = null + protected lateinit var binding: NumberPickerViewAdapter private var mHandler: Handler = Handler(Looper.getMainLooper(), Handler.Callback { msg: Message -> when (msg.what) { @@ -93,6 +88,8 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL } } + val editTextId get() = binding.editText.id + var customContentDescription: String? get() = mCustomContentDescription set(value) { @@ -101,39 +98,36 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL } protected open fun inflate(context: Context) { - LayoutInflater.from(context).inflate(R.layout.number_picker_layout, this, true) + val inflater = LayoutInflater.from(context) + val bindLayout = NumberPickerLayoutBinding.inflate(inflater, this, true) + binding = NumberPickerViewAdapter.getBinding(bindLayout) } protected fun initialize(context: Context) { // set layout view inflate(context) - // init ui components - minusButton = findViewById(R.id.decrement) - minusButton?.id = generateViewId() - plusButton = findViewById(R.id.increment) - plusButton?.id = generateViewId() - textInputLayout = findViewById(R.id.textInputLayout) - editText = findViewById(R.id.display) - editText?.id = generateViewId() - minusButton?.setOnTouchListener(this) - minusButton?.setOnKeyListener(this) - minusButton?.setOnClickListener(this) - plusButton?.setOnTouchListener(this) - plusButton?.setOnKeyListener(this) - plusButton?.setOnClickListener(this) + binding.minusButton.id = generateViewId() + binding.plusButton.id = generateViewId() + binding.editText.id = generateViewId() + binding.minusButton.setOnTouchListener(this) + binding.minusButton.setOnKeyListener(this) + binding.minusButton.setOnClickListener(this) + binding.plusButton.setOnTouchListener(this) + binding.plusButton.setOnKeyListener(this) + binding.plusButton.setOnClickListener(this) setTextWatcher(object : TextWatcher { override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {} override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {} override fun afterTextChanged(s: Editable) { - if (focused) currentValue = SafeParse.stringToDouble(editText?.text.toString()) + if (focused) currentValue = SafeParse.stringToDouble(binding.editText.text.toString()) callValueChangedListener() val inValid = currentValue > maxValue || currentValue < minValue okButton?.visibility = inValid.not().toVisibility() - textInputLayout?.error = if (inValid) "invalid" else null + binding.textInputLayout.error = if (inValid) "invalid" else null } }) - editText?.setOnFocusChangeListener { _: View?, hasFocus: Boolean -> + binding.editText.setOnFocusChangeListener { _: View?, hasFocus: Boolean -> focused = hasFocus if (!focused) value // check min/max updateEditText() @@ -143,8 +137,8 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL fun updateA11yDescription() { val description = if (mCustomContentDescription != null) mCustomContentDescription else "" - minusButton?.contentDescription = context.getString(R.string.a11y_min_button_description, description, formatter?.format(this.step)) - plusButton?.contentDescription = context.getString(R.string.a11y_plus_button_description, description, formatter?.format(this.step)) + binding.minusButton.contentDescription = context.getString(R.string.a11y_min_button_description, description, formatter?.format(this.step)) + binding.plusButton.contentDescription = context.getString(R.string.a11y_plus_button_description, description, formatter?.format(this.step)) } fun announceValue() { @@ -164,7 +158,7 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL } override fun setTag(tag: Any) { - editText?.tag = tag + binding.editText.tag = tag } fun setOnValueChangedListener(onValueChangedListener: OnValueChangedListener?) { @@ -173,10 +167,10 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL fun setTextWatcher(textWatcher: TextWatcher) { watcher = textWatcher - editText?.addTextChangedListener(textWatcher) - editText?.onFocusChangeListener = OnFocusChangeListener { _: View?, hasFocus: Boolean -> + binding.editText.addTextChangedListener(textWatcher) + binding.editText.onFocusChangeListener = OnFocusChangeListener { _: View?, hasFocus: Boolean -> if (!hasFocus) { - currentValue = SafeParse.stringToDouble(editText?.text.toString()) + currentValue = SafeParse.stringToDouble(binding.editText.text.toString()) if (currentValue > maxValue) { currentValue = maxValue ToastUtils.showToastInUiThread(context, context.getString(R.string.youareonallowedlimit)) @@ -195,11 +189,11 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL fun setParams(initValue: Double, minValue: Double, maxValue: Double, step: Double, formatter: NumberFormat?, allowZero: Boolean, okButton: Button?, textWatcher: TextWatcher?) { if (watcher != null) { - editText?.removeTextChangedListener(watcher) + binding.editText.removeTextChangedListener(watcher) } setParams(initValue, minValue, maxValue, step, formatter, allowZero, okButton) watcher = textWatcher - if (textWatcher != null) editText?.addTextChangedListener(textWatcher) + if (textWatcher != null) binding.editText.addTextChangedListener(textWatcher) } fun setParams(initValue: Double, minValue: Double, maxValue: Double, step: Double, formatter: NumberFormat?, allowZero: Boolean, okButton: Button?) { @@ -211,11 +205,11 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL this.allowZero = allowZero callValueChangedListener() this.okButton = okButton - editText?.keyListener = DigitsKeyListenerWithComma.getInstance(minValue < 0, step != round(step)) - if (watcher != null) editText?.removeTextChangedListener(watcher) + binding.editText.keyListener = DigitsKeyListenerWithComma.getInstance(minValue < 0, step != round(step)) + if (watcher != null) binding.editText.removeTextChangedListener(watcher) updateA11yDescription() updateEditText() - if (watcher != null) editText?.addTextChangedListener(watcher) + if (watcher != null) binding.editText.addTextChangedListener(watcher) } var value: Double @@ -231,7 +225,7 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL return currentValue } set(value) { - if (watcher != null) editText?.removeTextChangedListener(watcher) + if (watcher != null) binding.editText.removeTextChangedListener(watcher) currentValue = value if (currentValue > maxValue) { currentValue = maxValue @@ -243,11 +237,11 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL } callValueChangedListener() updateEditText() - if (watcher != null) editText?.addTextChangedListener(watcher) + if (watcher != null) binding.editText.addTextChangedListener(watcher) } val text: String - get() = editText?.text.toString() + get() = binding.editText.text.toString() private fun inc(multiplier: Int) { currentValue += step * multiplier @@ -272,7 +266,7 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL } protected open fun updateEditText() { - if (currentValue == 0.0 && !allowZero) editText?.setText("") else editText?.setText(formatter?.format(currentValue)) + if (currentValue == 0.0 && !allowZero) binding.editText.setText("") else binding.editText.setText(formatter?.format(currentValue)) } private fun callValueChangedListener() { @@ -300,9 +294,9 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL override fun onClick(v: View) { if (mUpdater == null) { val imm = context.getSystemService(Service.INPUT_METHOD_SERVICE) as InputMethodManager - imm.hideSoftInputFromWindow(editText?.windowToken, 0) - editText?.clearFocus() - if (v === plusButton) { + imm.hideSoftInputFromWindow(binding.editText.windowToken, 0) + binding.editText.clearFocus() + if (v === binding.plusButton) { inc(1) } else { dec(1) @@ -318,7 +312,7 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL if (isKeyOfInterest && isReleased) { stopUpdating() } else if (isKeyOfInterest && isPressed) { - startUpdating(v === plusButton) + startUpdating(v === binding.plusButton) } return false } @@ -329,7 +323,7 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL if (isReleased) { stopUpdating() } else if (isPressed) { - startUpdating(v === plusButton) + startUpdating(v === binding.plusButton) } return false } @@ -345,7 +339,8 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL context.theme.obtainStyledAttributes( attrs, R.styleable.NumberPicker, - 0, 0).apply { + 0, 0 + ).apply { try { mCustomContentDescription = getString(R.styleable.NumberPicker_customContentDescription) diff --git a/app/src/main/java/info/nightscout/androidaps/utils/ui/NumberPickerVertical.kt b/core/src/main/java/info/nightscout/androidaps/utils/ui/NumberPickerVertical.kt similarity index 51% rename from app/src/main/java/info/nightscout/androidaps/utils/ui/NumberPickerVertical.kt rename to core/src/main/java/info/nightscout/androidaps/utils/ui/NumberPickerVertical.kt index 4f26a9b3b1..ec94040cdb 100644 --- a/app/src/main/java/info/nightscout/androidaps/utils/ui/NumberPickerVertical.kt +++ b/core/src/main/java/info/nightscout/androidaps/utils/ui/NumberPickerVertical.kt @@ -3,11 +3,13 @@ package info.nightscout.androidaps.utils.ui import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater -import info.nightscout.androidaps.R +import info.nightscout.androidaps.core.databinding.NumberPickerLayoutVerticalBinding class NumberPickerVertical(context: Context, attrs: AttributeSet? = null) : NumberPicker(context, attrs) { override fun inflate(context: Context) { - LayoutInflater.from(context).inflate(R.layout.number_picker_layout_vertical, this, true) + val inflater = LayoutInflater.from(context) + val bindLayout = NumberPickerLayoutVerticalBinding.inflate(inflater, this, true) + binding = NumberPickerViewAdapter(null, bindLayout) } -} \ No newline at end of file +} diff --git a/core/src/main/java/info/nightscout/androidaps/utils/ui/NumberPickerViewAdapter.kt b/core/src/main/java/info/nightscout/androidaps/utils/ui/NumberPickerViewAdapter.kt new file mode 100644 index 0000000000..43ab2e2f72 --- /dev/null +++ b/core/src/main/java/info/nightscout/androidaps/utils/ui/NumberPickerViewAdapter.kt @@ -0,0 +1,36 @@ +package info.nightscout.androidaps.utils.ui + +import info.nightscout.androidaps.core.databinding.NumberPickerLayoutBinding +import info.nightscout.androidaps.core.databinding.NumberPickerLayoutVerticalBinding + +/** + * NumberPickerViewAdapter binds both NumberPickerLayoutBinding and NumberPickerLayoutVerticalBinding shared attributes to one common view adapter. + * Requires at least one of the ViewBinding as a parameter. Recommended to use the factory object to create the binding. + */ +class NumberPickerViewAdapter( + val nH: NumberPickerLayoutBinding?, + val nV: NumberPickerLayoutVerticalBinding?, +) { + + init { + if (nH == null && nV == null) { + throw IllegalArgumentException("Require at least on Binding parameter") + } + } + + val editText = nH?.display ?: nV?.display ?: throw IllegalArgumentException("Missing require View Binding parameter display") + val minusButton = nH?.decrement ?: nV?.decrement ?: throw IllegalArgumentException("require at least on Binding parameter decrement") + val plusButton = nH?.increment ?: nV?.increment ?: throw IllegalArgumentException("require at least on Binding parameter increment") + var textInputLayout = nH?.textInputLayout ?: nV?.textInputLayout ?: throw IllegalArgumentException("require at least on Binding parameter textInputLayout") + + companion object { + + fun getBinding(bindLayout: NumberPickerLayoutBinding): NumberPickerViewAdapter { + return NumberPickerViewAdapter(bindLayout, null) + } + + fun getBinding(bindLayout: NumberPickerLayoutVerticalBinding): NumberPickerViewAdapter { + return NumberPickerViewAdapter(null, bindLayout) + } + } +} diff --git a/core/src/main/res/layout/number_picker_layout.xml b/core/src/main/res/layout/number_picker_layout.xml index a8c03a74c1..8d57b2f6e2 100644 --- a/core/src/main/res/layout/number_picker_layout.xml +++ b/core/src/main/res/layout/number_picker_layout.xml @@ -3,7 +3,8 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="130dp" - android:layout_height="40dp"> + android:layout_height="40dp" + tools:context="info.nightscout.androidaps.utils.ui.NumberPicker"> + android:layout_height="100dp" + tools:context="info.nightscout.androidaps.utils.ui.NumberPickerVertical">