From d46d9597d2d36fb319f5cd4d8f2949a02dfba64d Mon Sep 17 00:00:00 2001 From: Laurent Date: Wed, 8 Feb 2023 10:36:22 +0100 Subject: [PATCH] hopefully fixes an unreproducible serialization crash --- app/proguard-rules.pro | 24 ++++++++++++++++++- .../android/api/CurrencyConverterApi.kt | 9 ++++--- .../android/ui/fragment/SettingsFragment.kt | 13 +++++----- 3 files changed, 34 insertions(+), 12 deletions(-) diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index b1004ab9..7cacba8d 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -64,4 +64,26 @@ -keep class com.google.j2objc.annotations.** { *; } # Enum --optimizations !class/unboxing/enum \ No newline at end of file +-optimizations !class/unboxing/enum + +# Serialization +-keepattributes *Annotation*, InnerClasses +-dontnote kotlinx.serialization.AnnotationsKt # core serialization annotations + +# kotlinx-serialization-json specific. Add this if you have java.lang.NoClassDefFoundError kotlinx.serialization.json.JsonObjectSerializer +-keepclassmembers class kotlinx.serialization.json.** { + *** Companion; +} +-keepclasseswithmembers class kotlinx.serialization.json.** { + kotlinx.serialization.KSerializer serializer(...); +} + +-keep,includedescriptorclasses class net.pokeranalytics.android.**$$serializer { *; } +-keepclassmembers class net.pokeranalytics.android.** { + *** Companion; +} +-keepclasseswithmembers class net.pokeranalytics.android.** { + kotlinx.serialization.KSerializer serializer(...); +} + + diff --git a/app/src/main/java/net/pokeranalytics/android/api/CurrencyConverterApi.kt b/app/src/main/java/net/pokeranalytics/android/api/CurrencyConverterApi.kt index 217aa88d..a4eaac8f 100644 --- a/app/src/main/java/net/pokeranalytics/android/api/CurrencyConverterApi.kt +++ b/app/src/main/java/net/pokeranalytics/android/api/CurrencyConverterApi.kt @@ -1,6 +1,7 @@ package net.pokeranalytics.android.api import android.content.Context +import androidx.annotation.Keep import com.android.volley.VolleyError import com.android.volley.toolbox.StringRequest import com.android.volley.toolbox.Volley @@ -9,8 +10,11 @@ import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json import timber.log.Timber +@Keep @Serializable data class RateResponse(var info: RateInfo) + +@Keep @Serializable data class RateInfo(var rate: Double) @@ -23,13 +27,8 @@ class CurrencyConverterApi { fun currencyRate(fromCurrency: String, toCurrency: String, context: Context, callback: (Double?, VolleyError?) -> (Unit)) { val queue = Volley.newRequestQueue(context) -// val url = "https://free.currconv.com/api/v7/convert?q=${pair}&compact=ultra&apiKey=9b56e742a75392c8aeb7" - val url = "https://api.apilayer.com/exchangerates_data/convert?to=$toCurrency&from=$fromCurrency&amount=1" - // https://free.currconv.com/api/v7/convert?q=GBP_USD&compact=ultra&apiKey=5ba8d38995282fe8b1c8 - // { "USD_PHP": 44.1105, "PHP_USD": 0.0227 } - Timber.d("Api call = $url") val stringRequest = object : StringRequest( diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt index 2875020c..7a73248e 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt @@ -168,14 +168,15 @@ class SettingsFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRep val message = requireContext().getString(R.string.currency_rate_confirmation, mainCurrencyCode, currencyCode) - -// val message = "Please enter the $mainCurrencyCode to $currencyCode rate to apply to all your bankrolls" - showEditTextAlertDialog(requireContext(), InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL, - message = message, editTextText = apiRate?.toString()) { value -> - value.toDoubleOrNull()?.let { rate -> - updateMainCurrency(currencyCode, rate) + context?.let { context -> + showEditTextAlertDialog(context, InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL, + message = message, editTextText = apiRate?.toString()) { value -> + value.toDoubleOrNull()?.let { rate -> + updateMainCurrency(currencyCode, rate) + } } } + } }