From 9f683785cff7bb812146eee2db7fc12daff12c85 Mon Sep 17 00:00:00 2001 From: Sad Ellie Date: Sat, 20 Jan 2024 22:40:42 +0300 Subject: [PATCH] Catch exception when converting units closes #167 --- .../feature/converter/ConverterViewModel.kt | 60 +++++++++---------- 1 file changed, 29 insertions(+), 31 deletions(-) diff --git a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/ConverterViewModel.kt b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/ConverterViewModel.kt index 2014ea6c..81735405 100644 --- a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/ConverterViewModel.kt +++ b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/ConverterViewModel.kt @@ -139,31 +139,26 @@ internal class ConverterViewModel @Inject constructor( is CurrencyRateUpdateState.Ready, is CurrencyRateUpdateState.Nothing -> {} } - try { - when (ui) { - is UnitConverterUIState.Default -> { - convertDefault( - unitFrom = ui.unitFrom, - unitTo = ui.unitTo, - input1 = ui.input1, - input2 = ui.input2, - formatTime = ui.formatTime - ) - } - is UnitConverterUIState.NumberBase -> { - convertNumberBase( - unitFrom = ui.unitFrom, - unitTo = ui.unitTo, - input = ui.input - ) - } - is UnitConverterUIState.Loading -> {} + when (ui) { + is UnitConverterUIState.Default -> { + convertDefault( + unitFrom = ui.unitFrom, + unitTo = ui.unitTo, + input1 = ui.input1, + input2 = ui.input2, + formatTime = ui.formatTime + ) } - } catch (e: Exception) { - _result.update { ConverterResult.Default(BigDecimal.ZERO) } + is UnitConverterUIState.NumberBase -> { + convertNumberBase( + unitFrom = ui.unitFrom, + unitTo = ui.unitTo, + input = ui.input + ) + } + is UnitConverterUIState.Loading -> {} } - ui } .stateIn(viewModelScope, UnitConverterUIState.Loading) @@ -471,21 +466,24 @@ internal class ConverterViewModel @Inject constructor( _calculation.update { if (input1.text.isExpression()) calculated1 else null } // Convert - var conversion = unitFrom.convert(unitTo, calculated1) - if (footInchInput) { - // Converted from second text field too - val inches = unitsRepo.getById(MyUnitIDS.inch) as DefaultUnit - conversion += inches.convert(unitTo, calculated2) - } - - // Update result - _result.update { + val result: ConverterResult = try { + var conversion = unitFrom.convert(unitTo, calculated1) + if (footInchInput) { + // Converted from second text field too + val inches = unitsRepo.getById(MyUnitIDS.inch) as DefaultUnit + conversion += inches.convert(unitTo, calculated2) + } when { (unitFrom.group == UnitGroup.TIME) and (formatTime) -> formatTime(calculated1.multiply(unitFrom.basicUnit)) unitTo.id == MyUnitIDS.foot -> formatFootInch(conversion, unitTo, unitsRepo.getById(MyUnitIDS.inch) as DefaultUnit) else -> ConverterResult.Default(conversion) } + } catch (e: Exception) { + ConverterResult.Default(BigDecimal.ZERO) } + + // Update result + _result.update { result } } private fun convertNumberBase(