From 51bb26f33118f1625033c7865e798e8dcfb5e6ea Mon Sep 17 00:00:00 2001 From: Laurent Date: Mon, 1 May 2023 15:35:20 +0200 Subject: [PATCH] Fix and improve currency related stuff --- .../android/ui/fragment/CurrenciesFragment.kt | 50 ++++++++++++------- .../android/ui/fragment/SettingsFragment.kt | 29 ++++++----- .../ui/modules/data/BankrollDataFragment.kt | 2 + 3 files changed, 49 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CurrenciesFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CurrenciesFragment.kt index bbcff31e..8c834dc8 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CurrenciesFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CurrenciesFragment.kt @@ -45,27 +45,46 @@ class CurrenciesFragment : BaseFragment(), StaticRowRepresentableDataSource, Row ) } - private val availableCurrencies = this.systemCurrencies.filter { - !mostUsedCurrencyCodes.contains(it.currencyCode) - }.filter { - UserDefaults.availableCurrencyLocales.filter { currencyLocale -> - Currency.getInstance(currencyLocale).currencyCode == it.currencyCode - }.isNotEmpty() - }.sortedBy { - it.displayName - }.map { - CurrencyRow(it) - } + private val availableCurrencies = + Locale.getAvailableLocales() + .mapNotNull { + try { + Currency.getInstance(it) + } catch (e: Exception) { + null + } + }.toSet() + .filter { !mostUsedCurrencyCodes.contains(it.currencyCode) } + .filter { + UserDefaults.availableCurrencyLocales.any { currencyLocale -> + Currency.getInstance(currencyLocale).currencyCode == it.currencyCode + } + } + .sortedBy { it.displayName } + .map { CurrencyRow(it) } + +// private val availableCurrencies = this.systemCurrencies.filter { +// !mostUsedCurrencyCodes.contains(it.currencyCode) +// }.filter { +// UserDefaults.availableCurrencyLocales.filter { currencyLocale -> +// Currency.getInstance(currencyLocale).currencyCode == it.currencyCode +// }.isNotEmpty() +// }.sortedBy { +// it.displayName +// }.map { +// CurrencyRow(it) +// } + } private class CurrencyRow(var currency: Currency) : RowRepresentable { override fun getDisplayName(context: Context): String { - return currency.getDisplayName(Locale.getDefault()).capitalize() + return this.currency.getDisplayName(Locale.getDefault()).capitalize() } - var currencyCode: String = currency.currencyCode - var currencySymbol: String = currency.getSymbol(Locale.getDefault()) + var currencyCode: String = this.currency.currencyCode + var currencySymbol: String = this.currency.getSymbol(Locale.getDefault()) var currencyCodeAndSymbol: String = "${this.currencyCode} (${this.currencySymbol})" override val viewType: Int = RowViewType.TITLE_VALUE.ordinal @@ -110,9 +129,6 @@ class CurrenciesFragment : BaseFragment(), StaticRowRepresentableDataSource, Row // RowRepresentableDelegate override fun onRowSelected(position: Int, row: RowRepresentable, tag: Int) { - - - val intent = Intent() intent.putExtra(INTENT_CURRENCY_CODE, (row as CurrencyRow).currency.currencyCode) this.activity?.setResult(Activity.RESULT_OK, intent) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt index 7a73248e..e1cd64e8 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt @@ -156,28 +156,27 @@ class SettingsFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRep private fun updateMainCurrency(currencyCode: String) { - Preferences.getDefaultCurrency(requireContext())?.currencyCode?.let { mainCurrencyCode -> + val mainCurrencyCode = UserDefaults.currency.currencyCode - if (mainCurrencyCode == currencyCode) { - return - } - showLoader(R.string.please_wait) + if (mainCurrencyCode == currencyCode) { + return + } + showLoader(R.string.please_wait) - CurrencyConverterApi.currencyRate(mainCurrencyCode, currencyCode, requireContext()) { apiRate, _ -> - hideLoader() + CurrencyConverterApi.currencyRate(mainCurrencyCode, currencyCode, requireContext()) { apiRate, _ -> + hideLoader() - val message = requireContext().getString(R.string.currency_rate_confirmation, mainCurrencyCode, currencyCode) + val message = requireContext().getString(R.string.currency_rate_confirmation, mainCurrencyCode, currencyCode) - context?.let { context -> - showEditTextAlertDialog(context, InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL, - message = message, editTextText = apiRate?.toString()) { value -> - value.toDoubleOrNull()?.let { rate -> - updateMainCurrency(currencyCode, rate) - } + context?.let { context -> + showEditTextAlertDialog(context, InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL, + message = message, editTextText = apiRate?.toString()) { value -> + value.toDoubleOrNull()?.let { rate -> + updateMainCurrency(currencyCode, rate) } } - } + } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/data/BankrollDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/data/BankrollDataFragment.kt index 642787e4..3f8ca2ef 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/data/BankrollDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/data/BankrollDataFragment.kt @@ -85,6 +85,8 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS onRowValueChanged(currencyCode, BankrollPropertiesRow.CURRENCY) if (shouldShowCurrencyRate) { refreshRate() + } else { + this.bankroll.currency?.rate = 1.0 } } }