From e7e76797585f0111ad8aea13911f90f2ea26a485 Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Tue, 15 Jul 2025 17:02:46 +0200 Subject: [PATCH 1/7] remove animation Signed-off-by: sowjanyakch --- .../main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt index adade63f0..4682a02f2 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt @@ -114,7 +114,7 @@ class DateTimeCompose(val bundle: Bundle) { ) { Surface( shape = RoundedCornerShape(INT_8.dp), - modifier = Modifier.fillMaxWidth().animateContentSize() + modifier = Modifier.fillMaxWidth() ) { Column( modifier = Modifier From e9a88594a3d8dd99a35c7dd28d3c982e2b15e6f3 Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Tue, 15 Jul 2025 17:19:02 +0200 Subject: [PATCH 2/7] modify remainder options Signed-off-by: sowjanyakch --- .../com/nextcloud/talk/ui/dialog/DateTimeCompose.kt | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt index 4682a02f2..a5acce21a 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt @@ -189,21 +189,21 @@ class DateTimeCompose(val bundle: Bundle) { .withHour(INT_18) .withMinute(0) .withSecond(0) - val laterTodayStr = laterToday.format(DateTimeFormatter.ofPattern(PATTERN)) + val laterTodayStr = laterToday.format(DateTimeFormatter.ofPattern(TIME_PATTERN)) val tomorrow = LocalDateTime.now() .plusDays(1) .withHour(INT_8) .withMinute(0) .withSecond(0) - val tomorrowStr = tomorrow.format(DateTimeFormatter.ofPattern(PATTERN)) + val tomorrowStr = tomorrow.format(DateTimeFormatter.ofPattern(DAY_TIME_PATTERN)) val thisWeekend = LocalDateTime.now() .with(nextOrSame(DayOfWeek.SATURDAY)) .withHour(INT_8) .withMinute(0) .withSecond(0) - val thisWeekendStr = thisWeekend.format(DateTimeFormatter.ofPattern(PATTERN)) + val thisWeekendStr = thisWeekend.format(DateTimeFormatter.ofPattern(DAY_TIME_PATTERN)) val nextWeek = LocalDateTime.now() .plusWeeks(1) @@ -211,7 +211,7 @@ class DateTimeCompose(val bundle: Bundle) { .withHour(INT_8) .withMinute(0) .withSecond(0) - val nextWeekStr = nextWeek.format(DateTimeFormatter.ofPattern(PATTERN)) + val nextWeekStr = nextWeek.format(DateTimeFormatter.ofPattern(DAY_TIME_PATTERN)) if (currTime < laterToday) { TimeOption( @@ -370,7 +370,9 @@ class DateTimeCompose(val bundle: Bundle) { } companion object { - private const val PATTERN = "dd MMM, HH:mm a" + private const val PATTERN = "dd MMM, HH:mm" + private const val TIME_PATTERN = "HH:mm" + private const val DAY_TIME_PATTERN = "EEE, HH:mm" private const val HALF_WEIGHT = 0.5f private const val INT_8 = 8 private const val INT_16 = 16 From 2d5eb786b4d13b73563608b03118501476c6db4a Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Tue, 15 Jul 2025 17:19:48 +0200 Subject: [PATCH 3/7] remove unused import Signed-off-by: sowjanyakch --- .../main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt index a5acce21a..caf29d304 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt @@ -10,7 +10,6 @@ package com.nextcloud.talk.ui.dialog import android.annotation.SuppressLint import android.content.Context import android.os.Bundle -import androidx.compose.animation.animateContentSize import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.BoxWithConstraints From e95cb50f2650a32bb2060b3281531778ddc8e20c Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Wed, 16 Jul 2025 11:52:11 +0200 Subject: [PATCH 4/7] hide past dates Signed-off-by: sowjanyakch --- .../talk/ui/dialog/DateTimeCompose.kt | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt index caf29d304..e72b4f1c3 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt @@ -31,6 +31,7 @@ import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.SelectableDates import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.TextButton @@ -259,8 +260,9 @@ class DateTimeCompose(val bundle: Bundle) { Row( modifier = Modifier .padding(INT_8.dp) + .fillMaxWidth() ) { - Text(stringResource(R.string.nc_remind), modifier = Modifier.weight(1f)) + Text(stringResource(R.string.nc_remind), modifier = Modifier.weight(HALF_WEIGHT)) val reminderState = chatViewModel.getReminderExistState .asFlow() @@ -276,9 +278,16 @@ class DateTimeCompose(val bundle: Bundle) { else -> {} } - if (timeState.value != LocalDateTime.ofEpochSecond(0, 0, ZoneOffset.MIN)) { - Text(timeState.value.format(DateTimeFormatter.ofPattern(PATTERN))) + val timeText = if (timeState.value != LocalDateTime.ofEpochSecond(0, 0, ZoneOffset.MIN)) { + timeState.value.format(DateTimeFormatter.ofPattern(PATTERN)) + } else { + "" } + + Text( + timeText, + modifier = Modifier.weight(HALF_WEIGHT) + ) } HorizontalDivider() } @@ -294,8 +303,24 @@ class DateTimeCompose(val bundle: Bundle) { modifier = Modifier.verticalScroll(scrollState) ) { if (!isCollapsed.value) { - val datePickerState = rememberDatePickerState() - val timePickerState = rememberTimePickerState() + val todayMillis = LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant().toEpochMilli() + val currentYear = LocalDate.now().year + val selectableDates = object : SelectableDates { + override fun isSelectableDate(utcTimeMillis: Long): Boolean = + utcTimeMillis >= todayMillis + + override fun isSelectableYear(year: Int): Boolean = + year >= currentYear + } + + val datePickerState = rememberDatePickerState( + selectableDates = selectableDates + ) + val now = LocalDateTime.now() + val timePickerState = rememberTimePickerState( + initialHour = now.hour, + initialMinute = now.minute + ) BoxWithConstraints( modifier = Modifier From a18723c9f9429a6ed179a83ddec351e9bbb4c421 Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Mon, 21 Jul 2025 16:26:53 +0200 Subject: [PATCH 5/7] avoid transparent color for year selection Signed-off-by: sowjanyakch --- .../nextcloud/talk/ui/dialog/DateTimeCompose.kt | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt index e72b4f1c3..db9097659 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt @@ -17,6 +17,7 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.requiredSizeIn import androidx.compose.foundation.layout.size @@ -27,6 +28,7 @@ import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.DateRange import androidx.compose.material3.DatePicker +import androidx.compose.material3.DatePickerDefaults import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon @@ -306,11 +308,9 @@ class DateTimeCompose(val bundle: Bundle) { val todayMillis = LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant().toEpochMilli() val currentYear = LocalDate.now().year val selectableDates = object : SelectableDates { - override fun isSelectableDate(utcTimeMillis: Long): Boolean = - utcTimeMillis >= todayMillis + override fun isSelectableDate(utcTimeMillis: Long): Boolean = utcTimeMillis >= todayMillis - override fun isSelectableYear(year: Int): Boolean = - year >= currentYear + override fun isSelectableYear(year: Int): Boolean = year >= currentYear } val datePickerState = rememberDatePickerState( @@ -331,10 +331,15 @@ class DateTimeCompose(val bundle: Bundle) { DatePicker( state = datePickerState, modifier = Modifier - .scale(scale) + .scale(scale), + colors = DatePickerDefaults.colors( + containerColor = Color.White + ) ) } + Spacer(modifier = Modifier.height(16.dp)) + TimePicker( state = timePickerState ) From 50f289ca63b413ee2b6303981d3a0fb29dc7363a Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Mon, 4 Aug 2025 12:59:55 +0200 Subject: [PATCH 6/7] use 12/24 hour format Signed-off-by: sowjanyakch --- .../talk/ui/dialog/DateTimeCompose.kt | 31 +++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt index db9097659..dc233919c 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt @@ -10,6 +10,7 @@ package com.nextcloud.talk.ui.dialog import android.annotation.SuppressLint import android.content.Context import android.os.Bundle +import android.text.format.DateFormat import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.BoxWithConstraints @@ -50,6 +51,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.scale import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog @@ -185,27 +187,31 @@ class DateTimeCompose(val bundle: Bundle) { @Composable private fun Body() { + val context = LocalContext.current val currTime = LocalDateTime.now() + val timeFormatter = DateTimeFormatter.ofPattern(timePattern(context)) + val dayTimeFormatter = DateTimeFormatter.ofPattern(dayTimePattern(context)) + val laterToday = LocalDateTime.now() .withHour(INT_18) .withMinute(0) .withSecond(0) - val laterTodayStr = laterToday.format(DateTimeFormatter.ofPattern(TIME_PATTERN)) + val laterTodayStr = laterToday.format(timeFormatter) val tomorrow = LocalDateTime.now() .plusDays(1) .withHour(INT_8) .withMinute(0) .withSecond(0) - val tomorrowStr = tomorrow.format(DateTimeFormatter.ofPattern(DAY_TIME_PATTERN)) + val tomorrowStr = tomorrow.format(dayTimeFormatter) val thisWeekend = LocalDateTime.now() .with(nextOrSame(DayOfWeek.SATURDAY)) .withHour(INT_8) .withMinute(0) .withSecond(0) - val thisWeekendStr = thisWeekend.format(DateTimeFormatter.ofPattern(DAY_TIME_PATTERN)) + val thisWeekendStr = thisWeekend.format(dayTimeFormatter) val nextWeek = LocalDateTime.now() .plusWeeks(1) @@ -213,7 +219,7 @@ class DateTimeCompose(val bundle: Bundle) { .withHour(INT_8) .withMinute(0) .withSecond(0) - val nextWeekStr = nextWeek.format(DateTimeFormatter.ofPattern(DAY_TIME_PATTERN)) + val nextWeekStr = nextWeek.format(dayTimeFormatter) if (currTime < laterToday) { TimeOption( @@ -259,6 +265,7 @@ class DateTimeCompose(val bundle: Bundle) { @Composable private fun Header() { + val context = LocalContext.current Row( modifier = Modifier .padding(INT_8.dp) @@ -281,7 +288,7 @@ class DateTimeCompose(val bundle: Bundle) { } val timeText = if (timeState.value != LocalDateTime.ofEpochSecond(0, 0, ZoneOffset.MIN)) { - timeState.value.format(DateTimeFormatter.ofPattern(PATTERN)) + timeState.value.format(DateTimeFormatter.ofPattern(fullPattern(context))) } else { "" } @@ -319,7 +326,8 @@ class DateTimeCompose(val bundle: Bundle) { val now = LocalDateTime.now() val timePickerState = rememberTimePickerState( initialHour = now.hour, - initialMinute = now.minute + initialMinute = now.minute, + is24Hour = DateFormat.is24HourFormat(LocalContext.current) ) BoxWithConstraints( @@ -385,6 +393,14 @@ class DateTimeCompose(val bundle: Bundle) { } } + private fun timePattern(context: Context): String = if (DateFormat.is24HourFormat(context)) "HH:mm" else "hh:mm a" + + private fun dayTimePattern(context: Context): String = + if (DateFormat.is24HourFormat(context)) "EEE, HH:mm" else "EEE, hh:mm a" + + private fun fullPattern(context: Context): String = + if (DateFormat.is24HourFormat(context)) "dd MMM, HH:mm" else "dd MMM, hh:mm a" + @Composable private fun TimeOption(label: String, timeString: String, onClick: () -> Unit) { Row( @@ -399,9 +415,6 @@ class DateTimeCompose(val bundle: Bundle) { } companion object { - private const val PATTERN = "dd MMM, HH:mm" - private const val TIME_PATTERN = "HH:mm" - private const val DAY_TIME_PATTERN = "EEE, HH:mm" private const val HALF_WEIGHT = 0.5f private const val INT_8 = 8 private const val INT_16 = 16 From be7c2fa6621c2401d160469e79a5bd44c8c0f2fb Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Tue, 29 Jul 2025 15:06:57 +0200 Subject: [PATCH 7/7] align reminder options with web Signed-off-by: sowjanyakch --- .../talk/ui/dialog/DateTimeCompose.kt | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt index dc233919c..a44962d25 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimeCompose.kt @@ -230,16 +230,14 @@ class DateTimeCompose(val bundle: Bundle) { } } - if (tomorrow.dayOfWeek < DayOfWeek.SATURDAY) { - TimeOption( - label = stringResource(R.string.tomorrow), - timeString = tomorrowStr - ) { - setTime(tomorrow) - } + TimeOption( + label = stringResource(R.string.tomorrow), + timeString = tomorrowStr + ) { + setTime(tomorrow) } - if (currTime.dayOfWeek < DayOfWeek.SATURDAY) { + if (currTime.dayOfWeek < DayOfWeek.FRIDAY) { TimeOption( label = stringResource(R.string.this_weekend), timeString = thisWeekendStr @@ -248,11 +246,13 @@ class DateTimeCompose(val bundle: Bundle) { } } - TimeOption( - label = stringResource(R.string.next_week), - timeString = nextWeekStr - ) { - setTime(nextWeek) + if (currTime.dayOfWeek != DayOfWeek.SUNDAY) { + TimeOption( + label = stringResource(R.string.next_week), + timeString = nextWeekStr + ) { + setTime(nextWeek) + } } HorizontalDivider()