summaryrefslogtreecommitdiff
path: root/anastasis/src/main/java/net/taler/anastasis/shared/Utils.kt
diff options
context:
space:
mode:
Diffstat (limited to 'anastasis/src/main/java/net/taler/anastasis/shared/Utils.kt')
-rw-r--r--anastasis/src/main/java/net/taler/anastasis/shared/Utils.kt80
1 files changed, 80 insertions, 0 deletions
diff --git a/anastasis/src/main/java/net/taler/anastasis/shared/Utils.kt b/anastasis/src/main/java/net/taler/anastasis/shared/Utils.kt
new file mode 100644
index 0000000..916dd36
--- /dev/null
+++ b/anastasis/src/main/java/net/taler/anastasis/shared/Utils.kt
@@ -0,0 +1,80 @@
+/*
+ * This file is part of GNU Taler
+ * (C) 2023 Taler Systems S.A.
+ *
+ * GNU Taler 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, or (at your option) any later version.
+ *
+ * GNU Taler 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
+ * GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+package net.taler.anastasis.shared
+
+import android.os.Build
+import io.matthewnelson.encoding.base32.Base32
+import io.matthewnelson.encoding.core.Decoder.Companion.decodeToByteArray
+import io.matthewnelson.encoding.core.Encoder.Companion.encodeToString
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.flow.flow
+import kotlinx.datetime.Clock
+import kotlinx.datetime.LocalDate
+import kotlinx.datetime.TimeZone
+import kotlinx.datetime.toJavaLocalDate
+import kotlinx.datetime.toLocalDateTime
+import kotlinx.serialization.encodeToString
+import kotlinx.serialization.json.Json
+import org.json.JSONArray
+import org.json.JSONObject
+import java.nio.charset.Charset
+import java.text.SimpleDateFormat
+import java.time.format.DateTimeFormatter
+import java.util.Locale
+import kotlin.time.Duration
+
+object Utils {
+ fun formatDate(date: LocalDate): String {
+ val javaDate = date.toJavaLocalDate()
+ return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
+ javaDate.format(formatter)
+ } else {
+ val formatter = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
+ formatter.format(date)
+ }
+ }
+
+ val currentDate: LocalDate
+ get() = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()).date
+
+ inline fun <reified T> Json.encodeToNativeJson(value: T): JSONObject =
+ JSONObject(encodeToString(value))
+
+ inline fun <reified T> Json.encodeToNativeJson(value: Collection<T>): JSONArray =
+ JSONArray(encodeToString(value))
+
+ fun encodeBase32 (input: String) = input
+ .toByteArray(Charset.defaultCharset())
+ .encodeToString(Base32.Crockford)
+
+ fun encodeBase32 (input: ByteArray) = input
+ .encodeToString(Base32.Crockford)
+
+ fun decodeBase32 (input: String) = input
+ .decodeToByteArray(Base32.Crockford)
+ .toString(Charset.defaultCharset())
+
+ // Source: https://stackoverflow.com/questions/54827455/how-to-implement-timer-with-kotlin-coroutines/54828055#54828055
+ fun tickerFlow(period: Duration, initialDelay: Duration = Duration.ZERO) = flow {
+ delay(initialDelay)
+ while (true) {
+ emit(Unit)
+ delay(period)
+ }
+ }
+} \ No newline at end of file