Fix ignored minus

This commit is contained in:
Sad Ellie 2023-05-17 11:05:45 +03:00
parent 777ff6ca67
commit 52a1a5b4d5
3 changed files with 10 additions and 5 deletions

View File

@ -39,7 +39,7 @@ private val timeDivisions by lazy {
) )
} }
internal fun String.clearAndFilterExpression(formatterSymbols: FormatterSymbols): String { fun String.clearAndFilterExpression(formatterSymbols: FormatterSymbols): String {
var clean = this var clean = this
.replace(formatterSymbols.grouping, "") .replace(formatterSymbols.grouping, "")
.replace(formatterSymbols.fractional, Token.Digit.dot) .replace(formatterSymbols.fractional, Token.Digit.dot)

View File

@ -22,6 +22,7 @@ import androidx.compose.ui.text.TextRange
import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.input.TextFieldValue
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.sadellie.unitto.core.base.Token
import com.sadellie.unitto.core.ui.common.textfield.AllFormatterSymbols import com.sadellie.unitto.core.ui.common.textfield.AllFormatterSymbols
import com.sadellie.unitto.core.ui.common.textfield.addTokens import com.sadellie.unitto.core.ui.common.textfield.addTokens
import com.sadellie.unitto.core.ui.common.textfield.deleteTokens import com.sadellie.unitto.core.ui.common.textfield.deleteTokens
@ -91,12 +92,15 @@ internal class CalculatorViewModel @Inject constructor(
is CalculationResult.Default -> { is CalculationResult.Default -> {
if (calculationResult.text.isEmpty()) return@launch if (calculationResult.text.isEmpty()) return@launch
// We can get negative number and they use ugly minus symbol
val calculationText = calculationResult.text.replace("-", Token.Operator.minus)
calculatorHistoryRepository.add( calculatorHistoryRepository.add(
expression = _input.value.text, expression = _input.value.text,
result = calculationResult.text result = calculationText
) )
_input.update { _input.update {
TextFieldValue(calculationResult.text, TextRange(calculationResult.text.length)) TextFieldValue(calculationText, TextRange(calculationText.length))
} }
_output.update { CalculationResult.Default() } _output.update { CalculationResult.Default() }
} }

View File

@ -61,6 +61,7 @@ import com.sadellie.unitto.core.base.R
import com.sadellie.unitto.core.ui.common.textfield.ExpressionTransformer import com.sadellie.unitto.core.ui.common.textfield.ExpressionTransformer
import com.sadellie.unitto.core.ui.common.textfield.FormatterSymbols import com.sadellie.unitto.core.ui.common.textfield.FormatterSymbols
import com.sadellie.unitto.core.ui.common.textfield.UnittoTextToolbar import com.sadellie.unitto.core.ui.common.textfield.UnittoTextToolbar
import com.sadellie.unitto.core.ui.common.textfield.clearAndFilterExpression
import com.sadellie.unitto.core.ui.common.textfield.copyWithoutGrouping import com.sadellie.unitto.core.ui.common.textfield.copyWithoutGrouping
import com.sadellie.unitto.core.ui.theme.NumbersTextStyleDisplayMedium import com.sadellie.unitto.core.ui.theme.NumbersTextStyleDisplayMedium
import com.sadellie.unitto.data.model.HistoryItem import com.sadellie.unitto.data.model.HistoryItem
@ -171,14 +172,14 @@ private fun HistoryListItem(
val expressionInteractionSource = remember(expression) { MutableInteractionSource() } val expressionInteractionSource = remember(expression) { MutableInteractionSource() }
LaunchedEffect(expressionInteractionSource) { LaunchedEffect(expressionInteractionSource) {
expressionInteractionSource.interactions.collect { expressionInteractionSource.interactions.collect {
if (it is PressInteraction.Release) addTokens(expression) if (it is PressInteraction.Release) addTokens(expression.clearAndFilterExpression(formatterSymbols))
} }
} }
val resultInteractionSource = remember(result) { MutableInteractionSource() } val resultInteractionSource = remember(result) { MutableInteractionSource() }
LaunchedEffect(resultInteractionSource) { LaunchedEffect(resultInteractionSource) {
resultInteractionSource.interactions.collect { resultInteractionSource.interactions.collect {
if (it is PressInteraction.Release) addTokens(result) if (it is PressInteraction.Release) addTokens(result.clearAndFilterExpression(formatterSymbols))
} }
} }