diff --git a/core/ui/src/main/java/com/sadellie/unitto/core/ui/datetime/DateTimeFormatter.kt b/core/ui/src/main/java/com/sadellie/unitto/core/ui/datetime/DateTimeFormatter.kt deleted file mode 100644 index d40da1c6..00000000 --- a/core/ui/src/main/java/com/sadellie/unitto/core/ui/datetime/DateTimeFormatter.kt +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Unitto is a unit converter for Android - * Copyright (c) 2023 Elshan Agaev - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.sadellie.unitto.core.ui.datetime - -import java.time.format.DateTimeFormatter - -// FIXME Duplicate from date difference -internal val time24Formatter by lazy { DateTimeFormatter.ofPattern("HH:mm") } -internal val time12Formatter by lazy { DateTimeFormatter.ofPattern("hh:mm a") } -internal val dayMonthYear by lazy { DateTimeFormatter.ofPattern("d MMM y") } -internal val zoneFormatPattern by lazy { DateTimeFormatter.ofPattern("O") } diff --git a/core/ui/src/main/java/com/sadellie/unitto/core/ui/datetime/LocalDateTimeUtils.kt b/core/ui/src/main/java/com/sadellie/unitto/core/ui/datetime/LocalDateTimeUtils.kt deleted file mode 100644 index b4d6ca5d..00000000 --- a/core/ui/src/main/java/com/sadellie/unitto/core/ui/datetime/LocalDateTimeUtils.kt +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Unitto is a unit converter for Android - * Copyright (c) 2023 Elshan Agaev - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.sadellie.unitto.core.ui.datetime - -import android.text.format.DateFormat -import androidx.compose.runtime.Composable -import androidx.compose.ui.platform.LocalContext -import java.time.LocalDateTime - -@Composable -fun LocalDateTime.formatLocal(): String { - return if (DateFormat.is24HourFormat(LocalContext.current)) format24() - else format12() -} - -/** - * Formats [LocalDateTime] into string that looks like - * - * 23:58 - * - * @return Formatted string. - */ -fun LocalDateTime.format24(): String = this.format(time24Formatter) - -/** - * Formats [LocalDateTime] into string that looks like - * - * 11:58 am - * - * @return Formatted string. - */ -fun LocalDateTime.format12(): String = this.format(time12Formatter) diff --git a/core/ui/src/main/java/com/sadellie/unitto/core/ui/datetime/UnittoDateTimeFormatter.kt b/core/ui/src/main/java/com/sadellie/unitto/core/ui/datetime/UnittoDateTimeFormatter.kt new file mode 100644 index 00000000..d95e770a --- /dev/null +++ b/core/ui/src/main/java/com/sadellie/unitto/core/ui/datetime/UnittoDateTimeFormatter.kt @@ -0,0 +1,58 @@ +/* + * Unitto is a unit converter for Android + * Copyright (c) 2023 Elshan Agaev + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.sadellie.unitto.core.ui.datetime + +import java.time.format.DateTimeFormatter + +data object UnittoDateTimeFormatter { + /** + * 23:59 + */ + val time24Formatter: DateTimeFormatter by lazy { DateTimeFormatter.ofPattern("HH:mm") } + + /** + * 11:59 AM + */ + val time12FormatterFull: DateTimeFormatter by lazy { DateTimeFormatter.ofPattern("hh:mm a") } + + /** + * 11:59 + */ + val time12Formatter1: DateTimeFormatter by lazy { DateTimeFormatter.ofPattern("hh:mm") } + + /** + * AM + */ + val time12Formatter2: DateTimeFormatter by lazy { DateTimeFormatter.ofPattern("a") } + + /** + * 31 Dec 2077 + */ + val dayMonthYear: DateTimeFormatter by lazy { DateTimeFormatter.ofPattern("d MMM y") } + + /** + * Mon, 31 Dec, 2077 + */ + val weekDayMonthYear: DateTimeFormatter by lazy { DateTimeFormatter.ofPattern("EEE, MMM d, y") } + + /** + * GMT+3 + */ + val zoneFormatPattern: DateTimeFormatter by lazy { DateTimeFormatter.ofPattern("O") } +} diff --git a/core/ui/src/main/java/com/sadellie/unitto/core/ui/datetime/ZonedDateTimeUtils.kt b/core/ui/src/main/java/com/sadellie/unitto/core/ui/datetime/ZonedDateTimeUtils.kt index ad680fe4..e613546e 100644 --- a/core/ui/src/main/java/com/sadellie/unitto/core/ui/datetime/ZonedDateTimeUtils.kt +++ b/core/ui/src/main/java/com/sadellie/unitto/core/ui/datetime/ZonedDateTimeUtils.kt @@ -29,39 +29,10 @@ import kotlin.math.absoluteValue @Composable fun ZonedDateTime.formatLocal(): String { - return if (DateFormat.is24HourFormat(LocalContext.current)) format24() - else format12() + return if (DateFormat.is24HourFormat(LocalContext.current)) format(UnittoDateTimeFormatter.time24Formatter) + else format(UnittoDateTimeFormatter.time12FormatterFull) } -/** - * Formats [ZonedDateTime] into string that looks like - * - * 23:58 - * - * @return Formatted string. - */ -fun ZonedDateTime.format24(): String = this.format(time24Formatter) - -/** - * Formats [ZonedDateTime] into string that looks like - * - * 11:58 am - * - * @return Formatted string. - */ -fun ZonedDateTime.format12(): String = this.format(time12Formatter) - -/** - * Formats [ZonedDateTime] into string that looks like - * - * 21 Jul 2023 - * - * @return Formatted string. - */ -fun ZonedDateTime.formatDayMonthYear(): String = this.format(dayMonthYear) - -fun ZonedDateTime.formatTimeZoneOffset(): String = this.format(zoneFormatPattern) - /** * Format offset string. Examples: * diff --git a/feature/datedifference/src/main/java/com/sadellie/unitto/feature/datedifference/components/DateTimeSelectorBlock.kt b/feature/datedifference/src/main/java/com/sadellie/unitto/feature/datedifference/components/DateTimeSelectorBlock.kt index 3d30851e..da75cd76 100644 --- a/feature/datedifference/src/main/java/com/sadellie/unitto/feature/datedifference/components/DateTimeSelectorBlock.kt +++ b/feature/datedifference/src/main/java/com/sadellie/unitto/feature/datedifference/components/DateTimeSelectorBlock.kt @@ -36,8 +36,8 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.sadellie.unitto.core.ui.common.squashable +import com.sadellie.unitto.core.ui.datetime.UnittoDateTimeFormatter import java.time.ZonedDateTime -import java.time.format.DateTimeFormatter @Composable internal fun DateTimeSelectorBlock( @@ -70,7 +70,7 @@ internal fun DateTimeSelectorBlock( interactionSource = remember { MutableInteractionSource() }, onClick = onTimeClick ), - text = dateTime.format(time24Formatter), + text = dateTime.format(UnittoDateTimeFormatter.time24Formatter), style = MaterialTheme.typography.displaySmall, maxLines = 1 ) @@ -83,12 +83,12 @@ internal fun DateTimeSelectorBlock( ) ) { Text( - text = dateTime.format(time12Formatter), + text = dateTime.format(UnittoDateTimeFormatter.time12Formatter1), style = MaterialTheme.typography.displaySmall, maxLines = 1 ) Text( - text = dateTime.format(mTimeFormatter), + text = dateTime.format(UnittoDateTimeFormatter.time12Formatter2), style = MaterialTheme.typography.bodyLarge, maxLines = 1 ) @@ -101,17 +101,12 @@ internal fun DateTimeSelectorBlock( interactionSource = remember { MutableInteractionSource() }, onClick = onDateClick ), - text = dateTime.format(dateFormatter), + text = dateTime.format(UnittoDateTimeFormatter.weekDayMonthYear), style = MaterialTheme.typography.bodySmall ) } } -private val time24Formatter by lazy { DateTimeFormatter.ofPattern("HH:mm") } -private val time12Formatter by lazy { DateTimeFormatter.ofPattern("hh:mm") } -private val dateFormatter by lazy { DateTimeFormatter.ofPattern("EEE, MMM d, y") } -private val mTimeFormatter by lazy { DateTimeFormatter.ofPattern("a") } - @Preview @Composable fun DateTimeSelectorBlockPreview() { diff --git a/feature/timezone/src/main/java/com/sadellie/unitto/timezone/TimeZoneScreen.kt b/feature/timezone/src/main/java/com/sadellie/unitto/timezone/TimeZoneScreen.kt index aba669f6..d28a465b 100644 --- a/feature/timezone/src/main/java/com/sadellie/unitto/timezone/TimeZoneScreen.kt +++ b/feature/timezone/src/main/java/com/sadellie/unitto/timezone/TimeZoneScreen.kt @@ -83,9 +83,8 @@ import com.sadellie.unitto.core.ui.common.SettingsButton import com.sadellie.unitto.core.ui.common.TimePickerDialog import com.sadellie.unitto.core.ui.common.UnittoScreenWithTopBar import com.sadellie.unitto.core.ui.common.squashable -import com.sadellie.unitto.core.ui.datetime.formatDayMonthYear +import com.sadellie.unitto.core.ui.datetime.UnittoDateTimeFormatter import com.sadellie.unitto.core.ui.datetime.formatLocal -import com.sadellie.unitto.core.ui.datetime.formatTimeZoneOffset import com.sadellie.unitto.core.ui.theme.AppTypography import com.sadellie.unitto.core.ui.theme.DarkThemeColors import com.sadellie.unitto.core.ui.theme.LightThemeColors @@ -286,11 +285,10 @@ private fun UserTimeZone( ) { Column(Modifier.weight(1f)) { Text( - text = userTime.formatTimeZoneOffset(), + text = userTime.format(UnittoDateTimeFormatter.zoneFormatPattern), style = MaterialTheme.typography.bodyLarge, color = MaterialTheme.colorScheme.onTertiaryContainer ) - // TODO Swipe to increase, touch to set AnimatedContent( targetState = userTime.formatLocal(), label = "user time change", @@ -307,7 +305,7 @@ private fun UserTimeZone( ) } Text( - text = userTime.formatDayMonthYear(), + text = userTime.format(UnittoDateTimeFormatter.dayMonthYear), style = MaterialTheme.typography.headlineMedium, color = MaterialTheme.colorScheme.onTertiaryContainer )