2 Commits

Author SHA1 Message Date
143713cd9b MainActivity: generate dynamic menu from last two weeks 2026-02-19 11:30:09 +01:00
000ac270f5 LunaEvent: rework sleep event
Make the UI more flexible and
slightly easier to understand.
2026-02-19 11:30:02 +01:00

View File

@@ -447,8 +447,8 @@ class MainActivity : AppCompatActivity() {
val invalidDurationTextColor = ContextCompat.getColor(this, R.color.danger) val invalidDurationTextColor = ContextCompat.getColor(this, R.color.danger)
// in seconds // in seconds
var sleepBegin = event.time var sleepStart = event.getStartTime()
var sleepEnd = event.time + event.quantity var sleepEnd = event.getEndTime()
fun isValidTime(timeUnix: Long): Boolean { fun isValidTime(timeUnix: Long): Boolean {
val now = System.currentTimeMillis() / 1000 val now = System.currentTimeMillis() / 1000
@@ -465,27 +465,31 @@ class MainActivity : AppCompatActivity() {
} }
fun updateFields() { fun updateFields() {
datePickerBegin.text = DateUtils.formatDateTime(sleepBegin) datePickerBegin.text = DateUtils.formatDateTime(sleepStart)
datePickerEnd.text = DateUtils.formatDateTime(sleepEnd) datePickerEnd.text = DateUtils.formatDateTime(sleepEnd)
durationTextView.setTextColor(currentDurationTextColor) durationTextView.setTextColor(currentDurationTextColor)
val duration = sleepEnd - sleepBegin val duration = sleepEnd - sleepStart
if (duration == 0L) { if (duration == 0L) {
// baby is sleeping // baby is sleeping
durationTextView.text = "💤" durationTextView.text = "💤"
dateDelimiter.visibility = View.GONE
datePickerEnd.visibility = View.GONE
} else { } else {
durationTextView.text = DateUtils.formatTimeDuration(applicationContext, duration) durationTextView.text = DateUtils.formatTimeDuration(applicationContext, duration)
if (!isValidTimeSpan(sleepBegin, sleepEnd)) { if (!isValidTimeSpan(sleepStart, sleepEnd)) {
durationTextView.setTextColor(invalidDurationTextColor) durationTextView.setTextColor(invalidDurationTextColor)
} }
dateDelimiter.visibility = View.VISIBLE
datePickerEnd.visibility = View.VISIBLE
} }
datePickerBegin.setTextColor(if (isValidTime(sleepBegin)) { currentDurationTextColor } else { invalidDurationTextColor }) datePickerBegin.setTextColor(if (isValidTime(sleepStart)) { currentDurationTextColor } else { invalidDurationTextColor })
datePickerEnd.setTextColor(if (isValidTime(sleepEnd)) { currentDurationTextColor } else { invalidDurationTextColor }) datePickerEnd.setTextColor(if (isValidTime(sleepEnd)) { currentDurationTextColor } else { invalidDurationTextColor })
} }
val pickedDateTimeBegin = dateTimePicker(event.time, datePickerBegin) { time: Long -> val pickedDateTimeBegin = dateTimePicker(event.time, datePickerBegin) { time: Long ->
sleepBegin = adjustToMinute(time) sleepStart = adjustToMinute(time)
updateFields() updateFields()
} }
@@ -494,7 +498,7 @@ class MainActivity : AppCompatActivity() {
updateFields() updateFields()
} }
sleepBegin = adjustToMinute(pickedDateTimeBegin.time.time / 1000) sleepStart = adjustToMinute(pickedDateTimeBegin.time.time / 1000)
sleepEnd = adjustToMinute(pickedDateTimeEnd.time.time / 1000) sleepEnd = adjustToMinute(pickedDateTimeEnd.time.time / 1000)
updateFields() updateFields()
@@ -514,17 +518,17 @@ class MainActivity : AppCompatActivity() {
} }
durationMinus5Button.setOnClickListener { durationMinus5Button.setOnClickListener {
sleepEnd = (sleepEnd - 300).coerceAtLeast(sleepBegin) sleepEnd = (sleepEnd - 300).coerceAtLeast(sleepStart)
updateFields() updateFields()
} }
durationPlus5Button.setOnClickListener { durationPlus5Button.setOnClickListener {
sleepEnd = (sleepEnd + 300).coerceAtLeast(sleepBegin) sleepEnd = (sleepEnd + 300).coerceAtLeast(sleepStart)
updateFields() updateFields()
} }
durationAsleepButton.setOnClickListener { durationAsleepButton.setOnClickListener {
sleepEnd = sleepBegin sleepEnd = sleepStart
updateFields() updateFields()
} }
@@ -535,9 +539,9 @@ class MainActivity : AppCompatActivity() {
} }
d.setPositiveButton(android.R.string.ok) { dialogInterface, i -> d.setPositiveButton(android.R.string.ok) { dialogInterface, i ->
if (isValidTime(sleepBegin) && isValidTime(sleepEnd) && isValidTimeSpan(sleepBegin, sleepEnd)) { if (isValidTime(sleepStart) && isValidTime(sleepEnd) && isValidTimeSpan(sleepStart, sleepEnd)) {
event.time = sleepBegin event.time = sleepStart
event.quantity = (sleepEnd - sleepBegin).toInt() event.quantity = (sleepEnd - sleepStart).toInt()
onPositive() onPositive()
} else { } else {
Toast.makeText(this, R.string.toast_date_error, Toast.LENGTH_SHORT).show() Toast.makeText(this, R.string.toast_date_error, Toast.LENGTH_SHORT).show()