From dd4a85998b4ac6ef092dd481604a49fa6af76cc4 Mon Sep 17 00:00:00 2001 From: Laurent Date: Wed, 27 Feb 2019 12:11:43 +0100 Subject: [PATCH 1/5] throw exception when holder is not defined --- .../java/net/pokeranalytics/android/ui/view/RowViewType.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt index a98d4198..be8f19cd 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt @@ -29,6 +29,7 @@ interface BindableHolder { } + enum class RowViewType { HEADER, HEADER_TITLE_VALUE, @@ -281,7 +282,7 @@ enum class RowViewType { parent, false) ) - else -> FakeViewHolder(parent) + else -> throw Exception("Undefined RowViewType's holder") } } From dc5f150a4fd5045829c9c107d320261f7bb72398 Mon Sep 17 00:00:00 2001 From: Laurent Date: Wed, 27 Feb 2019 12:12:27 +0100 Subject: [PATCH 2/5] create Stat datasource --- .../android/ui/datasource/StatsDataSource.kt | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/datasource/StatsDataSource.kt diff --git a/app/src/main/java/net/pokeranalytics/android/ui/datasource/StatsDataSource.kt b/app/src/main/java/net/pokeranalytics/android/ui/datasource/StatsDataSource.kt new file mode 100644 index 00000000..d8d5714e --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/datasource/StatsDataSource.kt @@ -0,0 +1,21 @@ +package net.pokeranalytics.android.ui.datasource + +import net.pokeranalytics.android.calculus.ComputedResults +import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource +import net.pokeranalytics.android.ui.view.RowRepresentable + +class StatsDataSource(results: List) : RowRepresentableDataSource { + + var results: List = results + + override fun adapterRows(): ArrayList { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + override fun numberOfRows(): Int { + return this.results.fold(0) { acc, computedResults -> + return acc + computedResults.numberOfStats() + } + } + +} \ No newline at end of file From 5b6615ee53dba8dcf72072168a22e718bcfccc40 Mon Sep 17 00:00:00 2001 From: Laurent Date: Wed, 27 Feb 2019 12:14:02 +0100 Subject: [PATCH 3/5] Fix issue and provide convenience method --- .../java/net/pokeranalytics/android/calculus/Calculator.kt | 4 ++++ .../java/net/pokeranalytics/android/calculus/Computable.kt | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt b/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt index 51ce0b59..1bde3302 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt @@ -94,6 +94,10 @@ class Calculator { var results: ComputedResults = ComputedResults() + if (sessions.size == 0) { + return results + } + var sum: Double = 0.0 var totalHands: Double = 0.0 var bbSum: Double = 0.0 diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/Computable.kt b/app/src/main/java/net/pokeranalytics/android/calculus/Computable.kt index d4aabc47..8df9abc2 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Computable.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Computable.kt @@ -97,6 +97,13 @@ class ComputedResults() { } } + /** + * Returns the number of computed stats + */ + fun numberOfStats() : Int { + return this._computedStats.size + } + } class Point(x: Double, y: Double) { From 7fd812c25eca32fda493321ddd8a8d25ada735d8 Mon Sep 17 00:00:00 2001 From: Laurent Date: Wed, 27 Feb 2019 12:30:07 +0100 Subject: [PATCH 4/5] Refactoring --- .../ui/adapter/RowRepresentableAdapter.kt | 84 ------------------- .../ui/adapter/RowRepresentableDataSource.kt | 84 +++++++++++++++++++ 2 files changed, 84 insertions(+), 84 deletions(-) create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableDataSource.kt diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt index cd6f2623..3a51110b 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt @@ -1,102 +1,18 @@ package net.pokeranalytics.android.ui.adapter -import android.content.Context import android.os.Handler import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil -import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.RecyclerView -import kotlinx.android.synthetic.main.fragment_settings.* import net.pokeranalytics.android.ui.view.BindableHolder -import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType -interface RowRepresentableDataSource : DisplayableDataSource { - fun rowRepresentableForPosition(position:Int): RowRepresentable { - if (this.numberOfRows() > position) { - return this.adapterRows()[position] - } else { - throw IllegalStateException("Need to implement Data Source") - } - } - - fun numberOfRows(): Int { - return this.adapterRows().size - } - - fun viewTypeForPosition(position:Int): Int { - return this.rowRepresentableForPosition(position).viewType - } - - fun indexForRow(row:RowRepresentable): Int { - return this.adapterRows().indexOf(row) - } - - /** - * A list of [RowRepresentableEditDescriptor] object specifying the way the edition will be handled - */ - fun editDescriptors(row: RowRepresentable): ArrayList { - return ArrayList() - } -} - interface RowRepresentableDelegate { fun onRowSelected(position: Int, row: RowRepresentable, fromAction:Boolean = false) {} fun onRowValueChanged(value: Any?, row: RowRepresentable) {} } -/** - * An interface used to provide RowRepresentableAdapter content and value in the form of rows - */ -interface DisplayableDataSource { - - /** - * Returns a list of rows - */ - fun adapterRows(): ArrayList { - return ArrayList() - } - - /** - * Returns a boolean for a specific row - */ - fun boolForRow(row: RowRepresentable): Boolean { - return false - } - - /** - * Returns a localized string for a specific row - */ - fun stringForRow(row: RowRepresentable, context: Context): String { - return stringForRow(row) - } - - /** - * Returns a string for a specific row - */ - fun stringForRow(row: RowRepresentable): String { - return "" - } - - - /** - * Returns an action icon identifier for a specific row - */ - fun actionIconForRow(row: RowRepresentable): Int? { - return 0 - } - - /** - * Manages: - * - label (string) - * - segmented control (live/online) - * - textfield (string) - * - switch (bool) - * - static content - * */ -} - /** * An adapter capable of displaying a list of RowRepresentables * @param dataSource the datasource providing rows diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableDataSource.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableDataSource.kt new file mode 100644 index 00000000..c15b90f1 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableDataSource.kt @@ -0,0 +1,84 @@ +package net.pokeranalytics.android.ui.adapter + +import android.content.Context +import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor + + +interface RowRepresentableDataSource : DisplayableDataSource { + + fun rowRepresentableForPosition(position:Int): RowRepresentable { + if (this.numberOfRows() > position) { + return this.adapterRows()[position] + } else { + throw IllegalStateException("Need to implement Data Source") + } + } + + fun numberOfRows(): Int { + return this.adapterRows().size + } + + fun viewTypeForPosition(position:Int): Int { + return this.rowRepresentableForPosition(position).viewType + } + + fun indexForRow(row: RowRepresentable): Int { + return this.adapterRows().indexOf(row) + } + + /** + * A list of [RowRepresentableEditDescriptor] object specifying the way the edition will be handled + */ + fun editDescriptors(row: RowRepresentable): ArrayList { + return ArrayList() + } +} + +/** + * An interface used to provide RowRepresentableAdapter content and value in the form of rows + * + * Also returns the appropriate value for any RowRepresentable in the form of : + * - string + * - booleans + * - actionIcon + * to display the appropriate values in graphical components, such as labels, textfields, switchs... + */ +interface DisplayableDataSource { + + /** + * Returns a list of rows + */ + fun adapterRows(): ArrayList { + return ArrayList() + } + + /** + * Returns a boolean for a specific row + */ + fun boolForRow(row: RowRepresentable): Boolean { + return false + } + + /** + * Returns a localized string for a specific row + */ + fun stringForRow(row: RowRepresentable, context: Context): String { + return stringForRow(row) + } + + /** + * Returns a string for a specific row + */ + fun stringForRow(row: RowRepresentable): String { + return "" + } + + /** + * Returns an action icon identifier for a specific row + */ + fun actionIconForRow(row: RowRepresentable): Int? { + return 0 + } + +} From b92ded3634b27f5938ac892a390bf41f1ce5c448 Mon Sep 17 00:00:00 2001 From: Laurent Date: Wed, 27 Feb 2019 12:32:20 +0100 Subject: [PATCH 5/5] Update on stat fragment --- .../android/ui/datasource/StatsDataSource.kt | 9 ++-- .../android/ui/fragment/StatsFragment.kt | 49 +++++++------------ 2 files changed, 23 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/datasource/StatsDataSource.kt b/app/src/main/java/net/pokeranalytics/android/ui/datasource/StatsDataSource.kt index d8d5714e..e1cbdd22 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/datasource/StatsDataSource.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/datasource/StatsDataSource.kt @@ -9,13 +9,14 @@ class StatsDataSource(results: List) : RowRepresentableDataSour var results: List = results override fun adapterRows(): ArrayList { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + return ArrayList() } override fun numberOfRows(): Int { - return this.results.fold(0) { acc, computedResults -> - return acc + computedResults.numberOfStats() - } + return 0 +// return this.results.fold(0) { acc, computedResults -> +// return acc + computedResults.numberOfStats() +// } } } \ No newline at end of file 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 aec6305d..2325cbd1 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,23 +5,20 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager -import kotlinx.android.synthetic.main.fragment_settings.* -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.launch +import io.realm.Realm import kotlinx.android.synthetic.main.fragment_stats.* +import kotlinx.coroutines.runBlocking import net.pokeranalytics.android.R import net.pokeranalytics.android.calculus.Calculator import net.pokeranalytics.android.calculus.ComputedResults import net.pokeranalytics.android.calculus.SessionGroup -import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.model.extensions.SessionType import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter -import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource +import net.pokeranalytics.android.ui.datasource.StatsDataSource import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment -import net.pokeranalytics.android.ui.view.RowRepresentable -class StatsFragment : PokerAnalyticsFragment(), RowRepresentableDataSource { +class StatsFragment : PokerAnalyticsFragment() { companion object { @@ -39,11 +36,8 @@ class StatsFragment : PokerAnalyticsFragment(), RowRepresentableDataSource { private lateinit var statsAdapterRow: RowRepresentableAdapter - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_stats, container, false) - - } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -51,38 +45,21 @@ class StatsFragment : PokerAnalyticsFragment(), RowRepresentableDataSource { initData() } - override fun adapterRows(): ArrayList { - val rows = ArrayList() - rows.addAll(Stat.values()) - return rows - } - /** * Init data */ private fun initData() { - - val viewManager = LinearLayoutManager(requireContext()) - this.statsAdapterRow = RowRepresentableAdapter( - this - ) - - recyclerView.apply { - setHasFixedSize(true) - layoutManager = viewManager - adapter = statsAdapterRow - } - -// this.launchStatComputation() + this.launchStatComputation() } private fun launchStatComputation() { var results = listOf() - GlobalScope.launch { + runBlocking { - val allSessions = getRealm().where(Session::class.java).findAll() + val realm = Realm.getDefaultInstance() + val allSessions = realm.where(Session::class.java).findAll() val cgSessions = mutableListOf() val tSessions = mutableListOf() @@ -101,6 +78,16 @@ class StatsFragment : PokerAnalyticsFragment(), RowRepresentableDataSource { results = Calculator.computeGroups(listOf(allSessionGroup, cgSessionGroup, tSessionGroup), Calculator.Options()) } + this.statsAdapterRow = RowRepresentableAdapter(StatsDataSource(results)) + + val viewManager = LinearLayoutManager(requireContext()) + + recyclerView.apply { + setHasFixedSize(true) + layoutManager = viewManager + adapter = statsAdapterRow + } + } } \ No newline at end of file