Merge branch 'master' of gitlab.com:stax-river/poker-analytics

feature/top10
Aurelien Hubert 7 years ago
commit aa2b3056ac
  1. 32
      app/src/androidTest/java/net/pokeranalytics/android/ExampleInstrumentedUnitTest.kt
  2. 9
      app/src/androidTest/java/net/pokeranalytics/android/RealmInstrumentedUnitTest.kt
  3. 7
      app/src/main/java/net/pokeranalytics/android/model/TableSize.kt
  4. 5
      app/src/main/java/net/pokeranalytics/android/model/filter/FilterComponent.kt
  5. 55
      app/src/main/java/net/pokeranalytics/android/model/filter/Filterable.kt
  6. 7
      app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt
  7. 9
      app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt
  8. 7
      app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt
  9. 6
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  10. 8
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt
  11. 2
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentType.kt
  12. 7
      app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt
  13. 5
      app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt
  14. 105
      app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableDataSource.kt
  15. 6
      app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt
  16. 6
      app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt
  17. 6
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt
  18. 9
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt
  19. 19
      app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt
  20. 12
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt
  21. 12
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListGameFragment.kt
  22. 16
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt
  23. 7
      app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt

@ -26,7 +26,7 @@ class ExampleInstrumentedUnitTest : RealmInstrumentedUnitTest() {
// convenience extension
fun Session.Companion.testInstance(netResult: Double, startDate: Date, endDate: Date?): Session {
var session: Session = Session.newInstance()
val session: Session = Session.newInstance()
session.result?.netResult = netResult
session.timeFrame?.setDate(startDate, endDate)
return session
@ -38,8 +38,8 @@ class ExampleInstrumentedUnitTest : RealmInstrumentedUnitTest() {
val realm = this.mockRealm
realm.beginTransaction()
var s1 = realm.createObject(Session::class.java, "1")
var s2 = realm.createObject(Session::class.java, "2")
val s1 = realm.createObject(Session::class.java, "1")
val s2 = realm.createObject(Session::class.java, "2")
s1.timeFrame = realm.createObject(TimeFrame::class.java)
s2.timeFrame = realm.createObject(TimeFrame::class.java)
@ -78,7 +78,7 @@ class ExampleInstrumentedUnitTest : RealmInstrumentedUnitTest() {
val sessions = realm.where(Session::class.java).findAll()
val group = SessionGroup(name = "test", sessions = sessions)
var options = Calculator.Options()
val options = Calculator.Options()
options.displayedStats = listOf(Stat.STANDARD_DEVIATION_BB_PER_100_HANDS, Stat.STANDARD_DEVIATION)
val results: ComputedResults = Calculator.compute(group, options)
@ -196,8 +196,8 @@ class ExampleInstrumentedUnitTest : RealmInstrumentedUnitTest() {
val realm = this.mockRealm
realm.beginTransaction()
var s1 = realm.createObject(Session::class.java, "1")
var s2 = realm.createObject(Session::class.java, "2")
val s1 = realm.createObject(Session::class.java, "1")
val s2 = realm.createObject(Session::class.java, "2")
s1.timeFrame = realm.createObject(TimeFrame::class.java)
s2.timeFrame = realm.createObject(TimeFrame::class.java)
@ -229,7 +229,7 @@ class ExampleInstrumentedUnitTest : RealmInstrumentedUnitTest() {
val sessions = realm.where(Session::class.java).findAll()
val group = SessionGroup(name = "test", sessions = sessions)
var options = Calculator.Options()
val options = Calculator.Options()
options.displayedStats = listOf(Stat.STANDARD_DEVIATION_BB_PER_100_HANDS, Stat.STANDARD_DEVIATION)
val results: ComputedResults = Calculator.compute(group, options)
@ -263,9 +263,9 @@ class ExampleInstrumentedUnitTest : RealmInstrumentedUnitTest() {
val realm = this.mockRealm
realm.beginTransaction()
var s1 = realm.createObject(Session::class.java, "1")
var s2 = realm.createObject(Session::class.java, "2")
var s3 = realm.createObject(Session::class.java, "3")
val s1 = realm.createObject(Session::class.java, "1")
val s2 = realm.createObject(Session::class.java, "2")
val s3 = realm.createObject(Session::class.java, "3")
s1.timeFrame = realm.createObject(TimeFrame::class.java)
s2.timeFrame = realm.createObject(TimeFrame::class.java)
@ -300,7 +300,7 @@ class ExampleInstrumentedUnitTest : RealmInstrumentedUnitTest() {
val sessions = realm.where(Session::class.java).findAll()
val group = SessionGroup(name = "test", sessions = sessions)
var options = Calculator.Options()
val options = Calculator.Options()
options.displayedStats = listOf(Stat.STANDARD_DEVIATION_BB_PER_100_HANDS, Stat.STANDARD_DEVIATION)
val results: ComputedResults = Calculator.compute(group, options)
@ -331,7 +331,7 @@ class ExampleInstrumentedUnitTest : RealmInstrumentedUnitTest() {
var sessions: RealmResults<Session>? = null
@Test
// @Test
fun testOverlappingSessionDeletion() {
val realm = this.mockRealm
@ -346,9 +346,9 @@ class ExampleInstrumentedUnitTest : RealmInstrumentedUnitTest() {
realm.beginTransaction()
var s1 = realm.createObject(Session::class.java, "1")
var s2 = realm.createObject(Session::class.java, "2")
var s3 = realm.createObject(Session::class.java, "3")
val s1 = realm.createObject(Session::class.java, "1")
val s2 = realm.createObject(Session::class.java, "2")
val s3 = realm.createObject(Session::class.java, "3")
s1.timeFrame = realm.createObject(TimeFrame::class.java)
s2.timeFrame = realm.createObject(TimeFrame::class.java)
@ -383,7 +383,7 @@ class ExampleInstrumentedUnitTest : RealmInstrumentedUnitTest() {
val sessions = realm.where(Session::class.java).findAll()
val group = SessionGroup(name = "test", sessions = sessions)
var options = Calculator.Options()
val options = Calculator.Options()
options.displayedStats = listOf(Stat.STANDARD_DEVIATION_BB_PER_100_HANDS, Stat.STANDARD_DEVIATION)
val results: ComputedResults = Calculator.compute(group, options)

@ -1,6 +1,5 @@
package net.pokeranalytics.android
import android.os.Looper
import io.realm.Realm
import io.realm.RealmConfiguration
import org.junit.After
@ -15,18 +14,22 @@ open class RealmInstrumentedUnitTest {
@Before
fun setup() {
Looper.prepare()
// Looper.prepare()
val testConfig = RealmConfiguration.Builder().inMemory().name("test-realm").build()
Realm.setDefaultConfiguration(testConfig)
this.mockRealm = Realm.getDefaultInstance()
this.mockRealm.executeTransaction {
this.mockRealm.deleteAll()
}
}
@After
@Throws(Exception::class)
public fun tearDown() {
Looper.loop()
// Looper.loop()
this.mockRealm.close()
}

@ -7,8 +7,11 @@ import net.pokeranalytics.android.ui.view.RowViewType
class TableSize(var numberOfPlayer: Int) : RowRepresentable {
companion object {
val all = Array(9, init =
{ index -> TableSize(index + 2) })
val all : List<TableSize>
get() {
return Array(9, init =
{ index -> TableSize(index + 2) }).toList()
}
}
override val resId: Int?

@ -0,0 +1,5 @@
package net.pokeranalytics.android.model.filter
enum class FilterComponent {
}

@ -0,0 +1,55 @@
package net.pokeranalytics.android.model.filter
import io.realm.RealmObject
import io.realm.RealmResults
/**
* We want to be able to store filters in the database:
* - filters can be a combination of sub filters
* - filters can be applied to different type of objects: Sessions, Hands, Transactions...
* - filters can be applied to a list of different type of objects (feed)
*
* A filter is described by the following:
* - a data type: Session, Hands...
* - a field: table size of a Session
* - an operator: equal, >=, <...
* - a value: an id, a number, a date...
*
* We can decide to have a collection of [operator, value] for a field
*
* Combination:
* - multiple datatype filters should be handled as 'OR'
* - multiple field filters should be handled as 'AND'
* - multiple '=' filters as 'OR'
* - multiple 'Greater than', 'less than' as 'AND'
* - multiple values as 'OR'
*
* Also:
* A filter should be able to be converted into a Realm query
*
*/
interface Filterable {
}
class FilterManager {
fun test(realmResults: RealmResults<RealmObject>) {
realmResults.where().greaterThan("test", 5).findAll()
}
}
fun MutableList<Filterable>.filter(filter: FilterComponent) : List<Filterable> {
return this.filter { f ->
return@filter true
}
}
// doesnt compile: Class "FilterableRealmObject" must contain at least 1 persistable field.
//class FilterableRealmObject : RealmObject(), Filterable {
//
//}

@ -2,10 +2,9 @@ package net.pokeranalytics.android.model.realm
import io.realm.RealmList
import io.realm.RealmObject
import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.rowrepresentable.BankrollRow
@ -14,7 +13,7 @@ import java.util.*
import kotlin.collections.ArrayList
open class Bankroll(name: String = "") : RealmObject(), Savable,
RowRepresentableDataSource, RowRepresentable {
StaticRowRepresentableDataSource, RowRepresentable {
companion object {
fun newInstance() : Bankroll {
@ -50,7 +49,7 @@ open class Bankroll(name: String = "") : RealmObject(), Savable,
// Row Representable Datasource
override fun adapterRows(): ArrayList<RowRepresentable> {
override fun adapterRows(): List<out RowRepresentable>? {
val rows = ArrayList<RowRepresentable>()
rows.add(SimpleRow.NAME)
rows.addAll(BankrollRow.values())

@ -1,18 +1,17 @@
package net.pokeranalytics.android.model.realm
import android.text.InputType
import io.realm.RealmObject
import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.rowrepresentable.GameRow
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import java.util.*
import kotlin.collections.ArrayList
open class Game : RealmObject(), Savable, RowRepresentableDataSource,
open class Game : RealmObject(), Savable, StaticRowRepresentableDataSource,
RowRepresentable {
@PrimaryKey
@ -32,7 +31,7 @@ open class Game : RealmObject(), Savable, RowRepresentableDataSource,
return this.id
}
override fun adapterRows(): ArrayList<RowRepresentable> {
override fun adapterRows(): List<out RowRepresentable>? {
val rows = ArrayList<RowRepresentable>()
rows.add(SimpleRow.NAME)
rows.addAll(GameRow.values())

@ -3,15 +3,16 @@ package net.pokeranalytics.android.model.realm
import io.realm.RealmObject
import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.rowrepresentable.LocationRow
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import java.util.*
import kotlin.collections.ArrayList
open class Location : RealmObject(), Savable, RowRepresentableDataSource, RowRepresentable {
open class Location : RealmObject(), Savable, StaticRowRepresentableDataSource, RowRepresentable {
@PrimaryKey
var id = UUID.randomUUID().toString()
@ -33,7 +34,7 @@ open class Location : RealmObject(), Savable, RowRepresentableDataSource, RowRep
return this.id
}
override fun adapterRows(): ArrayList<RowRepresentable> {
override fun adapterRows(): List<out RowRepresentable>? {
val rows = ArrayList<RowRepresentable>()
rows.add(SimpleRow.NAME)
rows.addAll(LocationRow.values())

@ -14,7 +14,7 @@ import net.pokeranalytics.android.model.TableSize
import net.pokeranalytics.android.model.extensions.SessionState
import net.pokeranalytics.android.model.extensions.getState
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowViewType
@ -25,7 +25,7 @@ import java.util.*
import kotlin.collections.ArrayList
open class Session : RealmObject(), SessionInterface, Savable,
RowRepresentableDataSource, RowRepresentable {
StaticRowRepresentableDataSource, RowRepresentable {
enum class Type {
CASH_GAME,
@ -308,7 +308,7 @@ open class Session : RealmObject(), SessionInterface, Savable,
return "Session ${this.creationDate}"
}
override fun adapterRows(): ArrayList<RowRepresentable> {
override fun adapterRows(): List<out RowRepresentable>? {
val rows = ArrayList<RowRepresentable>()
// Headers

@ -2,17 +2,17 @@ package net.pokeranalytics.android.model.realm
import android.text.InputType
import io.realm.RealmObject
import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import net.pokeranalytics.android.ui.view.rowrepresentable.TournamentFeatureRow
import java.util.*
import kotlin.collections.ArrayList
open class TournamentFeature : RealmObject(), Savable, RowRepresentableDataSource, RowRepresentable {
open class TournamentFeature : RealmObject(), Savable, StaticRowRepresentableDataSource, RowRepresentable {
@PrimaryKey
var id = UUID.randomUUID().toString()
@ -28,7 +28,7 @@ open class TournamentFeature : RealmObject(), Savable, RowRepresentableDataSourc
return this.id
}
override fun adapterRows(): ArrayList<RowRepresentable> {
override fun adapterRows(): List<out RowRepresentable>? {
val rows = ArrayList<RowRepresentable>()
rows.add(SimpleRow.NAME)
rows.addAll(TournamentFeatureRow.values())

@ -9,7 +9,7 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import java.util.*
open class TournamentType : RealmObject(), Savable, RowRepresentableDataSource, RowRepresentable {
open class TournamentType : RealmObject(), Savable, RowRepresentable {
@PrimaryKey
var id = UUID.randomUUID().toString()

@ -4,15 +4,16 @@ import android.text.InputType
import io.realm.RealmObject
import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import net.pokeranalytics.android.ui.view.rowrepresentable.TransactionTypeRow
import java.util.*
import kotlin.collections.ArrayList
open class TransactionType : RealmObject(), Savable, RowRepresentableDataSource, RowRepresentable {
open class TransactionType : RealmObject(), Savable, StaticRowRepresentableDataSource, RowRepresentable {
@PrimaryKey
var id = UUID.randomUUID().toString()
@ -37,7 +38,7 @@ open class TransactionType : RealmObject(), Savable, RowRepresentableDataSource,
return this.id
}
override fun adapterRows(): ArrayList<RowRepresentable> {
override fun adapterRows(): List<out RowRepresentable>? {
val rows = ArrayList<RowRepresentable>()
rows.add(SimpleRow.NAME)
rows.addAll(TransactionTypeRow.values())

@ -37,8 +37,9 @@ class RowRepresentableAdapter(
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val rowRepresentable = this.dataSource.rowRepresentableForPosition(position)
(holder as BindableHolder).bind(position, rowRepresentable, this)
this.dataSource.rowRepresentableForPosition(position)?.let {
(holder as BindableHolder).bind(position, it, this)
}
}
/**

@ -4,37 +4,92 @@ import android.content.Context
import net.pokeranalytics.android.calculus.TextFormat
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import org.w3c.dom.Text
interface RowRepresentableDataSource : DisplayableDataSource {
/**
* Base Interface to provide the RowRepresentable to the adapter
*/
interface RowRepresentableDataSource: EditableDataSource, DisplayableDataSource {
fun rowRepresentableForPosition(position:Int): RowRepresentable {
if (this.numberOfRows() > position) {
return this.adapterRows()[position]
} else {
throw IllegalStateException("Need to implement Data Source")
/**
* Returns a prebuild list of rows
*/
fun adapterRows(): List<out RowRepresentable>?
/**
* Returns a [RowRepresentable] at position [Int]
*/
fun rowRepresentableForPosition(position:Int): RowRepresentable?
/**
* Returns the number of [RowRepresentable] to display
*/
fun numberOfRows(): Int
/**
* Returns the ordinal value of [RowViewType] at position [Int]
*/
fun viewTypeForPosition(position:Int): Int
//TODO should be removed
fun indexForRow(row: RowRepresentable): Int
}
/**
* Interface extending [RowRepresentableDataSource] to guide the implementation of a prebuild list of [RowRepresentable]
* To do that, this interface overrides and provides a default implementation to specific methods of [RowRepresentableDataSource]
*/
interface StaticRowRepresentableDataSource: RowRepresentableDataSource {
override fun rowRepresentableForPosition(position:Int): RowRepresentable? {
this.adapterRows()?.let {
return it[position]
}
throw IllegalStateException("Need to implement Data Source")
}
fun numberOfRows(): Int {
return this.adapterRows().size
override fun numberOfRows(): Int {
this.adapterRows()?.let {
return it.size
}
throw IllegalStateException("Need to implement Data Source")
}
fun viewTypeForPosition(position:Int): Int {
return this.rowRepresentableForPosition(position).viewType
override fun viewTypeForPosition(position:Int): Int {
this.rowRepresentableForPosition(position)?.let {
return it.viewType
}
throw IllegalStateException("Need to implement Data Source")
}
fun indexForRow(row: RowRepresentable): Int {
return this.adapterRows().indexOf(row)
override fun indexForRow(row: RowRepresentable): Int {
this.adapterRows()?.let {
return it.indexOf(row)
}
throw IllegalStateException("Need to implement Data Source")
}
}
/**
* A list of [RowRepresentableEditDescriptor] object specifying the way the edition will be handled
* Interface extending [RowRepresentableDataSource] to guide the implementation of a live list of [RowRepresentable]
* To do that, this interface overrides and provides a default implementation to specific methods of [RowRepresentableDataSource]
*/
fun editDescriptors(row: RowRepresentable): ArrayList<RowRepresentableEditDescriptor> {
return ArrayList()
interface LiveRowRepresentableDataSource: RowRepresentableDataSource {
override fun adapterRows(): List<out RowRepresentable>? {
return null
}
}
/**
* Custom class providing the value to display and how to display them
*/
class DisplayDescriptor(
var boolValue: Boolean? = null,
var stringValue: String? = null,
var textFormat: TextFormat? = null,
var actionIcon: Int? = null,
var context: Context? = null) {
}
/**
* An interface used to provide RowRepresentableAdapter content and value in the form of rows
*
@ -46,11 +101,9 @@ interface RowRepresentableDataSource : DisplayableDataSource {
*/
interface DisplayableDataSource {
/**
* Returns a list of rows
*/
fun adapterRows(): ArrayList<RowRepresentable> {
return ArrayList()
fun contentDescriptorForRow(row: RowRepresentable): DisplayDescriptor? {
return null
}
/**
@ -89,3 +142,15 @@ interface DisplayableDataSource {
}
}
/**
* An interface providing a way to describe how the edition of a [RowRepresentable] will be displayed
*/
interface EditableDataSource {
/**
* A list of [RowRepresentableEditDescriptor] object specifying the way the edition will be handled
*/
fun editDescriptors(row: RowRepresentable): ArrayList<RowRepresentableEditDescriptor> {
return ArrayList()
}
}

@ -12,8 +12,8 @@ import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.LiveRowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
import net.pokeranalytics.android.ui.view.RowRepresentable
@ -21,7 +21,7 @@ import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rowrepresentable.SettingRow
class DataListFragment : PokerAnalyticsFragment(), RowRepresentableDataSource,
class DataListFragment : PokerAnalyticsFragment(), LiveRowRepresentableDataSource,
RowRepresentableDelegate {
private lateinit var dataType: SettingRow
@ -38,7 +38,7 @@ class DataListFragment : PokerAnalyticsFragment(), RowRepresentableDataSource,
initUI()
}
override fun rowRepresentableForPosition(position: Int): RowRepresentable {
override fun rowRepresentableForPosition(position: Int): RowRepresentable? {
return this.items[position] as RowRepresentable
}

@ -16,8 +16,8 @@ import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.ui.activity.SessionActivity
import net.pokeranalytics.android.ui.adapter.LiveRowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
import net.pokeranalytics.android.ui.view.HistorySessionDiffCallback
@ -30,7 +30,7 @@ import net.pokeranalytics.android.util.isSameMonth
import net.pokeranalytics.android.util.longDate
import java.util.*
class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, RowRepresentableDelegate {
class HistoryFragment : PokerAnalyticsFragment(), LiveRowRepresentableDataSource, RowRepresentableDelegate {
companion object {
fun newInstance(): HistoryFragment {
@ -148,7 +148,7 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, Ro
}
override fun rowRepresentableForPosition(position: Int): RowRepresentable {
override fun rowRepresentableForPosition(position: Int): RowRepresentable? {
return this.rows[position]
}

@ -216,17 +216,19 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
*/
private fun updateAdapterUI(scrollToTop: Boolean) {
val diffResult = DiffUtil.calculateDiff(RowRepresentableDiffCallback(currentSession.adapterRows(), oldRows))
currentSession.adapterRows()?.let {
val diffResult = DiffUtil.calculateDiff(RowRepresentableDiffCallback(it, oldRows))
sessionAdapter.updateRows(diffResult)
oldRows.clear()
oldRows.addAll(currentSession.adapterRows())
oldRows.addAll(it)
if (scrollToTop) {
recyclerView.smoothScrollToPosition(0)
}
}
}
/**
* Update the state of the session (start / pause)

@ -9,15 +9,12 @@ import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.fragment_settings.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.activity.DataListActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.adapter.*
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.SettingRow
class SettingsFragment : PokerAnalyticsFragment(), RowRepresentableDataSource,
RowRepresentableDelegate {
class SettingsFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, StaticRowRepresentableDataSource {
companion object {
@ -44,7 +41,7 @@ class SettingsFragment : PokerAnalyticsFragment(), RowRepresentableDataSource,
initData()
}
override fun adapterRows(): ArrayList<RowRepresentable> {
override fun adapterRows(): List<out RowRepresentable>? {
val rows = ArrayList<RowRepresentable>()
rows.addAll(SettingRow.values())
return rows

@ -12,15 +12,17 @@ import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.*
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.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(), RowRepresentableDataSource {
class StatsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource {
private var rowRepresentables: ArrayList<RowRepresentable> = ArrayList<RowRepresentable>()
@ -52,10 +54,23 @@ class StatsFragment : PokerAnalyticsFragment(), RowRepresentableDataSource {
// Row Representable DS
override fun adapterRows(): ArrayList<RowRepresentable> {
override fun adapterRows(): List<out RowRepresentable>? {
return this.rowRepresentables
}
override fun contentDescriptorForRow(row: RowRepresentable): DisplayDescriptor? {
var dc = DisplayDescriptor()
dc.textFormat = TextFormat(NULL_TEXT)
if (row is StatRepresentable) {
context?.let { context ->
row.computedStat?.let {
dc.textFormat = it.format(context)
}
}
}
return dc
}
override fun statFormatForRow(row: RowRepresentable): TextFormat {
if (row is StatRepresentable) {
context?.let { context ->

@ -8,13 +8,13 @@ import io.realm.RealmResults
import kotlinx.android.synthetic.main.bottom_sheet_list.*
import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.adapter.LiveRowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
class BottomSheetListFragment : BottomSheetFragment(), RowRepresentableDataSource,
class BottomSheetListFragment : BottomSheetFragment(), LiveRowRepresentableDataSource,
RowRepresentableDelegate {
private var realmData: RealmResults<*>? = null
@ -31,18 +31,18 @@ class BottomSheetListFragment : BottomSheetFragment(), RowRepresentableDataSourc
dataAdapter.notifyDataSetChanged()
}
override fun rowRepresentableForPosition(position: Int): RowRepresentable {
override fun rowRepresentableForPosition(position: Int): RowRepresentable? {
realmData?.let {
return it[position] as RowRepresentable
}
return super.rowRepresentableForPosition(position)
return null
}
override fun numberOfRows(): Int {
realmData?.let {
return it.size
}
return super.numberOfRows()
throw IllegalStateException("Need to implement Data Source")
}
override fun viewTypeForPosition(position: Int): Int {
@ -53,7 +53,7 @@ class BottomSheetListFragment : BottomSheetFragment(), RowRepresentableDataSourc
realmData?.let {
return it.indexOf(row)
}
return super.indexForRow(row)
throw IllegalStateException("Need to implement Data Source")
}
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {

@ -10,14 +10,14 @@ import kotlinx.android.synthetic.main.bottom_sheet_game_list.*
import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.Limit
import net.pokeranalytics.android.ui.adapter.LiveRowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
class BottomSheetListGameFragment : BottomSheetFragment(), RowRepresentableDataSource, RowRepresentableDelegate {
class BottomSheetListGameFragment : BottomSheetFragment(), LiveRowRepresentableDataSource, RowRepresentableDelegate {
private var limit: Int = -1
private var realmData: RealmResults<*>? = null
@ -39,18 +39,18 @@ class BottomSheetListGameFragment : BottomSheetFragment(), RowRepresentableDataS
return values
}
override fun rowRepresentableForPosition(position: Int): RowRepresentable {
override fun rowRepresentableForPosition(position: Int): RowRepresentable? {
realmData?.let {
return it[position] as RowRepresentable
}
return super.rowRepresentableForPosition(position)
throw IllegalStateException("Need to implement Data Source")
}
override fun numberOfRows(): Int {
realmData?.let {
return it.size
}
return super.numberOfRows()
return 0
}
override fun viewTypeForPosition(position: Int): Int {
@ -61,7 +61,7 @@ class BottomSheetListGameFragment : BottomSheetFragment(), RowRepresentableDataS
realmData?.let {
return it.indexOf(row)
}
return super.indexForRow(row)
throw IllegalStateException("Need to implement Data Source")
}
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {

@ -8,14 +8,14 @@ import kotlinx.android.synthetic.main.bottom_sheet_grid.*
import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.*
import net.pokeranalytics.android.model.TableSize
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.GridSpacingItemDecoration
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.util.px
class BottomSheetTableSizeGridFragment : BottomSheetFragment(),
RowRepresentableDataSource,
StaticRowRepresentableDataSource,
RowRepresentableDelegate {
private lateinit var dataAdapter: RowRepresentableAdapter
@ -72,16 +72,8 @@ class BottomSheetTableSizeGridFragment : BottomSheetFragment(),
}
}
override fun rowRepresentableForPosition(position: Int): RowRepresentable {
return TableSize.all[position]
}
override fun indexForRow(row: RowRepresentable): Int {
return TableSize.all.indexOf(row)
}
override fun numberOfRows(): Int {
return TableSize.all.size
override fun adapterRows(): List<out RowRepresentable>? {
return TableSize.all
}
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {

@ -220,10 +220,9 @@ enum class RowViewType {
BindableHolder {
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) {
itemView.rowStatsTitleValue_title.text = row.localizedTitle(itemView.context)
adapter.dataSource?.let {
val format = it.statFormatForRow(row)
itemView.rowStatsTitleValue_value.text = format.text
itemView.rowStatsTitleValue_value.setTextColor(format.getColor(itemView.context))
adapter.dataSource.contentDescriptorForRow(row)?.textFormat?.let {
itemView.rowStatsTitleValue_value.text = it.text
itemView.rowStatsTitleValue_value.setTextColor(it.getColor(itemView.context))
}
val listener = View.OnClickListener {
adapter.delegate?.onRowSelected(position, row)

Loading…
Cancel
Save