Compare commits
7 Commits
multiple-c
...
07393faf41
Author | SHA1 | Date | |
---|---|---|---|
07393faf41 | |||
043a1c0283 | |||
efdb8f584a | |||
1511764497 | |||
744bfef62b | |||
34ca6c1cd6 | |||
b4f47ea6bb |
@ -12,8 +12,8 @@ android {
|
|||||||
applicationId = "it.danieleverducci.lunatracker"
|
applicationId = "it.danieleverducci.lunatracker"
|
||||||
minSdk = 21
|
minSdk = 21
|
||||||
targetSdk = 34
|
targetSdk = 34
|
||||||
versionCode = 2
|
versionCode = 3
|
||||||
versionName = "0.3"
|
versionName = "0.5"
|
||||||
|
|
||||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package it.danieleverducci.lunatracker
|
package it.danieleverducci.lunatracker
|
||||||
|
|
||||||
|
import android.content.DialogInterface
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
@ -48,7 +49,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
val DEBUG_CHECK_LOGBOOK_CONSISTENCY = false
|
val DEBUG_CHECK_LOGBOOK_CONSISTENCY = false
|
||||||
}
|
}
|
||||||
|
|
||||||
lateinit var logbook: Logbook
|
var logbook: Logbook? = null
|
||||||
lateinit var adapter: LunaEventRecyclerAdapter
|
lateinit var adapter: LunaEventRecyclerAdapter
|
||||||
lateinit var progressIndicator: LinearProgressIndicator
|
lateinit var progressIndicator: LinearProgressIndicator
|
||||||
lateinit var buttonsContainer: ViewGroup
|
lateinit var buttonsContainer: ViewGroup
|
||||||
@ -56,7 +57,8 @@ class MainActivity : AppCompatActivity() {
|
|||||||
lateinit var handler: Handler
|
lateinit var handler: Handler
|
||||||
var savingEvent = false
|
var savingEvent = false
|
||||||
val updateListRunnable: Runnable = Runnable {
|
val updateListRunnable: Runnable = Runnable {
|
||||||
loadLogbook(logbook.name)
|
if (logbook != null)
|
||||||
|
loadLogbook(logbook!!.name)
|
||||||
handler.postDelayed(updateListRunnable, 1000*60)
|
handler.postDelayed(updateListRunnable, 1000*60)
|
||||||
}
|
}
|
||||||
var logbookRepo: LogbookRepository? = null
|
var logbookRepo: LogbookRepository? = null
|
||||||
@ -85,7 +87,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
// Set listeners
|
// Set listeners
|
||||||
findViewById<View>(R.id.logbooks_add_button).setOnClickListener { showAddLogbookDialog(true) }
|
findViewById<View>(R.id.logbooks_add_button).setOnClickListener { showAddLogbookDialog(true) }
|
||||||
findViewById<View>(R.id.button_bottle).setOnClickListener { askBabyBottleContent() }
|
findViewById<View>(R.id.button_bottle).setOnClickListener { askBabyBottleContent() }
|
||||||
findViewById<View>(R.id.button_scale).setOnClickListener { askWeightValue() }
|
findViewById<View>(R.id.button_food).setOnClickListener { askNotes(LunaEvent(LunaEvent.TYPE_FOOD)) }
|
||||||
findViewById<View>(R.id.button_nipple_left).setOnClickListener { logEvent(
|
findViewById<View>(R.id.button_nipple_left).setOnClickListener { logEvent(
|
||||||
LunaEvent(
|
LunaEvent(
|
||||||
LunaEvent.TYPE_BREASTFEEDING_LEFT_NIPPLE
|
LunaEvent.TYPE_BREASTFEEDING_LEFT_NIPPLE
|
||||||
@ -122,10 +124,11 @@ class MainActivity : AppCompatActivity() {
|
|||||||
showSettings()
|
showSettings()
|
||||||
})
|
})
|
||||||
findViewById<View>(R.id.button_no_connection_retry).setOnClickListener({
|
findViewById<View>(R.id.button_no_connection_retry).setOnClickListener({
|
||||||
loadLogbook(logbook.name)
|
// This may happen at start, when logbook is still null: better ask the logbook list
|
||||||
|
loadLogbookList()
|
||||||
})
|
})
|
||||||
findViewById<View>(R.id.button_sync).setOnClickListener({
|
findViewById<View>(R.id.button_sync).setOnClickListener({
|
||||||
loadLogbook(logbook.name)
|
loadLogbookList()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,8 +139,11 @@ class MainActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
fun showLogbook() {
|
fun showLogbook() {
|
||||||
// Show logbook
|
// Show logbook
|
||||||
|
if (logbook == null)
|
||||||
|
Log.w(TAG, "showLogbook(): logbook is null!")
|
||||||
|
|
||||||
adapter.items.clear()
|
adapter.items.clear()
|
||||||
adapter.items.addAll(logbook.logs)
|
adapter.items.addAll(logbook?.logs ?: listOf())
|
||||||
adapter.notifyDataSetChanged()
|
adapter.notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,8 +168,13 @@ class MainActivity : AppCompatActivity() {
|
|||||||
// Update list dates
|
// Update list dates
|
||||||
adapter.notifyDataSetChanged()
|
adapter.notifyDataSetChanged()
|
||||||
|
|
||||||
// Reload data
|
if (logbook != null) {
|
||||||
loadLogbookList()
|
// Already running: reload data for currently selected logbook
|
||||||
|
loadLogbook(logbook!!.name)
|
||||||
|
} else {
|
||||||
|
// First start: load logbook list
|
||||||
|
loadLogbookList()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
@ -243,12 +254,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
val d = AlertDialog.Builder(this)
|
val d = AlertDialog.Builder(this)
|
||||||
val dialogView = layoutInflater.inflate(R.layout.dialog_notes, null)
|
val dialogView = layoutInflater.inflate(R.layout.dialog_notes, null)
|
||||||
d.setTitle(lunaEvent.getTypeDescription(this))
|
d.setTitle(lunaEvent.getTypeDescription(this))
|
||||||
d.setMessage(
|
d.setMessage(lunaEvent.getDialogMessage(this))
|
||||||
when (lunaEvent.type){
|
|
||||||
LunaEvent.TYPE_MEDICINE -> R.string.log_medicine_dialog_description
|
|
||||||
else -> R.string.log_notes_dialog_description
|
|
||||||
}
|
|
||||||
)
|
|
||||||
d.setView(dialogView)
|
d.setView(dialogView)
|
||||||
val notesET = dialogView.findViewById<EditText>(R.id.notes_edittext)
|
val notesET = dialogView.findViewById<EditText>(R.id.notes_edittext)
|
||||||
val qtyET = dialogView.findViewById<EditText>(R.id.notes_qty_edittext)
|
val qtyET = dialogView.findViewById<EditText>(R.id.notes_qty_edittext)
|
||||||
@ -283,7 +289,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
d.setPositiveButton(R.string.trim_logbook_dialog_button_ok) { dialogInterface, i ->
|
d.setPositiveButton(R.string.trim_logbook_dialog_button_ok) { dialogInterface, i ->
|
||||||
logbook.trim()
|
logbook?.trim()
|
||||||
saveLogbook()
|
saveLogbook()
|
||||||
}
|
}
|
||||||
d.setNegativeButton(R.string.trim_logbook_dialog_button_cancel) { dialogInterface, i ->
|
d.setNegativeButton(R.string.trim_logbook_dialog_button_cancel) { dialogInterface, i ->
|
||||||
@ -307,8 +313,10 @@ class MainActivity : AppCompatActivity() {
|
|||||||
dialogView.findViewById<TextView>(R.id.dialog_event_detail_type_notes).setText(event.notes)
|
dialogView.findViewById<TextView>(R.id.dialog_event_detail_type_notes).setText(event.notes)
|
||||||
d.setView(dialogView)
|
d.setView(dialogView)
|
||||||
d.setPositiveButton(android.R.string.ok) { dialogInterface, i -> dialogInterface.dismiss() }
|
d.setPositiveButton(android.R.string.ok) { dialogInterface, i -> dialogInterface.dismiss() }
|
||||||
|
d.setNeutralButton(R.string.dialog_event_detail_delete_button) { dialogInterface, i -> deleteEvent(event) }
|
||||||
val alertDialog = d.create()
|
val alertDialog = d.create()
|
||||||
alertDialog.show()
|
alertDialog.show()
|
||||||
|
alertDialog.getButton(DialogInterface.BUTTON_NEUTRAL).setTextColor(ContextCompat.getColor(this, R.color.danger))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun showAddLogbookDialog(requestedByUser: Boolean) {
|
fun showAddLogbookDialog(requestedByUser: Boolean) {
|
||||||
@ -372,15 +380,35 @@ class MainActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onIOError(error: IOException) {
|
override fun onIOError(error: IOException) {
|
||||||
TODO("Not yet implemented")
|
Log.e(TAG, "Unable to load logbooks list (IOError): $error")
|
||||||
|
runOnUiThread({
|
||||||
|
setLoading(false)
|
||||||
|
onRepoError(getString(R.string.settings_network_error) + error.toString())
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onWebDAVError(error: SardineException) {
|
override fun onWebDAVError(error: SardineException) {
|
||||||
TODO("Not yet implemented")
|
Log.e(TAG, "Unable to load logbooks list (SardineException): $error")
|
||||||
|
runOnUiThread({
|
||||||
|
setLoading(false)
|
||||||
|
onRepoError(
|
||||||
|
if(error.toString().contains("401")) {
|
||||||
|
getString(R.string.settings_webdav_error_denied)
|
||||||
|
} else if(error.toString().contains("503")) {
|
||||||
|
getString(R.string.settings_webdav_error_server_offline)
|
||||||
|
} else {
|
||||||
|
getString(R.string.settings_webdav_error_generic) + error.toString()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onError(error: Exception) {
|
override fun onError(error: Exception) {
|
||||||
TODO("Not yet implemented")
|
Log.e(TAG, "Unable to load logbooks list: $error")
|
||||||
|
runOnUiThread({
|
||||||
|
setLoading(false)
|
||||||
|
onRepoError(getString(R.string.settings_generic_error) + error.toString())
|
||||||
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -409,6 +437,8 @@ class MainActivity : AppCompatActivity() {
|
|||||||
onRepoError(
|
onRepoError(
|
||||||
if(error.toString().contains("401")) {
|
if(error.toString().contains("401")) {
|
||||||
getString(R.string.settings_webdav_error_denied)
|
getString(R.string.settings_webdav_error_denied)
|
||||||
|
} else if(error.toString().contains("503")) {
|
||||||
|
getString(R.string.settings_webdav_error_server_offline)
|
||||||
} else {
|
} else {
|
||||||
getString(R.string.settings_webdav_error_generic) + error.toString()
|
getString(R.string.settings_webdav_error_generic) + error.toString()
|
||||||
}
|
}
|
||||||
@ -449,7 +479,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
showLogbook()
|
showLogbook()
|
||||||
|
|
||||||
if (DEBUG_CHECK_LOGBOOK_CONSISTENCY) {
|
if (DEBUG_CHECK_LOGBOOK_CONSISTENCY) {
|
||||||
for (e in logbook.logs) {
|
for (e in logbook?.logs ?: listOf()) {
|
||||||
val em = e.getTypeEmoji(this@MainActivity)
|
val em = e.getTypeEmoji(this@MainActivity)
|
||||||
if (em == getString(R.string.event_unknown_type)) {
|
if (em == getString(R.string.event_unknown_type)) {
|
||||||
Log.e(TAG, "UNKNOWN: ${e.type}")
|
Log.e(TAG, "UNKNOWN: ${e.type}")
|
||||||
@ -472,6 +502,8 @@ class MainActivity : AppCompatActivity() {
|
|||||||
onRepoError(
|
onRepoError(
|
||||||
if(error.toString().contains("401")) {
|
if(error.toString().contains("401")) {
|
||||||
getString(R.string.settings_webdav_error_denied)
|
getString(R.string.settings_webdav_error_denied)
|
||||||
|
} else if(error.toString().contains("503")) {
|
||||||
|
getString(R.string.settings_webdav_error_server_offline)
|
||||||
} else {
|
} else {
|
||||||
getString(R.string.settings_webdav_error_generic) + error.toString()
|
getString(R.string.settings_webdav_error_generic) + error.toString()
|
||||||
}
|
}
|
||||||
@ -511,21 +543,37 @@ class MainActivity : AppCompatActivity() {
|
|||||||
recyclerView.smoothScrollToPosition(0)
|
recyclerView.smoothScrollToPosition(0)
|
||||||
|
|
||||||
setLoading(true)
|
setLoading(true)
|
||||||
logbook.logs.add(0, event)
|
logbook?.logs?.add(0, event)
|
||||||
saveLogbook(event)
|
saveLogbook(event)
|
||||||
|
|
||||||
// Check logbook size to avoid OOM errors
|
// Check logbook size to avoid OOM errors
|
||||||
if (logbook.isTooBig()) {
|
if (logbook?.isTooBig() == true) {
|
||||||
askToTrimLogbook()
|
askToTrimLogbook()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun deleteEvent(event: LunaEvent) {
|
||||||
|
// Update view
|
||||||
|
savingEvent(true)
|
||||||
|
adapter.items.remove(event)
|
||||||
|
adapter.notifyDataSetChanged()
|
||||||
|
|
||||||
|
// Update data
|
||||||
|
setLoading(true)
|
||||||
|
logbook?.logs?.remove(event)
|
||||||
|
saveLogbook()
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Saves the logbook. If saving while adding an event, please specify the event so in case
|
* Saves the logbook. If saving while adding an event, please specify the event so in case
|
||||||
* of error can be removed from the list.
|
* of error can be removed from the list.
|
||||||
*/
|
*/
|
||||||
fun saveLogbook(lastEventAdded: LunaEvent? = null) {
|
fun saveLogbook(lastEventAdded: LunaEvent? = null) {
|
||||||
logbookRepo?.saveLogbook(this, logbook, object: LogbookSavedListener{
|
if (logbook == null) {
|
||||||
|
Log.e(TAG, "Trying to save logbook, but logbook is null!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
logbookRepo?.saveLogbook(this, logbook!!, object: LogbookSavedListener{
|
||||||
override fun onLogbookSaved() {
|
override fun onLogbookSaved() {
|
||||||
Log.d(TAG, "Logbook saved")
|
Log.d(TAG, "Logbook saved")
|
||||||
runOnUiThread({
|
runOnUiThread({
|
||||||
@ -558,6 +606,8 @@ class MainActivity : AppCompatActivity() {
|
|||||||
onRepoError(
|
onRepoError(
|
||||||
if(error.toString().contains("401")) {
|
if(error.toString().contains("401")) {
|
||||||
getString(R.string.settings_webdav_error_denied)
|
getString(R.string.settings_webdav_error_denied)
|
||||||
|
} else if(error.toString().contains("503")) {
|
||||||
|
getString(R.string.settings_webdav_error_server_offline)
|
||||||
} else {
|
} else {
|
||||||
getString(R.string.settings_webdav_error_generic) + error.toString()
|
getString(R.string.settings_webdav_error_generic) + error.toString()
|
||||||
}
|
}
|
||||||
@ -647,6 +697,10 @@ class MainActivity : AppCompatActivity() {
|
|||||||
)
|
)
|
||||||
dismiss()
|
dismiss()
|
||||||
})
|
})
|
||||||
|
contentView.findViewById<View>(R.id.button_scale).setOnClickListener({
|
||||||
|
askWeightValue()
|
||||||
|
dismiss()
|
||||||
|
})
|
||||||
}.also { popupWindow ->
|
}.also { popupWindow ->
|
||||||
popupWindow.setOnDismissListener({
|
popupWindow.setOnDismissListener({
|
||||||
Handler(mainLooper).postDelayed({
|
Handler(mainLooper).postDelayed({
|
||||||
|
@ -27,6 +27,7 @@ class LunaEvent {
|
|||||||
val TYPE_CUSTOM = "CUSTOM"
|
val TYPE_CUSTOM = "CUSTOM"
|
||||||
val TYPE_COLIC = "COLIC"
|
val TYPE_COLIC = "COLIC"
|
||||||
val TYPE_TEMPERATURE = "TEMPERATURE"
|
val TYPE_TEMPERATURE = "TEMPERATURE"
|
||||||
|
val TYPE_FOOD = "FOOD"
|
||||||
}
|
}
|
||||||
|
|
||||||
private val jo: JSONObject
|
private val jo: JSONObject
|
||||||
@ -88,6 +89,7 @@ class LunaEvent {
|
|||||||
TYPE_NOTE -> R.string.event_note_type
|
TYPE_NOTE -> R.string.event_note_type
|
||||||
TYPE_TEMPERATURE -> R.string.event_temperature_type
|
TYPE_TEMPERATURE -> R.string.event_temperature_type
|
||||||
TYPE_COLIC -> R.string.event_colic_type
|
TYPE_COLIC -> R.string.event_colic_type
|
||||||
|
TYPE_FOOD -> R.string.event_food_type
|
||||||
else -> R.string.event_unknown_type
|
else -> R.string.event_unknown_type
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ -108,11 +110,19 @@ class LunaEvent {
|
|||||||
TYPE_NOTE -> R.string.event_note_desc
|
TYPE_NOTE -> R.string.event_note_desc
|
||||||
TYPE_TEMPERATURE -> R.string.event_temperature_desc
|
TYPE_TEMPERATURE -> R.string.event_temperature_desc
|
||||||
TYPE_COLIC -> R.string.event_colic_desc
|
TYPE_COLIC -> R.string.event_colic_desc
|
||||||
|
TYPE_FOOD -> R.string.event_food_desc
|
||||||
else -> R.string.event_unknown_desc
|
else -> R.string.event_unknown_desc
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getDialogMessage(context: Context): String? {
|
||||||
|
return when(type) {
|
||||||
|
TYPE_MEDICINE -> context.getString(R.string.log_medicine_dialog_description)
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun toJson(): JSONObject {
|
fun toJson(): JSONObject {
|
||||||
return jo
|
return jo
|
||||||
}
|
}
|
||||||
|
@ -103,19 +103,32 @@ class WebDAVLogbookRepository(val webDavURL: String, val username: String, val p
|
|||||||
listener: LogbookListObtainedListener
|
listener: LogbookListObtainedListener
|
||||||
) {
|
) {
|
||||||
Thread(Runnable {
|
Thread(Runnable {
|
||||||
val logbooksNames = arrayListOf<String>()
|
try {
|
||||||
for (dr: DavResource in sardine.list(webDavURL)){
|
val logbooksNames = arrayListOf<String>()
|
||||||
if(!dr.name.startsWith(FILE_NAME_START))
|
for (dr: DavResource in sardine.list(webDavURL)){
|
||||||
continue
|
if(!dr.name.startsWith(FILE_NAME_START))
|
||||||
if(!dr.name.endsWith(FILE_NAME_END))
|
continue
|
||||||
continue
|
if(!dr.name.endsWith(FILE_NAME_END))
|
||||||
logbooksNames.add(
|
continue
|
||||||
dr.name.replace("${FILE_NAME_START}_", "")
|
logbooksNames.add(
|
||||||
.replace(FILE_NAME_START, "")
|
dr.name.replace("${FILE_NAME_START}_", "")
|
||||||
.replace(FILE_NAME_END, "")
|
.replace(FILE_NAME_START, "")
|
||||||
)
|
.replace(FILE_NAME_END, "")
|
||||||
|
)
|
||||||
|
}
|
||||||
|
listener.onLogbookListObtained(logbooksNames)
|
||||||
|
} catch (e: SardineException) {
|
||||||
|
Log.e(TAG, e.toString())
|
||||||
|
listener.onWebDAVError(e)
|
||||||
|
} catch (e: IOException) {
|
||||||
|
Log.e(TAG, e.toString())
|
||||||
|
listener.onIOError(e)
|
||||||
|
} catch (e: SocketTimeoutException) {
|
||||||
|
Log.e(TAG, e.toString())
|
||||||
|
listener.onIOError(e)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
listener.onError(e)
|
||||||
}
|
}
|
||||||
listener.onLogbookListObtained(logbooksNames)
|
|
||||||
}).start()
|
}).start()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,7 +108,7 @@
|
|||||||
android:text="@string/event_bottle_type"/>
|
android:text="@string/event_bottle_type"/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/button_scale"
|
android:id="@+id/button_food"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
@ -116,7 +116,7 @@
|
|||||||
android:background="@drawable/button_background"
|
android:background="@drawable/button_background"
|
||||||
android:gravity="center_horizontal"
|
android:gravity="center_horizontal"
|
||||||
android:textSize="50dp"
|
android:textSize="50dp"
|
||||||
android:text="@string/event_scale_type"/>
|
android:text="@string/event_food_type"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
@ -59,6 +59,16 @@
|
|||||||
style="@style/OverflowMenuText"
|
style="@style/OverflowMenuText"
|
||||||
android:text="@string/overflow_event_colic"/>
|
android:text="@string/overflow_event_colic"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/button_scale"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:padding="20dp"
|
||||||
|
android:background="@drawable/dropdown_list_item_background"
|
||||||
|
style="@style/OverflowMenuText"
|
||||||
|
android:text="@string/overflow_event_scale"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</ScrollView>
|
</ScrollView>
|
@ -13,6 +13,7 @@
|
|||||||
<string name="log_temperature_dialog_title">Temperatura</string>
|
<string name="log_temperature_dialog_title">Temperatura</string>
|
||||||
<string name="log_temperature_dialog_description">Inserisci la temperatura</string>
|
<string name="log_temperature_dialog_description">Inserisci la temperatura</string>
|
||||||
|
|
||||||
|
<string name="overflow_event_scale">⚖️ Peso</string>
|
||||||
<string name="overflow_event_medicine">💊 Medicina</string>
|
<string name="overflow_event_medicine">💊 Medicina</string>
|
||||||
<string name="overflow_event_enema">🪠 Clistere</string>
|
<string name="overflow_event_enema">🪠 Clistere</string>
|
||||||
<string name="overflow_event_note">📝 Nota</string>
|
<string name="overflow_event_note">📝 Nota</string>
|
||||||
@ -20,6 +21,7 @@
|
|||||||
<string name="overflow_event_colic">💨 Colichette</string>
|
<string name="overflow_event_colic">💨 Colichette</string>
|
||||||
|
|
||||||
<string name="event_bottle_desc">Biberon</string>
|
<string name="event_bottle_desc">Biberon</string>
|
||||||
|
<string name="event_food_desc">Cibo</string>
|
||||||
<string name="event_scale_desc">Pesata</string>
|
<string name="event_scale_desc">Pesata</string>
|
||||||
<string name="event_breastfeeding_left_desc">Allatt. al seno (sx)</string>
|
<string name="event_breastfeeding_left_desc">Allatt. al seno (sx)</string>
|
||||||
<string name="event_breastfeeding_both_desc">Allatt. al seno</string>
|
<string name="event_breastfeeding_both_desc">Allatt. al seno</string>
|
||||||
@ -61,6 +63,7 @@
|
|||||||
<string name="settings_storage_dav_pass">Password</string>
|
<string name="settings_storage_dav_pass">Password</string>
|
||||||
<string name="settings_network_error">Impossibile raggiungere il server: </string>
|
<string name="settings_network_error">Impossibile raggiungere il server: </string>
|
||||||
<string name="settings_webdav_error_denied">Nome utente o password WebDAV sbagliati</string>
|
<string name="settings_webdav_error_denied">Nome utente o password WebDAV sbagliati</string>
|
||||||
|
<string name="settings_webdav_error_server_offline">Il server WebDAV non è al momento disponibile</string>
|
||||||
<string name="settings_webdav_error_generic">Si è verificato un errore tentando di accedere al server WebDAV:</string>
|
<string name="settings_webdav_error_generic">Si è verificato un errore tentando di accedere al server WebDAV:</string>
|
||||||
<string name="settings_webdav_creation_error_generic">Impossibile creare un file di salvataggio sul server WebDAV:</string>
|
<string name="settings_webdav_creation_error_generic">Impossibile creare un file di salvataggio sul server WebDAV:</string>
|
||||||
<string name="settings_webdav_creation_ok">Connessione al server WebDAV avvenuta con successo</string>
|
<string name="settings_webdav_creation_ok">Connessione al server WebDAV avvenuta con successo</string>
|
||||||
@ -80,11 +83,14 @@
|
|||||||
<string name="log_notes_dialog_note_hint">Inserisci le note</string>
|
<string name="log_notes_dialog_note_hint">Inserisci le note</string>
|
||||||
|
|
||||||
<string name="dialog_event_detail_title">Dettaglio evento</string>
|
<string name="dialog_event_detail_title">Dettaglio evento</string>
|
||||||
|
<string name="dialog_event_detail_save_button">Salva</string>
|
||||||
|
<string name="dialog_event_detail_delete_button">Elimina</string>
|
||||||
|
|
||||||
<string name="dialog_add_logbook_title">Aggiungi diario</string>
|
<string name="dialog_add_logbook_title">Aggiungi diario</string>
|
||||||
<string name="dialog_add_logbook_logbookname">👶 Nome del diario</string>
|
<string name="dialog_add_logbook_logbookname">👶 Nome del diario</string>
|
||||||
<string name="dialog_add_logbook_message">Scrivi un nome per identificare questo diario. Comparirà in cima allo schermo, e se usi WebDAV sarà incluso anche nel nome del file di salvataggio.\nSe vuoi un\'icona, inserisci una emoji!</string>
|
<string name="dialog_add_logbook_message">Scrivi un nome per identificare questo diario. Comparirà in cima allo schermo, e se usi WebDAV sarà incluso anche nel nome del file di salvataggio.\nSe vuoi un\'icona, inserisci una emoji!</string>
|
||||||
|
|
||||||
|
<string name="dialog_add_logbook_message_intro">Benvenuto! Per usare quest\'app devi creare almeno un diario. Probabilmente vuoi chiamarlo col nome di tuo figlio.</string>
|
||||||
<string name="default_logbook_name">👶 Il mio primo diario</string>
|
<string name="default_logbook_name">👶 Il mio primo diario</string>
|
||||||
<string name="logbook_created">Creato nuovo diario: </string>
|
<string name="logbook_created">Creato nuovo diario: </string>
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
<string name="log_temperature_dialog_description">Insert the temperature</string>
|
<string name="log_temperature_dialog_description">Insert the temperature</string>
|
||||||
|
|
||||||
<string name="event_bottle_type" translatable="false">🍼</string>
|
<string name="event_bottle_type" translatable="false">🍼</string>
|
||||||
|
<string name="event_food_type" translatable="false">🥣</string>
|
||||||
<string name="event_scale_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_left_type" translatable="false">🤱 ←</string>
|
||||||
<string name="event_breastfeeding_both_type" translatable="false">🤱 ↔</string>
|
<string name="event_breastfeeding_both_type" translatable="false">🤱 ↔</string>
|
||||||
@ -28,6 +29,7 @@
|
|||||||
<string name="event_unknown_type" translatable="false">\?</string>
|
<string name="event_unknown_type" translatable="false">\?</string>
|
||||||
|
|
||||||
<string name="event_bottle_desc">Baby bottle</string>
|
<string name="event_bottle_desc">Baby bottle</string>
|
||||||
|
<string name="event_food_desc">Food</string>
|
||||||
<string name="event_scale_desc">Weight</string>
|
<string name="event_scale_desc">Weight</string>
|
||||||
<string name="event_breastfeeding_left_desc">Breastfeeding (left)</string>
|
<string name="event_breastfeeding_left_desc">Breastfeeding (left)</string>
|
||||||
<string name="event_breastfeeding_both_desc">Breastfeeding</string>
|
<string name="event_breastfeeding_both_desc">Breastfeeding</string>
|
||||||
@ -41,6 +43,7 @@
|
|||||||
<string name="event_colic_desc">Gaseous colic</string>
|
<string name="event_colic_desc">Gaseous colic</string>
|
||||||
<string name="event_unknown_desc"></string>
|
<string name="event_unknown_desc"></string>
|
||||||
|
|
||||||
|
<string name="overflow_event_scale">⚖️ Weight</string>
|
||||||
<string name="overflow_event_medicine">💊 Medicine</string>
|
<string name="overflow_event_medicine">💊 Medicine</string>
|
||||||
<string name="overflow_event_enema">🪠 Enema</string>
|
<string name="overflow_event_enema">🪠 Enema</string>
|
||||||
<string name="overflow_event_note">📝 Note</string>
|
<string name="overflow_event_note">📝 Note</string>
|
||||||
@ -75,6 +78,7 @@
|
|||||||
<string name="settings_storage_dav_pass">Password</string>
|
<string name="settings_storage_dav_pass">Password</string>
|
||||||
<string name="settings_network_error">Unable to reach server: </string>
|
<string name="settings_network_error">Unable to reach server: </string>
|
||||||
<string name="settings_webdav_error_denied">Wrong WebDAV user or password</string>
|
<string name="settings_webdav_error_denied">Wrong WebDAV user or password</string>
|
||||||
|
<string name="settings_webdav_error_server_offline">WebDAV server is currently unavailable</string>
|
||||||
<string name="settings_webdav_error_generic">Error while trying to access WebDAV:</string>
|
<string name="settings_webdav_error_generic">Error while trying to access WebDAV:</string>
|
||||||
<string name="settings_webdav_creation_error_generic">Unable to save a file on the WebDAV server:</string>
|
<string name="settings_webdav_creation_error_generic">Unable to save a file on the WebDAV server:</string>
|
||||||
<string name="settings_webdav_creation_ok">Successfully connected with WebDAV server</string>
|
<string name="settings_webdav_creation_ok">Successfully connected with WebDAV server</string>
|
||||||
@ -103,6 +107,8 @@
|
|||||||
<string name="measurement_unit_temperature_base_metric" translatable="false">°C</string>
|
<string name="measurement_unit_temperature_base_metric" translatable="false">°C</string>
|
||||||
|
|
||||||
<string name="dialog_event_detail_title">Event detail</string>
|
<string name="dialog_event_detail_title">Event detail</string>
|
||||||
|
<string name="dialog_event_detail_save_button">Save</string>
|
||||||
|
<string name="dialog_event_detail_delete_button">Delete</string>
|
||||||
|
|
||||||
<string name="dialog_add_logbook_title">Add logbook</string>
|
<string name="dialog_add_logbook_title">Add logbook</string>
|
||||||
<string name="dialog_add_logbook_logbookname">👶 Logbook name</string>
|
<string name="dialog_add_logbook_logbookname">👶 Logbook name</string>
|
||||||
|
3
fastlane/metadata/android/en-US/changelogs/3.txt
Normal file
3
fastlane/metadata/android/en-US/changelogs/3.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Multiple children support
|
||||||
|
Fixed interface in devices with big font size
|
||||||
|
|
Reference in New Issue
Block a user