NumberPopup: Accept comma (instead of dot) in certain locales

Fixes #1532
hotfix/2.1.2
Alinson S. Xavier 3 years ago
parent d5a5273607
commit 0bb82a48a5
Signed by: isoron
GPG Key ID: 0DA8E4B9E1109DCA

@ -21,6 +21,7 @@ package org.isoron.uhabits.activities.common.dialogs
import android.app.Dialog import android.app.Dialog
import android.content.Context import android.content.Context
import android.text.method.DigitsKeyListener
import android.view.KeyEvent.KEYCODE_ENTER import android.view.KeyEvent.KEYCODE_ENTER
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.MotionEvent.ACTION_DOWN import android.view.MotionEvent.ACTION_DOWN
@ -35,6 +36,9 @@ import org.isoron.uhabits.utils.dismissCurrentAndShow
import org.isoron.uhabits.utils.dp import org.isoron.uhabits.utils.dp
import org.isoron.uhabits.utils.requestFocusWithKeyboard import org.isoron.uhabits.utils.requestFocusWithKeyboard
import java.text.DecimalFormat import java.text.DecimalFormat
import java.text.DecimalFormatSymbols
import java.text.NumberFormat
import java.text.ParseException
class NumberPopup( class NumberPopup(
private val context: Context, private val context: Context,
@ -55,10 +59,17 @@ class NumberPopup(
init { init {
view.numberButtons.visibility = VISIBLE view.numberButtons.visibility = VISIBLE
fixDecimalSeparator()
hideDisabledButtons() hideDisabledButtons()
populate() populate()
} }
private fun fixDecimalSeparator() {
// https://stackoverflow.com/a/34256139
val separator = DecimalFormatSymbols.getInstance().decimalSeparator
view.value.keyListener = DigitsKeyListener.getInstance("0123456789$separator")
}
private fun hideDisabledButtons() { private fun hideDisabledButtons() {
if (!prefs.isSkipEnabled) view.skipBtnNumber.visibility = GONE if (!prefs.isSkipEnabled) view.skipBtnNumber.visibility = GONE
} }
@ -108,7 +119,14 @@ class NumberPopup(
} }
fun save() { fun save() {
val value = view.value.text.toString().toDoubleOrNull() ?: originalValue var value = originalValue
try {
val numberFormat = NumberFormat.getInstance()
val valueStr = view.value.text.toString()
value = numberFormat.parse(valueStr)!!.toDouble()
} catch (e: ParseException) {
// NOP
}
val notes = view.notes.text.toString() val notes = view.notes.text.toString()
onToggle(value, notes) onToggle(value, notes)
dialog.dismiss() dialog.dismiss()

Loading…
Cancel
Save