Upgrade Kotlin, AGP, Gradle versions and bring in kotlinx-serialization for use with navigation-compose.

This commit is contained in:
Alex Hart
2025-09-17 12:41:18 -03:00
committed by Greyson Parrelli
parent 957ddc82b5
commit 736811393f
25 changed files with 1209 additions and 5 deletions

View File

@@ -0,0 +1,38 @@
/*
* Copyright 2025 Signal Messenger, LLC
* SPDX-License-Identifier: AGPL-3.0-only
*/
package org.thoughtcrime.securesms.serialization
import android.net.Uri
import android.os.Bundle
import androidx.navigation.NavType
import kotlinx.serialization.KSerializer
import kotlinx.serialization.json.Json
/**
* NavType for JSON Serializable types using KotlinX Serialization.
*
* This only needs to be used if there are embedded serializers (using `@Serializable(with = ...)`) as the
* native NavType serialization support doesn't handle these objects gracefully.
*/
class JsonSerializableNavType<T : Any>(
private val serializer: KSerializer<T>
) : NavType<T>(false) {
override fun get(bundle: Bundle, key: String): T? {
return Json.Default.decodeFromString(serializer, bundle.getString(key)!!)
}
override fun parseValue(value: String): T {
return Json.Default.decodeFromString(serializer, value)
}
override fun put(bundle: Bundle, key: String, value: T) {
bundle.putString(key, Json.Default.encodeToString(serializer, value))
}
override fun serializeAsValue(value: T): String {
return Uri.encode(Json.Default.encodeToString(serializer, value))
}
}

View File

@@ -0,0 +1,29 @@
/*
* Copyright 2025 Signal Messenger, LLC
* SPDX-License-Identifier: AGPL-3.0-only
*/
package org.thoughtcrime.securesms.serialization
import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import org.thoughtcrime.securesms.recipients.RecipientId
/**
* Kotlinx Serialization serializer for [RecipientId] objects.
*/
class RecipientIdSerializer : KSerializer<RecipientId> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("RecipientId", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: RecipientId) {
encoder.encodeString(value.serialize())
}
override fun deserialize(decoder: Decoder): RecipientId {
return RecipientId.from(decoder.decodeString())
}
}

View File

@@ -0,0 +1,29 @@
/*
* Copyright 2025 Signal Messenger, LLC
* SPDX-License-Identifier: AGPL-3.0-only
*/
package org.thoughtcrime.securesms.serialization
import android.net.Uri
import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
/**
* Kotlinx Serialization serializer for Android [Uri] objects.
*/
class UriSerializer : KSerializer<Uri> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("Uri", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: Uri) {
encoder.encodeString(value.toString())
}
override fun deserialize(decoder: Decoder): Uri {
return Uri.parse(decoder.decodeString())
}
}