mirror of
https://github.com/greenart7c3/Amber.git
synced 2026-10-05 19:08:23 +00:00
Remove gson
This commit is contained in:
@@ -227,9 +227,6 @@ dependencies {
|
||||
implementation libs.core
|
||||
implementation libs.zxing.android.embedded
|
||||
|
||||
// Json Serialization
|
||||
implementation libs.converter.gson
|
||||
|
||||
// Markdown (With fix for full-image bleeds)
|
||||
implementation(libs.richtext.ui)
|
||||
implementation(libs.richtext.ui.material3)
|
||||
|
||||
@@ -1,13 +1,71 @@
|
||||
package com.greenart7c3.nostrsigner.models
|
||||
|
||||
import android.content.Context
|
||||
import com.fasterxml.jackson.core.JsonGenerator
|
||||
import com.fasterxml.jackson.core.JsonParser
|
||||
import com.fasterxml.jackson.core.json.JsonReadFeature
|
||||
import com.fasterxml.jackson.databind.DeserializationContext
|
||||
import com.fasterxml.jackson.databind.DeserializationFeature
|
||||
import com.fasterxml.jackson.databind.JsonNode
|
||||
import com.fasterxml.jackson.databind.ObjectMapper
|
||||
import com.fasterxml.jackson.databind.SerializerProvider
|
||||
import com.fasterxml.jackson.databind.deser.std.StdDeserializer
|
||||
import com.fasterxml.jackson.databind.module.SimpleModule
|
||||
import com.fasterxml.jackson.databind.ser.std.StdSerializer
|
||||
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
|
||||
import com.greenart7c3.nostrsigner.R
|
||||
import com.vitorpamplona.quartz.nip01Core.jackson.EventMapper.Companion.defaultPrettyPrinter
|
||||
|
||||
data class Permission(
|
||||
val type: String,
|
||||
val kind: Int?,
|
||||
var checked: Boolean = true,
|
||||
) {
|
||||
private class PermissionSerializer : StdSerializer<Permission>(Permission::class.java) {
|
||||
override fun serialize(
|
||||
permission: Permission,
|
||||
gen: JsonGenerator,
|
||||
provider: SerializerProvider,
|
||||
) {
|
||||
gen.writeStartObject()
|
||||
gen.writeStringField("type", permission.type)
|
||||
permission.kind?.let {
|
||||
gen.writeNumberField("kind", it)
|
||||
}
|
||||
gen.writeEndObject()
|
||||
}
|
||||
}
|
||||
|
||||
private class PermissionDeserializer : StdDeserializer<Permission>(Permission::class.java) {
|
||||
override fun deserialize(
|
||||
jp: JsonParser,
|
||||
ctxt: DeserializationContext,
|
||||
): Permission = PermissionManualDeserializer.fromJson(jp.codec.readTree(jp))
|
||||
}
|
||||
|
||||
private class PermissionManualDeserializer {
|
||||
companion object {
|
||||
fun fromJson(jsonObject: JsonNode): Permission =
|
||||
Permission(
|
||||
type = jsonObject.get("type").asText().intern(),
|
||||
kind = jsonObject.get("kind").asText()?.toIntOrNull(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
val mapper: ObjectMapper =
|
||||
jacksonObjectMapper()
|
||||
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
|
||||
.enable(JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS.mappedFeature())
|
||||
.setDefaultPrettyPrinter(defaultPrettyPrinter)
|
||||
.registerModule(
|
||||
SimpleModule()
|
||||
.addSerializer(Permission::class.java, PermissionSerializer())
|
||||
.addDeserializer(Permission::class.java, PermissionDeserializer()),
|
||||
)
|
||||
}
|
||||
|
||||
// LAST_COMMIT_CHECKED = "14ec14dac92d891715239bfb83ed1c9bdf2ac382"
|
||||
fun toLocalizedString(context: Context, shouldTranslateConnect: Boolean = false): String {
|
||||
return when (type) {
|
||||
|
||||
@@ -13,8 +13,7 @@ import androidx.compose.ui.platform.Clipboard
|
||||
import androidx.compose.ui.text.intl.Locale
|
||||
import androidx.compose.ui.text.toLowerCase
|
||||
import androidx.core.net.toUri
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.reflect.TypeToken
|
||||
import com.fasterxml.jackson.module.kotlin.readValue
|
||||
import com.greenart7c3.nostrsigner.Amber
|
||||
import com.greenart7c3.nostrsigner.BuildConfig
|
||||
import com.greenart7c3.nostrsigner.LocalPreferences
|
||||
@@ -303,8 +302,10 @@ object IntentUtils {
|
||||
|
||||
val compressionType = if (intent.extras?.getString("compression") == "gzip") CompressionType.GZIP else CompressionType.NONE
|
||||
val returnType = if (intent.extras?.getString("returnType") == "event") ReturnType.EVENT else ReturnType.SIGNATURE
|
||||
val listType = object : TypeToken<MutableList<Permission>>() {}.type
|
||||
val permissions = Gson().fromJson<MutableList<Permission>?>(intent.extras?.getString("permissions"), listType)
|
||||
val json = intent.extras?.getString("permissions")
|
||||
val permissions: MutableList<Permission>? = json?.let {
|
||||
Permission.mapper.readValue<MutableList<Permission>>(it)
|
||||
}
|
||||
permissions?.forEach {
|
||||
it.checked = true
|
||||
}
|
||||
@@ -582,7 +583,7 @@ object IntentUtils {
|
||||
Amber.instance.applicationIOScope.launch {
|
||||
val database = Amber.instance.getDatabase(account.npub)
|
||||
val defaultRelays = Amber.instance.settings.defaultRelays
|
||||
var savedApplication = database.applicationDao().getByKey(key)
|
||||
val savedApplication = database.applicationDao().getByKey(key)
|
||||
val relays = savedApplication?.application?.relays?.ifEmpty { defaultRelays } ?: defaultRelays
|
||||
val localAppName =
|
||||
if (packageName != null) {
|
||||
|
||||
@@ -1,92 +1,91 @@
|
||||
package com.greenart7c3.nostrsigner.service.model
|
||||
|
||||
import androidx.compose.runtime.Immutable
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.GsonBuilder
|
||||
import com.google.gson.JsonArray
|
||||
import com.google.gson.JsonDeserializationContext
|
||||
import com.google.gson.JsonDeserializer
|
||||
import com.google.gson.JsonElement
|
||||
import com.google.gson.JsonObject
|
||||
import com.google.gson.JsonSerializationContext
|
||||
import com.google.gson.JsonSerializer
|
||||
import com.google.gson.annotations.SerializedName
|
||||
import com.fasterxml.jackson.core.JsonGenerator
|
||||
import com.fasterxml.jackson.core.JsonParser
|
||||
import com.fasterxml.jackson.core.json.JsonReadFeature
|
||||
import com.fasterxml.jackson.databind.DeserializationContext
|
||||
import com.fasterxml.jackson.databind.DeserializationFeature
|
||||
import com.fasterxml.jackson.databind.JsonNode
|
||||
import com.fasterxml.jackson.databind.ObjectMapper
|
||||
import com.fasterxml.jackson.databind.SerializerProvider
|
||||
import com.fasterxml.jackson.databind.deser.std.StdDeserializer
|
||||
import com.fasterxml.jackson.databind.module.SimpleModule
|
||||
import com.fasterxml.jackson.databind.ser.std.StdSerializer
|
||||
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
|
||||
import com.vitorpamplona.quartz.nip01Core.core.Event
|
||||
import com.vitorpamplona.quartz.nip01Core.core.HexKey
|
||||
import com.vitorpamplona.quartz.nip01Core.jackson.EventMapper.Companion.defaultPrettyPrinter
|
||||
import com.vitorpamplona.quartz.nip01Core.jackson.toTypedArray
|
||||
import com.vitorpamplona.quartz.utils.TimeUtils
|
||||
import java.lang.reflect.Type
|
||||
|
||||
@Immutable
|
||||
open class AmberEvent(
|
||||
var id: HexKey,
|
||||
@SerializedName("pubkey") var pubKey: HexKey,
|
||||
@SerializedName("created_at") val createdAt: Long,
|
||||
var pubKey: HexKey,
|
||||
val createdAt: Long,
|
||||
val kind: Int,
|
||||
val tags: Array<Array<String>>,
|
||||
val content: String,
|
||||
val sig: HexKey,
|
||||
) {
|
||||
private class EventDeserializer : JsonDeserializer<AmberEvent> {
|
||||
override fun deserialize(
|
||||
json: JsonElement,
|
||||
typeOfT: Type?,
|
||||
context: JsonDeserializationContext?,
|
||||
): AmberEvent {
|
||||
val jsonObject = json.asJsonObject
|
||||
return AmberEvent(
|
||||
id = jsonObject.get("id")?.asString ?: "",
|
||||
pubKey = jsonObject.get("pubkey")?.asString ?: "",
|
||||
createdAt = jsonObject.get("created_at")?.asLong ?: TimeUtils.now(),
|
||||
kind = jsonObject.get("kind").asInt,
|
||||
tags = jsonObject.get("tags")?.asJsonArray?.map {
|
||||
it.asJsonArray.mapNotNull { s -> if (s.isJsonNull) null else s.asString }.toTypedArray()
|
||||
}?.toTypedArray() ?: emptyArray(),
|
||||
content = jsonObject.get("content").asString,
|
||||
sig = jsonObject.get("sig")?.asString ?: "",
|
||||
)
|
||||
private class EventSerializer : StdSerializer<AmberEvent>(AmberEvent::class.java) {
|
||||
override fun serialize(
|
||||
event: AmberEvent,
|
||||
gen: JsonGenerator,
|
||||
provider: SerializerProvider,
|
||||
) {
|
||||
gen.writeStartObject()
|
||||
gen.writeStringField("id", event.id)
|
||||
gen.writeStringField("pubkey", event.pubKey)
|
||||
gen.writeNumberField("created_at", event.createdAt)
|
||||
gen.writeNumberField("kind", event.kind)
|
||||
gen.writeArrayFieldStart("tags")
|
||||
event.tags.forEach { tag -> gen.writeArray(tag, 0, tag.size) }
|
||||
gen.writeEndArray()
|
||||
gen.writeStringField("content", event.content)
|
||||
gen.writeStringField("sig", event.sig)
|
||||
gen.writeEndObject()
|
||||
}
|
||||
}
|
||||
|
||||
private class EventSerializer : JsonSerializer<AmberEvent> {
|
||||
override fun serialize(
|
||||
src: AmberEvent,
|
||||
typeOfSrc: Type?,
|
||||
context: JsonSerializationContext?,
|
||||
): JsonElement {
|
||||
return JsonObject().apply {
|
||||
addProperty("id", src.id)
|
||||
addProperty("pubkey", src.pubKey)
|
||||
addProperty("created_at", src.createdAt)
|
||||
addProperty("kind", src.kind)
|
||||
add(
|
||||
"tags",
|
||||
JsonArray().also { jsonTags ->
|
||||
src.tags.forEach { tag ->
|
||||
jsonTags.add(
|
||||
JsonArray().also { jsonTagElement ->
|
||||
tag.forEach { tagElement ->
|
||||
jsonTagElement.add(tagElement)
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
},
|
||||
private class EventDeserializer : StdDeserializer<AmberEvent>(AmberEvent::class.java) {
|
||||
override fun deserialize(
|
||||
jp: JsonParser,
|
||||
ctxt: DeserializationContext,
|
||||
): AmberEvent = EventManualDeserializer.fromJson(jp.codec.readTree(jp))
|
||||
}
|
||||
|
||||
private class EventManualDeserializer {
|
||||
companion object {
|
||||
fun fromJson(jsonObject: JsonNode): AmberEvent =
|
||||
AmberEvent(
|
||||
id = jsonObject.get("id")?.asText()?.intern() ?: "",
|
||||
pubKey = jsonObject.get("pubkey")?.asText()?.intern() ?: "",
|
||||
createdAt = jsonObject.get("created_at")?.asLong() ?: TimeUtils.now(),
|
||||
kind = jsonObject.get("kind").asInt(),
|
||||
tags = jsonObject.get("tags")?.toTypedArray {
|
||||
it.toTypedArray { s -> if (s.isNull) "" else s.asText().intern() }
|
||||
} ?: emptyArray(),
|
||||
content = jsonObject.get("content").asText(),
|
||||
sig = jsonObject.get("sig")?.asText() ?: "",
|
||||
)
|
||||
addProperty("content", src.content)
|
||||
addProperty("sig", src.sig)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val gson: Gson =
|
||||
GsonBuilder()
|
||||
.disableHtmlEscaping()
|
||||
.registerTypeAdapter(AmberEvent::class.java, EventSerializer())
|
||||
.registerTypeAdapter(AmberEvent::class.java, EventDeserializer())
|
||||
.create()
|
||||
val mapper: ObjectMapper =
|
||||
jacksonObjectMapper()
|
||||
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
|
||||
.enable(JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS.mappedFeature())
|
||||
.setDefaultPrettyPrinter(defaultPrettyPrinter)
|
||||
.registerModule(
|
||||
SimpleModule()
|
||||
.addSerializer(AmberEvent::class.java, EventSerializer())
|
||||
.addDeserializer(AmberEvent::class.java, EventDeserializer()),
|
||||
)
|
||||
|
||||
fun fromJson(json: String): AmberEvent = gson.fromJson(json, AmberEvent::class.java)
|
||||
fun fromJson(json: String): AmberEvent = mapper.readValue(json, AmberEvent::class.java)
|
||||
|
||||
fun toEvent(amberEvent: AmberEvent): Event {
|
||||
return Event(
|
||||
|
||||
@@ -40,7 +40,6 @@ import androidx.compose.ui.text.withLink
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import androidx.navigation.NavController
|
||||
import com.google.gson.GsonBuilder
|
||||
import com.greenart7c3.nostrsigner.Amber
|
||||
import com.greenart7c3.nostrsigner.LocalPreferences
|
||||
import com.greenart7c3.nostrsigner.R
|
||||
@@ -191,8 +190,8 @@ fun IntentMultiEventHomeScreen(
|
||||
onReject = {},
|
||||
onChanged = {
|
||||
rememberType = it
|
||||
intents.forEach {
|
||||
it.rememberType.value = rememberType
|
||||
intents.forEach { intent ->
|
||||
intent.rememberType.value = rememberType
|
||||
}
|
||||
},
|
||||
packageName = packageName,
|
||||
@@ -544,8 +543,8 @@ fun BunkerMultiEventHomeScreen(
|
||||
onReject = {},
|
||||
onChanged = {
|
||||
rememberType = it
|
||||
bunkerRequests.forEach {
|
||||
it.rememberType.value = rememberType
|
||||
bunkerRequests.forEach { bunkerRequest ->
|
||||
bunkerRequest.rememberType.value = rememberType
|
||||
}
|
||||
},
|
||||
packageName = packageName,
|
||||
@@ -907,8 +906,7 @@ private fun finishActivity(closeApp: Boolean) {
|
||||
private fun sendResultIntent(
|
||||
results: MutableList<Result>,
|
||||
) {
|
||||
val gson = GsonBuilder().serializeNulls().create()
|
||||
val json = gson.toJson(results)
|
||||
val json = Permission.mapper.writeValueAsString(results)
|
||||
val intent = Intent()
|
||||
intent.putExtra("results", json)
|
||||
Amber.instance.getMainActivity()?.setResult(Activity.RESULT_OK, intent)
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
activityCompose = "1.10.1"
|
||||
appcompat = "1.7.1"
|
||||
biometricKtx = "1.2.0-alpha05"
|
||||
converterGson = "3.0.0"
|
||||
core = "3.5.3"
|
||||
coreKtx = "1.16.0"
|
||||
coreSplashscreen = "1.0.1"
|
||||
@@ -38,7 +37,6 @@ jna = { module = "net.java.dev.jna:jna", version.ref = "jna" }
|
||||
activity-compose = { module = "androidx.activity:activity-compose", version.ref = "activityCompose" }
|
||||
appcompat = { module = "androidx.appcompat:appcompat", version.ref = "appcompat" }
|
||||
biometric-ktx = { module = "androidx.biometric:biometric-ktx", version.ref = "biometricKtx" }
|
||||
converter-gson = { module = "com.squareup.retrofit2:converter-gson", version.ref = "converterGson" }
|
||||
core = { module = "com.google.zxing:core", version.ref = "core" }
|
||||
core-ktx = { module = "androidx.core:core-ktx", version.ref = "coreKtx" }
|
||||
core-splashscreen = { module = "androidx.core:core-splashscreen", version.ref = "coreSplashscreen" }
|
||||
|
||||
Reference in New Issue
Block a user