From 40b067695d9c1f703e94c4577083c56d7a0c4bc2 Mon Sep 17 00:00:00 2001 From: Janne Mareike Koschinski <janne@kuschku.de> Date: Wed, 30 Aug 2023 18:06:18 +0200 Subject: [PATCH] fix: correct gson crash --- .../quasseldroid/defaults/DefaultNetworks.kt | 4 +-- .../quasseldroid/util/AndroidEmojiProvider.kt | 4 +-- .../quasseldroid/util/helper/GsonHelper.kt | 30 ++++++++----------- 3 files changed, 16 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/de/kuschku/quasseldroid/defaults/DefaultNetworks.kt b/app/src/main/java/de/kuschku/quasseldroid/defaults/DefaultNetworks.kt index bd6b22942..b0f559d82 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/defaults/DefaultNetworks.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/defaults/DefaultNetworks.kt @@ -21,7 +21,7 @@ package de.kuschku.quasseldroid.defaults import android.content.Context import com.google.gson.Gson -import de.kuschku.quasseldroid.util.helper.fromJson +import de.kuschku.quasseldroid.util.helper.fromJsonList import java.io.IOException import javax.inject.Inject @@ -29,7 +29,7 @@ class DefaultNetworks @Inject constructor(context: Context, gson: Gson) { val networks: List<DefaultNetwork> by lazy { try { context.assets.open("networks.json").use { - gson.fromJson(it.bufferedReader(Charsets.UTF_8)) + gson.fromJsonList(it.bufferedReader(Charsets.UTF_8)) } } catch (e: IOException) { throw IllegalStateException("networks.json missing from assets.", e) diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/AndroidEmojiProvider.kt b/app/src/main/java/de/kuschku/quasseldroid/util/AndroidEmojiProvider.kt index e0eea29ac..a7510c71a 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/util/AndroidEmojiProvider.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/util/AndroidEmojiProvider.kt @@ -23,13 +23,13 @@ import android.content.Context import com.google.gson.Gson import de.kuschku.quasseldroid.util.emoji.EmojiHandler import de.kuschku.quasseldroid.util.emoji.EmojiProvider -import de.kuschku.quasseldroid.util.helper.fromJson +import de.kuschku.quasseldroid.util.helper.fromJsonList import java.io.IOException class AndroidEmojiProvider(context: Context, gson: Gson) : EmojiProvider { override val emoji: List<EmojiHandler.Emoji> = try { context.assets.open("emoji.json").use { - gson.fromJson(it.bufferedReader(Charsets.UTF_8)) + gson.fromJsonList(it.bufferedReader(Charsets.UTF_8)) } } catch (e: IOException) { throw IllegalStateException("emoji.json missing from assets.", e) diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/helper/GsonHelper.kt b/app/src/main/java/de/kuschku/quasseldroid/util/helper/GsonHelper.kt index 0c7657f40..6789a0c30 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/util/helper/GsonHelper.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/util/helper/GsonHelper.kt @@ -24,26 +24,20 @@ import com.google.gson.JsonElement import com.google.gson.reflect.TypeToken import java.io.Reader +inline fun <reified T> Gson.fromJsonList(jsonElement: JsonElement): T = + this.fromJson(jsonElement, object : TypeToken<T>() {}.type) + +inline fun <reified T> Gson.fromJsonList(reader: Reader): T = + this.fromJson(reader, object : TypeToken<T>() {}.type) + +inline fun <reified T> Gson.fromJsonList(text: String): T = + this.fromJson(text, object : TypeToken<T>() {}.type) + inline fun <reified T> Gson.fromJson(jsonElement: JsonElement): T = - if (T::class.java.typeParameters.isEmpty()) { - this.fromJson(jsonElement, T::class.java) - } else { - val type = object : TypeToken<T>() {}.type - this.fromJson(jsonElement, type) - } + this.fromJson(jsonElement, T::class.java) inline fun <reified T> Gson.fromJson(reader: Reader): T = - if (T::class.java.typeParameters.isEmpty()) { - this.fromJson(reader, T::class.java) - } else { - val type = object : TypeToken<T>() {}.type - this.fromJson(reader, type) - } + this.fromJson(reader, T::class.java) inline fun <reified T> Gson.fromJson(text: String): T = - if (T::class.java.typeParameters.isEmpty()) { - this.fromJson(text, T::class.java) - } else { - val type = object : TypeToken<T>() {}.type - this.fromJson(text, type) - } + this.fromJson(text, T::class.java) -- GitLab