From 087ba19b1f5f8d948584501bb820f72390d60014 Mon Sep 17 00:00:00 2001 From: Sad Ellie Date: Wed, 31 Jan 2024 15:08:40 +0300 Subject: [PATCH] Fix foot precision --- .../com/sadellie/unitto/core/base/Precision.kt | 2 +- .../unitto/data/converter/collections/Length.kt | 4 ++-- .../unitto/data/converter/AllUnitsTest.kt | 8 ++++---- .../unitto/feature/converter/ConverterUIState.kt | 5 ++++- .../feature/converter/ConverterViewModel.kt | 16 ++++++++-------- 5 files changed, 19 insertions(+), 16 deletions(-) diff --git a/core/base/src/main/java/com/sadellie/unitto/core/base/Precision.kt b/core/base/src/main/java/com/sadellie/unitto/core/base/Precision.kt index 09764ef8..f1b2e7a7 100644 --- a/core/base/src/main/java/com/sadellie/unitto/core/base/Precision.kt +++ b/core/base/src/main/java/com/sadellie/unitto/core/base/Precision.kt @@ -19,6 +19,6 @@ package com.sadellie.unitto.core.base /** - * Current maximum scale that will be used in app. Used in various place in code + * Current maximum scale that will be used in app. Used in various places in code. */ const val MAX_PRECISION: Int = 1_000 diff --git a/data/converter/src/main/java/com/sadellie/unitto/data/converter/collections/Length.kt b/data/converter/src/main/java/com/sadellie/unitto/data/converter/collections/Length.kt index 0ef560fd..9cdba506 100644 --- a/data/converter/src/main/java/com/sadellie/unitto/data/converter/collections/Length.kt +++ b/data/converter/src/main/java/com/sadellie/unitto/data/converter/collections/Length.kt @@ -19,10 +19,10 @@ package com.sadellie.unitto.data.converter.collections import com.sadellie.unitto.core.base.R +import com.sadellie.unitto.data.converter.UnitID import com.sadellie.unitto.data.model.UnitGroup import com.sadellie.unitto.data.model.unit.AbstractUnit import com.sadellie.unitto.data.model.unit.NormalUnit -import com.sadellie.unitto.data.converter.UnitID import java.math.BigDecimal internal val lengthCollection: List by lazy { @@ -37,7 +37,7 @@ internal val lengthCollection: List by lazy { NormalUnit(UnitID.kilometer, BigDecimal.valueOf(1.0E+21), UnitGroup.LENGTH, R.string.unit_kilometer, R.string.unit_kilometer_short), NormalUnit(UnitID.nautical_mile, BigDecimal.valueOf(1.852E+21), UnitGroup.LENGTH, R.string.unit_nautical_mile, R.string.unit_nautical_mile_short), NormalUnit(UnitID.inch, BigDecimal.valueOf(25_400_000_000_000_000), UnitGroup.LENGTH, R.string.unit_inch, R.string.unit_inch_short), - NormalUnit(UnitID.foot, BigDecimal.valueOf(304_800_000_000_002_200), UnitGroup.LENGTH, R.string.unit_foot, R.string.unit_foot_short), + NormalUnit(UnitID.foot, BigDecimal.valueOf(304_800_000_000_000_000), UnitGroup.LENGTH, R.string.unit_foot, R.string.unit_foot_short), NormalUnit(UnitID.yard, BigDecimal.valueOf(914_400_000_000_006_400), UnitGroup.LENGTH, R.string.unit_yard, R.string.unit_yard_short), NormalUnit(UnitID.mile, BigDecimal.valueOf(1_609_344_000_000_010_500_000.0), UnitGroup.LENGTH, R.string.unit_mile, R.string.unit_mile_short), NormalUnit(UnitID.light_year, BigDecimal.valueOf(9.460730472E+33), UnitGroup.LENGTH, R.string.unit_light_year, R.string.unit_light_year_short), diff --git a/data/converter/src/test/java/com/sadellie/unitto/data/converter/AllUnitsTest.kt b/data/converter/src/test/java/com/sadellie/unitto/data/converter/AllUnitsTest.kt index a0fab8c3..572d99f0 100644 --- a/data/converter/src/test/java/com/sadellie/unitto/data/converter/AllUnitsTest.kt +++ b/data/converter/src/test/java/com/sadellie/unitto/data/converter/AllUnitsTest.kt @@ -216,10 +216,10 @@ class AllUnitsTest { foot.checkWith(inch, "100", "1200") yard.checkWith(foot, "100", "300") mile.checkWith(foot, "100", "528000") - light_year.checkWith(foot, "0.0000001", "3103914196.85037") - parsec.checkWith(foot, "0.00000001", "1012361411.25044") - kiloparsec.checkWith(foot, "0.00000000001", "1012361411.25044") - megaparsec.checkWith(foot, "0.00000000000001", "1012361411.25044") + light_year.checkWith(foot, "0.0000001", "3103914196.85039") + parsec.checkWith(foot, "0.00000001", "1012361411.25045") + kiloparsec.checkWith(foot, "0.00000000001", "1012361411.25045") + megaparsec.checkWith(foot, "0.00000000000001", "1012361411.25045") mercury_equatorial_radius.checkWith(kilometer, "1", "2439.7") venus_equatorial_radius.checkWith(kilometer, "1", "6051.8") earth_equatorial_radius.checkWith(kilometer, "1", "6371") diff --git a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/ConverterUIState.kt b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/ConverterUIState.kt index 97d605a9..47fc4eb4 100644 --- a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/ConverterUIState.kt +++ b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/ConverterUIState.kt @@ -95,7 +95,10 @@ internal sealed class ConverterResult { data object Error : ConverterResult() } -internal fun ConverterResult.Time.format(mContext: Context, formatterSymbols: FormatterSymbols): String { +internal fun ConverterResult.Time.format( + mContext: Context, + formatterSymbols: FormatterSymbols +): String { val result = mutableListOf() if (day.isGreaterThan(BigDecimal.ZERO)) { 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 d78d013a..70a3e623 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 @@ -451,14 +451,6 @@ internal class ConverterViewModel @Inject constructor( } catch (e: Exception) { return@launch } - val calculated2 = try { - Expression(input2.text.ifEmpty { Token.Digit._0 }).calculate() - } catch (e: ExpressionException.DivideByZero) { - _calculation.update { null } - return@launch - } catch (e: Exception) { - return@launch - } // Update calculation _calculation.update { if (input1.text.isExpression()) calculated1 else null } @@ -469,6 +461,14 @@ internal class ConverterViewModel @Inject constructor( if (footInchInput) { // Converted from second text field too val inches = unitsRepo.getById(UnitID.inch) as DefaultUnit + val calculated2 = try { + Expression(input2.text.ifEmpty { Token.Digit._0 }).calculate() + } catch (e: ExpressionException.DivideByZero) { + _calculation.update { null } + return@launch + } catch (e: Exception) { + return@launch + } conversion += inches.convert(unitTo, calculated2) } when {