From 2be0bcf32951aeefed3d2e7f68be7548f50c6f30 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Mon, 18 Mar 2019 10:55:40 +0100 Subject: [PATCH] Add Currency Converter API for bankroll rate --- .../ui/fragment/BankrollDataFragment.kt | 65 ++++++++++++++----- 1 file changed, 47 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt index 616fbfb3..446039ed 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt +++ b/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() 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> { + + override fun onResponse(call: Call>, response: Response>) { + 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>, t: Throwable) { + isRefreshingRate = false + rowRepresentableAdapter.refreshRow(BankrollRow.REFRESH_RATE) + } + }) + + isRefreshingRate = true + rowRepresentableAdapter.refreshRow(BankrollRow.REFRESH_RATE) + } } \ No newline at end of file