From 6aaa5e4fae02a1ed46dc9ac8e209bee6bedea2b0 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Thu, 11 Apr 2019 10:41:05 +0200 Subject: [PATCH 1/5] Add only time picker --- .../android/ui/helpers/DateTimePickerManager.kt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/helpers/DateTimePickerManager.kt b/app/src/main/java/net/pokeranalytics/android/ui/helpers/DateTimePickerManager.kt index eea9bd32..d5e26d36 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/helpers/DateTimePickerManager.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/helpers/DateTimePickerManager.kt @@ -23,6 +23,7 @@ class DateTimePickerManager : DatePickerDialog.OnDateSetListener, private lateinit var calendar: Calendar private var minimumDate: Date? = null private var onlyDate: Boolean = false + private var onlyTime: Boolean = false private var isClearable: Boolean = true companion object { @@ -33,6 +34,7 @@ class DateTimePickerManager : DatePickerDialog.OnDateSetListener, date: Date?, minimumDate: Date? = null, onlyDate: Boolean? = false, + onlyTime: Boolean? = false, isClearable: Boolean? = true ): DateTimePickerManager { @@ -46,9 +48,14 @@ class DateTimePickerManager : DatePickerDialog.OnDateSetListener, dateTimePickerManager.calendar = calendar dateTimePickerManager.minimumDate = minimumDate dateTimePickerManager.onlyDate = onlyDate ?: false + dateTimePickerManager.onlyTime = onlyTime ?: false dateTimePickerManager.isClearable = isClearable ?: true - dateTimePickerManager.showDatePicker() + if (dateTimePickerManager.onlyTime) { + dateTimePickerManager.showTimePicker() + } else { + dateTimePickerManager.showDatePicker() + } return dateTimePickerManager } From e86cfbd610f17ca3d2a137ec2f248afcf29f809b Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Thu, 11 Apr 2019 12:02:11 +0200 Subject: [PATCH 2/5] Add Time picker for filters --- .../android/model/filter/QueryCondition.kt | 3 ++ .../android/model/realm/FilterCondition.kt | 2 +- .../ui/fragment/FilterDetailsFragment.kt | 7 ++-- .../view/rowrepresentable/FilterElementRow.kt | 33 +++++----------- .../view/rowrepresentable/FilterSectionRow.kt | 38 +++++++++++++++---- 5 files changed, 49 insertions(+), 34 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt b/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt index 077c866c..8b16e84b 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt @@ -6,6 +6,7 @@ import net.pokeranalytics.android.exceptions.PokerAnalyticsException import net.pokeranalytics.android.model.realm.FilterCondition import net.pokeranalytics.android.model.realm.FilterElementBlind import net.pokeranalytics.android.model.realm.Session +import net.pokeranalytics.android.util.Preferences import net.pokeranalytics.android.util.extensions.endOfDay import net.pokeranalytics.android.util.extensions.startOfDay import java.util.* @@ -73,6 +74,8 @@ enum class QueryCondition(var operator: Operator? = null) { PAST_DAYS, MORE_THAN_DURATION(Operator.MORE), LESS_THAN_DURATION(Operator.LESS), + STARTED_FROM_TIME, + ENDED_TO_TIME, CURRENCY, CURRENCY_CODE, diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt index afada902..cd853f3d 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt @@ -116,7 +116,7 @@ open class FilterCondition() : RealmObject() { */ fun getFilterConditionValue(filterElementRow: FilterElementRow): Any? { return when (filterElementRow) { - is From, is To -> dateValue //TODO: Probably change by 'date' (doesn't work now because the value isn't correctly saved + is DateFilterElementRow -> date is PastDays -> values else -> throw PokerAnalyticsException.FilterElementTypeMissing(filterElementRow) } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt index 042ecb95..94fb9439 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt @@ -27,12 +27,13 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElementRow import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow import net.pokeranalytics.android.util.NULL_TEXT import net.pokeranalytics.android.util.extensions.shortDate +import net.pokeranalytics.android.util.extensions.shortTime import net.pokeranalytics.android.util.extensions.toMinutes import timber.log.Timber import java.util.* import kotlin.collections.ArrayList -open class FilterDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate { +open class FilterDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate { lateinit var parentActivity: PokerAnalyticsActivity lateinit var rowRepresentableAdapter: RowRepresentableAdapter @@ -69,7 +70,7 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresenta Timber.d("Row: $row") when (row) { - is FilterElementRow.DateFilterElementRow -> DateTimePickerManager.create(requireContext(), row, this, row.dateValue, onlyDate = true) + is FilterElementRow.DateFilterElementRow -> DateTimePickerManager.create(requireContext(), row, this, row.dateValue, onlyDate = !row.showTime, onlyTime = row.showTime) is FilterElementRow.PastDays -> { val pastDays = if (row.lastDays > 0) row.lastDays.toString() else "" val data = row.editingDescriptors(mapOf("pastDays" to pastDays)) @@ -107,7 +108,7 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresenta is FilterElementRow.PastDays -> if (row.lastDays > 0) row.lastDays.toString() else NULL_TEXT is FilterElementRow.LastGames -> if (row.lastGames > 0) row.lastGames.toString() else NULL_TEXT is FilterElementRow.LastSessions -> if (row.lastSessions > 0) row.lastSessions.toString() else NULL_TEXT - is FilterElementRow.DateFilterElementRow -> row.dateValue.shortDate() + is FilterElementRow.DateFilterElementRow -> if (row.showTime) row.dateValue.shortTime() else row.dateValue.shortDate() is FilterElementRow.AmountFilterElement -> if (row.amount > 0) row.amount.toString() else NULL_TEXT is FilterElementRow.DurationFilterElement -> row.minutes.toMinutes(requireContext()) else -> super.stringForRow(row) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt index d1c6a567..ab8a11fe 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt @@ -28,7 +28,7 @@ sealed class FilterElementRow : RowRepresentable { interface LessOperator : Operator open class BoolFilterElementRow : FilterElementRow() - open class DateFilterElementRow(var dateValue: Date = Date()) : FilterElementRow() + open class DateFilterElementRow(var dateValue: Date = Date(), var showTime: Boolean = false) : FilterElementRow() open class NumericFilterElementRow(open val doubleValue: Double = 0.0) : FilterElementRow() open class StringFilterElementRow(val stringValue: String = "") : FilterElementRow() @@ -86,6 +86,10 @@ sealed class FilterElementRow : RowRepresentable { object From : DateFilterElementRow() object To : DateFilterElementRow() + object FromTime : DateFilterElementRow(showTime = true) + object ToTime : DateFilterElementRow(showTime = true) + + // Data classes - holding value object ResultMoreThan : AmountFilterElement(), MoreOperator @@ -153,6 +157,8 @@ sealed class FilterElementRow : RowRepresentable { is Blind -> QueryCondition.BLINDS is From -> QueryCondition.STARTED_FROM_DATE is To -> QueryCondition.ENDED_TO_DATE + is FromTime -> QueryCondition.STARTED_FROM_TIME + is ToTime -> QueryCondition.ENDED_TO_TIME is Month -> QueryCondition.MONTH is Day -> QueryCondition.DAY_OF_WEEK is Year -> QueryCondition.YEAR @@ -180,7 +186,6 @@ sealed class FilterElementRow : RowRepresentable { is DurationMoreThan -> QueryCondition.MORE_THAN_DURATION is DurationLessThan -> QueryCondition.LESS_THAN_DURATION - //TODO: Check the conditions is LastGames -> QueryCondition.LAST_GAMES is LastSessions -> QueryCondition.LAST_SESSIONS @@ -215,8 +220,8 @@ sealed class FilterElementRow : RowRepresentable { is CurrentWeek -> R.string.current_week is CurrentMonth -> R.string.current_month is CurrentYear -> R.string.current_year - is From -> R.string.from - is To -> R.string.to + is From, FromTime -> R.string.from + is To, ToTime -> R.string.to is Live -> R.string.live is Online -> R.string.online is Weekday -> R.string.week_days @@ -235,7 +240,7 @@ sealed class FilterElementRow : RowRepresentable { override val viewType: Int get() { return when (this) { - is PastDays, is From, is To, is LastGames, is LastSessions, is ReBuyMoreThan, is ReBuyLessThan, + is PastDays, is From, is To, is FromTime, is ToTime, is LastGames, is LastSessions, is ReBuyMoreThan, is ReBuyLessThan, is DurationMoreThan, is DurationLessThan -> RowViewType.TITLE_VALUE_CHECK.ordinal else -> RowViewType.TITLE_CHECK.ordinal } @@ -330,22 +335,4 @@ sealed class FilterElementRow : RowRepresentable { return null } - /* - override fun editingDescriptors(map: Map): ArrayList? { - when (this) { - PAST_DAYS -> { - val defaultValue: String? by map - val data = arrayListOf() - data.add( - RowRepresentableEditDescriptor( - defaultValue, - inputType = InputType.TYPE_CLASS_NUMBER - ) - ) - } - } - - return super.editingDescriptors(map) - } - */ } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSectionRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSectionRow.kt index 1c2006be..bebfde32 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSectionRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSectionRow.kt @@ -9,6 +9,8 @@ import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElementRow.* +import net.pokeranalytics.android.util.extensions.endOfDay +import net.pokeranalytics.android.util.extensions.startOfDay import java.text.DateFormatSymbols import java.util.* @@ -86,7 +88,8 @@ enum class FilterSectionRow(override val resId: Int?) : RowRepresentable { TABLE_SIZE -> { val tableSizes = arrayListOf() val realm = Realm.getDefaultInstance() - val distinctTableSizes = realm.where().distinct("tableSize").findAll().sort("tableSize", Sort.ASCENDING) + val distinctTableSizes = + realm.where().distinct("tableSize").findAll().sort("tableSize", Sort.ASCENDING) distinctTableSizes.forEach { session -> session.tableSize?.let { tableSize -> tableSizes.add(TableSize(net.pokeranalytics.android.model.TableSize(tableSize))) @@ -110,7 +113,8 @@ enum class FilterSectionRow(override val resId: Int?) : RowRepresentable { YEAR -> { val years = arrayListOf() val realm = Realm.getDefaultInstance() - val distinctYears = realm.where().distinct("year").findAll().sort("year", Sort.DESCENDING) + val distinctYears = + realm.where().distinct("year").findAll().sort("year", Sort.DESCENDING) distinctYears.forEach { session -> session.year?.let { year -> years.add(Year(year)) @@ -140,8 +144,17 @@ enum class FilterSectionRow(override val resId: Int?) : RowRepresentable { } // Duration - SESSION_DURATION -> arrayListOf(DurationMoreThan as FilterElementRow, DurationLessThan as FilterElementRow) - RANGE -> arrayListOf(From, To) + SESSION_DURATION -> arrayListOf( + DurationMoreThan as FilterElementRow, + DurationLessThan as FilterElementRow + ) + RANGE -> { + val fromTime = FromTime + fromTime.dateValue = Date().startOfDay() + val toTime = ToTime + toTime.dateValue = Date().endOfDay() + arrayListOf(fromTime, toTime) + } // Sessions SESSIONS -> arrayListOf(LastGames(0), LastSessions(0)) @@ -152,7 +165,9 @@ enum class FilterSectionRow(override val resId: Int?) : RowRepresentable { // TODO: Improve the way we get the blinds distinctly val blinds = arrayListOf() val realm = Realm.getDefaultInstance() - val sessions = realm.where().findAll().sort("cgSmallBlind", Sort.ASCENDING) + val sessions = + realm.where().isNotNull("cgSmallBlind").isNotNull("cgBigBlind").findAll() + .sort("cgSmallBlind", Sort.ASCENDING) val distinctBlinds: ArrayList = ArrayList() val blindsHashMap: ArrayList = ArrayList() @@ -164,14 +179,23 @@ enum class FilterSectionRow(override val resId: Int?) : RowRepresentable { } distinctBlinds.forEach { session -> - blinds.add(Blind(session.cgSmallBlind, session.cgBigBlind, session.bankroll?.currency?.code)) + blinds.add( + Blind( + session.cgSmallBlind, + session.cgBigBlind, + session.bankroll?.currency?.code + ) + ) session.getBlinds() } realm.close() blinds } - CASH_RE_BUY_COUNT -> arrayListOf(ReBuyMoreThan as FilterElementRow, ReBuyLessThan as FilterElementRow) + CASH_RE_BUY_COUNT -> arrayListOf( + ReBuyMoreThan as FilterElementRow, + ReBuyLessThan as FilterElementRow + ) // Tournament TOURNAMENT_TYPE -> arrayListOf() From f7496b197467052fae8c32c8a1feb4211a53441e Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Thu, 11 Apr 2019 12:23:49 +0200 Subject: [PATCH 3/5] Remove warning --- .../pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt index 94fb9439..40a5f226 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt @@ -244,7 +244,7 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresent private fun saveData() { //TODO: Save currentFilter details data Timber.d("Save data for filter: ${currentFilter?.id}") - selectedRows?.forEach { + selectedRows.forEach { Timber.d("Selected rows: $it") } From 6941555e34fc6f8d980df52e93a438d925b52861 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Thu, 11 Apr 2019 14:13:20 +0200 Subject: [PATCH 4/5] Update proguard rules --- app/proguard-rules.pro | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index baeaae1c..e4b45cbc 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -57,4 +57,7 @@ # Guava -dontwarn com.google.j2objc.annotations.** --keep class com.google.j2objc.annotations.** { *; } \ No newline at end of file +-keep class com.google.j2objc.annotations.** { *; } + +# Enum +-optimizations !class/unboxing/enum \ No newline at end of file From 3b512b0fa249250edb8faca5d969542a52f2f53f Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Thu, 11 Apr 2019 14:17:07 +0200 Subject: [PATCH 5/5] Fix currency crash --- .../android/model/realm/Session.kt | 2 +- .../android/model/utils/Seed.kt | 22 ++++++++++++------- .../view/rowrepresentable/FilterElementRow.kt | 3 ++- .../android/util/CurrencyUtils.kt | 21 +++++++++++++++++- 4 files changed, 37 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt index 8bf81de2..486aca1b 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt @@ -486,7 +486,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat * Return the formatted blinds */ fun getBlinds(): String { - val currencyCode = bankroll?.currency?.code ?: Currency.getInstance(Locale.getDefault()).currencyCode + val currencyCode = bankroll?.currency?.code ?: CurrencyUtils.getLocaleCurrency().currencyCode val currencySymbol = Currency.getInstance(currencyCode).symbol return if (cgSmallBlind == null) NULL_TEXT else "$currencySymbol ${cgSmallBlind?.formatted()}/${cgBigBlind?.round()}" } diff --git a/app/src/main/java/net/pokeranalytics/android/model/utils/Seed.kt b/app/src/main/java/net/pokeranalytics/android/model/utils/Seed.kt index 2604de61..455499be 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/utils/Seed.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/utils/Seed.kt @@ -3,12 +3,15 @@ package net.pokeranalytics.android.model.utils import android.content.Context import io.realm.Realm import io.realm.kotlin.where -import net.pokeranalytics.android.R -import net.pokeranalytics.android.model.realm.* +import net.pokeranalytics.android.model.realm.Bankroll import net.pokeranalytics.android.model.realm.Currency -import net.pokeranalytics.android.util.Preferences +import net.pokeranalytics.android.model.realm.Game +import net.pokeranalytics.android.model.realm.TournamentFeature +import net.pokeranalytics.android.util.CurrencyUtils import java.util.* + + class Seed(var context:Context) : Realm.Transaction { override fun execute(realm: Realm) { @@ -18,7 +21,7 @@ class Seed(var context:Context) : Realm.Transaction { } private fun createDefaultTournamentFeatures(realm: Realm) { - context.resources.getStringArray(R.array.seed_tournament_features).forEach { + context.resources.getStringArray(net.pokeranalytics.android.R.array.seed_tournament_features).forEach { val tournamentFeature = TournamentFeature() tournamentFeature.id = UUID.randomUUID().toString() tournamentFeature.name = it @@ -27,23 +30,26 @@ class Seed(var context:Context) : Realm.Transaction { } private fun createDefaultCurrencyAndBankroll(realm: Realm) { + + Locale.setDefault(Locale.JAPANESE) + // Currency - val localeCurrency = java.util.Currency.getInstance(Locale.getDefault()) + val localeCurrency = CurrencyUtils.getLocaleCurrency() val defaultCurrency = Currency() defaultCurrency.code = localeCurrency.currencyCode realm.insertOrUpdate(defaultCurrency) // Bankroll val bankroll = Bankroll() - bankroll.name = context.resources.getString(R.string.live) + bankroll.name = context.resources.getString(net.pokeranalytics.android.R.string.live) bankroll.live = true bankroll.currency = realm.where().equalTo("code", localeCurrency.currencyCode).findFirst() realm.insertOrUpdate(bankroll) } private fun createDefaultGames(realm: Realm) { - val gamesName = context.resources.getStringArray(R.array.seed_games) - val gamesShortName = context.resources.getStringArray(R.array.seed_games_short_name) + val gamesName = context.resources.getStringArray(net.pokeranalytics.android.R.array.seed_games) + val gamesShortName = context.resources.getStringArray(net.pokeranalytics.android.R.array.seed_games_short_name) for ((index, name) in gamesName.withIndex()) { val game = Game() game.id = UUID.randomUUID().toString() diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt index ab8a11fe..d66d513f 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt @@ -11,6 +11,7 @@ import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheet import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.RowViewType +import net.pokeranalytics.android.util.CurrencyUtils import net.pokeranalytics.android.util.NULL_TEXT import net.pokeranalytics.android.util.extensions.formatted import net.pokeranalytics.android.util.extensions.round @@ -107,7 +108,7 @@ sealed class FilterElementRow : RowRepresentable { data class Blind(var sb: Double? = null, var bb: Double? = null, var code: String? = null) : FilterElementRow() { val name: String get() { - val currencyCode = code ?: Currency.getInstance(Locale.getDefault()).currencyCode + val currencyCode = code ?: CurrencyUtils.getLocaleCurrency().currencyCode val currencySymbol = Currency.getInstance(currencyCode).symbol return if (sb == null) NULL_TEXT else "$currencySymbol ${sb?.formatted()}/${bb?.round()}" } diff --git a/app/src/main/java/net/pokeranalytics/android/util/CurrencyUtils.kt b/app/src/main/java/net/pokeranalytics/android/util/CurrencyUtils.kt index 861ada82..2aa76778 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/CurrencyUtils.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/CurrencyUtils.kt @@ -13,7 +13,7 @@ class CurrencyUtils { * return the currency associated with this bankroll */ fun getCurrency(bankroll: Bankroll? = null) : Currency { - val currencyCode = bankroll?.currency?.code ?: Currency.getInstance(Locale.getDefault()).currencyCode + val currencyCode = bankroll?.currency?.code ?: CurrencyUtils.getLocaleCurrency().currencyCode return Currency.getInstance(currencyCode) } @@ -40,6 +40,25 @@ class CurrencyUtils { return currencyFormatter } + /** + * Return the locale currency, or en_US if there + */ + fun getLocaleCurrency() : Currency { + return try { + Currency.getInstance(Locale.getDefault()) + } catch (ex: Exception) { + when (Locale.getDefault().language) { + "en" -> Currency.getInstance(Locale("en", "US")) + "fr" -> Currency.getInstance(Locale("fr", "FR")) + "es" -> Currency.getInstance(Locale("es", "ES")) + "de" -> Currency.getInstance(Locale("de", "DE")) + "ja" -> Currency.getInstance(Locale("ja", "JP")) + "zh" -> Currency.getInstance(Locale("zh", "CN")) + else -> Currency.getInstance(Locale("en", "US")) + } + } + } + } } \ No newline at end of file