Better number formatting
This commit is contained in:
parent
de75ed584b
commit
de5b1d4ead
@ -31,6 +31,7 @@ import kotlinx.coroutines.Runnable
|
||||
import okio.IOException
|
||||
import org.json.JSONException
|
||||
import utils.DateUtils
|
||||
import utils.NumericUtils
|
||||
import java.text.DateFormat
|
||||
import java.util.Date
|
||||
|
||||
@ -262,12 +263,14 @@ class MainActivity : AppCompatActivity() {
|
||||
fun showEventDetailDialog(event: LunaEvent) {
|
||||
val dateFormat = DateFormat.getDateTimeInstance();
|
||||
val d = AlertDialog.Builder(this)
|
||||
d.setTitle(event.getTypeDescription(this))
|
||||
d.setTitle(R.string.dialog_event_detail_title)
|
||||
val dialogView = layoutInflater.inflate(R.layout.dialog_event_detail, null)
|
||||
dialogView.findViewById<TextView>(R.id.dialog_event_detail_type_emoji).setText(event.getTypeEmoji(this))
|
||||
dialogView.findViewById<TextView>(R.id.dialog_event_detail_type_description).setText(event.getTypeDescription(this))
|
||||
dialogView.findViewById<TextView>(R.id.dialog_event_detail_type_date).setText(dateFormat.format(Date(event.time * 1000)))
|
||||
dialogView.findViewById<TextView>(R.id.dialog_event_detail_type_quantity).setText(event.quantity.toString())
|
||||
dialogView.findViewById<TextView>(R.id.dialog_event_detail_type_quantity).setText(
|
||||
NumericUtils(this).formatEventQuantity(event)
|
||||
)
|
||||
dialogView.findViewById<TextView>(R.id.dialog_event_detail_type_notes).setText(event.notes)
|
||||
d.setView(dialogView)
|
||||
d.setPositiveButton(android.R.string.ok) { dialogInterface, i -> dialogInterface.dismiss() }
|
||||
|
@ -1,8 +1,6 @@
|
||||
package it.danieleverducci.lunatracker.adapters
|
||||
|
||||
import android.content.Context
|
||||
import android.icu.util.LocaleData
|
||||
import android.icu.util.ULocale
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
@ -11,36 +9,17 @@ import androidx.recyclerview.widget.RecyclerView
|
||||
import it.danieleverducci.lunatracker.entities.LunaEvent
|
||||
import it.danieleverducci.lunatracker.R
|
||||
import utils.DateUtils
|
||||
import utils.NumericUtils
|
||||
|
||||
class LunaEventRecyclerAdapter: RecyclerView.Adapter<LunaEventRecyclerAdapter.LunaEventVH> {
|
||||
private val context: Context
|
||||
val items = ArrayList<LunaEvent>()
|
||||
val measurement_unit_liquid_base: String
|
||||
val measurement_unit_weight_base: String
|
||||
val measurement_unit_weight_tiny: String
|
||||
val numericUtils: NumericUtils
|
||||
var onItemClickListener: OnItemClickListener? = null
|
||||
|
||||
constructor(context: Context) {
|
||||
this.context = context
|
||||
val measurementSystem = LocaleData.getMeasurementSystem(ULocale.getDefault())
|
||||
this.measurement_unit_liquid_base = context.getString(
|
||||
if (measurementSystem == LocaleData. MeasurementSystem.SI)
|
||||
R.string.measurement_unit_liquid_base_metric
|
||||
else
|
||||
R.string.measurement_unit_liquid_base_imperial
|
||||
)
|
||||
this.measurement_unit_weight_base = context.getString(
|
||||
if (measurementSystem == LocaleData. MeasurementSystem.SI)
|
||||
R.string.measurement_unit_weight_base_metric
|
||||
else
|
||||
R.string.measurement_unit_weight_base_imperial
|
||||
)
|
||||
this.measurement_unit_weight_tiny = context.getString(
|
||||
if (measurementSystem == LocaleData. MeasurementSystem.SI)
|
||||
R.string.measurement_unit_weight_tiny_metric
|
||||
else
|
||||
R.string.measurement_unit_weight_tiny_imperial
|
||||
)
|
||||
this.numericUtils = NumericUtils(context)
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(
|
||||
@ -70,17 +49,7 @@ class LunaEventRecyclerAdapter: RecyclerView.Adapter<LunaEventRecyclerAdapter.Lu
|
||||
else -> item.getTypeDescription(context)
|
||||
}
|
||||
holder.time.text = DateUtils.formatTimeAgo(context, item.time)
|
||||
val qtyText = if ((item.quantity ?: 0) > 0) {
|
||||
item.quantity.toString() + " " + when (item.type) {
|
||||
LunaEvent.TYPE_BABY_BOTTLE -> measurement_unit_liquid_base
|
||||
LunaEvent.TYPE_WEIGHT -> measurement_unit_weight_base
|
||||
LunaEvent.TYPE_MEDICINE -> measurement_unit_weight_tiny
|
||||
else -> ""
|
||||
}
|
||||
} else {
|
||||
""
|
||||
}
|
||||
holder.quantity.text = qtyText
|
||||
holder.quantity.text = numericUtils.formatEventQuantity(item)
|
||||
// Listeners
|
||||
if (onItemClickListener != null) {
|
||||
holder.root.setOnClickListener({
|
||||
|
51
app/src/main/java/utils/NumericUtils.kt
Normal file
51
app/src/main/java/utils/NumericUtils.kt
Normal file
@ -0,0 +1,51 @@
|
||||
package utils
|
||||
|
||||
import android.content.Context
|
||||
import android.icu.util.LocaleData
|
||||
import android.icu.util.ULocale
|
||||
import it.danieleverducci.lunatracker.R
|
||||
import it.danieleverducci.lunatracker.entities.LunaEvent
|
||||
import java.text.NumberFormat
|
||||
|
||||
class NumericUtils (val context: Context) {
|
||||
val numberFormat: NumberFormat
|
||||
val measurement_unit_liquid_base: String
|
||||
val measurement_unit_weight_base: String
|
||||
val measurement_unit_weight_tiny: String
|
||||
|
||||
init {
|
||||
this.numberFormat = NumberFormat.getInstance()
|
||||
val measurementSystem = LocaleData.getMeasurementSystem(ULocale.getDefault())
|
||||
this.measurement_unit_liquid_base = context.getString(
|
||||
if (measurementSystem == LocaleData. MeasurementSystem.SI)
|
||||
R.string.measurement_unit_liquid_base_metric
|
||||
else
|
||||
R.string.measurement_unit_liquid_base_imperial
|
||||
)
|
||||
this.measurement_unit_weight_base = context.getString(
|
||||
if (measurementSystem == LocaleData. MeasurementSystem.SI)
|
||||
R.string.measurement_unit_weight_base_metric
|
||||
else
|
||||
R.string.measurement_unit_weight_base_imperial
|
||||
)
|
||||
this.measurement_unit_weight_tiny = context.getString(
|
||||
if (measurementSystem == LocaleData. MeasurementSystem.SI)
|
||||
R.string.measurement_unit_weight_tiny_metric
|
||||
else
|
||||
R.string.measurement_unit_weight_tiny_imperial
|
||||
)
|
||||
}
|
||||
|
||||
fun formatEventQuantity(item: LunaEvent): String {
|
||||
return if ((item.quantity ?: 0) > 0) {
|
||||
numberFormat.format(item.quantity) + " " + when (item.type) {
|
||||
LunaEvent.TYPE_BABY_BOTTLE -> measurement_unit_liquid_base
|
||||
LunaEvent.TYPE_WEIGHT -> measurement_unit_weight_base
|
||||
LunaEvent.TYPE_MEDICINE -> measurement_unit_weight_tiny
|
||||
else -> ""
|
||||
}
|
||||
} else {
|
||||
""
|
||||
}
|
||||
}
|
||||
}
|
@ -48,7 +48,7 @@
|
||||
<string name="settings_storage_local">Sul dispositivo</string>
|
||||
<string name="settings_storage_local_desc">La soluzione più privacy-friendly: i dati non escono mai dal tuo dispositivo</string>
|
||||
<string name="settings_storage_dav">Su un server WebDAV</string>
|
||||
<string name="settings_storage_dav_desc">Puoi usare un qualunque servizio che supporti WebDAV (come ad esempio Nextcloud, Owncloud, Dropbox, Box...) per salvare i dati. In questo modo puoi sincronizzarli tra più dispositivi, ad esempio quello del papà, della mamma, dei nonni... Ti servirà l\'url WebDAV, che trovi nella documentazione del tuo provider (ad es. in Nextcloud è nelle impostazioni di Files)</string>
|
||||
<string name="settings_storage_dav_desc">Puoi usare un qualunque servizio che supporti WebDAV (come ad esempio Nextcloud, Owncloud, Dropbox, Box…) per salvare i dati. In questo modo puoi sincronizzarli tra più dispositivi, ad esempio quello del papà, della mamma, dei nonni… Ti servirà l\'url WebDAV, che trovi nella documentazione del tuo provider (ad es. in Nextcloud è nelle impostazioni di Files)</string>
|
||||
<string name="settings_storage_dav_url">Url WebDAV</string>
|
||||
<string name="settings_storage_dav_url_hint">https://</string>
|
||||
<string name="settings_storage_dav_user">Username</string>
|
||||
@ -71,4 +71,6 @@
|
||||
<string name="log_medicine_dialog_description">Nome della medicina, quantità, formato, note…:</string>
|
||||
<string name="log_notes_dialog_qty_hint">Quantità (numero intero), o lascia vuoto</string>
|
||||
|
||||
<string name="dialog_event_detail_title">Dettaglio evento</string>
|
||||
|
||||
</resources>
|
@ -90,4 +90,6 @@
|
||||
<string name="measurement_unit_weight_base_imperial" translatable="false">oz</string>
|
||||
<string name="measurement_unit_weight_tiny_imperial" translatable="false">gr</string>
|
||||
|
||||
<string name="dialog_event_detail_title">Event detail</string>
|
||||
|
||||
</resources>
|
Loading…
Reference in New Issue
Block a user