mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-21 00:59:49 +01:00
Upgrade Kotlin, AGP, Gradle versions and bring in kotlinx-serialization for use with navigation-compose.
This commit is contained in:
committed by
Greyson Parrelli
parent
957ddc82b5
commit
736811393f
@@ -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))
|
||||
}
|
||||
}
|
||||
@@ -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())
|
||||
}
|
||||
}
|
||||
@@ -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())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user