No more strange hardcoded symbols for TextFieldController

This commit is contained in:
Sad Ellie 2023-02-26 15:36:46 +04:00
parent ce614aa172
commit a1333f5746
4 changed files with 28 additions and 14 deletions

View File

@ -111,7 +111,7 @@ open class UnittoFormatter {
}
/**
* Remove formatting. Reverses [format]
* Reapply formatting. Reverses [format] and applies [format] again.
*/
fun reFormat(input: String): String {
// We get 123.45,6789
@ -121,11 +121,30 @@ open class UnittoFormatter {
// Remove grouping
// 12345,6789
// Replace fractional with "." because formatter accepts only numbers where fractional is a dot
return format(removeFormat(input))
}
val cleanString = input
/**
* Helper method to change formatting from [input] with a specified [separator] to the one that
* is set for this [UnittoFormatter].
*/
fun fromSeparator(input: String, separator: Int): String {
val sGrouping = when (separator) {
Separator.PERIOD -> PERIOD
Separator.COMMA -> COMMA
else -> SPACE
}
val sFractional = if (separator == Separator.PERIOD) KEY_COMMA else KEY_DOT
return input
.replace(sGrouping, grouping)
.replace(sFractional, fractional)
}
fun removeFormat(input: String): String {
return input
.replace(grouping, "")
.replace(fractional, KEY_DOT)
return format(cleanString)
}
/**

View File

@ -58,6 +58,7 @@ import com.sadellie.unitto.core.base.KEY_RIGHT_BRACKET
import com.sadellie.unitto.core.base.KEY_SIN
import com.sadellie.unitto.core.base.KEY_SQRT
import com.sadellie.unitto.core.base.KEY_TAN
import com.sadellie.unitto.core.base.Separator
import com.sadellie.unitto.core.ui.UnittoFormatter
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.update
@ -73,8 +74,7 @@ class TextFieldController @Inject constructor() {
// react to formatting preferences at this level.
private val localFormatter: UnittoFormatter by lazy {
UnittoFormatter().also {
it.grouping = "`"
it.fractional = "|"
it.setSeparator(Separator.COMMA)
}
}

View File

@ -33,6 +33,7 @@ import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.text.style.TextAlign
import com.sadellie.unitto.core.base.Separator
import com.sadellie.unitto.core.ui.Formatter
import com.sadellie.unitto.core.ui.theme.NumbersTextStyleDisplayLarge
@ -49,19 +50,15 @@ internal fun InputTextField(
derivedStateOf {
value.copy(
// We replace this because internally input value is already formatted, but uses
// "|" as grouping and "-" as fractional.
value.text
.replace("`", Formatter.grouping)
.replace("|", Formatter.fractional)
// COMMA as separator.
Formatter.fromSeparator(value.text, Separator.COMMA)
)
}
}
fun copyToClipboard() = clipboardManager.setText(
AnnotatedString(
formattedInput.text
.replace(Formatter.grouping, "")
.replace(Formatter.fractional, ".")
Formatter.removeFormat(formattedInput.text)
)
)

View File

@ -29,8 +29,6 @@ internal class TextFieldControllerTest {
private val TextFieldController.text: String
get() = this.input.value.text
.replace("`", ",")
.replace("|", ".")
private val TextFieldController.selection: IntRange
get() = this.input.value.selection.start..this.input.value.selection.end