diff --git a/core/base/src/main/res/values/strings.xml b/core/base/src/main/res/values/strings.xml
index 8c452c10..b4c96438 100644
--- a/core/base/src/main/res/values/strings.xml
+++ b/core/base/src/main/res/values/strings.xml
@@ -997,6 +997,58 @@
Petafarad
PF
+
+ Quetta
+ Q
+ Ronna
+ R
+ Yotta
+ Y
+ Zetta
+ Z
+ Exa
+ E
+ Peta
+ P
+ Tera
+ T
+ Giga
+ G
+ Mega
+ M
+ Kilo
+ k
+ Hecto
+ h
+ Deca
+ da
+ Base
+ Base
+ Deci
+ d
+ Centi
+ c
+ Milli
+ m
+ Micro
+ μ
+ Nano
+ n
+ Pico
+ p
+ Femto
+ f
+ Atto
+ a
+ Zepto
+ z
+ Yocto
+ y
+ Ronto
+ r
+ Quecto
+ q
+
Length
Time
@@ -1016,6 +1068,7 @@
Flux
Base
Capacitance
+ Prefix
Convert from
diff --git a/data/model/src/main/java/com/sadellie/unitto/data/model/UnitGroup.kt b/data/model/src/main/java/com/sadellie/unitto/data/model/UnitGroup.kt
index 22250ef7..55c3b3c7 100644
--- a/data/model/src/main/java/com/sadellie/unitto/data/model/UnitGroup.kt
+++ b/data/model/src/main/java/com/sadellie/unitto/data/model/UnitGroup.kt
@@ -48,5 +48,6 @@ enum class UnitGroup(
DATA_TRANSFER(res = R.string.data_transfer),
FLUX(res = R.string.flux),
NUMBER_BASE(res = R.string.number_base),
- ELECTROSTATIC_CAPACITANCE(res = R.string.electrostatic_capacitance)
+ ELECTROSTATIC_CAPACITANCE(res = R.string.electrostatic_capacitance),
+ PREFIX(res = R.string.prefix),
}
diff --git a/data/units/src/main/java/com/sadellie/unitto/data/units/AllUnitsRepository.kt b/data/units/src/main/java/com/sadellie/unitto/data/units/AllUnitsRepository.kt
index 980ee487..27f541a7 100644
--- a/data/units/src/main/java/com/sadellie/unitto/data/units/AllUnitsRepository.kt
+++ b/data/units/src/main/java/com/sadellie/unitto/data/units/AllUnitsRepository.kt
@@ -42,6 +42,7 @@ import com.sadellie.unitto.data.units.collections.timeCollection
import com.sadellie.unitto.data.units.collections.volumeCollection
import com.sadellie.unitto.data.database.UnitsEntity
import com.sadellie.unitto.data.units.collections.electrostaticCapacitance
+import com.sadellie.unitto.data.units.collections.prefix
import java.math.BigDecimal
import javax.inject.Inject
import javax.inject.Singleton
@@ -80,7 +81,8 @@ class AllUnitsRepository @Inject constructor() {
UnitGroup.DATA_TRANSFER to dataTransferCollection,
UnitGroup.FLUX to fluxCollection,
UnitGroup.NUMBER_BASE to numberBaseCollection,
- UnitGroup.ELECTROSTATIC_CAPACITANCE to electrostaticCapacitance
+ UnitGroup.ELECTROSTATIC_CAPACITANCE to electrostaticCapacitance,
+ UnitGroup.PREFIX to prefix,
)
}
diff --git a/data/units/src/main/java/com/sadellie/unitto/data/units/MyUnitIDS.kt b/data/units/src/main/java/com/sadellie/unitto/data/units/MyUnitIDS.kt
index ab64fac5..9d671493 100644
--- a/data/units/src/main/java/com/sadellie/unitto/data/units/MyUnitIDS.kt
+++ b/data/units/src/main/java/com/sadellie/unitto/data/units/MyUnitIDS.kt
@@ -530,4 +530,31 @@ object MyUnitIDS {
const val megafarad = "megafarad"
const val gigafarad = "gigafarad"
const val petafarad = "petafarad"
+
+ // PREFIX
+ const val prefix_quetta = "quetta"
+ const val prefix_ronna = "ronna"
+ const val prefix_yotta = "yotta"
+ const val prefix_zetta = "zetta"
+ const val prefix_exa = "exa"
+ const val prefix_peta = "peta"
+ const val prefix_tera = "tera"
+ const val prefix_giga = "giga"
+ const val prefix_mega = "mega"
+ const val prefix_kilo = "kilo"
+ const val prefix_hecto = "hecto"
+ const val prefix_deca = "deca"
+ const val prefix_base = "base"
+ const val prefix_deci = "deci"
+ const val prefix_centi = "centi"
+ const val prefix_milli = "milli"
+ const val prefix_micro = "micro"
+ const val prefix_nano = "nano"
+ const val prefix_pico = "pico"
+ const val prefix_femto = "femto"
+ const val prefix_atto = "atto"
+ const val prefix_zepto = "zepto"
+ const val prefix_yocto = "yocto"
+ const val prefix_ronto = "ronto"
+ const val prefix_quecto = "quecto"
}
diff --git a/data/units/src/main/java/com/sadellie/unitto/data/units/collections/Prefix.kt b/data/units/src/main/java/com/sadellie/unitto/data/units/collections/Prefix.kt
new file mode 100644
index 00000000..bbe3f6b7
--- /dev/null
+++ b/data/units/src/main/java/com/sadellie/unitto/data/units/collections/Prefix.kt
@@ -0,0 +1,56 @@
+/*
+ * Unitto is a unit converter for Android
+ * Copyright (c) 2023 Elshan Agaev
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+package com.sadellie.unitto.data.units.collections
+
+import com.sadellie.unitto.data.model.AbstractUnit
+import com.sadellie.unitto.data.model.MyUnit
+import com.sadellie.unitto.data.model.UnitGroup
+import com.sadellie.unitto.data.units.MyUnitIDS
+import com.sadellie.unitto.data.units.R
+import java.math.BigDecimal
+
+val prefix: List by lazy {
+ listOf(
+ MyUnit(MyUnitIDS.prefix_quetta, BigDecimal.valueOf(1E+30), UnitGroup.PREFIX, R.string.prefix_quetta, R.string.prefix_quetta_short),
+ MyUnit(MyUnitIDS.prefix_ronna, BigDecimal.valueOf(1E+27), UnitGroup.PREFIX, R.string.prefix_ronna, R.string.prefix_ronna_short),
+ MyUnit(MyUnitIDS.prefix_yotta, BigDecimal.valueOf(1E+24), UnitGroup.PREFIX, R.string.prefix_yotta, R.string.prefix_yotta_short),
+ MyUnit(MyUnitIDS.prefix_zetta, BigDecimal.valueOf(1E+21), UnitGroup.PREFIX, R.string.prefix_zetta, R.string.prefix_zetta_short),
+ MyUnit(MyUnitIDS.prefix_exa, BigDecimal.valueOf(1E+18), UnitGroup.PREFIX, R.string.prefix_exa, R.string.prefix_exa_short),
+ MyUnit(MyUnitIDS.prefix_peta, BigDecimal.valueOf(1E+15), UnitGroup.PREFIX, R.string.prefix_peta, R.string.prefix_peta_short),
+ MyUnit(MyUnitIDS.prefix_tera, BigDecimal.valueOf(1E+12), UnitGroup.PREFIX, R.string.prefix_tera, R.string.prefix_tera_short),
+ MyUnit(MyUnitIDS.prefix_giga, BigDecimal.valueOf(1E+9), UnitGroup.PREFIX, R.string.prefix_giga, R.string.prefix_giga_short),
+ MyUnit(MyUnitIDS.prefix_mega, BigDecimal.valueOf(1E+6), UnitGroup.PREFIX, R.string.prefix_mega, R.string.prefix_mega_short),
+ MyUnit(MyUnitIDS.prefix_kilo, BigDecimal.valueOf(1E+3), UnitGroup.PREFIX, R.string.prefix_kilo, R.string.prefix_kilo_short),
+ MyUnit(MyUnitIDS.prefix_hecto, BigDecimal.valueOf(1E+2), UnitGroup.PREFIX, R.string.prefix_hecto, R.string.prefix_hecto_short),
+ MyUnit(MyUnitIDS.prefix_deca, BigDecimal.valueOf(1E+1), UnitGroup.PREFIX, R.string.prefix_deca, R.string.prefix_deca_short),
+ MyUnit(MyUnitIDS.prefix_base, BigDecimal.valueOf(1E+0), UnitGroup.PREFIX, R.string.prefix_base, R.string.prefix_base_short),
+ MyUnit(MyUnitIDS.prefix_deci, BigDecimal.valueOf(1E-1), UnitGroup.PREFIX, R.string.prefix_deci, R.string.prefix_deci_short),
+ MyUnit(MyUnitIDS.prefix_centi, BigDecimal.valueOf(1E-2), UnitGroup.PREFIX, R.string.prefix_centi, R.string.prefix_centi_short),
+ MyUnit(MyUnitIDS.prefix_milli, BigDecimal.valueOf(1E-3), UnitGroup.PREFIX, R.string.prefix_milli, R.string.prefix_milli_short),
+ MyUnit(MyUnitIDS.prefix_micro, BigDecimal.valueOf(1E-6), UnitGroup.PREFIX, R.string.prefix_micro, R.string.prefix_micro_short),
+ MyUnit(MyUnitIDS.prefix_nano, BigDecimal.valueOf(1E-9), UnitGroup.PREFIX, R.string.prefix_nano, R.string.prefix_nano_short),
+ MyUnit(MyUnitIDS.prefix_pico, BigDecimal.valueOf(1E-12), UnitGroup.PREFIX, R.string.prefix_pico, R.string.prefix_pico_short),
+ MyUnit(MyUnitIDS.prefix_femto, BigDecimal.valueOf(1E-15), UnitGroup.PREFIX, R.string.prefix_femto, R.string.prefix_femto_short),
+ MyUnit(MyUnitIDS.prefix_atto, BigDecimal.valueOf(1E-18), UnitGroup.PREFIX, R.string.prefix_atto, R.string.prefix_atto_short),
+ MyUnit(MyUnitIDS.prefix_zepto, BigDecimal.valueOf(1E-21), UnitGroup.PREFIX, R.string.prefix_zepto, R.string.prefix_zepto_short),
+ MyUnit(MyUnitIDS.prefix_yocto, BigDecimal.valueOf(1E-24), UnitGroup.PREFIX, R.string.prefix_yocto, R.string.prefix_yocto_short),
+ MyUnit(MyUnitIDS.prefix_ronto, BigDecimal.valueOf(1E-27), UnitGroup.PREFIX, R.string.prefix_ronto, R.string.prefix_ronto_short),
+ MyUnit(MyUnitIDS.prefix_quecto, BigDecimal.valueOf(1E-30), UnitGroup.PREFIX, R.string.prefix_quecto, R.string.prefix_quecto_short),
+ )
+}
diff --git a/data/units/src/test/java/com/sadellie/unitto/data/units/AllUnitsTest.kt b/data/units/src/test/java/com/sadellie/unitto/data/units/AllUnitsTest.kt
index 69d50051..ae569b76 100644
--- a/data/units/src/test/java/com/sadellie/unitto/data/units/AllUnitsTest.kt
+++ b/data/units/src/test/java/com/sadellie/unitto/data/units/AllUnitsTest.kt
@@ -391,6 +391,35 @@ class AllUnitsTest {
petafarad.checkWith(kilofarad, "11132", "11132000000000000")
}
+ @Test
+ fun testPrefix() = testWithUnits {
+ prefix_quetta.checkWith(prefix_base, "1", "1000000000000000000000000000000")
+ prefix_ronna.checkWith(prefix_base, "1", "1000000000000000000000000000")
+ prefix_yotta.checkWith(prefix_base, "1", "1000000000000000000000000")
+ prefix_zetta.checkWith(prefix_base, "1", "1000000000000000000000")
+ prefix_exa.checkWith(prefix_base, "1", "1000000000000000000")
+ prefix_peta.checkWith(prefix_base, "1", "1000000000000000")
+ prefix_tera.checkWith(prefix_base, "1", "1000000000000")
+ prefix_giga.checkWith(prefix_base, "1", "1000000000")
+ prefix_mega.checkWith(prefix_base, "1", "1000000")
+ prefix_kilo.checkWith(prefix_base, "1", "1000")
+ prefix_hecto.checkWith(prefix_base, "1", "100")
+ prefix_deca.checkWith(prefix_base, "1", "10")
+ prefix_base.checkWith(prefix_base, "77777", "77777")
+ prefix_deci.checkWith(prefix_base, "1", "0.1")
+ prefix_centi.checkWith(prefix_base, "1", "0.01")
+ prefix_milli.checkWith(prefix_base, "1", "0.001")
+ prefix_micro.checkWith(prefix_base, "1", "0.000001")
+ prefix_nano.checkWith(prefix_base, "1", "0.000000001")
+ prefix_pico.checkWith(prefix_base, "1", "0.000000000001")
+ prefix_femto.checkWith(prefix_base, "1", "0.000000000000001")
+ prefix_atto.checkWith(prefix_base, "1", "0.000000000000000001")
+ prefix_zepto.checkWith(prefix_base, "1", "0.000000000000000000001")
+ prefix_yocto.checkWith(prefix_base, "1", "0.000000000000000000000001")
+ prefix_ronto.checkWith(prefix_base, "1", "0.000000000000000000000000001")
+ prefix_quecto.checkWith(prefix_base, "1", "0.000000000000000000000000000001")
+ }
+
private fun String.checkWith(checkingId: String, value: String, expected: String) {
val unitFrom = allUnitsRepository.getById(this)
val unitTo = allUnitsRepository.getById(checkingId)