Compare commits
9 Commits
35a3b42a32
...
v0.3
Author | SHA1 | Date | |
---|---|---|---|
5d17ebf46b | |||
3cbc4139ae | |||
f31c68193a | |||
de5b1d4ead | |||
de75ed584b | |||
a4b43ffb10 | |||
37b68450da | |||
841da9e28e | |||
876c68ce81 |
@ -10,10 +10,10 @@ android {
|
||||
|
||||
defaultConfig {
|
||||
applicationId = "it.danieleverducci.lunatracker"
|
||||
minSdk = 29
|
||||
minSdk = 21
|
||||
targetSdk = 34
|
||||
versionCode = 1
|
||||
versionName = "0.2"
|
||||
versionCode = 2
|
||||
versionName = "0.3"
|
||||
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
|
@ -30,6 +30,10 @@ import it.danieleverducci.lunatracker.repository.WebDAVLogbookRepository
|
||||
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
|
||||
|
||||
class MainActivity : AppCompatActivity() {
|
||||
companion object {
|
||||
@ -55,6 +59,11 @@ class MainActivity : AppCompatActivity() {
|
||||
|
||||
handler = Handler(mainLooper)
|
||||
adapter = LunaEventRecyclerAdapter(this)
|
||||
adapter.onItemClickListener = object: LunaEventRecyclerAdapter.OnItemClickListener{
|
||||
override fun onItemClick(event: LunaEvent) {
|
||||
showEventDetailDialog(event)
|
||||
}
|
||||
}
|
||||
|
||||
// Show view
|
||||
setContentView(R.layout.activity_main)
|
||||
@ -210,6 +219,8 @@ class MainActivity : AppCompatActivity() {
|
||||
d.setView(dialogView)
|
||||
val notesET = dialogView.findViewById<EditText>(R.id.notes_edittext)
|
||||
val qtyET = dialogView.findViewById<EditText>(R.id.notes_qty_edittext)
|
||||
if (lunaEvent.type == LunaEvent.TYPE_NOTE || lunaEvent.type == LunaEvent.TYPE_CUSTOM)
|
||||
qtyET.visibility = View.GONE
|
||||
d.setPositiveButton(android.R.string.ok) { dialogInterface, i ->
|
||||
val qtyStr = qtyET.text.toString()
|
||||
if (qtyStr.isNotEmpty()) {
|
||||
@ -249,6 +260,24 @@ class MainActivity : AppCompatActivity() {
|
||||
alertDialog.show()
|
||||
}
|
||||
|
||||
fun showEventDetailDialog(event: LunaEvent) {
|
||||
val dateFormat = DateFormat.getDateTimeInstance();
|
||||
val d = AlertDialog.Builder(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(
|
||||
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() }
|
||||
val alertDialog = d.create()
|
||||
alertDialog.show()
|
||||
}
|
||||
|
||||
fun loadLogbook() {
|
||||
if (savingEvent)
|
||||
return
|
||||
@ -440,6 +469,10 @@ class MainActivity : AppCompatActivity() {
|
||||
logEvent(LunaEvent(LunaEvent.TYPE_ENEMA))
|
||||
dismiss()
|
||||
})
|
||||
contentView.findViewById<View>(R.id.button_note).setOnClickListener({
|
||||
askNotes(LunaEvent(LunaEvent.TYPE_NOTE))
|
||||
dismiss()
|
||||
})
|
||||
contentView.findViewById<View>(R.id.button_custom).setOnClickListener({
|
||||
Toast.makeText(anchor.context, "TODO: Implement custom events", Toast.LENGTH_SHORT).show()
|
||||
dismiss()
|
||||
|
@ -1,7 +1,6 @@
|
||||
package it.danieleverducci.lunatracker.adapters
|
||||
|
||||
import android.content.Context
|
||||
import android.text.format.DateFormat
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
@ -9,14 +8,18 @@ import android.widget.TextView
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import it.danieleverducci.lunatracker.entities.LunaEvent
|
||||
import it.danieleverducci.lunatracker.R
|
||||
import java.util.Date
|
||||
import utils.DateUtils
|
||||
import utils.NumericUtils
|
||||
|
||||
class LunaEventRecyclerAdapter: RecyclerView.Adapter<LunaEventRecyclerAdapter.LunaEventVH> {
|
||||
private val context: Context
|
||||
val items = ArrayList<LunaEvent>()
|
||||
val numericUtils: NumericUtils
|
||||
var onItemClickListener: OnItemClickListener? = null
|
||||
|
||||
constructor(context: Context) {
|
||||
this.context = context
|
||||
this.numericUtils = NumericUtils(context)
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(
|
||||
@ -33,64 +36,49 @@ class LunaEventRecyclerAdapter: RecyclerView.Adapter<LunaEventRecyclerAdapter.Lu
|
||||
position: Int
|
||||
) {
|
||||
val item = items.get(position)
|
||||
// Colors
|
||||
holder.root.setBackgroundResource(
|
||||
if (position % 2 == 0) R.color.list_background_even else R.color.list_background_odd
|
||||
)
|
||||
// Contents
|
||||
holder.type.text = item.getTypeEmoji(context)
|
||||
holder.description.text = item.getTypeDescription(context)
|
||||
holder.quantity.text = if ((item.quantity ?: 0) > 0) item.quantity.toString() else ""
|
||||
holder.time.text = formatTimeAgo(context, item.time)
|
||||
holder.description.text = when(item.type) {
|
||||
LunaEvent.TYPE_MEDICINE -> item.notes
|
||||
LunaEvent.TYPE_NOTE -> item.notes
|
||||
LunaEvent.TYPE_CUSTOM -> item.notes
|
||||
else -> item.getTypeDescription(context)
|
||||
}
|
||||
holder.time.text = DateUtils.formatTimeAgo(context, item.time)
|
||||
holder.quantity.text = numericUtils.formatEventQuantity(item)
|
||||
// Listeners
|
||||
if (onItemClickListener != null) {
|
||||
holder.root.setOnClickListener({
|
||||
onItemClickListener?.onItemClick(item)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return items.size
|
||||
}
|
||||
|
||||
/**
|
||||
* Formats the provided unix timestamp in a string like "3 hours, 26 minutes ago)
|
||||
*/
|
||||
fun formatTimeAgo(context: Context, unixTime: Long): String {
|
||||
val secondsDiff = (System.currentTimeMillis() / 1000) - unixTime
|
||||
val minutesDiff = secondsDiff / 60
|
||||
|
||||
if (minutesDiff < 1)
|
||||
return context.getString(R.string.now)
|
||||
|
||||
val hoursAgo = (secondsDiff / (60 * 60)).toInt()
|
||||
val minutesAgo = (minutesDiff % 60).toInt()
|
||||
|
||||
if (hoursAgo > 24)
|
||||
return DateFormat.getDateFormat(context).format(Date(unixTime*1000)) + "\n" +
|
||||
DateFormat.getTimeFormat(context).format(Date(unixTime*1000))
|
||||
|
||||
var formattedTime = StringBuilder()
|
||||
if (hoursAgo > 0) {
|
||||
formattedTime.append(hoursAgo).append(" ")
|
||||
if (hoursAgo.toInt() == 1)
|
||||
formattedTime.append(context.getString(R.string.hour_ago))
|
||||
else
|
||||
formattedTime.append(context.getString(R.string.hours_ago))
|
||||
}
|
||||
if (formattedTime.isNotEmpty())
|
||||
formattedTime.append(", ")
|
||||
if (minutesAgo > 0) {
|
||||
formattedTime.append(minutesAgo).append(" ")
|
||||
if (minutesAgo.toInt() == 1)
|
||||
formattedTime.append(context.getString(R.string.minute_ago))
|
||||
else
|
||||
formattedTime.append(context.getString(R.string.minutes_ago))
|
||||
}
|
||||
return formattedTime.toString()
|
||||
}
|
||||
|
||||
class LunaEventVH: RecyclerView.ViewHolder {
|
||||
val root: View
|
||||
val type: TextView
|
||||
val description: TextView
|
||||
val quantity: TextView
|
||||
val time: TextView
|
||||
|
||||
constructor(v: View) : super(v) {
|
||||
root = v
|
||||
type = v.findViewById<TextView>(R.id.type)
|
||||
description = v.findViewById<TextView>(R.id.description)
|
||||
quantity = v.findViewById<TextView>(R.id.quantity)
|
||||
time = v.findViewById<TextView>(R.id.time)
|
||||
}
|
||||
}
|
||||
|
||||
interface OnItemClickListener {
|
||||
fun onItemClick(event: LunaEvent)
|
||||
}
|
||||
}
|
@ -23,6 +23,7 @@ class LunaEvent {
|
||||
val TYPE_DIAPERCHANGE_PEE = "DIAPERCHANGE_PEE"
|
||||
val TYPE_MEDICINE = "MEDICINE"
|
||||
val TYPE_ENEMA = "ENEMA"
|
||||
val TYPE_NOTE = "NOTE"
|
||||
val TYPE_CUSTOM = "CUSTOM"
|
||||
}
|
||||
|
||||
@ -45,7 +46,7 @@ class LunaEvent {
|
||||
jo.put("quantity", value)
|
||||
}
|
||||
var notes: String
|
||||
get(): String = jo.getString("notes")
|
||||
get(): String = jo.optString("notes")
|
||||
set(value) {
|
||||
jo.put("notes", value)
|
||||
}
|
||||
@ -82,6 +83,7 @@ class LunaEvent {
|
||||
TYPE_DIAPERCHANGE_PEE -> R.string.event_diaperchange_pee_type
|
||||
TYPE_MEDICINE -> R.string.event_medicine_type
|
||||
TYPE_ENEMA -> R.string.event_enema_type
|
||||
TYPE_NOTE -> R.string.event_note_type
|
||||
else -> R.string.event_unknown_type
|
||||
}
|
||||
)
|
||||
@ -99,6 +101,7 @@ class LunaEvent {
|
||||
TYPE_DIAPERCHANGE_PEE -> R.string.event_diaperchange_pee_desc
|
||||
TYPE_MEDICINE -> R.string.event_medicine_desc
|
||||
TYPE_ENEMA -> R.string.event_enema_desc
|
||||
TYPE_NOTE -> R.string.event_note_desc
|
||||
else -> R.string.event_unknown_desc
|
||||
}
|
||||
)
|
||||
|
48
app/src/main/java/utils/DateUtils.kt
Normal file
48
app/src/main/java/utils/DateUtils.kt
Normal file
@ -0,0 +1,48 @@
|
||||
package utils
|
||||
|
||||
import android.content.Context
|
||||
import android.text.format.DateFormat
|
||||
import it.danieleverducci.lunatracker.R
|
||||
import java.util.Date
|
||||
|
||||
class DateUtils {
|
||||
companion object {
|
||||
|
||||
/**
|
||||
* Formats the provided unix timestamp in a string like "3 hours, 26 minutes ago)
|
||||
*/
|
||||
fun formatTimeAgo(context: Context, unixTime: Long): String {
|
||||
val secondsDiff = (System.currentTimeMillis() / 1000) - unixTime
|
||||
val minutesDiff = secondsDiff / 60
|
||||
|
||||
if (minutesDiff < 1)
|
||||
return context.getString(R.string.now)
|
||||
|
||||
val hoursAgo = (secondsDiff / (60 * 60)).toInt()
|
||||
val minutesAgo = (minutesDiff % 60).toInt()
|
||||
|
||||
if (hoursAgo > 24)
|
||||
return DateFormat.getDateFormat(context).format(Date(unixTime*1000)) + "\n" +
|
||||
DateFormat.getTimeFormat(context).format(Date(unixTime*1000))
|
||||
|
||||
var formattedTime = StringBuilder()
|
||||
if (hoursAgo > 0) {
|
||||
formattedTime.append(hoursAgo).append(" ")
|
||||
if (hoursAgo.toInt() == 1)
|
||||
formattedTime.append(context.getString(R.string.hour_ago))
|
||||
else
|
||||
formattedTime.append(context.getString(R.string.hours_ago))
|
||||
}
|
||||
if (minutesAgo > 0) {
|
||||
if (formattedTime.isNotEmpty())
|
||||
formattedTime.append(", ")
|
||||
formattedTime.append(minutesAgo).append(" ")
|
||||
if (minutesAgo.toInt() == 1)
|
||||
formattedTime.append(context.getString(R.string.minute_ago))
|
||||
else
|
||||
formattedTime.append(context.getString(R.string.minutes_ago))
|
||||
}
|
||||
return formattedTime.toString()
|
||||
}
|
||||
}
|
||||
}
|
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 {
|
||||
""
|
||||
}
|
||||
}
|
||||
}
|
12
app/src/main/res/drawable/textview_background.xml
Normal file
12
app/src/main/res/drawable/textview_background.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<stroke
|
||||
android:width="2dp"
|
||||
android:color="@color/grey" />
|
||||
<corners android:radius="10dp" />
|
||||
<padding
|
||||
android:bottom="10dp"
|
||||
android:left="20dp"
|
||||
android:right="20dp"
|
||||
android:top="10dp" />
|
||||
</shape>
|
@ -68,7 +68,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="30dp"
|
||||
android:hint="@string/settings_storage_dav_url_hint"
|
||||
android:inputType="textUri"/>
|
||||
android:inputType="textUri"
|
||||
android:background="@drawable/textview_background"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
@ -83,7 +84,8 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="30dp"
|
||||
android:inputType="textEmailAddress"/>
|
||||
android:inputType="textEmailAddress"
|
||||
android:background="@drawable/textview_background"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
@ -98,7 +100,8 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="30dp"
|
||||
android:inputType="textPassword"/>
|
||||
android:inputType="textPassword"
|
||||
android:background="@drawable/textview_background"/>
|
||||
|
||||
<com.google.android.material.progressindicator.LinearProgressIndicator
|
||||
android:id="@+id/progress_indicator"
|
||||
|
55
app/src/main/res/layout/dialog_event_detail.xml
Normal file
55
app/src/main/res/layout/dialog_event_detail.xml
Normal file
@ -0,0 +1,55 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:padding="20dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/dialog_event_detail_type_emoji"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:textSize="60dp"
|
||||
android:text="@string/event_diaperchange_pee_type"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/dialog_event_detail_type_description"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
android:gravity="center_horizontal"
|
||||
android:textColor="@color/accent"
|
||||
android:textSize="24dp"
|
||||
android:text="@string/event_diaperchange_pee_desc"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/dialog_event_detail_type_date"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="20dp"
|
||||
android:gravity="center_horizontal"
|
||||
android:textStyle="bold"
|
||||
android:text="2020"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/dialog_event_detail_type_quantity"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="2020"/>
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="200dp"
|
||||
android:layout_marginTop="20dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/dialog_event_detail_type_notes"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textStyle="italic"
|
||||
android:text="Lorem ipsum"/>
|
||||
|
||||
</ScrollView>
|
||||
</LinearLayout>
|
@ -11,13 +11,17 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:lines="1"
|
||||
android:inputType="number"
|
||||
android:hint="@string/log_notes_dialog_qty_hint"/>
|
||||
android:hint="@string/log_notes_dialog_qty_hint"
|
||||
android:background="@drawable/textview_background"/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/notes_edittext"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
android:gravity="top"
|
||||
android:lines="10"/>
|
||||
android:lines="10"
|
||||
android:hint="@string/log_notes_dialog_note_hint"
|
||||
android:background="@drawable/textview_background"/>
|
||||
|
||||
</LinearLayout>
|
@ -16,6 +16,7 @@
|
||||
android:layout_height="match_parent"
|
||||
android:padding="20dp"
|
||||
android:background="@drawable/button_background"
|
||||
style="@style/OverflowMenuText"
|
||||
android:text="@string/overflow_event_medicine"/>
|
||||
|
||||
<TextView
|
||||
@ -25,8 +26,19 @@
|
||||
android:layout_marginTop="10dp"
|
||||
android:padding="20dp"
|
||||
android:background="@drawable/button_background"
|
||||
style="@style/OverflowMenuText"
|
||||
android:text="@string/overflow_event_enema"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/button_note"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="10dp"
|
||||
android:padding="20dp"
|
||||
android:background="@drawable/button_background"
|
||||
style="@style/OverflowMenuText"
|
||||
android:text="@string/overflow_event_note"/>
|
||||
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/overflow_event_custom_container"
|
||||
@ -42,6 +54,7 @@
|
||||
android:layout_marginTop="10dp"
|
||||
android:padding="20dp"
|
||||
android:background="@drawable/button_background"
|
||||
style="@style/OverflowMenuText"
|
||||
android:text="@string/overflow_event_custom"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
@ -11,7 +11,8 @@
|
||||
android:layout_width="150dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:inputType="number"
|
||||
android:hint="0"/>
|
||||
android:hint="0"
|
||||
android:background="@drawable/textview_background"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -3,21 +3,27 @@
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="10dp"
|
||||
android:paddingBottom="10dp"
|
||||
android:gravity="center_vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/type"
|
||||
android:layout_width="0dp"
|
||||
android:layout_width="90dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="2"
|
||||
android:paddingLeft="10dp"
|
||||
android:textSize="28sp"
|
||||
android:text="Type"/>
|
||||
android:lines="1"
|
||||
android:maxLines="1"
|
||||
android:text="@string/event_diaperchange_pee_type"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/description"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="2"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="2"
|
||||
android:text="Description"/>
|
||||
|
||||
<TextView
|
||||
@ -25,7 +31,11 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:layout_marginLeft="5dp"
|
||||
android:layout_marginRight="5dp"
|
||||
android:gravity="center_horizontal"
|
||||
android:lines="1"
|
||||
android:maxLines="1"
|
||||
android:text="Qty"/>
|
||||
|
||||
<TextView
|
||||
@ -35,6 +45,8 @@
|
||||
android:layout_weight="2"
|
||||
android:gravity="center_horizontal"
|
||||
android:textStyle="bold"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="2"
|
||||
android:text="Time"/>
|
||||
|
||||
</LinearLayout>
|
@ -10,20 +10,10 @@
|
||||
<string name="log_weight_dialog_title">Pesata</string>
|
||||
<string name="log_weight_dialog_description">Inserisci il peso rilevato</string>
|
||||
|
||||
<string name="event_bottle_type">🍼</string>
|
||||
<string name="event_scale_type">⚖️</string>
|
||||
<string name="event_breastfeeding_left_type">🤱 ←</string>
|
||||
<string name="event_breastfeeding_both_type">🤱 ↔</string>
|
||||
<string name="event_breastfeeding_right_type">🤱 →</string>
|
||||
<string name="event_diaperchange_poo_type">🚼 💩</string>
|
||||
<string name="event_diaperchange_pee_type">🚼 💧</string>
|
||||
<string name="event_medicine_type">💊</string>
|
||||
<string name="event_enema_type">🪠</string>
|
||||
<string name="event_unknown_type">-</string>
|
||||
|
||||
<string name="overflow_event_medicine">💊 Medicina</string>
|
||||
<string name="overflow_event_enema">🪠 Clistere</string>
|
||||
<string name="overflow_event_custom">➕ Aggiungi evento personalizzato</string>
|
||||
<string name="overflow_event_note">📝 Nota</string>
|
||||
<string name="overflow_event_custom">➕ Personalizzato</string>
|
||||
|
||||
<string name="event_bottle_desc">Biberon</string>
|
||||
<string name="event_scale_desc">Pesata</string>
|
||||
@ -34,6 +24,7 @@
|
||||
<string name="event_diaperchange_pee_desc">Cambio (con pipì)</string>
|
||||
<string name="event_medicine_desc">Medicina</string>
|
||||
<string name="event_enema_desc">Clistere</string>
|
||||
<string name="event_note_desc">Nota</string>
|
||||
<string name="event_unknown_desc"></string>
|
||||
|
||||
<string name="toast_event_added">Evento aggiunto</string>
|
||||
@ -57,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>
|
||||
@ -78,6 +69,9 @@
|
||||
|
||||
<string name="log_notes_dialog_description">Note:</string>
|
||||
<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="log_notes_dialog_qty_hint">Quantità, o vuoto</string>
|
||||
<string name="log_notes_dialog_note_hint">Inserisci le note</string>
|
||||
|
||||
<string name="dialog_event_detail_title">Dettaglio evento</string>
|
||||
|
||||
</resources>
|
@ -6,4 +6,6 @@
|
||||
<color name="translucent">#c000</color>
|
||||
<color name="transparent">#0000</color>
|
||||
<color name="grey">#ccc</color>
|
||||
<color name="list_background_odd">#423B25</color>
|
||||
<color name="list_background_even">@color/transparent</color>
|
||||
</resources>
|
@ -10,16 +10,17 @@
|
||||
<string name="log_weight_dialog_title">Weight</string>
|
||||
<string name="log_weight_dialog_description">Insert the weight</string>
|
||||
|
||||
<string name="event_bottle_type">🍼</string>
|
||||
<string name="event_scale_type">⚖️</string>
|
||||
<string name="event_breastfeeding_left_type">🤱 ←</string>
|
||||
<string name="event_breastfeeding_both_type">🤱 ↔</string>
|
||||
<string name="event_breastfeeding_right_type">🤱 →</string>
|
||||
<string name="event_diaperchange_poo_type">🚼 💩</string>
|
||||
<string name="event_diaperchange_pee_type">🚼 💧</string>
|
||||
<string name="event_medicine_type">💊</string>
|
||||
<string name="event_enema_type">🪠</string>
|
||||
<string name="event_unknown_type">\?</string>
|
||||
<string name="event_bottle_type" translatable="false">🍼</string>
|
||||
<string name="event_scale_type" translatable="false">⚖️</string>
|
||||
<string name="event_breastfeeding_left_type" translatable="false">🤱 ←</string>
|
||||
<string name="event_breastfeeding_both_type" translatable="false">🤱 ↔</string>
|
||||
<string name="event_breastfeeding_right_type" translatable="false">🤱 →</string>
|
||||
<string name="event_diaperchange_poo_type" translatable="false">🚼 💩</string>
|
||||
<string name="event_diaperchange_pee_type" translatable="false">🚼 💧</string>
|
||||
<string name="event_medicine_type" translatable="false">💊</string>
|
||||
<string name="event_enema_type" translatable="false">🪠</string>
|
||||
<string name="event_note_type" translatable="false">📝</string>
|
||||
<string name="event_unknown_type" translatable="false">\?</string>
|
||||
|
||||
<string name="event_bottle_desc">Baby bottle</string>
|
||||
<string name="event_scale_desc">Weight</string>
|
||||
@ -30,11 +31,13 @@
|
||||
<string name="event_diaperchange_pee_desc">Diaper chg (pee)</string>
|
||||
<string name="event_medicine_desc">Medicine</string>
|
||||
<string name="event_enema_desc">Enema</string>
|
||||
<string name="event_note_desc">Note</string>
|
||||
<string name="event_unknown_desc"></string>
|
||||
|
||||
<string name="overflow_event_medicine">💊 Medicine</string>
|
||||
<string name="overflow_event_enema">🪠 Enema</string>
|
||||
<string name="overflow_event_custom">➕ Add custom event</string>
|
||||
<string name="overflow_event_note">📝 Note</string>
|
||||
<string name="overflow_event_custom">➕ Add custom</string>
|
||||
|
||||
<string name="toast_event_added">Event logged</string>
|
||||
<string name="toast_logbook_saved">Logbook saved</string>
|
||||
@ -78,6 +81,16 @@
|
||||
|
||||
<string name="log_notes_dialog_description">Notes:</string>
|
||||
<string name="log_medicine_dialog_description">Medicine name, quantity, type, notes…:</string>
|
||||
<string name="log_notes_dialog_qty_hint">Integer quantity, or leave blank</string>
|
||||
<string name="log_notes_dialog_qty_hint">Quantity (or empty)</string>
|
||||
<string name="log_notes_dialog_note_hint">Write some notes</string>
|
||||
|
||||
<string name="measurement_unit_liquid_base_metric" translatable="false">ml</string>
|
||||
<string name="measurement_unit_weight_base_metric" translatable="false">g</string>
|
||||
<string name="measurement_unit_weight_tiny_metric" translatable="false">mg</string>
|
||||
<string name="measurement_unit_liquid_base_imperial" translatable="false">fl oz.</string>
|
||||
<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>
|
@ -1,5 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<style name="Theme.LunaTracker" parent="Theme.AppCompat.NoActionBar" />
|
||||
<style name="Theme.LunaTracker" parent="Theme.AppCompat.NoActionBar">
|
||||
<item name="colorAccent">@color/accent</item>
|
||||
</style>
|
||||
|
||||
<style name="OverflowMenuText">
|
||||
<item name="android:textSize">20sp</item>
|
||||
</style>
|
||||
</resources>
|
Reference in New Issue
Block a user