Add symbols for all units in converter

This commit is contained in:
Ensar Sarajčić
2023-09-13 10:55:03 +02:00
parent 69127532c6
commit 56bf27d83d
10 changed files with 283 additions and 38 deletions

View File

@@ -6,74 +6,88 @@ object AreaConverter : Converter {
override val nameResId: Int = R.string.unit_area override val nameResId: Int = R.string.unit_area
override val imageResId: Int = R.drawable.ic_box_vector override val imageResId: Int = R.drawable.ic_box_vector
sealed class Unit(nameResId: Int, factor: Double) : Converter.Unit(nameResId, factor) { sealed class Unit(nameResId: Int, formatResId: Int, factor: Double) : Converter.Unit(nameResId, formatResId, factor) {
data object SquareKilometer : Unit( data object SquareKilometer : Unit(
nameResId = R.string.unit_area_square_kilometer, nameResId = R.string.unit_area_square_kilometer,
formatResId = R.string.unit_area_square_kilometer_format,
factor = 1000000.0 factor = 1000000.0
) )
data object SquareMeter : Unit( data object SquareMeter : Unit(
nameResId = R.string.unit_area_square_meter, nameResId = R.string.unit_area_square_meter,
formatResId = R.string.unit_area_square_meter_format,
factor = 1.0 factor = 1.0
) )
data object SquareCentimeter : Unit( data object SquareCentimeter : Unit(
nameResId = R.string.unit_area_square_centimeter, nameResId = R.string.unit_area_square_centimeter,
formatResId = R.string.unit_area_square_centimeter_format,
factor = 0.0001 factor = 0.0001
) )
data object SquareMillimeter : Unit( data object SquareMillimeter : Unit(
nameResId = R.string.unit_area_square_millimeter, nameResId = R.string.unit_area_square_millimeter,
formatResId = R.string.unit_area_square_millimeter_format,
factor = 0.000001 factor = 0.000001
) )
data object SquareMile : Unit( data object SquareMile : Unit(
nameResId = R.string.unit_area_square_mile, nameResId = R.string.unit_area_square_mile,
formatResId = R.string.unit_area_square_mile_format,
factor = 2_589_988.110336 factor = 2_589_988.110336
) )
data object SquareYard : Unit( data object SquareYard : Unit(
nameResId = R.string.unit_area_square_yard, nameResId = R.string.unit_area_square_yard,
formatResId = R.string.unit_area_square_yard_format,
factor = 0.83612736 factor = 0.83612736
) )
data object SquareFoot : Unit( data object SquareFoot : Unit(
nameResId = R.string.unit_area_square_foot, nameResId = R.string.unit_area_square_foot,
formatResId = R.string.unit_area_square_foot_format,
factor = 0.09290304 factor = 0.09290304
) )
data object SquareInch : Unit( data object SquareInch : Unit(
nameResId = R.string.unit_area_square_inch, nameResId = R.string.unit_area_square_inch,
formatResId = R.string.unit_area_square_inch_format,
factor = 0.00064516 factor = 0.00064516
) )
data object SquareMil : Unit( data object SquareMil : Unit(
nameResId = R.string.unit_area_square_mil, nameResId = R.string.unit_area_square_mil,
formatResId = R.string.unit_area_square_mil_format,
factor = 0.00000000064516 factor = 0.00000000064516
) )
data object SquareRod : Unit( data object SquareRod : Unit(
nameResId = R.string.unit_area_square_rod, nameResId = R.string.unit_area_square_rod,
formatResId = R.string.unit_area_square_rod_format,
factor = 25.29285264 factor = 25.29285264
) )
data object Acre : Unit( data object Acre : Unit(
nameResId = R.string.unit_area_acre, nameResId = R.string.unit_area_acre,
formatResId = R.string.unit_area_acre_format,
factor = 4_046.8564224 factor = 4_046.8564224
) )
data object Are : Unit( data object Are : Unit(
nameResId = R.string.unit_area_are, nameResId = R.string.unit_area_are,
formatResId = R.string.unit_area_are_format,
factor = 100.0 factor = 100.0
) )
data object Dunam : Unit( data object Dunam : Unit(
nameResId = R.string.unit_area_dunam, nameResId = R.string.unit_area_dunam,
formatResId = R.string.unit_area_dunam_format,
factor = 1000.0 factor = 1000.0
) )
data object Hectare : Unit( data object Hectare : Unit(
nameResId = R.string.unit_area_hectare, nameResId = R.string.unit_area_hectare,
formatResId = R.string.unit_area_hectare_format,
factor = 10_000.0 factor = 10_000.0
) )
} }

View File

@@ -1,5 +1,8 @@
package com.simplemobiletools.calculator.helpers.converters package com.simplemobiletools.calculator.helpers.converters
import android.content.Context
import com.simplemobiletools.calculator.R
interface Converter { interface Converter {
companion object { companion object {
val ALL = listOf( val ALL = listOf(
@@ -24,6 +27,7 @@ interface Converter {
open class Unit( open class Unit(
val nameResId: Int, val nameResId: Int,
val formatResId: Int,
val factor: Double val factor: Double
) { ) {
@@ -32,6 +36,14 @@ interface Converter {
open fun fromBase(value: Double) = value / factor open fun fromBase(value: Double) = value / factor
fun withValue(value: Double) = ValueWithUnit(value, this) fun withValue(value: Double) = ValueWithUnit(value, this)
fun format(context: Context, value: String) = context.getString(formatResId, value)
fun getNameWithSymbol(context: Context) = context.getString(
R.string.unit_name_with_symbol_format,
context.getString(nameResId),
format(context, "").trim()
)
} }
} }

View File

@@ -1,19 +0,0 @@
package com.simplemobiletools.calculator.helpers.converters
object Converters {
val ALL = listOf(LengthConverter)
object Mass
object Temperature
object Speed
object Time
object Fuel
object Energy
object Pressure
}

View File

@@ -6,129 +6,154 @@ object LengthConverter : Converter {
override val nameResId: Int = R.string.unit_length override val nameResId: Int = R.string.unit_length
override val imageResId: Int = R.drawable.ic_height_vector override val imageResId: Int = R.drawable.ic_height_vector
sealed class Unit(nameResId: Int, factor: Double) : Converter.Unit(nameResId, factor) { sealed class Unit(nameResId: Int, formatResId: Int, factor: Double) : Converter.Unit(nameResId, formatResId, factor) {
data object Kilometer : Unit( data object Kilometer : Unit(
nameResId = R.string.unit_length_kilometer, nameResId = R.string.unit_length_kilometer,
formatResId = R.string.unit_length_kilometer_format,
factor = 1000.0 factor = 1000.0
) )
data object Hectometer : Unit( data object Hectometer : Unit(
nameResId = R.string.unit_length_hectometer, nameResId = R.string.unit_length_hectometer,
formatResId = R.string.unit_length_hectometer_format,
factor = 100.0 factor = 100.0
) )
data object Decameter : Unit( data object Decameter : Unit(
nameResId = R.string.unit_length_decameter, nameResId = R.string.unit_length_decameter,
formatResId = R.string.unit_length_decameter_format,
factor = 10.0 factor = 10.0
) )
data object Meter : Unit( data object Meter : Unit(
nameResId = R.string.unit_length_meter, nameResId = R.string.unit_length_meter,
formatResId = R.string.unit_length_meter_format,
factor = 1.0 factor = 1.0
) )
data object Decimeter : Unit( data object Decimeter : Unit(
nameResId = R.string.unit_length_decimeter, nameResId = R.string.unit_length_decimeter,
formatResId = R.string.unit_length_decimeter_format,
factor = 0.1 factor = 0.1
) )
data object Centimeter : Unit( data object Centimeter : Unit(
nameResId = R.string.unit_length_centimeter, nameResId = R.string.unit_length_centimeter,
formatResId = R.string.unit_length_centimeter_format,
factor = 0.01 factor = 0.01
) )
data object Millimeter : Unit( data object Millimeter : Unit(
nameResId = R.string.unit_length_millimeter, nameResId = R.string.unit_length_millimeter,
formatResId = R.string.unit_length_millimeter_format,
factor = 0.001 factor = 0.001
) )
data object Micrometer : Unit( data object Micrometer : Unit(
nameResId = R.string.unit_length_micrometer, nameResId = R.string.unit_length_micrometer,
formatResId = R.string.unit_length_micrometer_format,
factor = 0.000001 factor = 0.000001
) )
data object Nanometer : Unit( data object Nanometer : Unit(
nameResId = R.string.unit_length_nanometer, nameResId = R.string.unit_length_nanometer,
formatResId = R.string.unit_length_nanometer_format,
factor = 0.000000001 factor = 0.000000001
) )
data object Picometer : Unit( data object Picometer : Unit(
nameResId = R.string.unit_length_picometer, nameResId = R.string.unit_length_picometer,
formatResId = R.string.unit_length_picometer_format,
factor = 0.000000000001 factor = 0.000000000001
) )
data object Angstrom : Unit( data object Angstrom : Unit(
nameResId = R.string.unit_length_angstrom, nameResId = R.string.unit_length_angstrom,
formatResId = R.string.unit_length_angstrom_format,
factor = 1e-10 factor = 1e-10
) )
data object Mile : Unit( data object Mile : Unit(
nameResId = R.string.unit_length_mile, nameResId = R.string.unit_length_mile,
formatResId = R.string.unit_length_mile_format,
factor = 1_609.344 factor = 1_609.344
) )
data object Chain : Unit( data object Chain : Unit(
nameResId = R.string.unit_length_chain, nameResId = R.string.unit_length_chain,
formatResId = R.string.unit_length_chain_format,
factor = 20.1168 factor = 20.1168
) )
data object Yard : Unit( data object Yard : Unit(
nameResId = R.string.unit_length_yard, nameResId = R.string.unit_length_yard,
formatResId = R.string.unit_length_yard_format,
factor = 0.9144 factor = 0.9144
) )
data object Foot : Unit( data object Foot : Unit(
nameResId = R.string.unit_length_foot, nameResId = R.string.unit_length_foot,
formatResId = R.string.unit_length_foot_format,
factor = 0.3048 factor = 0.3048
) )
data object Mil : Unit( data object Mil : Unit(
nameResId = R.string.unit_length_mil, nameResId = R.string.unit_length_mil,
formatResId = R.string.unit_length_mil_format,
factor = 0.0000254 factor = 0.0000254
) )
data object Inch : Unit( data object Inch : Unit(
nameResId = R.string.unit_length_inch, nameResId = R.string.unit_length_inch,
formatResId = R.string.unit_length_inch_format,
factor = 0.0254 factor = 0.0254
) )
data object Fathom : Unit( data object Fathom : Unit(
nameResId = R.string.unit_length_fathom, nameResId = R.string.unit_length_fathom,
formatResId = R.string.unit_length_fathom_format,
factor = 1.852 factor = 1.852
) )
data object Cable : Unit( data object Cable : Unit(
nameResId = R.string.unit_length_cable, nameResId = R.string.unit_length_cable,
formatResId = R.string.unit_length_cable_format,
factor = 185.2 factor = 185.2
) )
data object NauticalMile : Unit( data object NauticalMile : Unit(
nameResId = R.string.unit_length_nautical_mile, nameResId = R.string.unit_length_nautical_mile,
formatResId = R.string.unit_length_nautical_mile_format,
factor = 1_852.0 factor = 1_852.0
) )
data object Link : Unit( data object Link : Unit(
nameResId = R.string.unit_length_link, nameResId = R.string.unit_length_link,
formatResId = R.string.unit_length_link_format,
factor = 0.201168 factor = 0.201168
) )
data object Rod : Unit( data object Rod : Unit(
nameResId = R.string.unit_length_rod, nameResId = R.string.unit_length_rod,
formatResId = R.string.unit_length_rod_format,
factor = 5.0292 factor = 5.0292
) )
data object AstronomicalUnit : Unit( data object AstronomicalUnit : Unit(
nameResId = R.string.unit_length_astronomical_unit, nameResId = R.string.unit_length_astronomical_unit,
formatResId = R.string.unit_length_astronomical_unit_format,
factor = 1.495979e+11 factor = 1.495979e+11
) )
data object Parsec : Unit( data object Parsec : Unit(
nameResId = R.string.unit_length_parsec, nameResId = R.string.unit_length_parsec,
formatResId = R.string.unit_length_parsec_format,
factor = 3.0857e+16 factor = 3.0857e+16
) )
data object LightYear : Unit( data object LightYear : Unit(
nameResId = R.string.unit_length_light_year, nameResId = R.string.unit_length_light_year,
formatResId = R.string.unit_length_light_year_format,
factor = 9.4607e+15 factor = 9.4607e+15
) )
} }

View File

@@ -6,74 +6,88 @@ object MassConverter : Converter {
override val nameResId: Int = R.string.unit_mass override val nameResId: Int = R.string.unit_mass
override val imageResId: Int = R.drawable.ic_scale_vector override val imageResId: Int = R.drawable.ic_scale_vector
sealed class Unit(nameResId: Int, factor: Double) : Converter.Unit(nameResId, factor) { sealed class Unit(nameResId: Int, formatResId: Int, factor: Double) : Converter.Unit(nameResId, formatResId, factor) {
data object Gram : Unit( data object Gram : Unit(
nameResId = R.string.unit_mass_gram, nameResId = R.string.unit_mass_gram,
formatResId = R.string.unit_mass_gram_format,
factor = 0.001 factor = 0.001
) )
data object Kilogram : Unit( data object Kilogram : Unit(
nameResId = R.string.unit_mass_kilogram, nameResId = R.string.unit_mass_kilogram,
formatResId = R.string.unit_mass_kilogram_format,
factor = 1.0 factor = 1.0
) )
data object Milligram : Unit( data object Milligram : Unit(
nameResId = R.string.unit_mass_milligram, nameResId = R.string.unit_mass_milligram,
formatResId = R.string.unit_mass_milligram_format,
factor = 0.000001 factor = 0.000001
) )
data object Microgram : Unit( data object Microgram : Unit(
nameResId = R.string.unit_mass_microgram, nameResId = R.string.unit_mass_microgram,
formatResId = R.string.unit_mass_microgram_format,
factor = 0.000000001 factor = 0.000000001
) )
data object Tonne : Unit( data object Tonne : Unit(
nameResId = R.string.unit_mass_tonne, nameResId = R.string.unit_mass_tonne,
formatResId = R.string.unit_mass_tonne_format,
factor = 1_000.0 factor = 1_000.0
) )
data object Pound : Unit( data object Pound : Unit(
nameResId = R.string.unit_mass_pound, nameResId = R.string.unit_mass_pound,
formatResId = R.string.unit_mass_pound_format,
factor = 0.45359237 factor = 0.45359237
) )
data object Ounce : Unit( data object Ounce : Unit(
nameResId = R.string.unit_mass_ounce, nameResId = R.string.unit_mass_ounce,
formatResId = R.string.unit_mass_ounce_format,
factor = 0.028349523125 factor = 0.028349523125
) )
data object Grain : Unit( data object Grain : Unit(
nameResId = R.string.unit_mass_grain, nameResId = R.string.unit_mass_grain,
formatResId = R.string.unit_mass_grain_format,
factor = 0.00006479891 factor = 0.00006479891
) )
data object Dram : Unit( data object Dram : Unit(
nameResId = R.string.unit_mass_dram, nameResId = R.string.unit_mass_dram,
formatResId = R.string.unit_mass_dram_format,
factor = 0.0017718451953125 factor = 0.0017718451953125
) )
data object Stone : Unit( data object Stone : Unit(
nameResId = R.string.unit_mass_stone, nameResId = R.string.unit_mass_stone,
formatResId = R.string.unit_mass_stone_format,
factor = 6.35029318 factor = 6.35029318
) )
data object LongTon : Unit( data object LongTon : Unit(
nameResId = R.string.unit_mass_long_ton, nameResId = R.string.unit_mass_long_ton,
formatResId = R.string.unit_mass_long_ton_format,
factor = 1_016.0469088 factor = 1_016.0469088
) )
data object ShortTon : Unit( data object ShortTon : Unit(
nameResId = R.string.unit_mass_short_ton, nameResId = R.string.unit_mass_short_ton,
formatResId = R.string.unit_mass_short_ton_format,
factor = 907.18474 factor = 907.18474
) )
data object Carat : Unit( data object Carat : Unit(
nameResId = R.string.unit_mass_carat, nameResId = R.string.unit_mass_carat,
formatResId = R.string.unit_mass_carat_format,
factor = 0.0002051965483 factor = 0.0002051965483
) )
data object CaratMetric : Unit( data object CaratMetric : Unit(
nameResId = R.string.unit_mass_carat_metric, nameResId = R.string.unit_mass_carat_metric,
formatResId = R.string.unit_mass_carat_metric_format,
factor = 0.0002 factor = 0.0002
) )
} }

View File

@@ -6,10 +6,11 @@ object TemperatureConverter : Converter {
override val nameResId: Int = R.string.unit_temperature override val nameResId: Int = R.string.unit_temperature
override val imageResId: Int = R.drawable.ic_thermostat_vector override val imageResId: Int = R.drawable.ic_thermostat_vector
sealed class Unit(nameResId: Int, factor: Double) : Converter.Unit(nameResId, factor) { sealed class Unit(nameResId: Int, formatResId: Int, factor: Double) : Converter.Unit(nameResId, formatResId, factor) {
data object Celsius : Unit( data object Celsius : Unit(
nameResId = R.string.unit_temperature_celsius, nameResId = R.string.unit_temperature_celsius,
formatResId = R.string.unit_temperature_celsius_format,
factor = 1.0 factor = 1.0
) { ) {
const val KELVIN_OFFSET = 273.15 const val KELVIN_OFFSET = 273.15
@@ -20,6 +21,7 @@ object TemperatureConverter : Converter {
data object Delisle : Unit( data object Delisle : Unit(
nameResId = R.string.unit_temperature_delisle, nameResId = R.string.unit_temperature_delisle,
formatResId = R.string.unit_temperature_delisle_format,
factor = 2.0 / 3 factor = 2.0 / 3
) { ) {
private const val KELVIN_OFFSET = 373.15 private const val KELVIN_OFFSET = 373.15
@@ -31,6 +33,7 @@ object TemperatureConverter : Converter {
data object Fahrenheit : Unit( data object Fahrenheit : Unit(
nameResId = R.string.unit_temperature_fahrenheit, nameResId = R.string.unit_temperature_fahrenheit,
formatResId = R.string.unit_temperature_fahrenheit_format,
factor = 9.0 / 5 factor = 9.0 / 5
) { ) {
private const val CELSIUS_OFFSET = 32 private const val CELSIUS_OFFSET = 32
@@ -42,6 +45,7 @@ object TemperatureConverter : Converter {
data object Newton : Unit( data object Newton : Unit(
nameResId = R.string.unit_temperature_newton, nameResId = R.string.unit_temperature_newton,
formatResId = R.string.unit_temperature_newton_format,
factor = 100.0 / 33 factor = 100.0 / 33
) { ) {
private const val KELVIN_OFFSET = Celsius.KELVIN_OFFSET private const val KELVIN_OFFSET = Celsius.KELVIN_OFFSET
@@ -53,11 +57,13 @@ object TemperatureConverter : Converter {
data object Rankine : Unit( data object Rankine : Unit(
nameResId = R.string.unit_temperature_rankine, nameResId = R.string.unit_temperature_rankine,
formatResId = R.string.unit_temperature_rankine_format,
factor = 5.0 / 9 factor = 5.0 / 9
) )
data object Reaumur : Unit( data object Reaumur : Unit(
nameResId = R.string.unit_temperature_reaumur, nameResId = R.string.unit_temperature_reaumur,
formatResId = R.string.unit_temperature_reaumur_format,
factor = 5.0 / 4 factor = 5.0 / 4
) { ) {
private const val KELVIN_OFFSET = Celsius.KELVIN_OFFSET private const val KELVIN_OFFSET = Celsius.KELVIN_OFFSET
@@ -69,6 +75,7 @@ object TemperatureConverter : Converter {
data object Romer : Unit( data object Romer : Unit(
nameResId = R.string.unit_temperature_romer, nameResId = R.string.unit_temperature_romer,
formatResId = R.string.unit_temperature_romer_format,
factor = 40.0 / 21 factor = 40.0 / 21
) { ) {
private const val KELVIN_OFFSET = Celsius.KELVIN_OFFSET private const val KELVIN_OFFSET = Celsius.KELVIN_OFFSET
@@ -81,6 +88,7 @@ object TemperatureConverter : Converter {
data object GasMark : Unit( data object GasMark : Unit(
nameResId = R.string.unit_temperature_gas_mark, nameResId = R.string.unit_temperature_gas_mark,
formatResId = R.string.unit_temperature_gas_mark_format,
factor = 25.0 factor = 25.0
) { ) {
private const val FAHRENHEIT_OFFSET = 250 private const val FAHRENHEIT_OFFSET = 250
@@ -92,6 +100,7 @@ object TemperatureConverter : Converter {
data object Kelvin : Unit( data object Kelvin : Unit(
nameResId = R.string.unit_temperature_kelvin, nameResId = R.string.unit_temperature_kelvin,
formatResId = R.string.unit_temperature_kelvin_format,
factor = 1.0 factor = 1.0
) )
} }

View File

@@ -6,7 +6,7 @@ object TimeConverter : Converter {
override val nameResId: Int = R.string.unit_time override val nameResId: Int = R.string.unit_time
override val imageResId: Int = com.simplemobiletools.commons.R.drawable.ic_clock_vector override val imageResId: Int = com.simplemobiletools.commons.R.drawable.ic_clock_vector
sealed class Unit(nameResId: Int, factor: Double) : Converter.Unit(nameResId, factor) { sealed class Unit(nameResId: Int, formatResId: Int, factor: Double) : Converter.Unit(nameResId, formatResId, factor) {
companion object { companion object {
private const val MINUTE = 60.0 private const val MINUTE = 60.0
private const val HOUR = 60.0 * MINUTE private const val HOUR = 60.0 * MINUTE
@@ -16,116 +16,139 @@ object TimeConverter : Converter {
data object Hour : Unit( data object Hour : Unit(
nameResId = R.string.unit_time_hour, nameResId = R.string.unit_time_hour,
formatResId = R.string.unit_time_hour_format,
factor = HOUR factor = HOUR
) )
data object Minute : Unit( data object Minute : Unit(
nameResId = R.string.unit_time_minute, nameResId = R.string.unit_time_minute,
formatResId = R.string.unit_time_minute_format,
factor = MINUTE factor = MINUTE
) )
data object Second : Unit( data object Second : Unit(
nameResId = R.string.unit_time_second, nameResId = R.string.unit_time_second,
formatResId = R.string.unit_time_second_format,
factor = 1.0 factor = 1.0
) )
data object Millisecond : Unit( data object Millisecond : Unit(
nameResId = R.string.unit_time_millisecond, nameResId = R.string.unit_time_millisecond,
formatResId = R.string.unit_time_millisecond_format,
factor = 0.001 factor = 0.001
) )
data object Microsecond : Unit( data object Microsecond : Unit(
nameResId = R.string.unit_time_microsecond, nameResId = R.string.unit_time_microsecond,
formatResId = R.string.unit_time_microsecond_format,
factor = 0.000001 factor = 0.000001
) )
data object Nanosecond : Unit( data object Nanosecond : Unit(
nameResId = R.string.unit_time_nanosecond, nameResId = R.string.unit_time_nanosecond,
formatResId = R.string.unit_time_nanosecond_format,
factor = 0.000000001 factor = 0.000000001
) )
data object Picosecond : Unit( data object Picosecond : Unit(
nameResId = R.string.unit_time_picosecond, nameResId = R.string.unit_time_picosecond,
formatResId = R.string.unit_time_picosecond_format,
factor = 0.000000000001 factor = 0.000000000001
) )
data object Day : Unit( data object Day : Unit(
nameResId = R.string.unit_time_day, nameResId = R.string.unit_time_day,
formatResId = R.string.unit_time_day_format,
factor = DAY factor = DAY
) )
data object Week : Unit( data object Week : Unit(
nameResId = R.string.unit_time_week, nameResId = R.string.unit_time_week,
formatResId = R.string.unit_time_week_format,
factor = DAY * 7 factor = DAY * 7
) )
data object MonthFull : Unit( data object MonthFull : Unit(
nameResId = R.string.unit_time_month_full, nameResId = R.string.unit_time_month_full,
formatResId = R.string.unit_time_month_full_format,
factor = DAY * 30 factor = DAY * 30
) )
data object MonthHollow : Unit( data object MonthHollow : Unit(
nameResId = R.string.unit_time_month_hollow, nameResId = R.string.unit_time_month_hollow,
formatResId = R.string.unit_time_month_hollow_format,
factor = DAY * 29 factor = DAY * 29
) )
data object MonthSynodic : Unit( data object MonthSynodic : Unit(
nameResId = R.string.unit_time_month_synodic, nameResId = R.string.unit_time_month_synodic,
formatResId = R.string.unit_time_month_synodic_format,
factor = DAY * 29.530589 factor = DAY * 29.530589
) )
data object MonthGregorianAverage : Unit( data object MonthGregorianAverage : Unit(
nameResId = R.string.unit_time_month_gregorian_average, nameResId = R.string.unit_time_month_gregorian_average,
formatResId = R.string.unit_time_month_gregorian_average_format,
factor = DAY * 30.346875 factor = DAY * 30.346875
) )
data object YearLeap : Unit( data object YearLeap : Unit(
nameResId = R.string.unit_time_year_leap, nameResId = R.string.unit_time_year_leap,
formatResId = R.string.unit_time_year_leap_format,
factor = DAY * 366 factor = DAY * 366
) )
data object YearGregorian : Unit( data object YearGregorian : Unit(
nameResId = R.string.unit_time_year_gregorian, nameResId = R.string.unit_time_year_gregorian,
formatResId = R.string.unit_time_year_gregorian_format,
factor = GREGORIAN_YEAR factor = GREGORIAN_YEAR
) )
data object YearJulian : Unit( data object YearJulian : Unit(
nameResId = R.string.unit_time_year_julian, nameResId = R.string.unit_time_year_julian,
formatResId = R.string.unit_time_year_julian_format,
factor = DAY * 365.25 factor = DAY * 365.25
) )
data object Jiffy : Unit( data object Jiffy : Unit(
nameResId = R.string.unit_time_jiffy, nameResId = R.string.unit_time_jiffy,
formatResId = R.string.unit_time_jiffy_format,
factor = 1 / 60.0 factor = 1 / 60.0
) )
data object Moment : Unit( data object Moment : Unit(
nameResId = R.string.unit_time_moment, nameResId = R.string.unit_time_moment,
formatResId = R.string.unit_time_moment_format,
factor = 90.0 factor = 90.0
) )
data object Fortnight : Unit( data object Fortnight : Unit(
nameResId = R.string.unit_time_fortnight, nameResId = R.string.unit_time_fortnight,
formatResId = R.string.unit_time_fortnight_format,
factor = DAY * 7 * 2 factor = DAY * 7 * 2
) )
data object Decade : Unit( data object Decade : Unit(
nameResId = R.string.unit_time_decade, nameResId = R.string.unit_time_decade,
formatResId = R.string.unit_time_decade_format,
factor = GREGORIAN_YEAR * 10 factor = GREGORIAN_YEAR * 10
) )
data object Century : Unit( data object Century : Unit(
nameResId = R.string.unit_time_century, nameResId = R.string.unit_time_century,
formatResId = R.string.unit_time_century_format,
factor = GREGORIAN_YEAR * 100 factor = GREGORIAN_YEAR * 100
) )
data object Millennium : Unit( data object Millennium : Unit(
nameResId = R.string.unit_time_millennium, nameResId = R.string.unit_time_millennium,
formatResId = R.string.unit_time_millennium_format,
factor = GREGORIAN_YEAR * 1000 factor = GREGORIAN_YEAR * 1000
) )
data object AtomicUnit : Unit( data object AtomicUnit : Unit(
nameResId = R.string.unit_time_atomic_unit, nameResId = R.string.unit_time_atomic_unit,
formatResId = R.string.unit_time_atomic_unit_format,
factor = 0.00000000000000002418884254 factor = 0.00000000000000002418884254
) )
} }

View File

@@ -6,159 +6,190 @@ object VolumeConverter : Converter {
override val nameResId: Int = R.string.unit_volume override val nameResId: Int = R.string.unit_volume
override val imageResId: Int = R.drawable.ic_drop_vector override val imageResId: Int = R.drawable.ic_drop_vector
sealed class Unit(nameResId: Int, factor: Double) : Converter.Unit(nameResId, factor) { sealed class Unit(nameResId: Int, formatResId: Int, factor: Double) : Converter.Unit(nameResId, formatResId, factor) {
data object CubicMeter : Unit( data object CubicMeter : Unit(
nameResId = R.string.unit_volume_cubic_meter, nameResId = R.string.unit_volume_cubic_meter,
formatResId = R.string.unit_volume_cubic_meter_format,
factor = 1.0 factor = 1.0
) )
data object CubicDecimeter : Unit( data object CubicDecimeter : Unit(
nameResId = R.string.unit_volume_cubic_decimeter, nameResId = R.string.unit_volume_cubic_decimeter,
formatResId = R.string.unit_volume_cubic_decimeter_format,
factor = 0.001 factor = 0.001
) )
data object CubicCentimeter : Unit( data object CubicCentimeter : Unit(
nameResId = R.string.unit_volume_cubic_centimeter, nameResId = R.string.unit_volume_cubic_centimeter,
formatResId = R.string.unit_volume_cubic_centimeter_format,
factor = 0.000001 factor = 0.000001
) )
data object CubicMillimeter : Unit( data object CubicMillimeter : Unit(
nameResId = R.string.unit_volume_cubic_millimeter, nameResId = R.string.unit_volume_cubic_millimeter,
formatResId = R.string.unit_volume_cubic_millimeter_format,
factor = 0.000000001 factor = 0.000000001
) )
data object Liter : Unit( data object Liter : Unit(
nameResId = R.string.unit_volume_liter, nameResId = R.string.unit_volume_liter,
formatResId = R.string.unit_volume_liter_format,
factor = 0.001 factor = 0.001
) )
data object Centiliter : Unit( data object Centiliter : Unit(
nameResId = R.string.unit_volume_centiliter, nameResId = R.string.unit_volume_centiliter,
formatResId = R.string.unit_volume_centiliter_format,
factor = 0.0001 factor = 0.0001
) )
data object Deciliter : Unit( data object Deciliter : Unit(
nameResId = R.string.unit_volume_deciliter, nameResId = R.string.unit_volume_deciliter,
formatResId = R.string.unit_volume_deciliter_format,
factor = 0.00001 factor = 0.00001
) )
data object Milliliter : Unit( data object Milliliter : Unit(
nameResId = R.string.unit_volume_milliliter, nameResId = R.string.unit_volume_milliliter,
formatResId = R.string.unit_volume_milliliter_format,
factor = 0.000001 factor = 0.000001
) )
data object AcreFoot : Unit( data object AcreFoot : Unit(
nameResId = R.string.unit_volume_acre_foot, nameResId = R.string.unit_volume_acre_foot,
formatResId = R.string.unit_volume_acre_foot_format,
factor = 1_233.48183754752 factor = 1_233.48183754752
) )
data object CubicYard : Unit( data object CubicYard : Unit(
nameResId = R.string.unit_volume_cubic_yard, nameResId = R.string.unit_volume_cubic_yard,
formatResId = R.string.unit_volume_cubic_yard_format,
factor = 0.764554857984 factor = 0.764554857984
) )
data object CubicFoot : Unit( data object CubicFoot : Unit(
nameResId = R.string.unit_volume_cubic_foot, nameResId = R.string.unit_volume_cubic_foot,
formatResId = R.string.unit_volume_cubic_foot_format,
factor = 0.028316846592 factor = 0.028316846592
) )
data object CubicInch : Unit( data object CubicInch : Unit(
nameResId = R.string.unit_volume_cubic_inch, nameResId = R.string.unit_volume_cubic_inch,
formatResId = R.string.unit_volume_cubic_inch_format,
factor = 0.000016387064 factor = 0.000016387064
) )
data object BarrelUS : Unit( data object BarrelUS : Unit(
nameResId = R.string.unit_volume_barrel_us, nameResId = R.string.unit_volume_barrel_us,
formatResId = R.string.unit_volume_barrel_us_format,
factor = 0.119240471196 factor = 0.119240471196
) )
data object GallonUS : Unit( data object GallonUS : Unit(
nameResId = R.string.unit_volume_gallon_us, nameResId = R.string.unit_volume_gallon_us,
formatResId = R.string.unit_volume_gallon_us_format,
factor = 0.003785411784 factor = 0.003785411784
) )
data object QuartUS : Unit( data object QuartUS : Unit(
nameResId = R.string.unit_volume_quart_us, nameResId = R.string.unit_volume_quart_us,
formatResId = R.string.unit_volume_quart_us_format,
factor = 0.000946352946 factor = 0.000946352946
) )
data object PintUS : Unit( data object PintUS : Unit(
nameResId = R.string.unit_volume_pint_us, nameResId = R.string.unit_volume_pint_us,
formatResId = R.string.unit_volume_pint_us_format,
factor = 0.000473176473 factor = 0.000473176473
) )
data object GillUS : Unit( data object GillUS : Unit(
nameResId = R.string.unit_volume_gill_us, nameResId = R.string.unit_volume_gill_us,
formatResId = R.string.unit_volume_gill_us_format,
factor = 0.00011829411825 factor = 0.00011829411825
) )
data object FluidOunceUS : Unit( data object FluidOunceUS : Unit(
nameResId = R.string.unit_volume_fluid_ounce_us, nameResId = R.string.unit_volume_fluid_ounce_us,
formatResId = R.string.unit_volume_fluid_ounce_us_format,
factor = 0.00003 factor = 0.00003
) )
data object DropUS : Unit( data object DropUS : Unit(
nameResId = R.string.unit_volume_drop_us, nameResId = R.string.unit_volume_drop_us,
formatResId = R.string.unit_volume_drop_us_format,
factor = 0.00000008214869322916 factor = 0.00000008214869322916
) )
data object TeaspoonUS : Unit( data object TeaspoonUS : Unit(
nameResId = R.string.unit_volume_teaspoon_us, nameResId = R.string.unit_volume_teaspoon_us,
formatResId = R.string.unit_volume_teaspoon_us_format,
factor = 0.000005 factor = 0.000005
) )
data object TablespoonUS : Unit( data object TablespoonUS : Unit(
nameResId = R.string.unit_volume_tablespoon_us, nameResId = R.string.unit_volume_tablespoon_us,
formatResId = R.string.unit_volume_tablespoon_us_format,
factor = 0.000015 factor = 0.000015
) )
data object CupUS : Unit( data object CupUS : Unit(
nameResId = R.string.unit_volume_cup_us, nameResId = R.string.unit_volume_cup_us,
formatResId = R.string.unit_volume_cup_us_format,
factor = 0.00024 factor = 0.00024
) )
data object BarrelImperial : Unit( data object BarrelImperial : Unit(
nameResId = R.string.unit_volume_barrel_imperial, nameResId = R.string.unit_volume_barrel_imperial,
formatResId = R.string.unit_volume_barrel_imperial_format,
factor = 0.16365924 factor = 0.16365924
) )
data object GallonImperial : Unit( data object GallonImperial : Unit(
nameResId = R.string.unit_volume_gallon_imperial, nameResId = R.string.unit_volume_gallon_imperial,
formatResId = R.string.unit_volume_gallon_imperial_format,
factor = 0.00454609 factor = 0.00454609
) )
data object QuartImperial : Unit( data object QuartImperial : Unit(
nameResId = R.string.unit_volume_quart_imperial, nameResId = R.string.unit_volume_quart_imperial,
formatResId = R.string.unit_volume_quart_imperial_format,
factor = 0.0011365225 factor = 0.0011365225
) )
data object PintImperial : Unit( data object PintImperial : Unit(
nameResId = R.string.unit_volume_pint_imperial, nameResId = R.string.unit_volume_pint_imperial,
formatResId = R.string.unit_volume_pint_imperial_format,
factor = 0.00056826125 factor = 0.00056826125
) )
data object GillImperial : Unit( data object GillImperial : Unit(
nameResId = R.string.unit_volume_gill_imperial, nameResId = R.string.unit_volume_gill_imperial,
formatResId = R.string.unit_volume_gill_imperial_format,
factor = 0.0001420653125 factor = 0.0001420653125
) )
data object FluidOunceImperial : Unit( data object FluidOunceImperial : Unit(
nameResId = R.string.unit_volume_fluid_ounce_imperial, nameResId = R.string.unit_volume_fluid_ounce_imperial,
formatResId = R.string.unit_volume_fluid_ounce_imperial_format,
factor = 0.0000284130625 factor = 0.0000284130625
) )
data object DropImperial : Unit( data object DropImperial : Unit(
nameResId = R.string.unit_volume_drop_imperial, nameResId = R.string.unit_volume_drop_imperial,
formatResId = R.string.unit_volume_drop_imperial_format,
factor = 0.0000000986564670138 factor = 0.0000000986564670138
) )
data object TeaspoonImperial : Unit( data object TeaspoonImperial : Unit(
nameResId = R.string.unit_volume_teaspoon_imperial, nameResId = R.string.unit_volume_teaspoon_imperial,
formatResId = R.string.unit_volume_teaspoon_imperial_format,
factor = 0.00000591938802083 factor = 0.00000591938802083
) )
data object TablespoonImperial : Unit( data object TablespoonImperial : Unit(
nameResId = R.string.unit_volume_tablespoon_imperial, nameResId = R.string.unit_volume_tablespoon_imperial,
formatResId = R.string.unit_volume_tablespoon_imperial_format,
factor = 0.0000177581640625 factor = 0.0000177581640625
) )
} }

View File

@@ -6,6 +6,7 @@ import android.content.res.ColorStateList
import android.util.AttributeSet import android.util.AttributeSet
import android.view.View import android.view.View
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.TextView
import androidx.core.widget.TextViewCompat import androidx.core.widget.TextViewCompat
import com.simplemobiletools.calculator.R import com.simplemobiletools.calculator.R
import com.simplemobiletools.calculator.databinding.ViewConverterBinding import com.simplemobiletools.calculator.databinding.ViewConverterBinding
@@ -13,6 +14,7 @@ import com.simplemobiletools.calculator.helpers.COMMA
import com.simplemobiletools.calculator.helpers.DOT import com.simplemobiletools.calculator.helpers.DOT
import com.simplemobiletools.calculator.helpers.NumberFormatHelper import com.simplemobiletools.calculator.helpers.NumberFormatHelper
import com.simplemobiletools.calculator.helpers.converters.Converter import com.simplemobiletools.calculator.helpers.converters.Converter
import com.simplemobiletools.calculator.helpers.converters.ValueWithUnit
import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.dialogs.RadioGroupDialog
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.models.RadioItem import com.simplemobiletools.commons.models.RadioItem
@@ -55,7 +57,7 @@ class ConverterView @JvmOverloads constructor(
topUnit = converter.defaultTopUnit topUnit = converter.defaultTopUnit
bottomUnit = converter.defaultBottomUnit bottomUnit = converter.defaultBottomUnit
binding.topUnitText.text = "0" binding.topUnitText.setFormattedUnitText(topUnit!!.withValue(0.0))
updateBottomValue() updateBottomValue()
updateUnitLabels() updateUnitLabels()
} }
@@ -79,8 +81,8 @@ class ConverterView @JvmOverloads constructor(
} }
fun clear() { fun clear() {
binding.topUnitText.text = "0" binding.topUnitText.setFormattedUnitText(topUnit!!.withValue(0.0))
binding.bottomUnitText.text = "0" binding.bottomUnitText.setFormattedUnitText(bottomUnit!!.withValue(0.0))
} }
fun numpadClicked(id: Int) { fun numpadClicked(id: Int) {
@@ -102,7 +104,7 @@ class ConverterView @JvmOverloads constructor(
} }
private fun decimalClicked() { private fun decimalClicked() {
var value = binding.topUnitText.text.toString() var value = binding.topUnitText.text.removeUnit()
if (!value.contains(decimalSeparator)) { if (!value.contains(decimalSeparator)) {
when (value) { when (value) {
"0" -> value = "0$decimalSeparator" "0" -> value = "0$decimalSeparator"
@@ -110,30 +112,31 @@ class ConverterView @JvmOverloads constructor(
else -> value += decimalSeparator else -> value += decimalSeparator
} }
binding.topUnitText.text = value binding.topUnitText.text = topUnit?.format(context, value)
} }
} }
private fun zeroClicked() { private fun zeroClicked() {
val value = binding.topUnitText.text val value = binding.topUnitText.text.removeUnit()
if (value != "0" || value.contains(decimalSeparator)) { if (value != "0" || value.contains(decimalSeparator)) {
addDigit(0) addDigit(0)
} }
} }
private fun addDigit(digit: Int) { private fun addDigit(digit: Int) {
var value = binding.topUnitText.text.toString() var value = binding.topUnitText.text.removeUnit()
if (value == "0") { if (value == "0") {
value = "" value = ""
} }
value += digit value += digit
value = formatter.addGroupingSeparators(value) value = formatter.addGroupingSeparators(value)
binding.topUnitText.text = value binding.topUnitText.text = topUnit!!.format(context, value)
} }
private fun switch() { private fun switch() {
::topUnit.swapWith(::bottomUnit) ::topUnit.swapWith(::bottomUnit)
updateTopValue()
updateBottomValue() updateBottomValue()
updateUnitLabels() updateUnitLabels()
} }
@@ -143,10 +146,14 @@ class ConverterView @JvmOverloads constructor(
binding.bottomUnitName.text = bottomUnit?.nameResId?.let { context.getString(it) } binding.bottomUnitName.text = bottomUnit?.nameResId?.let { context.getString(it) }
} }
private fun updateTopValue() {
binding.topUnitText.setFormattedUnitText(topUnit!!.withValue(binding.topUnitText.getValue()))
}
private fun updateBottomValue() { private fun updateBottomValue() {
converter?.apply { converter?.apply {
val converted = convert(topUnit!!.withValue(formatter.removeGroupingSeparator(binding.topUnitText.text.toString()).toDouble()), bottomUnit!!).value val converted = convert(topUnit!!.withValue(binding.topUnitText.getValue()), bottomUnit!!).value
binding.bottomUnitText.text = formatter.doubleToString(converted) binding.bottomUnitText.setFormattedUnitText(bottomUnit!!.withValue(converted))
} }
} }
@@ -156,11 +163,21 @@ class ConverterView @JvmOverloads constructor(
this.groupingSeparator = groupingSeparator this.groupingSeparator = groupingSeparator
formatter.decimalSeparator = decimalSeparator formatter.decimalSeparator = decimalSeparator
formatter.groupingSeparator = groupingSeparator formatter.groupingSeparator = groupingSeparator
binding.topUnitText.text = "0" binding.topUnitText.setFormattedUnitText(topUnit!!.withValue(0.0))
binding.bottomUnitText.text = "0" binding.bottomUnitText.setFormattedUnitText(bottomUnit!!.withValue(0.0))
} }
} }
private fun TextView.setFormattedUnitText(value: ValueWithUnit<*>) {
text = value.unit.format(context, formatter.doubleToString(value.value))
}
private fun TextView.getValue(): Double {
return formatter.removeGroupingSeparator(text.removeUnit()).toDouble()
}
private fun CharSequence.removeUnit() = filter { it.isDigit() || it == '.' || it == ',' }.toString()
private fun <T> KMutableProperty0<T>.swapWith(other: KMutableProperty0<T>) { private fun <T> KMutableProperty0<T>.swapWith(other: KMutableProperty0<T>) {
this.get().also { this.get().also {
this.set(other.get()) this.set(other.get())
@@ -171,7 +188,7 @@ class ConverterView @JvmOverloads constructor(
private fun View.setClickListenerForUnitSelector(propertyToChange: KMutableProperty0<Converter.Unit?>, otherProperty: KMutableProperty0<Converter.Unit?>) { private fun View.setClickListenerForUnitSelector(propertyToChange: KMutableProperty0<Converter.Unit?>, otherProperty: KMutableProperty0<Converter.Unit?>) {
setOnClickListener { setOnClickListener {
val items = ArrayList(converter!!.units.mapIndexed { index, unit -> val items = ArrayList(converter!!.units.mapIndexed { index, unit ->
RadioItem(index, context.getString(unit.nameResId), unit) RadioItem(index, unit.getNameWithSymbol(context), unit)
}) })
RadioGroupDialog(context as Activity, items, converter!!.units.indexOf(propertyToChange.get())) { RadioGroupDialog(context as Activity, items, converter!!.units.indexOf(propertyToChange.get())) {
val unit = it as Converter.Unit val unit = it as Converter.Unit
@@ -179,6 +196,7 @@ class ConverterView @JvmOverloads constructor(
switch() switch()
} else if (unit != propertyToChange.get()) { } else if (unit != propertyToChange.get()) {
propertyToChange.set(unit) propertyToChange.set(unit)
updateTopValue()
updateBottomValue() updateBottomValue()
} }
updateUnitLabels() updateUnitLabels()

View File

@@ -2,6 +2,124 @@
<resources> <resources>
<string name="package_name">com.simplemobiletools.calculator</string> <string name="package_name">com.simplemobiletools.calculator</string>
<string name="unit_name_with_symbol_format">%s (%s)</string>
<string name="unit_length_kilometer_format">%s km</string>
<string name="unit_length_hectometer_format">%s hm</string>
<string name="unit_length_decameter_format">%s dam</string>
<string name="unit_length_meter_format">%s m</string>
<string name="unit_length_decimeter_format">%s dm</string>
<string name="unit_length_centimeter_format">%s cm</string>
<string name="unit_length_millimeter_format">%s mm</string>
<string name="unit_length_micrometer_format">%s μm</string>
<string name="unit_length_nanometer_format">%s nm</string>
<string name="unit_length_picometer_format">%s pm</string>
<string name="unit_length_angstrom_format">%s Å</string>
<string name="unit_length_mile_format">%s mi</string>
<string name="unit_length_chain_format">%s ch</string>
<string name="unit_length_yard_format">%s yd</string>
<string name="unit_length_foot_format">%s ft</string>
<string name="unit_length_mil_format">%s mil</string>
<string name="unit_length_inch_format">%s in</string>
<string name="unit_length_fathom_format">%s fathom</string>
<string name="unit_length_cable_format">%s cable</string>
<string name="unit_length_nautical_mile_format">%s NM</string>
<string name="unit_length_link_format">%s lnk</string>
<string name="unit_length_rod_format">%s rd</string>
<string name="unit_length_astronomical_unit_format">%s au</string>
<string name="unit_length_parsec_format">%s pc</string>
<string name="unit_length_light_year_format">%s ly</string>
<string name="unit_area_square_kilometer_format">%s km²</string>
<string name="unit_area_square_meter_format">%s m²</string>
<string name="unit_area_square_centimeter_format">%s cm²</string>
<string name="unit_area_square_millimeter_format">%s mm²</string>
<string name="unit_area_square_mile_format">%s sq mi</string>
<string name="unit_area_square_yard_format">%s sq yd</string>
<string name="unit_area_square_foot_format">%s sq ft</string>
<string name="unit_area_square_mil_format">%s sq mil</string>
<string name="unit_area_square_inch_format">%s sq in</string>
<string name="unit_area_square_rod_format">%s sq rd</string>
<string name="unit_area_acre_format">%s ac</string>
<string name="unit_area_are_format">%s a</string>
<string name="unit_area_dunam_format">%s dunam</string>
<string name="unit_area_hectare_format">%s ha</string>
<string name="unit_volume_cubic_meter_format">%s m³</string>
<string name="unit_volume_cubic_decimeter_format">%s dm³</string>
<string name="unit_volume_cubic_centimeter_format">%s cm³</string>
<string name="unit_volume_cubic_millimeter_format">%s mm³</string>
<string name="unit_volume_liter_format">%s l</string>
<string name="unit_volume_centiliter_format">%s cl</string>
<string name="unit_volume_deciliter_format">%s dl</string>
<string name="unit_volume_milliliter_format">%s ml</string>
<string name="unit_volume_acre_foot_format">%s ac ft</string>
<string name="unit_volume_cubic_yard_format">%s yd³</string>
<string name="unit_volume_cubic_foot_format">%s ft³</string>
<string name="unit_volume_cubic_inch_format">%s in³</string>
<string name="unit_volume_barrel_us_format">%s fl bl (US)</string>
<string name="unit_volume_gallon_us_format">%s gal (US)</string>
<string name="unit_volume_quart_us_format">%s qt (US)</string>
<string name="unit_volume_pint_us_format">%s pt (US fl)</string>
<string name="unit_volume_gill_us_format">%s gi (US)</string>
<string name="unit_volume_fluid_ounce_us_format">%s US fl oz</string>
<string name="unit_volume_drop_us_format">%s gtt</string>
<string name="unit_volume_teaspoon_us_format">%s tsp</string>
<string name="unit_volume_tablespoon_us_format">%s tbsp</string>
<string name="unit_volume_cup_us_format">%s c (US)</string>
<string name="unit_volume_barrel_imperial_format">%s bl (imp)</string>
<string name="unit_volume_gallon_imperial_format">%s gal (imp)</string>
<string name="unit_volume_quart_imperial_format">%s qt (imp)</string>
<string name="unit_volume_pint_imperial_format">%s pt (imp)</string>
<string name="unit_volume_gill_imperial_format">%s gi (imp)</string>
<string name="unit_volume_fluid_ounce_imperial_format">%s fl oz (imp)</string>
<string name="unit_volume_drop_imperial_format">%s gtt</string>
<string name="unit_volume_teaspoon_imperial_format">%s tsp</string>
<string name="unit_volume_tablespoon_imperial_format">%s tbsp</string>
<string name="unit_mass_gram_format">%s g</string>
<string name="unit_mass_kilogram_format">%s kg</string>
<string name="unit_mass_milligram_format">%s mg</string>
<string name="unit_mass_microgram_format">%s μm</string>
<string name="unit_mass_tonne_format">%s t</string>
<string name="unit_mass_pound_format">%s lb</string>
<string name="unit_mass_ounce_format">%s oz</string>
<string name="unit_mass_grain_format">%s gr</string>
<string name="unit_mass_dram_format">%s dr</string>
<string name="unit_mass_stone_format">%s st</string>
<string name="unit_mass_long_ton_format">%s ton</string>
<string name="unit_mass_short_ton_format">%s sh tn</string>
<string name="unit_mass_carat_format">%s kt</string>
<string name="unit_mass_carat_metric_format">%s ct</string>
<string name="unit_temperature_celsius_format">%s°C</string>
<string name="unit_temperature_delisle_format">%s°De</string>
<string name="unit_temperature_fahrenheit_format">%s°F</string>
<string name="unit_temperature_newton_format">%s°N</string>
<string name="unit_temperature_rankine_format">%s°R</string>
<string name="unit_temperature_reaumur_format">%s°Ré</string>
<string name="unit_temperature_romer_format">%s°Rø</string>
<string name="unit_temperature_gas_mark_format">%s GM</string>
<string name="unit_temperature_kelvin_format">%s K</string>
<string name="unit_time_hour_format">%s h</string>
<string name="unit_time_minute_format">%s m</string>
<string name="unit_time_second_format">%s s</string>
<string name="unit_time_millisecond_format">%s ms</string>
<string name="unit_time_microsecond_format">%s µs</string>
<string name="unit_time_nanosecond_format">%s ns</string>
<string name="unit_time_picosecond_format">%s ps</string>
<string name="unit_time_day_format">%s d</string>
<string name="unit_time_week_format">%s wk</string>
<string name="unit_time_month_full_format">%s mo</string>
<string name="unit_time_month_hollow_format">%s mo</string>
<string name="unit_time_month_synodic_format">%s mo</string>
<string name="unit_time_month_gregorian_average_format">%s mo</string>
<string name="unit_time_year_leap_format">%s y</string>
<string name="unit_time_year_gregorian_format">%s y</string>
<string name="unit_time_year_julian_format">%s y</string>
<string name="unit_time_jiffy_format">%s j</string>
<string name="unit_time_moment_format">%s moment</string>
<string name="unit_time_fortnight_format">%s fn</string>
<string name="unit_time_decade_format">%s dec</string>
<string name="unit_time_century_format">%s c</string>
<string name="unit_time_millennium_format">%s millennium</string>
<string name="unit_time_atomic_unit_format">%s a.u.</string>
<!-- Release notes --> <!-- Release notes -->
<string name="release_28">Allow customizing the bottom navigation bar color</string> <string name="release_28">Allow customizing the bottom navigation bar color</string>
<string name="release_18">Added a toggle for preventing the phone from sleeping, enabled by default</string> <string name="release_18">Added a toggle for preventing the phone from sleeping, enabled by default</string>