diff --git a/app/src/main/java/eu/pkgsoftware/babybuddywidgets/history/TimelineEntry.kt b/app/src/main/java/eu/pkgsoftware/babybuddywidgets/history/TimelineEntry.kt
index 4576742..01ef4ac 100644
--- a/app/src/main/java/eu/pkgsoftware/babybuddywidgets/history/TimelineEntry.kt
+++ b/app/src/main/java/eu/pkgsoftware/babybuddywidgets/history/TimelineEntry.kt
@@ -114,17 +114,56 @@ class TimelineEntry(private val fragment: BaseFragment, private var _entry: Time
val time_diff_minutes_str = time_diff_minutes.toString().padStart(2, '0')
val time_diff_string = "$time_diff_hours:${time_diff_minutes_str}"
- val start_time = TIME_FORMAT.format(local_start_time)
- val end_time = TIME_FORMAT.format(local_end_time)
- val opt_time_range = if (time_diff < 30) start_time else "$start_time - $end_time ($time_diff_string)"
+ val local_start_date_str = DATE_FORMAT.format(local_start_time)
+ val local_end_date_str = DATE_FORMAT.format(local_end_time)
+ val local_start_time_str = TIME_FORMAT.format(local_start_time)
+ val local_end_time_str = TIME_FORMAT.format(local_end_time)
+
+ val opt_time_diff_or_empty = (
+ if (time_diff < 30)
+ ""
+ else
+ "($time_diff_string)"
+ )
+ val opt_time_range = (
+ if (time_diff < 30)
+ local_start_time_str
+ else
+ "$local_start_time_str - $local_end_time_str ($opt_time_diff_or_empty)"
+ )
+
+ val endTimeAgoMinutes = (System.currentTimeMillis() / 1000 - end_utc.toEpochSecond()) / 60
+ val conditional_time_ago: String = run {
+ val timeAgoPattern = Phrase.from(fragment.resources, R.string.history_time_ago)
+
+ if (endTimeAgoMinutes < 1) {
+ fragment.resources.getString(R.string.history_time_just_now)
+ } else if (endTimeAgoMinutes < 120) {
+ val minuteStr = fragment.resources.getQuantityString(
+ R.plurals.unit_minutes,
+ endTimeAgoMinutes.toInt()
+ )
+ val t = timeAgoPattern.put("value", "${endTimeAgoMinutes} ${minuteStr}").format().toString()
+ "${t} ${opt_time_diff_or_empty}".trim()
+ } else if (endTimeAgoMinutes < (24 * 60)) {
+ val hours = endTimeAgoMinutes / 60
+ val hoursStr =
+ fragment.resources.getQuantityString(R.plurals.unit_hours, hours.toInt())
+ val t = timeAgoPattern.put("value", "${hours} ${hoursStr}").format().toString()
+ "${t} ${opt_time_diff_or_empty}".trim()
+ } else {
+ "${local_start_date_str} ${opt_time_range}"
+ }
+ }
return phrase
.putOptional("type", entry!!.appType)
- .putOptional("start_date", DATE_FORMAT.format(local_start_time))
- .putOptional("start_time", TIME_FORMAT.format(local_start_time))
- .putOptional("end_date", DATE_FORMAT.format(local_end_time))
- .putOptional("end_time", TIME_FORMAT.format(local_end_time))
+ .putOptional("start_date", local_start_date_str)
+ .putOptional("start_time", local_start_time_str)
+ .putOptional("end_date", local_end_date_str)
+ .putOptional("end_time", local_end_time_str)
.putOptional("opt_time_range", opt_time_range)
+ .putOptional("conditional_time_ago", conditional_time_ago)
.putOptional("time_diff", time_diff_string)
.putOptional("notes", entry!!.notes.trim { it <= ' ' })
}
@@ -133,7 +172,7 @@ class TimelineEntry(private val fragment: BaseFragment, private var _entry: Time
hideAllSubviews()
binding.viewGroup.getChildAt(0).visibility = View.VISIBLE
val message = defaultPhraseFields(
- Phrase.from("{type}\n{start_date} {opt_time_range}")
+ Phrase.from("{type}\n{conditional_time_ago}")
).format().toString()
binding.defaultContent.text = message
}
@@ -142,7 +181,7 @@ class TimelineEntry(private val fragment: BaseFragment, private var _entry: Time
hideAllSubviews()
binding.tummyTimeView.visibility = View.VISIBLE
val message = defaultPhraseFields(
- Phrase.from("{start_date} {opt_time_range}\n{notes}")
+ Phrase.from("{conditional_time_ago}\n{notes}")
).format().toString().trim { it <= ' ' }
binding.tummytimeMilestoneText.text = message
}
@@ -171,7 +210,7 @@ class TimelineEntry(private val fragment: BaseFragment, private var _entry: Time
amountString = interpreteAmountValue(fragment, change.amount)
}
val message = defaultPhraseFields(
- Phrase.from("{start_date} {start_time}\n{amount}{notes}")
+ Phrase.from("{conditional_time_ago}\n{amount}{notes}")
).put("amount", amountString).format().toString().trim { it <= ' ' }
binding.diaperText.text = message.trim { it <= ' ' }
}
@@ -180,7 +219,7 @@ class TimelineEntry(private val fragment: BaseFragment, private var _entry: Time
hideAllSubviews()
binding.sleepView.visibility = View.VISIBLE
val message = defaultPhraseFields(
- Phrase.from("{start_date} {opt_time_range}\n{notes}")
+ Phrase.from("{conditional_time_ago}\n{notes}")
).format().toString().trim { it <= ' ' }
binding.sleepText.text = message.trim { it <= ' ' }
}
@@ -189,7 +228,7 @@ class TimelineEntry(private val fragment: BaseFragment, private var _entry: Time
hideAllSubviews()
binding.noteTimeView.visibility = View.VISIBLE
val message = defaultPhraseFields(
- Phrase.from("{start_date} {start_time}\n{notes}")
+ Phrase.from("{conditional_time_ago}\n{notes}")
).format().toString().trim { it <= ' ' }
binding.noteTimeEntryText.text = message.trim { it <= ' ' }
}
@@ -199,7 +238,7 @@ class TimelineEntry(private val fragment: BaseFragment, private var _entry: Time
val pumping = entry!! as PumpingEntry
binding.pumpingTimeView.visibility = View.VISIBLE
val message = defaultPhraseFields(
- Phrase.from("{start_date} {opt_time_range}\n{amount}{notes}")
+ Phrase.from("{conditional_time_ago}\n{amount}{notes}")
).put(
"amount", interpreteAmountValue(fragment, pumping.amount)
).format().toString().trim { it <= ' ' }
@@ -242,7 +281,7 @@ class TimelineEntry(private val fragment: BaseFragment, private var _entry: Time
}
val message = defaultPhraseFields(
- Phrase.from("{start_date} {opt_time_range}\n{amount}{notes}")
+ Phrase.from("{conditional_time_ago}\n{amount}{notes}")
).put(
"amount", interpreteAmountValue(fragment, feeding.amount)
).format().toString().trim { it <= ' ' }
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e2c8ee0..e024c12 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -32,6 +32,16 @@
Third party media
Third party libraries
+
+
+ - minute
+ - minutes
+
+
+ - hour
+ - hours
+
+
sleep
tummy time
@@ -138,6 +148,8 @@
Failed to correct conflicting time entries
+ just now
+ {value} ago
Delete entry
Are you sure you want to delete the {type} entry from {start_date} {start_time} - {end_time}?