From 4e8819e559d07f06f7afaebfc3c4d92713cfae8d Mon Sep 17 00:00:00 2001
From: MM20 <15646950+MM2-0@users.noreply.github.com>
Date: Sun, 12 Dec 2021 21:27:10 +0100
Subject: [PATCH] Refactor unit converter
---
i18n/src/main/res/values-de/units.xml | 17 ++++++
i18n/src/main/res/values/units.xml | 17 ++++++
.../launcher2/search/data/UnitConverter.kt | 3 +-
.../launcher2/unitconverter/ConverterUtils.kt | 27 +++++++++
.../launcher2/unitconverter/MeasureUnit.kt | 7 ---
.../unitconverter/MeasureUnitWithFactor.kt | 6 ++
.../unitconverter/converters/AreaConverter.kt | 21 ++++---
.../unitconverter/converters/Converter.kt | 60 ++++---------------
.../converters/CurrencyConverter.kt | 4 +-
.../unitconverter/converters/DataConverter.kt | 31 +++++-----
.../converters/LengthConverter.kt | 21 ++++---
.../unitconverter/converters/MassConverter.kt | 19 +++---
.../converters/SimpleFactorConverter.kt | 45 ++++++++++++++
.../converters/TemperatureConverter.kt | 2 +-
.../unitconverter/converters/TimeConverter.kt | 15 +++--
.../converters/VelocityConverter.kt | 11 ++--
16 files changed, 182 insertions(+), 124 deletions(-)
create mode 100644 unitconverter/src/main/java/de/mm20/launcher2/unitconverter/ConverterUtils.kt
delete mode 100644 unitconverter/src/main/java/de/mm20/launcher2/unitconverter/MeasureUnit.kt
create mode 100644 unitconverter/src/main/java/de/mm20/launcher2/unitconverter/MeasureUnitWithFactor.kt
create mode 100644 unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/SimpleFactorConverter.kt
diff --git a/i18n/src/main/res/values-de/units.xml b/i18n/src/main/res/values-de/units.xml
index 6d065fd8..9a640ce9 100644
--- a/i18n/src/main/res/values-de/units.xml
+++ b/i18n/src/main/res/values-de/units.xml
@@ -260,4 +260,21 @@
- Short Ton
- Short Tons
+
+
+ °C
+
+ - Grad Celsius
+ - Grad Celsius
+
+ °F
+
+ - Grad Fahrenheit
+ - Grad Fahrenheit
+
+ K
+
+ - Kelvin
+ - Kelvin
+
\ No newline at end of file
diff --git a/i18n/src/main/res/values/units.xml b/i18n/src/main/res/values/units.xml
index 009b6487..3060574c 100644
--- a/i18n/src/main/res/values/units.xml
+++ b/i18n/src/main/res/values/units.xml
@@ -264,4 +264,21 @@
- short ton
- short tons
+
+
+ °C
+
+ - degree celsius
+ - degrees celsius
+
+ °F
+
+ - degree fahrenheit
+ - degrees fahrenheit
+
+ K
+
+ - kelvin
+ - kelvins
+
\ No newline at end of file
diff --git a/unitconverter/src/main/java/de/mm20/launcher2/search/data/UnitConverter.kt b/unitconverter/src/main/java/de/mm20/launcher2/search/data/UnitConverter.kt
index 5d7235f1..8eee3144 100644
--- a/unitconverter/src/main/java/de/mm20/launcher2/search/data/UnitConverter.kt
+++ b/unitconverter/src/main/java/de/mm20/launcher2/search/data/UnitConverter.kt
@@ -1,7 +1,6 @@
package de.mm20.launcher2.search.data
import android.content.Context
-import android.os.Bundle
import de.mm20.launcher2.preferences.LauncherPreferences
import de.mm20.launcher2.unitconverter.Dimension
import de.mm20.launcher2.unitconverter.UnitValue
@@ -32,7 +31,7 @@ open class UnitConverter(
val converters = listOf(
lazy { MassConverter(context) },
lazy { LengthConverter(context) },
- lazy { CurrencyConverter(context) },
+ lazy { CurrencyConverter() },
lazy { DataConverter(context) },
lazy { TimeConverter(context) },
lazy { VelocityConverter(context) },
diff --git a/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/ConverterUtils.kt b/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/ConverterUtils.kt
new file mode 100644
index 00000000..b853751a
--- /dev/null
+++ b/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/ConverterUtils.kt
@@ -0,0 +1,27 @@
+package de.mm20.launcher2.unitconverter
+
+import android.content.Context
+import java.text.DecimalFormat
+import kotlin.math.abs
+import kotlin.math.roundToInt
+
+internal object ConverterUtils {
+
+ fun formatName(context: Context, unit: MeasureUnit, value: Double): String {
+ val resId = unit.nameResource
+ val text = context.resources.getQuantityString(resId, value.roundToInt())
+ return text
+ }
+
+ fun formatValue(context: Context, unit: MeasureUnit, value: Double): String {
+ if (abs(value) > 1e5 || abs(value) < 1e-3) {
+ return DecimalFormat("#.###E0").apply {
+ }.format(value)
+ }
+
+ return DecimalFormat("#.###").apply {
+ }.format(value)
+
+ }
+
+}
\ No newline at end of file
diff --git a/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/MeasureUnit.kt b/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/MeasureUnit.kt
deleted file mode 100644
index 5ecc27f0..00000000
--- a/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/MeasureUnit.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-package de.mm20.launcher2.unitconverter
-
-data class MeasureUnit(
- val factor: Double,
- val symbol: String,
- val nameResource: Int
-)
\ No newline at end of file
diff --git a/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/MeasureUnitWithFactor.kt b/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/MeasureUnitWithFactor.kt
new file mode 100644
index 00000000..8dbb2aad
--- /dev/null
+++ b/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/MeasureUnitWithFactor.kt
@@ -0,0 +1,6 @@
+package de.mm20.launcher2.unitconverter
+
+interface MeasureUnit {
+ val symbol: String
+ val nameResource: Int
+}
diff --git a/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/AreaConverter.kt b/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/AreaConverter.kt
index 480ad147..fc672949 100644
--- a/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/AreaConverter.kt
+++ b/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/AreaConverter.kt
@@ -2,54 +2,53 @@ package de.mm20.launcher2.unitconverter.converters
import android.content.Context
import de.mm20.launcher2.unitconverter.Dimension
-import de.mm20.launcher2.unitconverter.MeasureUnit
import de.mm20.launcher2.unitconverter.R
-class AreaConverter(context: Context) : Converter() {
+class AreaConverter(context: Context) : SimpleFactorConverter() {
override val dimension = Dimension.Area
override val standardUnits = listOf(
- MeasureUnit(
+ MeasureUnitWithFactor(
0.000001,
context.getString(R.string.unit_sqkilometer_symbol),
R.plurals.unit_sqkilometer
),
- MeasureUnit(
+ MeasureUnitWithFactor(
0.0001,
context.getString(R.string.unit_hectare_symbol),
R.plurals.unit_hectare
),
- MeasureUnit(
+ MeasureUnitWithFactor(
1.0,
context.getString(R.string.unit_sqmeter_symbol),
R.plurals.unit_sqmeter
),
- MeasureUnit(
+ MeasureUnitWithFactor(
10000.0,
context.getString(R.string.unit_sqcentimeter_symbol),
R.plurals.unit_sqcentimeter
),
- MeasureUnit(
+ MeasureUnitWithFactor(
1000000.0,
context.getString(R.string.unit_sqmillimeter_symbol),
R.plurals.unit_sqmillimeter
),
- MeasureUnit(
+ MeasureUnitWithFactor(
100 * 100 / (2.54 * 2.54),
context.getString(R.string.unit_sqinch_symbol),
R.plurals.unit_sqinch
),
- MeasureUnit(
+ MeasureUnitWithFactor(
100 * 100 / (2.54 * 2.54 * 144),
context.getString(R.string.unit_sqfoot_symbol),
R.plurals.unit_sqfoot
),
- MeasureUnit(
+ MeasureUnitWithFactor(
100 * 100 / (2.54 * 2.54 * 1296),
context.getString(R.string.unit_sqyard_symbol),
R.plurals.unit_sqyard
),
- MeasureUnit(
+ MeasureUnitWithFactor(
100 * 100 / (2.54 * 2.54 * 144 * 43560),
context.getString(R.string.unit_acre_symbol),
R.plurals.unit_acre
diff --git a/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/Converter.kt b/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/Converter.kt
index fbe5c7a2..7bb504b8 100644
--- a/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/Converter.kt
+++ b/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/Converter.kt
@@ -3,57 +3,17 @@ package de.mm20.launcher2.unitconverter.converters
import android.content.Context
import de.mm20.launcher2.search.data.UnitConverter
import de.mm20.launcher2.unitconverter.Dimension
-import de.mm20.launcher2.unitconverter.MeasureUnit
-import de.mm20.launcher2.unitconverter.UnitValue
-import java.text.DecimalFormat
-import kotlin.math.abs
-import kotlin.math.roundToInt
-abstract class Converter {
+interface Converter {
+ val dimension: Dimension
- abstract val dimension: Dimension
+ suspend fun isValidUnit(symbol: String): Boolean
- open val standardUnits: List = emptyList()
+ suspend fun convert(
+ context: Context,
+ fromUnit: String,
+ value: Double,
+ toUnit: String?
+ ): UnitConverter
+}
- /**
- * Returns true if a symbol is a valid unit of this converter
- */
- open suspend fun isValidUnit(symbol: String): Boolean {
- return standardUnits.any { it.symbol == symbol }
- }
-
- open suspend fun convert(context: Context, fromUnit: String, value: Double, toUnit: String?): UnitConverter {
- val results = mutableListOf()
- val unit = standardUnits.first { it.symbol == fromUnit }
- if (toUnit == null) {
- for (targetUnit in standardUnits) {
- if (targetUnit.symbol == unit.symbol) continue
- val v = value * targetUnit.factor / unit.factor
- results += UnitValue(v, targetUnit.symbol, formatName(context, targetUnit, v), formatValue(context, unit, v))
- }
- } else {
- val targetUnit = standardUnits.first { it.symbol == toUnit }
- val v = value * targetUnit.factor / unit.factor
- results += UnitValue(v, targetUnit.symbol, formatName(context, targetUnit, v), formatValue(context, unit, v))
- }
- val inputValue = UnitValue(value, fromUnit, formatName(context, unit, value), formatValue(context, unit, value))
- return UnitConverter(dimension, inputValue, results)
- }
-
- open suspend fun formatName(context: Context, unit: MeasureUnit, value: Double): String {
- val resId = unit.nameResource
- val text = context.resources.getQuantityString(resId, value.roundToInt())
- return text
- }
-
- open suspend fun formatValue(context: Context, unit: MeasureUnit, value: Double): String {
- if (abs(value) > 1e5 || abs(value) < 1e-3) {
- return DecimalFormat("#.###E0").apply {
- }.format(value)
- }
-
- return DecimalFormat("#.###").apply {
- }.format(value)
-
- }
-}
\ No newline at end of file
diff --git a/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/CurrencyConverter.kt b/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/CurrencyConverter.kt
index 3fcc4295..c63ed2ac 100644
--- a/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/CurrencyConverter.kt
+++ b/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/CurrencyConverter.kt
@@ -15,11 +15,11 @@ import kotlin.math.abs
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
-class CurrencyConverter(context: Context) : Converter(), KoinComponent {
+class CurrencyConverter : Converter, KoinComponent {
override val dimension: Dimension = Dimension.Currency
- val repository: CurrencyRepository by inject()
+ private val repository: CurrencyRepository by inject()
private val topCurrencies = arrayOf("USD", "EUR", "JPY", "GBP", "AUD")
diff --git a/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/DataConverter.kt b/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/DataConverter.kt
index 92ba5c5d..f9c5682f 100644
--- a/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/DataConverter.kt
+++ b/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/DataConverter.kt
@@ -2,79 +2,78 @@ package de.mm20.launcher2.unitconverter.converters
import android.content.Context
import de.mm20.launcher2.unitconverter.Dimension
-import de.mm20.launcher2.unitconverter.MeasureUnit
import de.mm20.launcher2.unitconverter.R
-class DataConverter(context: Context) : Converter() {
+class DataConverter(context: Context) : SimpleFactorConverter() {
override val dimension = Dimension.Data
override val standardUnits = listOf(
- MeasureUnit(
+ MeasureUnitWithFactor(
1.0,
context.getString(R.string.unit_byte_symbol),
R.plurals.unit_byte
),
- MeasureUnit(
+ MeasureUnitWithFactor(
0.001,
context.getString(R.string.unit_kilobyte_symbol),
R.plurals.unit_kilobyte
),
- MeasureUnit(
+ MeasureUnitWithFactor(
0.000001,
context.getString(R.string.unit_megabyte_symbol),
R.plurals.unit_megabyte
),
- MeasureUnit(
+ MeasureUnitWithFactor(
0.000000001,
context.getString(R.string.unit_gigabyte_symbol),
R.plurals.unit_gigabyte
),
- MeasureUnit(
+ MeasureUnitWithFactor(
0.000000000001,
context.getString(R.string.unit_terabyte_symbol),
R.plurals.unit_terabyte
),
- MeasureUnit(
+ MeasureUnitWithFactor(
1.0 / 1024,
context.getString(R.string.unit_kibibyte_symbol),
R.plurals.unit_kibibyte
),
- MeasureUnit(
+ MeasureUnitWithFactor(
1.0 / (1024 * 1024),
context.getString(R.string.unit_mebibyte_symbol),
R.plurals.unit_mebibyte
),
- MeasureUnit(
+ MeasureUnitWithFactor(
1.0 / (1024 * 1024 * 1024),
context.getString(R.string.unit_gibibyte_symbol),
R.plurals.unit_gibibyte
),
- MeasureUnit(
+ MeasureUnitWithFactor(
1.0 / (1024.0 * 1024 * 1024 * 1024),
context.getString(R.string.unit_tebibyte_symbol),
R.plurals.unit_tebibyte
),
- MeasureUnit(
+ MeasureUnitWithFactor(
8.0,
context.getString(R.string.unit_bit_symbol),
R.plurals.unit_bit
),
- MeasureUnit(
+ MeasureUnitWithFactor(
8.0 / 1000,
context.getString(R.string.unit_kilobit_symbol),
R.plurals.unit_kilobit
),
- MeasureUnit(
+ MeasureUnitWithFactor(
8.0 / 1000000,
context.getString(R.string.unit_megabit_symbol),
R.plurals.unit_megabit
),
- MeasureUnit(
+ MeasureUnitWithFactor(
8.0 / 1000000000,
context.getString(R.string.unit_gigabit_symbol),
R.plurals.unit_gigabit
),
- MeasureUnit(
+ MeasureUnitWithFactor(
8.0 / 1000000000000,
context.getString(R.string.unit_terabit_symbol),
R.plurals.unit_terabit
diff --git a/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/LengthConverter.kt b/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/LengthConverter.kt
index 75b7219d..7248217e 100644
--- a/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/LengthConverter.kt
+++ b/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/LengthConverter.kt
@@ -2,54 +2,53 @@ package de.mm20.launcher2.unitconverter.converters
import android.content.Context
import de.mm20.launcher2.unitconverter.Dimension
-import de.mm20.launcher2.unitconverter.MeasureUnit
import de.mm20.launcher2.unitconverter.R
-class LengthConverter(context: Context) : Converter() {
+class LengthConverter(context: Context) : SimpleFactorConverter() {
override val dimension = Dimension.Length
override val standardUnits = listOf(
- MeasureUnit(
+ MeasureUnitWithFactor(
1.0,
context.getString(R.string.unit_meter_symbol),
R.plurals.unit_meter
),
- MeasureUnit(
+ MeasureUnitWithFactor(
0.001,
context.getString(R.string.unit_kilometer_symbol),
R.plurals.unit_kilometer
),
- MeasureUnit(
+ MeasureUnitWithFactor(
100.0,
context.getString(R.string.unit_centimeter_symbol),
R.plurals.unit_centimeter
),
- MeasureUnit(
+ MeasureUnitWithFactor(
1000.0,
context.getString(R.string.unit_millimeter_symbol),
R.plurals.unit_millimeter
),
- MeasureUnit(
+ MeasureUnitWithFactor(
100 / 2.54,
context.getString(R.string.unit_inch_symbol),
R.plurals.unit_inch
),
- MeasureUnit(
+ MeasureUnitWithFactor(
100 / (2.54 * 12),
context.getString(R.string.unit_foot_symbol),
R.plurals.unit_foot
),
- MeasureUnit(
+ MeasureUnitWithFactor(
100 / (2.54 * 12 * 3),
context.getString(R.string.unit_yard_symbol),
R.plurals.unit_yard
),
- MeasureUnit(
+ MeasureUnitWithFactor(
100 / (2.54 * 12 * 3 * 1760),
context.getString(R.string.unit_mile_symbol),
R.plurals.unit_mile
),
- MeasureUnit(
+ MeasureUnitWithFactor(
1 / 1852.0,
context.getString(R.string.unit_nautic_mile_symbol),
R.plurals.unit_nautic_mile
diff --git a/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/MassConverter.kt b/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/MassConverter.kt
index 20c46de4..5c399f9d 100644
--- a/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/MassConverter.kt
+++ b/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/MassConverter.kt
@@ -2,49 +2,48 @@ package de.mm20.launcher2.unitconverter.converters
import android.content.Context
import de.mm20.launcher2.unitconverter.Dimension
-import de.mm20.launcher2.unitconverter.MeasureUnit
import de.mm20.launcher2.unitconverter.R
-class MassConverter(context: Context): Converter() {
+class MassConverter(context: Context): SimpleFactorConverter() {
override val dimension = Dimension.Mass
override val standardUnits = listOf(
- MeasureUnit(
+ MeasureUnitWithFactor(
1.0,
context.getString(R.string.unit_kilogram_symbol),
R.plurals.unit_kilogram
),
- MeasureUnit(
+ MeasureUnitWithFactor(
1000.0,
context.getString(R.string.unit_gram_symbol),
R.plurals.unit_gram
),
- MeasureUnit(
+ MeasureUnitWithFactor(
0.001,
context.getString(R.string.unit_metric_ton_symbol),
R.plurals.unit_metric_ton
),
- MeasureUnit(
+ MeasureUnitWithFactor(
1000.0 / (453.59237 * 2240.0),
context.getString(R.string.unit_long_ton_symbol),
R.plurals.unit_long_ton
),
- MeasureUnit(
+ MeasureUnitWithFactor(
1000.0 / (453.59237 * 14.0),
context.getString(R.string.unit_stone_symbol),
R.plurals.unit_stone
),
- MeasureUnit(
+ MeasureUnitWithFactor(
1000.0 / 453.59237,
context.getString(R.string.unit_pound_symbol),
R.plurals.unit_pound
),
- MeasureUnit(
+ MeasureUnitWithFactor(
16.0 * 1000.0 / 453.59237,
context.getString(R.string.unit_ounce_symbol),
R.plurals.unit_ounce
),
- MeasureUnit(
+ MeasureUnitWithFactor(
1000.0 / (453.59237 * 2000.0),
context.getString(R.string.unit_short_ton_symbol),
R.plurals.unit_short_ton
diff --git a/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/SimpleFactorConverter.kt b/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/SimpleFactorConverter.kt
new file mode 100644
index 00000000..a17d7490
--- /dev/null
+++ b/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/SimpleFactorConverter.kt
@@ -0,0 +1,45 @@
+package de.mm20.launcher2.unitconverter.converters
+
+import android.content.Context
+import de.mm20.launcher2.search.data.UnitConverter
+import de.mm20.launcher2.unitconverter.ConverterUtils
+import de.mm20.launcher2.unitconverter.UnitValue
+
+/**
+ * A converter for units that can converted into each other by simply multiplicating with a constant factor
+ */
+abstract class SimpleFactorConverter: Converter {
+ open val standardUnits: List = emptyList()
+
+ /**
+ * Returns true if a symbol is a valid unit of this converter
+ */
+ override suspend fun isValidUnit(symbol: String): Boolean {
+ return standardUnits.any { it.symbol == symbol }
+ }
+
+ override suspend fun convert(context: Context, fromUnit: String, value: Double, toUnit: String?): UnitConverter {
+ val results = mutableListOf()
+ val unit = standardUnits.first { it.symbol == fromUnit }
+ if (toUnit == null) {
+ for (targetUnit in standardUnits) {
+ if (targetUnit.symbol == unit.symbol) continue
+ val v = value * targetUnit.factor / unit.factor
+ results += UnitValue(v, targetUnit.symbol, ConverterUtils.formatName(context, targetUnit, v), ConverterUtils.formatValue(context, unit, v))
+ }
+ } else {
+ val targetUnit = standardUnits.first { it.symbol == toUnit }
+ val v = value * targetUnit.factor / unit.factor
+ results += UnitValue(v, targetUnit.symbol, ConverterUtils.formatName(context, targetUnit, v), ConverterUtils.formatValue(context, unit, v))
+ }
+ val inputValue = UnitValue(value, fromUnit, ConverterUtils.formatName(context, unit, value), ConverterUtils.formatValue(context, unit, value))
+ return UnitConverter(dimension, inputValue, results)
+ }
+}
+
+
+data class MeasureUnitWithFactor(
+ val factor: Double,
+ val symbol: String,
+ val nameResource: Int
+)
\ No newline at end of file
diff --git a/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/TemperatureConverter.kt b/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/TemperatureConverter.kt
index 9794a696..a3bfa78e 100644
--- a/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/TemperatureConverter.kt
+++ b/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/TemperatureConverter.kt
@@ -3,6 +3,6 @@ package de.mm20.launcher2.unitconverter.converters
import android.content.Context
import de.mm20.launcher2.unitconverter.Dimension
-class TemperatureConverter(context: Context): Converter() {
+class TemperatureConverter(context: Context): SimpleFactorConverter() {
override val dimension = Dimension.Temperature
}
\ No newline at end of file
diff --git a/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/TimeConverter.kt b/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/TimeConverter.kt
index 2fc62134..b7b124e1 100644
--- a/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/TimeConverter.kt
+++ b/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/TimeConverter.kt
@@ -2,39 +2,38 @@ package de.mm20.launcher2.unitconverter.converters
import android.content.Context
import de.mm20.launcher2.unitconverter.Dimension
-import de.mm20.launcher2.unitconverter.MeasureUnit
import de.mm20.launcher2.unitconverter.R
-class TimeConverter(context: Context) : Converter() {
+class TimeConverter(context: Context) : SimpleFactorConverter() {
override val dimension = Dimension.Time
override val standardUnits = listOf(
- MeasureUnit(
+ MeasureUnitWithFactor(
1.0,
context.getString(R.string.unit_second_symbol),
R.plurals.unit_second
),
- MeasureUnit(
+ MeasureUnitWithFactor(
1000.0,
context.getString(R.string.unit_millisecond_symbol),
R.plurals.unit_millisecond
),
- MeasureUnit(
+ MeasureUnitWithFactor(
1.0 / 60,
context.getString(R.string.unit_minute_symbol),
R.plurals.unit_minute
),
- MeasureUnit(
+ MeasureUnitWithFactor(
1.0 / (60 * 60),
context.getString(R.string.unit_hour_symbol),
R.plurals.unit_hour
),
- MeasureUnit(
+ MeasureUnitWithFactor(
1.0 / (60 * 60 * 24),
context.getString(R.string.unit_day_symbol),
R.plurals.unit_day
),
- MeasureUnit(
+ MeasureUnitWithFactor(
1.0 / (60 * 60 * 24 * 365),
context.getString(R.string.unit_year_symbol),
R.plurals.unit_year
diff --git a/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/VelocityConverter.kt b/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/VelocityConverter.kt
index 800b5c9d..e45ba898 100644
--- a/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/VelocityConverter.kt
+++ b/unitconverter/src/main/java/de/mm20/launcher2/unitconverter/converters/VelocityConverter.kt
@@ -2,29 +2,28 @@ package de.mm20.launcher2.unitconverter.converters
import android.content.Context
import de.mm20.launcher2.unitconverter.Dimension
-import de.mm20.launcher2.unitconverter.MeasureUnit
import de.mm20.launcher2.unitconverter.R
-class VelocityConverter(context: Context) : Converter() {
+class VelocityConverter(context: Context) : SimpleFactorConverter() {
override val dimension = Dimension.Velocity
override val standardUnits = listOf(
- MeasureUnit(
+ MeasureUnitWithFactor(
1.0,
context.getString(R.string.unit_meter_per_second_symbol),
R.plurals.unit_meter_per_second
),
- MeasureUnit(
+ MeasureUnitWithFactor(
3.6,
context.getString(R.string.unit_kilometer_per_hour_symbol),
R.plurals.unit_kilometer_per_hour
),
- MeasureUnit(
+ MeasureUnitWithFactor(
3600.0 / 1609.344,
context.getString(R.string.unit_mile_per_hour_symbol),
R.plurals.unit_mile_per_hour
),
- MeasureUnit(
+ MeasureUnitWithFactor(
3600.0 / 1852.0,
context.getString(R.string.unit_knot_symbol),
R.plurals.unit_knot