From 93cefdbe3b3537c0b10f8befb8d17c20ccf63bfe Mon Sep 17 00:00:00 2001 From: Laurent Date: Tue, 5 Mar 2019 10:14:32 +0100 Subject: [PATCH 1/4] Refreshes stats when sessions are modified --- .../android/ui/fragment/StatsFragment.kt | 29 +++++++++++-------- .../components/SessionObserverFragment.kt | 23 +++++++++++++++ 2 files changed, 40 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/fragment/components/SessionObserverFragment.kt diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt index 3509ae71..ba2518a8 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt @@ -14,19 +14,18 @@ import net.pokeranalytics.android.model.StatRepresentable import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.ui.adapter.DisplayDescriptor import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter -import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource -import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment +import net.pokeranalytics.android.ui.fragment.components.SessionObserverFragment import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.rowrepresentable.HeaderRowRepresentable import net.pokeranalytics.android.util.NULL_TEXT -class StatsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource { +class StatsFragment : SessionObserverFragment(), StaticRowRepresentableDataSource { private var rowRepresentables: ArrayList = ArrayList() - private lateinit var statsAdapterRow: RowRepresentableAdapter + private lateinit var statsAdapter: RowRepresentableAdapter companion object { @@ -41,7 +40,7 @@ class StatsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource } } - + // Life Cycle override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_stats, container, false) @@ -80,6 +79,15 @@ class StatsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource return TextFormat(NULL_TEXT) } + // Override + + override fun sessionsChanged() { + this.launchStatComputation() + this.statsAdapter.notifyDataSetChanged() + } + + // Business + /** * Init data */ @@ -94,11 +102,10 @@ class StatsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource runBlocking { val realm = Realm.getDefaultInstance() - val allSessions = realm.where(Session::class.java).findAll() val cgSessions = mutableListOf() val tSessions = mutableListOf() - allSessions.forEach { session -> + super.sessions.forEach { session -> if (session.isCashGame()) { cgSessions.add(session) } else { @@ -107,7 +114,7 @@ class StatsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource } val allStats: List = listOf(Stat.NETRESULT, Stat.HOURLY_RATE, Stat.AVERAGE, Stat.NUMBER_OF_GAMES, Stat.AVERAGE_DURATION, Stat.DURATION) - val allSessionGroup = SessionGroup(getString(R.string.all), allSessions, allStats) + val allSessionGroup = SessionGroup(getString(R.string.all), super.sessions, allStats) val cgStats: List = listOf(Stat.NETRESULT, Stat.HOURLY_RATE, Stat.NET_BB_PER_100_HANDS, Stat.HOURLY_RATE_BB, Stat.AVERAGE, Stat.STANDARD_DEVIATION_HOURLY, Stat.WIN_RATIO, Stat.NUMBER_OF_GAMES, Stat.AVERAGE_BUYIN) val cgSessionGroup = SessionGroup(getString(R.string.cash_game), cgSessions, cgStats) val tStats: List = listOf(Stat.NETRESULT, Stat.HOURLY_RATE, Stat.ROI, Stat.WIN_RATIO, Stat.NUMBER_OF_GAMES, Stat.AVERAGE_BUYIN) @@ -117,18 +124,16 @@ class StatsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource } - this.rowRepresentables = this.convertResultsIntoRepresentables(results) - this.statsAdapterRow = RowRepresentableAdapter(this) // StatsAdapter(this, null) - + this.statsAdapter = RowRepresentableAdapter(this) // StatsAdapter(this, null) val viewManager = LinearLayoutManager(requireContext()) recyclerView.apply { setHasFixedSize(true) layoutManager = viewManager - adapter = statsAdapterRow + adapter = statsAdapter } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/SessionObserverFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/SessionObserverFragment.kt new file mode 100644 index 00000000..8c9a3c32 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/SessionObserverFragment.kt @@ -0,0 +1,23 @@ +package net.pokeranalytics.android.ui.fragment.components + +import io.realm.Realm +import io.realm.RealmResults +import net.pokeranalytics.android.model.realm.Session + +open class SessionObserverFragment : PokerAnalyticsFragment() { + + lateinit var sessions: RealmResults + + init { + val realm = Realm.getDefaultInstance() + this.sessions = realm.where(Session::class.java).findAll() + this.sessions.addChangeListener { _, _ -> + this.sessionsChanged() + } + } + + open fun sessionsChanged() { + + } + +} \ No newline at end of file From 94e907d3e985ca8506a399679702fbcdd9d5b473 Mon Sep 17 00:00:00 2001 From: Laurent Date: Tue, 5 Mar 2019 10:15:36 +0100 Subject: [PATCH 2/4] remove warnings --- .../android/model/filter/Filterable.kt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/filter/Filterable.kt b/app/src/main/java/net/pokeranalytics/android/model/filter/Filterable.kt index 56875b83..edd10a97 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/filter/Filterable.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/filter/Filterable.kt @@ -39,13 +39,13 @@ class FilterManager { realmResults.where().greaterThan("test", 5).findAll() } } - -fun MutableList.filter(filter: FilterComponent) : List { - - return this.filter { f -> - return@filter true - } -} +// +//fun MutableList.filter(filter: FilterComponent) : List { +// +// return this.filter { f -> +// return@filter true +// } +//} // doesnt compile: Class "FilterableRealmObject" must contain at least 1 persistable field. From 3cf3cf8b8e78ab48ef02622fbb3baee4088245b0 Mon Sep 17 00:00:00 2001 From: Laurent Date: Tue, 5 Mar 2019 10:19:04 +0100 Subject: [PATCH 3/4] remove warnings --- .../net/pokeranalytics/android/PokerAnalyticsApplication.kt | 4 ++-- .../net/pokeranalytics/android/ui/fragment/StatsFragment.kt | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt index a76267ca..0d7c697b 100644 --- a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt +++ b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt @@ -46,13 +46,13 @@ class PokerAnalyticsApplication : Application() { val realm: Realm = Realm.getDefaultInstance() // Add observer on session time frame changes this.sessions = realm.where(Session::class.java).findAll() // monitor session deletions - this.sessions?.addChangeListener { _, changeSet -> +// this.sessions?.addChangeListener { _, changeSet -> /* val deletedSessions = realm.where(Session::class.java).`in`("id", changeSet.deletions.toTypedArray()).findAll() deletedSessions.forEach { it.cleanup() } */ - } +// } if (BuildConfig.DEBUG) { // Logs diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt index ba2518a8..4fa1cd8f 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt @@ -5,7 +5,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager -import io.realm.Realm import kotlinx.android.synthetic.main.fragment_stats.* import kotlinx.coroutines.runBlocking import net.pokeranalytics.android.R @@ -101,7 +100,6 @@ class StatsFragment : SessionObserverFragment(), StaticRowRepresentableDataSourc runBlocking { - val realm = Realm.getDefaultInstance() val cgSessions = mutableListOf() val tSessions = mutableListOf() From 85435a334c1e43f6fabeae5b2c371b05fe2bc6a3 Mon Sep 17 00:00:00 2001 From: Laurent Date: Tue, 5 Mar 2019 10:21:31 +0100 Subject: [PATCH 4/4] Make sessions as final --- .../android/ui/fragment/components/SessionObserverFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/SessionObserverFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/SessionObserverFragment.kt index 8c9a3c32..c3513e9d 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/SessionObserverFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/SessionObserverFragment.kt @@ -6,7 +6,7 @@ import net.pokeranalytics.android.model.realm.Session open class SessionObserverFragment : PokerAnalyticsFragment() { - lateinit var sessions: RealmResults + val sessions: RealmResults init { val realm = Realm.getDefaultInstance()