|
|
|
@ -4,12 +4,10 @@ import android.app.Activity.RESULT_OK |
|
|
|
import android.content.Intent |
|
|
|
import android.content.Intent |
|
|
|
import android.os.Bundle |
|
|
|
import android.os.Bundle |
|
|
|
import android.view.View |
|
|
|
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.R |
|
|
|
|
|
|
|
import net.pokeranalytics.android.api.CurrencyConverterApi |
|
|
|
import net.pokeranalytics.android.model.realm.Bankroll |
|
|
|
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.activity.CurrenciesActivity |
|
|
|
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource |
|
|
|
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource |
|
|
|
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource |
|
|
|
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.NULL_TEXT |
|
|
|
import net.pokeranalytics.android.util.Preferences |
|
|
|
import net.pokeranalytics.android.util.Preferences |
|
|
|
import net.pokeranalytics.android.util.extensions.round |
|
|
|
import net.pokeranalytics.android.util.extensions.round |
|
|
|
|
|
|
|
import retrofit2.Call |
|
|
|
|
|
|
|
import retrofit2.Response |
|
|
|
import java.util.* |
|
|
|
import java.util.* |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
@ -42,6 +42,7 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS |
|
|
|
private lateinit var defaultCurrency: Currency |
|
|
|
private lateinit var defaultCurrency: Currency |
|
|
|
private val rows = ArrayList<RowRepresentable>() |
|
|
|
private val rows = ArrayList<RowRepresentable>() |
|
|
|
private var isRefreshingRate = false |
|
|
|
private var isRefreshingRate = false |
|
|
|
|
|
|
|
private var lastRefreshRateCall = 0L |
|
|
|
|
|
|
|
|
|
|
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { |
|
|
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { |
|
|
|
super.onViewCreated(view, savedInstanceState) |
|
|
|
super.onViewCreated(view, savedInstanceState) |
|
|
|
@ -111,25 +112,20 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS |
|
|
|
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { |
|
|
|
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { |
|
|
|
when (row) { |
|
|
|
when (row) { |
|
|
|
BankrollRow.CURRENCY -> CurrenciesActivity.newInstanceForResult(this@BankrollDataFragment, BankrollDataFragment.REQUEST_CODE_CURRENCY) |
|
|
|
BankrollRow.CURRENCY -> CurrenciesActivity.newInstanceForResult(this@BankrollDataFragment, BankrollDataFragment.REQUEST_CODE_CURRENCY) |
|
|
|
BankrollRow.REFRESH_RATE -> { |
|
|
|
BankrollRow.REFRESH_RATE -> refreshRate() |
|
|
|
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) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else -> super.onRowSelected(position, row, fromAction) |
|
|
|
else -> super.onRowSelected(position, row, fromAction) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
override fun onRowValueChanged(value: Any?, row: RowRepresentable) { |
|
|
|
override fun onRowValueChanged(value: Any?, row: RowRepresentable) { |
|
|
|
super.onRowValueChanged(value, row) |
|
|
|
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(CustomizableRowRepresentable(customViewType = RowViewType.HEADER_TITLE, resId = R.string.currency)) |
|
|
|
rows.add(BankrollRow.CURRENCY) |
|
|
|
rows.add(BankrollRow.CURRENCY) |
|
|
|
|
|
|
|
|
|
|
|
val defaultCurrency = Currency.getInstance(Preferences.getCurrencyLocale(this.parentActivity)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var differentCurrency = false |
|
|
|
var differentCurrency = false |
|
|
|
bankroll.currency?.let { bankrollCurrency -> |
|
|
|
bankroll.currency?.let { bankrollCurrency -> |
|
|
|
differentCurrency = bankrollCurrency.code != defaultCurrency.currencyCode |
|
|
|
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) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |