From 36cb88dc5374c48c6e083009f6659894e092bed1 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Wed, 27 Mar 2019 17:51:31 +0100 Subject: [PATCH] handle ComputableResult when Currency's rate is modified --- .../android/PokerAnalyticsApplication.kt | 27 ----------- .../android/model/realm/Currency.kt | 47 +++++++------------ .../ui/fragment/BankrollDataFragment.kt | 18 ++++--- .../ui/fragment/EditableDataFragment.kt | 5 ++ 4 files changed, 34 insertions(+), 63 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt index 8ce61ad5..88189581 100644 --- a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt +++ b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt @@ -19,22 +19,6 @@ import timber.log.Timber class PokerAnalyticsApplication : Application() { - var sessions: RealmResults? = null - -// private val listener: OrderedRealmCollectionChangeListener> = -// OrderedRealmCollectionChangeListener() { realmResults: RealmResults, changeSet: OrderedCollectionChangeSet -> -// -// if (changeSet == null) { -// return@OrderedRealmCollectionChangeListener -// } -// -// val realm: Realm = Realm.getDefaultInstance() -// -// val deletedSessions = realm.where(Session::class.java).`in`("id", changeSet.deletions.toTypedArray()).findAll() -// deletedSessions.forEach { it.cleanup() } -// -// } - override fun onCreate() { super.onCreate() @@ -48,17 +32,6 @@ class PokerAnalyticsApplication : Application() { .build() Realm.setDefaultConfiguration(realmConfiguration) - val realm: Realm = Realm.getDefaultInstance() - // Add observer on session time frame changes - this.sessions = realm.where(Session::class.java).findAll() // monitor session deletions -// this.endedSessions?.addChangeListener { _, changeSet -> - /* - val deletedSessions = - realm.where(Session::class.java).`in`("id", changeSet.deletions.toTypedArray()).findAll() - deletedSessions.forEach { it.cleanup() } - */ -// } - if (BuildConfig.DEBUG) { // Logs Timber.plant(PokerAnalyticsLogs()) diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt index dd60d670..adcaeee5 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt @@ -1,10 +1,10 @@ package net.pokeranalytics.android.model.realm +import io.realm.Realm import io.realm.RealmObject import io.realm.annotations.PrimaryKey import java.util.* - open class Currency : RealmObject() { @PrimaryKey @@ -18,32 +18,21 @@ open class Currency : RealmObject() { /** * The rate of the currency with the main currency */ - var rate: Double? = null - set(value) { - field = value - - val rate = value ?: 1.0 - - // could be async? - - if (this.isManaged && this.realm != null) { - - val query = this.realm.where(ComputableResult::class.java) - query.`in`("session.bankroll.currency.id", arrayOf(this.id)) - val cResults = query.findAll() - - cResults.forEach { computable -> - - computable.session?.result?.net?.let { - computable.ratedNet = it * rate - } - computable.session?.result?.buyin?.let { - computable.ratedBuyin = it * rate - } - - } - } - - } - + var rate: Double? = 1.0 + + fun refreshAllRelatedComputableResults(realm:Realm) { + val rate = this.rate ?: 1.0 + val query = realm.where(ComputableResult::class.java) + query.`in`("session.bankroll.currency.id", arrayOf(this.id)) + val cResults = query.findAll() + cResults.forEach { computable -> + computable.session?.result?.net?.let { + computable.ratedNet = it * rate + } + computable.session?.result?.buyin?.let { + computable.ratedBuyin = it * rate + } + + } + } } \ No newline at end of file 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 6b108640..1973e9c2 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 @@ -44,6 +44,13 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS private var isRefreshingRate = false private var lastRefreshRateCall = 0L + private val differentCurrency : Boolean + get() { + return bankroll.currency?.let { bankrollCurrency -> + bankrollCurrency.code != defaultCurrency.currencyCode + } ?: false + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -60,6 +67,9 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS data?.let { val currencyCode = it.getStringExtra(CurrenciesFragment.INTENT_CURRENCY_CODE) onRowValueChanged(currencyCode, BankrollRow.CURRENCY) + if (differentCurrency) { + refreshRate() + } } } } @@ -152,12 +162,6 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS rows.add(BankrollRow.LIVE) rows.add(CustomizableRowRepresentable(customViewType = RowViewType.HEADER_TITLE, resId = R.string.currency)) rows.add(BankrollRow.CURRENCY) - - var differentCurrency = false - bankroll.currency?.let { bankrollCurrency -> - differentCurrency = bankrollCurrency.code != defaultCurrency.currencyCode - } - if (differentCurrency) { rows.add(BankrollRow.RATE) rows.add(BankrollRow.REFRESH_RATE) @@ -191,7 +195,7 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS } lastRefreshRateCall = System.currentTimeMillis() - val currenciesConverterValue = "${defaultCurrency.currencyCode}_${bankroll?.currency?.code}" + val currenciesConverterValue = "${defaultCurrency.currencyCode}_${bankroll.currency?.code}" val call = CurrencyConverterApi.getApi(requireContext())?.convert(currenciesConverterValue) call?.enqueue(object : retrofit2.Callback> { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt index ed1dd71f..1c49fb93 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt @@ -14,6 +14,7 @@ import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.model.interfaces.Manageable import net.pokeranalytics.android.model.interfaces.Savable +import net.pokeranalytics.android.model.realm.Bankroll import net.pokeranalytics.android.ui.activity.EditableDataActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter @@ -145,6 +146,10 @@ open class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDele this.getRealm().executeTransaction { val item = it.copyToRealmOrUpdate(this.item) + if (item is Bankroll) { + item.currency?.refreshAllRelatedComputableResults(it) + } + val uniqueIdentifier = if (item is Identifiable) { item.id } else ""