Add Currency Converter API for bankroll rate

feature/top10
Aurelien Hubert 7 years ago
parent ad2c5e1e5c
commit 2be0bcf329
  1. 65
      app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt

@ -4,12 +4,10 @@ import android.app.Activity.RESULT_OK
import android.content.Intent
import android.os.Bundle
import android.view.View
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import net.pokeranalytics.android.R
import net.pokeranalytics.android.api.CurrencyConverterApi
import net.pokeranalytics.android.model.realm.Bankroll
import net.pokeranalytics.android.model.retrofit.CurrencyConverterValue
import net.pokeranalytics.android.ui.activity.CurrenciesActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
@ -22,6 +20,8 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import net.pokeranalytics.android.util.NULL_TEXT
import net.pokeranalytics.android.util.Preferences
import net.pokeranalytics.android.util.extensions.round
import retrofit2.Call
import retrofit2.Response
import java.util.*
/**
@ -42,6 +42,7 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
private lateinit var defaultCurrency: Currency
private val rows = ArrayList<RowRepresentable>()
private var isRefreshingRate = false
private var lastRefreshRateCall = 0L
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
@ -111,25 +112,20 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
when (row) {
BankrollRow.CURRENCY -> CurrenciesActivity.newInstanceForResult(this@BankrollDataFragment, BankrollDataFragment.REQUEST_CODE_CURRENCY)
BankrollRow.REFRESH_RATE -> {
isRefreshingRate = true
//TODO: Call web-service to get the currency rate
GlobalScope.launch(Dispatchers.Main) {
delay(1500)
isRefreshingRate = false
rowRepresentableAdapter.refreshRow(BankrollRow.REFRESH_RATE)
}
rowRepresentableAdapter.refreshRow(BankrollRow.REFRESH_RATE)
}
BankrollRow.REFRESH_RATE -> refreshRate()
else -> super.onRowSelected(position, row, fromAction)
}
}
override fun onRowValueChanged(value: Any?, row: RowRepresentable) {
super.onRowValueChanged(value, row)
updateAdapterUI()
// Clear the value when the currency has been updated
if (row == BankrollRow.CURRENCY) {
lastRefreshRateCall = 0
}
updateAdapterUI()
}
/**
@ -157,8 +153,6 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
rows.add(CustomizableRowRepresentable(customViewType = RowViewType.HEADER_TITLE, resId = R.string.currency))
rows.add(BankrollRow.CURRENCY)
val defaultCurrency = Currency.getInstance(Preferences.getCurrencyLocale(this.parentActivity))
var differentCurrency = false
bankroll.currency?.let { bankrollCurrency ->
differentCurrency = bankrollCurrency.code != defaultCurrency.currencyCode
@ -186,5 +180,40 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
}
}
/**
* Refresh the rate with the Currency Converter API
*/
private fun refreshRate() {
// Check if the last call was older than 10 seconds
if (System.currentTimeMillis() - lastRefreshRateCall < 10 * 1000 || isRefreshingRate) {
return
}
lastRefreshRateCall = System.currentTimeMillis()
val currenciesConverterValue = "${defaultCurrency.currencyCode}_${bankroll?.currency?.code}"
val call = CurrencyConverterApi.getApi(requireContext())?.convert(currenciesConverterValue)
call?.enqueue(object : retrofit2.Callback<Map<String, CurrencyConverterValue>> {
override fun onResponse(call: Call<Map<String, CurrencyConverterValue>>, response: Response<Map<String, CurrencyConverterValue>>) {
response.body()?.let {
it[currenciesConverterValue]?.value?.let {rate ->
onRowValueChanged(rate.toString(), BankrollRow.RATE)
}
}
isRefreshingRate = false
rowRepresentableAdapter.refreshRow(BankrollRow.REFRESH_RATE)
}
override fun onFailure(call: Call<Map<String, CurrencyConverterValue>>, t: Throwable) {
isRefreshingRate = false
rowRepresentableAdapter.refreshRow(BankrollRow.REFRESH_RATE)
}
})
isRefreshingRate = true
rowRepresentableAdapter.refreshRow(BankrollRow.REFRESH_RATE)
}
}
Loading…
Cancel
Save