From f8b7a11ba9f630b1d14eb25f3d6db5acc0531558 Mon Sep 17 00:00:00 2001 From: "Nelson R. Perez" Date: Thu, 7 Nov 2019 16:36:49 -0500 Subject: [PATCH] Introducing a supported currencies cache for the equivalent values feature - In case the device is without connectivity, we cannot check in real time what the list of supported currencies is from the coingecko API. For this special corner cases we store a cache of this currency list. --- .../repositories/TransferRepository.kt | 18 ++++++++++++++++++ .../bitsybitshareswallet/utils/Constants.kt | 3 +++ 2 files changed, 21 insertions(+) diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/repositories/TransferRepository.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/repositories/TransferRepository.kt index fbcc61c..66488c7 100644 --- a/app/src/main/java/cy/agorise/bitsybitshareswallet/repositories/TransferRepository.kt +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/repositories/TransferRepository.kt @@ -1,7 +1,9 @@ package cy.agorise.bitsybitshareswallet.repositories import android.content.Context +import android.content.SharedPreferences import android.os.AsyncTask +import android.preference.PreferenceManager import android.util.Log import androidx.lifecycle.LiveData import cy.agorise.bitsybitshareswallet.database.BitsyDatabase @@ -26,11 +28,13 @@ class TransferRepository internal constructor(context: Context) { private val mTransferDao: TransferDao private val mEquivalentValuesDao: EquivalentValueDao private val compositeDisposable = CompositeDisposable() + private val mPreferences: SharedPreferences init { val db = BitsyDatabase.getDatabase(context) mTransferDao = db!!.transferDao() mEquivalentValuesDao = db.equivalentValueDao() + mPreferences = PreferenceManager.getDefaultSharedPreferences(context) } fun insertAll(transfers: List) { @@ -177,10 +181,24 @@ class TransferRepository internal constructor(context: Context) { val response = sg.getService(CoingeckoService::class.java) ?.getSupportedCurrencies() ?.execute() + // Updating the supported currencies cache + mPreferences.edit() + .putStringSet(Constants.KEY_COINGECKO_CURRENCIES_CACHE, response?.body()?.toMutableSet() ?: setOf()) + .apply() if(response?.body()?.indexOf(symbol.toLowerCase()) == -1) "usd" else it } + .onErrorReturn { + // Error caused potentially by the lack of connectivity. If this happens we just + // retrieve the value from the cache + val currencies = mPreferences.getStringSet(Constants.KEY_COINGECKO_CURRENCIES_CACHE, setOf()) + var selectedCurrency = "usd" + if(currencies.contains(symbol)) { + selectedCurrency = symbol + } + selectedCurrency + } } } \ No newline at end of file diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/utils/Constants.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/utils/Constants.kt index 1b052bb..460100f 100644 --- a/app/src/main/java/cy/agorise/bitsybitshareswallet/utils/Constants.kt +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/utils/Constants.kt @@ -48,6 +48,9 @@ object Constants { /** Coingecko's API URL */ const val COINGECKO_URL = "https://api.coingecko.com" + /** Key used to store and retrieve a cache of the coingecko supported currencies */ + const val KEY_COINGECKO_CURRENCIES_CACHE = "key_coingecko_currencies_cache" + /** The fee to send in every transfer (0.01%) */ const val FEE_PERCENTAGE = 0.0001