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
)