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.
This commit is contained in:
parent
2ef589526d
commit
f8b7a11ba9
2 changed files with 21 additions and 0 deletions
|
@ -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<Transfer>) {
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue