refactoring

dev_raz_wip
Razmig Sarkissian 7 years ago
parent 6d1ef24952
commit eb92cf3f99
  1. 31
      app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt
  2. 12
      app/src/main/java/net/pokeranalytics/android/model/LiveData.kt
  3. 19
      app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt
  4. 17
      app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt
  5. 17
      app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt
  6. 28
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  7. 17
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt
  8. 17
      app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt
  9. 53
      app/src/main/java/net/pokeranalytics/android/ui/adapter/NewSessionAdapter.kt
  10. 140
      app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt
  11. 28
      app/src/main/java/net/pokeranalytics/android/ui/adapter/components/LiveDataAdapter.kt
  12. 37
      app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowRepresentableAdapter.kt
  13. 16
      app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt
  14. 38
      app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt
  15. 38
      app/src/main/java/net/pokeranalytics/android/ui/fragment/NewSessionFragment.kt
  16. 16
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt
  17. 20
      app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt
  18. 1
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetData.kt
  19. 12
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDoubleListFragment.kt
  20. 12
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetFragment.kt
  21. 16
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetListFragment.kt
  22. 6
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/DateTimePickerManager.kt
  23. 7
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/DynamicListFragment.kt
  24. 1
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/PokerAnalyticsFragment.kt
  25. 8
      app/src/main/java/net/pokeranalytics/android/ui/view/RowEditable.kt
  26. 158
      app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt
  27. 29
      app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt
  28. 17
      app/src/main/res/values/strings.xml

@ -1,14 +1,14 @@
package net.pokeranalytics.android.calculus package net.pokeranalytics.android.calculus
import android.content.Context import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.adapter.components.RowViewType import net.pokeranalytics.android.ui.view.RowViewType
interface AnyStat { interface AnyStat {
} }
enum class Stat : AnyStat, DynamicRowInterface { enum class Stat : AnyStat, RowRepresentable {
NETRESULT, NETRESULT,
HOURLY_RATE, HOURLY_RATE,
@ -53,8 +53,27 @@ enum class Stat : AnyStat, DynamicRowInterface {
} }
override fun localizedTitle(context: Context): String { override val resId: Int?
return "Test" get() {
return when (this) {
NETRESULT -> R.string.net_result
HOURLY_RATE -> R.string.hourly_rate
AVERAGE -> R.string.average
NUMBER_OF_GROUPS -> R.string.number_of_groups
NUMBER_OF_GAMES -> R.string.number_of_games
DURATION -> R.string.duration
AVERAGE_DURATION -> R.string.average_duration
NET_BB_PER_100_HANDS -> R.string.net_bb_per_100_hands
HOURLY_RATE_BB -> R.string.hourly_rate_bb
AVERAGE_NET_BB -> R.string.average_net_bb
WIN_RATIO -> R.string.win_ratio
AVERAGE_BUYIN -> R.string.average_buyin
ROI -> R.string.roi
STANDARD_DEVIATION -> R.string.standard_deviation
STANDARD_DEVIATION_HOURLY -> R.string.standard_deviation_hourly
STANDARD_DEVIATION_BB_PER_100_HANDS -> R.string.standard_deviation_bb_per_100_hands
HANDS_PLAYED -> R.string.hands_played
}
} }
override val viewType: Int = RowViewType.TITLE_VALUE.ordinal override val viewType: Int = RowViewType.TITLE_VALUE.ordinal

@ -1,21 +1,13 @@
package net.pokeranalytics.android.model package net.pokeranalytics.android.model
import android.text.InputType
import io.realm.Realm import io.realm.Realm
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.RealmResults import io.realm.RealmResults
import io.realm.Sort import io.realm.Sort
import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.model.realm.*
import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface
import net.pokeranalytics.android.ui.adapter.components.EditableDataSource
import net.pokeranalytics.android.ui.adapter.components.SimpleRow
import net.pokeranalytics.android.ui.fragment.components.BottomSheetData
import net.pokeranalytics.android.ui.fragment.components.BottomSheetDelegate
import net.pokeranalytics.android.ui.fragment.components.BottomSheetFragment
import java.util.* import java.util.*
import kotlin.collections.ArrayList
enum class DataList { enum class LiveData {
BANKROLL, BANKROLL,
GAME, GAME,
LOCATION, LOCATION,
@ -27,7 +19,7 @@ enum class DataList {
} }
private var sortingFieldName: String = "name" private var sortingFieldName: String = "name"
private var sorting: Sort = Sort.DESCENDING private var sorting: Sort = Sort.ASCENDING
private val relatedEntity: Class < out RealmObject > private val relatedEntity: Class < out RealmObject >

@ -5,10 +5,15 @@ import io.realm.*
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.adapter.components.*
import net.pokeranalytics.android.ui.fragment.components.BottomSheetData import net.pokeranalytics.android.ui.fragment.components.BottomSheetData
import net.pokeranalytics.android.ui.view.BankrollRow
import net.pokeranalytics.android.ui.view.RowEditable
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.SimpleRow
import java.util.* import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
open class Bankroll(name: String = "") : RealmObject(), DynamicRowDelegate, DisplayableDataSource, EditableDataSource { open class Bankroll(name: String = "") : RealmObject(), RowRepresentableDataSource, LiveDataDataSource,
RowEditable {
companion object { companion object {
fun newInstance() : Bankroll { fun newInstance() : Bankroll {
@ -37,14 +42,14 @@ open class Bankroll(name: String = "") : RealmObject(), DynamicRowDelegate, Disp
override val title: String get() = this.name override val title: String get() = this.name
override val primaryKey: String get() = this.id override val primaryKey: String get() = this.id
override fun adapterRows(): ArrayList<DynamicRowInterface> { override fun adapterRows(): ArrayList<RowRepresentable> {
val rows = ArrayList<DynamicRowInterface>() val rows = ArrayList<RowRepresentable>()
rows.add(SimpleRow.NAME) rows.add(SimpleRow.NAME)
rows.addAll(BankrollRow.values()) rows.addAll(BankrollRow.values())
return rows return rows
} }
override fun stringForRow(row: DynamicRowInterface): String { override fun stringForRow(row: RowRepresentable): String {
return when (row) { return when (row) {
SimpleRow.NAME -> this.name SimpleRow.NAME -> this.name
BankrollRow.LIVE -> if (this.live) "live" else "online" BankrollRow.LIVE -> if (this.live) "live" else "online"
@ -53,14 +58,14 @@ open class Bankroll(name: String = "") : RealmObject(), DynamicRowDelegate, Disp
} }
} }
override fun boolForRow(row: DynamicRowInterface): Boolean { override fun boolForRow(row: RowRepresentable): Boolean {
when (row) { when (row) {
BankrollRow.LIVE -> return true BankrollRow.LIVE -> return true
else -> return super.boolForRow(row) else -> return super.boolForRow(row)
} }
} }
override fun getBottomSheetData(row: DynamicRowInterface): ArrayList<BottomSheetData> { override fun getBottomSheetData(row: RowRepresentable): ArrayList<BottomSheetData> {
val data = java.util.ArrayList<BottomSheetData>() val data = java.util.ArrayList<BottomSheetData>()
when (row) { when (row) {
SimpleRow.NAME -> data.add(BottomSheetData(this.name, SimpleRow.NAME.resId, InputType.TYPE_CLASS_TEXT)) SimpleRow.NAME -> data.add(BottomSheetData(this.name, SimpleRow.NAME.resId, InputType.TYPE_CLASS_TEXT))
@ -68,7 +73,7 @@ open class Bankroll(name: String = "") : RealmObject(), DynamicRowDelegate, Disp
return data return data
} }
override fun setBottomSheetValue(value: Any, row: DynamicRowInterface) { override fun updateValue(value: Any, row: RowRepresentable) {
when (row) { when (row) {
SimpleRow.NAME -> this.name = value as String SimpleRow.NAME -> this.name = value as String
} }

@ -1,14 +1,17 @@
package net.pokeranalytics.android.model.realm package net.pokeranalytics.android.model.realm
import android.text.InputType import android.text.InputType
import io.realm.Realm
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.adapter.components.*
import net.pokeranalytics.android.ui.fragment.components.BottomSheetData import net.pokeranalytics.android.ui.fragment.components.BottomSheetData
import net.pokeranalytics.android.ui.view.RowEditable
import net.pokeranalytics.android.ui.view.GameRow
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.SimpleRow
import java.util.* import java.util.*
open class Game : RealmObject(), DynamicRowDelegate, DisplayableDataSource, EditableDataSource { open class Game : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable {
@PrimaryKey @PrimaryKey
var id = UUID.randomUUID().toString() var id = UUID.randomUUID().toString()
@ -22,21 +25,21 @@ open class Game : RealmObject(), DynamicRowDelegate, DisplayableDataSource, Edit
override val title: String get() = this.name override val title: String get() = this.name
override val primaryKey: String get() = this.id override val primaryKey: String get() = this.id
override fun adapterRows(): ArrayList<DynamicRowInterface> { override fun adapterRows(): ArrayList<RowRepresentable> {
val rows = ArrayList<DynamicRowInterface>() val rows = ArrayList<RowRepresentable>()
rows.add(SimpleRow.NAME) rows.add(SimpleRow.NAME)
rows.addAll(GameRow.values()) rows.addAll(GameRow.values())
return rows return rows
} }
override fun stringForRow(row: DynamicRowInterface): String { override fun stringForRow(row: RowRepresentable): String {
return when (row) { return when (row) {
SimpleRow.NAME -> this.name SimpleRow.NAME -> this.name
else -> return super.stringForRow(row) else -> return super.stringForRow(row)
} }
} }
override fun getBottomSheetData(row: DynamicRowInterface): ArrayList<BottomSheetData> { override fun getBottomSheetData(row: RowRepresentable): ArrayList<BottomSheetData> {
val data = java.util.ArrayList<BottomSheetData>() val data = java.util.ArrayList<BottomSheetData>()
when (row) { when (row) {
SimpleRow.NAME -> data.add(BottomSheetData(this.name, SimpleRow.NAME.resId, InputType.TYPE_CLASS_TEXT)) SimpleRow.NAME -> data.add(BottomSheetData(this.name, SimpleRow.NAME.resId, InputType.TYPE_CLASS_TEXT))
@ -44,7 +47,7 @@ open class Game : RealmObject(), DynamicRowDelegate, DisplayableDataSource, Edit
return data return data
} }
override fun setBottomSheetValue(value: Any, row: DynamicRowInterface) { override fun updateValue(value: Any, row: RowRepresentable) {
when (row) { when (row) {
SimpleRow.NAME -> this.name = value as String SimpleRow.NAME -> this.name = value as String
} }

@ -1,15 +1,18 @@
package net.pokeranalytics.android.model.realm package net.pokeranalytics.android.model.realm
import android.text.InputType import android.text.InputType
import io.realm.Realm
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.adapter.components.*
import net.pokeranalytics.android.ui.fragment.components.BottomSheetData import net.pokeranalytics.android.ui.fragment.components.BottomSheetData
import net.pokeranalytics.android.ui.view.RowEditable
import net.pokeranalytics.android.ui.view.LocationRow
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.SimpleRow
import java.util.* import java.util.*
open class Location : RealmObject(), DynamicRowDelegate, DisplayableDataSource, EditableDataSource { open class Location : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable {
@PrimaryKey @PrimaryKey
var id = UUID.randomUUID().toString() var id = UUID.randomUUID().toString()
@ -26,21 +29,21 @@ open class Location : RealmObject(), DynamicRowDelegate, DisplayableDataSource,
override val title: String get() = this.name override val title: String get() = this.name
override val primaryKey: String get() = this.id override val primaryKey: String get() = this.id
override fun adapterRows(): ArrayList<DynamicRowInterface> { override fun adapterRows(): ArrayList<RowRepresentable> {
val rows = ArrayList<DynamicRowInterface>() val rows = ArrayList<RowRepresentable>()
rows.add(SimpleRow.NAME) rows.add(SimpleRow.NAME)
rows.addAll(LocationRow.values()) rows.addAll(LocationRow.values())
return rows return rows
} }
override fun stringForRow(row: DynamicRowInterface): String { override fun stringForRow(row: RowRepresentable): String {
return when (row) { return when (row) {
SimpleRow.NAME -> this.name SimpleRow.NAME -> this.name
else -> return super.stringForRow(row) else -> return super.stringForRow(row)
} }
} }
override fun getBottomSheetData(row: DynamicRowInterface): ArrayList<BottomSheetData> { override fun getBottomSheetData(row: RowRepresentable): ArrayList<BottomSheetData> {
val data = java.util.ArrayList<BottomSheetData>() val data = java.util.ArrayList<BottomSheetData>()
when (row) { when (row) {
SimpleRow.NAME -> data.add(BottomSheetData(this.name, SimpleRow.NAME.resId, InputType.TYPE_CLASS_TEXT)) SimpleRow.NAME -> data.add(BottomSheetData(this.name, SimpleRow.NAME.resId, InputType.TYPE_CLASS_TEXT))
@ -48,7 +51,7 @@ open class Location : RealmObject(), DynamicRowDelegate, DisplayableDataSource,
return data return data
} }
override fun setBottomSheetValue(value: Any, row: DynamicRowInterface) { override fun updateValue(value: Any, row: RowRepresentable) {
when (row) { when (row) {
SimpleRow.NAME -> this.name = value as String SimpleRow.NAME -> this.name = value as String
} }

@ -6,15 +6,19 @@ import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.SessionInterface import net.pokeranalytics.android.calculus.SessionInterface
import net.pokeranalytics.android.model.DataList import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.adapter.components.*
import net.pokeranalytics.android.ui.fragment.components.BottomSheetData import net.pokeranalytics.android.ui.fragment.components.BottomSheetData
import net.pokeranalytics.android.ui.view.RowEditable
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.SessionRow
import net.pokeranalytics.android.util.data.sessionDao import net.pokeranalytics.android.util.data.sessionDao
import net.pokeranalytics.android.util.short import net.pokeranalytics.android.util.short
import java.util.* import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
open class Session : RealmObject(), SessionInterface, DynamicRowDelegate, DisplayableDataSource, EditableDataSource { open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource, LiveDataDataSource,
RowEditable {
@PrimaryKey @PrimaryKey
var id = UUID.randomUUID().toString() var id = UUID.randomUUID().toString()
@ -128,17 +132,17 @@ open class Session : RealmObject(), SessionInterface, DynamicRowDelegate, Displa
return 0.0 return 0.0
} }
override fun adapterRows(): ArrayList<DynamicRowInterface> { override fun adapterRows(): ArrayList<RowRepresentable> {
val rows = ArrayList<DynamicRowInterface>() val rows = ArrayList<RowRepresentable>()
rows.addAll(SessionRow.values()) rows.addAll(SessionRow.values())
return rows return rows
} }
override fun boolForRow(row: DynamicRowInterface): Boolean { override fun boolForRow(row: RowRepresentable): Boolean {
return false return false
} }
override fun stringForRow(row: DynamicRowInterface): String { override fun stringForRow(row: RowRepresentable): String {
return when (row) { return when (row) {
SessionRow.BLINDS -> if (cgSmallBlind != null && cgBigBlind != null) "$cgSmallBlind / $cgBigBlind" else "--" SessionRow.BLINDS -> if (cgSmallBlind != null && cgBigBlind != null) "$cgSmallBlind / $cgBigBlind" else "--"
SessionRow.GAME -> game?.title ?: "--" SessionRow.GAME -> game?.title ?: "--"
@ -151,7 +155,7 @@ open class Session : RealmObject(), SessionInterface, DynamicRowDelegate, Displa
} }
} }
override fun actionIconForRow(row: DynamicRowInterface): Int? { override fun actionIconForRow(row: RowRepresentable): Int? {
return when (row) { return when (row) {
SessionRow.START_DATE, SessionRow.END_DATE -> { SessionRow.START_DATE, SessionRow.END_DATE -> {
R.drawable.ic_close_white_24dp R.drawable.ic_close_white_24dp
@ -164,19 +168,19 @@ open class Session : RealmObject(), SessionInterface, DynamicRowDelegate, Displa
override var title: String = "Change that: $creationDate" override var title: String = "Change that: $creationDate"
override val primaryKey: String get() = this.id override val primaryKey: String get() = this.id
override fun getBottomSheetData(row: DynamicRowInterface): ArrayList<BottomSheetData> { override fun getBottomSheetData(row: RowRepresentable): ArrayList<BottomSheetData> {
val data = ArrayList<BottomSheetData>() val data = ArrayList<BottomSheetData>()
when (row) { when (row) {
SessionRow.GAME -> { SessionRow.GAME -> {
data.add(BottomSheetData(game, inputType = InputType.TYPE_NULL, data = DataList.GAME.items(realm))) data.add(BottomSheetData(game, inputType = InputType.TYPE_NULL, data = LiveData.GAME.items(realm)))
} }
SessionRow.LOCATION -> { SessionRow.LOCATION -> {
data.add(BottomSheetData(location, inputType = InputType.TYPE_NULL, data = DataList.LOCATION.items(realm))) data.add(BottomSheetData(location, inputType = InputType.TYPE_NULL, data = LiveData.LOCATION.items(realm)))
} }
SessionRow.BANKROLL -> { SessionRow.BANKROLL -> {
data.add(BottomSheetData(bankroll, inputType = InputType.TYPE_NULL, data = DataList.BANKROLL.items(realm))) data.add(BottomSheetData(bankroll, inputType = InputType.TYPE_NULL, data = LiveData.BANKROLL.items(realm)))
} }
SessionRow.BLINDS -> { SessionRow.BLINDS -> {
data.add(BottomSheetData(cgSmallBlind, R.string.small_blind, InputType.TYPE_CLASS_NUMBER)) data.add(BottomSheetData(cgSmallBlind, R.string.small_blind, InputType.TYPE_CLASS_NUMBER))
@ -190,7 +194,7 @@ open class Session : RealmObject(), SessionInterface, DynamicRowDelegate, Displa
return data return data
} }
override fun setBottomSheetValue(value: Any, row: DynamicRowInterface) { override fun updateValue(value: Any, row: RowRepresentable) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates. TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
} }
} }

@ -1,14 +1,17 @@
package net.pokeranalytics.android.model.realm package net.pokeranalytics.android.model.realm
import android.text.InputType import android.text.InputType
import io.realm.Realm
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.adapter.components.*
import net.pokeranalytics.android.ui.fragment.components.BottomSheetData import net.pokeranalytics.android.ui.fragment.components.BottomSheetData
import net.pokeranalytics.android.ui.view.RowEditable
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.SimpleRow
import net.pokeranalytics.android.ui.view.TournamentFeatureRow
import java.util.* import java.util.*
open class TournamentFeature : RealmObject(), DynamicRowDelegate, DisplayableDataSource, EditableDataSource { open class TournamentFeature : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable {
@PrimaryKey @PrimaryKey
var id = UUID.randomUUID().toString() var id = UUID.randomUUID().toString()
@ -19,14 +22,14 @@ open class TournamentFeature : RealmObject(), DynamicRowDelegate, DisplayableDat
override val title: String get() = this.name override val title: String get() = this.name
override val primaryKey: String get() = this.id override val primaryKey: String get() = this.id
override fun adapterRows(): ArrayList<DynamicRowInterface> { override fun adapterRows(): ArrayList<RowRepresentable> {
val rows = ArrayList<DynamicRowInterface>() val rows = ArrayList<RowRepresentable>()
rows.add(SimpleRow.NAME) rows.add(SimpleRow.NAME)
rows.addAll(TournamentFeatureRow.values()) rows.addAll(TournamentFeatureRow.values())
return rows return rows
} }
override fun stringForRow(row: DynamicRowInterface): String { override fun stringForRow(row: RowRepresentable): String {
return when (row) { return when (row) {
SimpleRow.NAME -> this.name SimpleRow.NAME -> this.name
else -> return super.stringForRow(row) else -> return super.stringForRow(row)
@ -34,7 +37,7 @@ open class TournamentFeature : RealmObject(), DynamicRowDelegate, DisplayableDat
} }
override fun getBottomSheetData(row: DynamicRowInterface): ArrayList<BottomSheetData> { override fun getBottomSheetData(row: RowRepresentable): ArrayList<BottomSheetData> {
val data = java.util.ArrayList<BottomSheetData>() val data = java.util.ArrayList<BottomSheetData>()
when (row) { when (row) {
SimpleRow.NAME -> data.add(BottomSheetData(this.name, SimpleRow.NAME.resId, InputType.TYPE_CLASS_TEXT)) SimpleRow.NAME -> data.add(BottomSheetData(this.name, SimpleRow.NAME.resId, InputType.TYPE_CLASS_TEXT))
@ -42,7 +45,7 @@ open class TournamentFeature : RealmObject(), DynamicRowDelegate, DisplayableDat
return data return data
} }
override fun setBottomSheetValue(value: Any, row: DynamicRowInterface) { override fun updateValue(value: Any, row: RowRepresentable) {
when (row) { when (row) {
SimpleRow.NAME -> this.name = value as String SimpleRow.NAME -> this.name = value as String
} }

@ -1,15 +1,18 @@
package net.pokeranalytics.android.model.realm package net.pokeranalytics.android.model.realm
import android.text.InputType import android.text.InputType
import io.realm.Realm
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.adapter.components.*
import net.pokeranalytics.android.ui.fragment.components.BottomSheetData import net.pokeranalytics.android.ui.fragment.components.BottomSheetData
import net.pokeranalytics.android.ui.view.RowEditable
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.SimpleRow
import net.pokeranalytics.android.ui.view.TransactionTypeRow
import java.util.* import java.util.*
open class TransactionType : RealmObject(), DynamicRowDelegate, DisplayableDataSource, EditableDataSource { open class TransactionType : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable {
@PrimaryKey @PrimaryKey
var id = UUID.randomUUID().toString() var id = UUID.randomUUID().toString()
@ -29,21 +32,21 @@ open class TransactionType : RealmObject(), DynamicRowDelegate, DisplayableDataS
override val title: String get() = this.name override val title: String get() = this.name
override val primaryKey: String get() = this.id override val primaryKey: String get() = this.id
override fun adapterRows(): ArrayList<DynamicRowInterface> { override fun adapterRows(): ArrayList<RowRepresentable> {
val rows = ArrayList<DynamicRowInterface>() val rows = ArrayList<RowRepresentable>()
rows.add(SimpleRow.NAME) rows.add(SimpleRow.NAME)
rows.addAll(TransactionTypeRow.values()) rows.addAll(TransactionTypeRow.values())
return rows return rows
} }
override fun stringForRow(row: DynamicRowInterface): String { override fun stringForRow(row: RowRepresentable): String {
return when (row) { return when (row) {
SimpleRow.NAME -> this.name SimpleRow.NAME -> this.name
else -> return super.stringForRow(row) else -> return super.stringForRow(row)
} }
} }
override fun getBottomSheetData(row: DynamicRowInterface): ArrayList<BottomSheetData> { override fun getBottomSheetData(row: RowRepresentable): ArrayList<BottomSheetData> {
val data = java.util.ArrayList<BottomSheetData>() val data = java.util.ArrayList<BottomSheetData>()
when (row) { when (row) {
SimpleRow.NAME -> data.add(BottomSheetData(this.name, SimpleRow.NAME.resId, InputType.TYPE_CLASS_TEXT)) SimpleRow.NAME -> data.add(BottomSheetData(this.name, SimpleRow.NAME.resId, InputType.TYPE_CLASS_TEXT))
@ -51,7 +54,7 @@ open class TransactionType : RealmObject(), DynamicRowDelegate, DisplayableDataS
return data return data
} }
override fun setBottomSheetValue(value: Any, row: DynamicRowInterface) { override fun updateValue(value: Any, row: RowRepresentable) {
when (row) { when (row) {
SimpleRow.NAME -> this.name = value as String SimpleRow.NAME -> this.name = value as String
} }

@ -1,53 +0,0 @@
package net.pokeranalytics.android.ui.adapter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.Session
import timber.log.Timber
class NewSessionAdapter(private var session: Session) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
companion object {
const val ROW_SESSION: Int = 100
}
//var onClickOnSession: ((position: Int) -> Unit)? = null
inner class RowSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind() {
Timber.d("Bind session")
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
when (viewType) {
ROW_SESSION -> return RowSessionViewHolder(
LayoutInflater.from(parent.context).inflate(
R.layout.row_history_session,
parent,
false
)
)
else -> throw IllegalStateException("Need to implement type $viewType in NewSessionAdapter")
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (getItemViewType(position)) {
ROW_SESSION -> (holder as NewSessionAdapter.RowSessionViewHolder).bind()
}
}
override fun getItemCount(): Int {
return 2
}
override fun getItemViewType(position: Int): Int {
return ROW_SESSION
}
}

@ -1,140 +0,0 @@
package net.pokeranalytics.android.ui.adapter.components
import android.content.Context
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.DataList
import net.pokeranalytics.android.ui.fragment.components.BottomSheetType
interface DynamicRowInterface {
fun localizedTitle(context: Context): String
val viewType: Int
get() {
return 0
}
val bottomSheetType: BottomSheetType
get() {
return BottomSheetType.NONE
}
val relatedDataList: DataList?
get() {
return null
}
}
class SectionRow(stringRes: Int) : DynamicRowInterface {
var stringRes: Int = stringRes
override fun localizedTitle(context: Context): String {
return context.getString(this.stringRes)
}
}
enum class SessionRow(val resId: Int) : DynamicRowInterface {
GAME(R.string.game),
BLINDS(R.string.blinds),
LOCATION(R.string.location),
BANKROLL(R.string.bankroll),
START_DATE(R.string.start_date),
END_DATE(R.string.end_date),
COMMENT(R.string.comment);
override fun localizedTitle(context: Context): String {
return context.getString(this.resId)
}
override val viewType: Int
get() {
return when (this) {
BLINDS, GAME, BANKROLL, LOCATION, COMMENT -> RowViewType.TITLE_VALUE.ordinal
START_DATE, END_DATE -> RowViewType.TITLE_VALUE_ACTION.ordinal
}
}
override val bottomSheetType: BottomSheetType
get() {
return when (this) {
BLINDS -> BottomSheetType.DOUBLE_EDIT_TEXT
GAME -> BottomSheetType.LIST
LOCATION -> BottomSheetType.LIST
BANKROLL -> BottomSheetType.LIST
COMMENT -> BottomSheetType.EDIT_TEXT
else -> BottomSheetType.NONE
}
}
}
enum class SimpleRow(val resId: Int) : DynamicRowInterface {
NAME(R.string.name);
override fun localizedTitle(context: Context): String {
return context.getString(this.resId)
}
override val viewType: Int = RowViewType.TITLE_VALUE.ordinal
override val bottomSheetType: BottomSheetType = BottomSheetType.EDIT_TEXT
}
enum class BankrollRow(val resId: Int) : DynamicRowInterface {
LIVE(R.string.live),
CURRENCY(R.string.currency);
override fun localizedTitle(context: Context): String {
return context.getString(this.resId)
}
override val viewType: Int
get() {
return when (this) {
LIVE, CURRENCY -> RowViewType.TITLE_VALUE.ordinal
}
}
override val bottomSheetType: BottomSheetType
get() {
return when (this) {
LIVE -> BottomSheetType.NONE
CURRENCY -> BottomSheetType.LIST
}
}
}
enum class GameRow(val resId: Int) : DynamicRowInterface {
}
enum class LocationRow(val resId: Int) : DynamicRowInterface {
}
enum class TransactionTypeRow(val resId: Int) : DynamicRowInterface {
}
enum class TournamentFeatureRow(val resId: Int) : DynamicRowInterface {
}
enum class SettingRow(val resId: Int) : DynamicRowInterface {
BANKROLL(R.string.bankroll),
GAME(R.string.game),
LOCATION(R.string.location),
TOURNAMENT_TYPE(R.string.tournament_type),
TRANSACTION_TYPE(R.string.transaction_type);
override fun localizedTitle(context: Context): String {
return context.getString(this.resId)
}
override val viewType: Int = RowViewType.TITLE.ordinal
override val relatedDataList : DataList?
get() {
return when (this) {
BANKROLL -> DataList.BANKROLL
GAME -> DataList.GAME
LOCATION -> DataList.LOCATION
TOURNAMENT_TYPE -> DataList.TOURNAMENT_TYPE
TRANSACTION_TYPE-> DataList.TRANSACTION_TYPE
}
}
}

@ -6,30 +6,24 @@ import android.view.ViewGroup
import androidx.appcompat.widget.AppCompatTextView import androidx.appcompat.widget.AppCompatTextView
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import io.realm.Realm
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.fragment.components.BottomSheetData import net.pokeranalytics.android.ui.view.RowViewType
interface DisplayableDelegate { interface LiveDataDataSource {
fun data(position: Int) : DisplayableDataSource
fun onRowSelected(position: Int)
fun size() : Int
}
interface DisplayableDataSource {
val title: String val title: String
val primaryKey: String val primaryKey: String
} }
interface EditableDataSource { interface LiveDataDelegate {
fun getBottomSheetData(row: DynamicRowInterface): ArrayList<BottomSheetData> fun data(position: Int) : LiveDataDataSource
fun setBottomSheetValue(value: Any, row: DynamicRowInterface) fun onRowSelected(position: Int)
fun size() : Int
} }
class DataListAdapter(var delegate: DisplayableDelegate, var layout: Int? = null) : RecyclerView.Adapter<RecyclerView.ViewHolder>() { class LiveDataAdapter(var adapterDelegate: LiveDataDelegate, var layout: Int? = null) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
inner class DataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { inner class DataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(row: DisplayableDataSource, listener: View.OnClickListener) { fun bind(row: LiveDataDataSource, listener: View.OnClickListener) {
try { try {
itemView.findViewById<AppCompatTextView>(R.id.title).text = row.title itemView.findViewById<AppCompatTextView>(R.id.title).text = row.title
itemView.findViewById<ConstraintLayout>(R.id.container).setOnClickListener(listener) itemView.findViewById<ConstraintLayout>(R.id.container).setOnClickListener(listener)
@ -50,13 +44,13 @@ class DataListAdapter(var delegate: DisplayableDelegate, var layout: Int? = null
} }
override fun getItemCount(): Int { override fun getItemCount(): Int {
return delegate.size() return adapterDelegate.size()
} }
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val listener = View.OnClickListener { val listener = View.OnClickListener {
delegate.onRowSelected(position) adapterDelegate.onRowSelected(position)
} }
(holder as DataViewHolder).bind(this.delegate.data(position), listener) (holder as DataViewHolder).bind(this.adapterDelegate.data(position), listener)
} }
} }

@ -3,24 +3,23 @@ package net.pokeranalytics.android.ui.adapter.components
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import net.pokeranalytics.android.ui.view.DynamicHolder
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
interface EditableDataDelegate { interface RowRepresentableDataSource {
fun setValue(value: Any, row: DynamicRowInterface)
}
interface DynamicRowDelegate {
fun adapterRows(): ArrayList<DynamicRowInterface> fun adapterRows(): ArrayList<RowRepresentable>
fun boolForRow(row: DynamicRowInterface): Boolean { fun boolForRow(row: RowRepresentable): Boolean {
return false return false
} }
fun stringForRow(row: DynamicRowInterface): String { fun stringForRow(row: RowRepresentable): String {
return "" return ""
} }
fun actionIconForRow(row: DynamicRowInterface): Int? { fun actionIconForRow(row: RowRepresentable): Int? {
return 0 return 0
} }
@ -35,18 +34,18 @@ interface DynamicRowDelegate {
} }
interface DynamicRowCallback { interface RowRepresentableDelegate {
fun onRowSelected(row: DynamicRowInterface) {} fun onRowSelected(row: RowRepresentable) {}
fun onActionSelected(row: DynamicRowInterface) {} fun onActionSelected(row: RowRepresentable) {}
} }
class DynamicListAdapter(var delegate: DynamicRowDelegate, var callBackDelegate: DynamicRowCallback? = null) : class RowRepresentableAdapter(var rowRepresentableDataSource: RowRepresentableDataSource, var rowRepresentableDelegate: RowRepresentableDelegate? = null) :
RecyclerView.Adapter<RecyclerView.ViewHolder>() { RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private var rows: ArrayList<DynamicRowInterface> = ArrayList() private var rows: ArrayList<RowRepresentable> = ArrayList()
init { init {
this.rows = delegate.adapterRows() this.rows = rowRepresentableDataSource.adapterRows()
} }
override fun getItemViewType(position: Int): Int { override fun getItemViewType(position: Int): Int {
@ -66,20 +65,20 @@ class DynamicListAdapter(var delegate: DynamicRowDelegate, var callBackDelegate:
val dynamicRow = this.rows[position] val dynamicRow = this.rows[position]
val listener = View.OnClickListener { val listener = View.OnClickListener {
callBackDelegate?.onRowSelected(dynamicRow) rowRepresentableDelegate?.onRowSelected(dynamicRow)
} }
val actionListener = View.OnClickListener { val actionListener = View.OnClickListener {
callBackDelegate?.onActionSelected(dynamicRow) rowRepresentableDelegate?.onActionSelected(dynamicRow)
} }
(holder as DynamicHolder).bind(dynamicRow, this.delegate, listener, actionListener) (holder as DynamicHolder).bind(dynamicRow, this.rowRepresentableDataSource, listener, actionListener)
} }
/** /**
* Refresh the row in the adapter * Refresh the row in the adapter
*/ */
fun refreshRow(row: DynamicRowInterface) { fun refreshRow(row: RowRepresentable) {
val index = rows.indexOf(row) val index = rows.indexOf(row)
if (index >= 0) { if (index >= 0) {
notifyItemChanged(index) notifyItemChanged(index)

@ -6,16 +6,16 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import io.realm.Realm import io.realm.Realm
import io.realm.RealmChangeListener
import io.realm.RealmResults import io.realm.RealmResults
import kotlinx.android.synthetic.main.fragment_data_list.* import kotlinx.android.synthetic.main.fragment_data_list.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.activity.EditableDataActivity import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.adapter.components.*
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
import net.pokeranalytics.android.ui.view.SettingRow
import timber.log.Timber import timber.log.Timber
class DataListFragment : PokerAnalyticsFragment(), DisplayableDelegate { class DataListFragment : PokerAnalyticsFragment(), LiveDataDelegate {
private lateinit var dataType: SettingRow private lateinit var dataType: SettingRow
@ -31,12 +31,12 @@ class DataListFragment : PokerAnalyticsFragment(), DisplayableDelegate {
initUI() initUI()
} }
override fun data(position: Int): DisplayableDataSource { override fun data(position: Int): LiveDataDataSource {
return (items[position] as DisplayableDataSource) return (items[position] as LiveDataDataSource)
} }
override fun onRowSelected(position: Int) { override fun onRowSelected(position: Int) {
this.dataType.relatedDataList?.let { this.dataType.relatedResultsRepresentable?.let {
EditableDataActivity.newInstance(requireContext(), it.ordinal, this.data(position).primaryKey) EditableDataActivity.newInstance(requireContext(), it.ordinal, this.data(position).primaryKey)
} }
} }
@ -54,7 +54,7 @@ class DataListFragment : PokerAnalyticsFragment(), DisplayableDelegate {
private fun initUI() { private fun initUI() {
val viewManager = LinearLayoutManager(requireContext()) val viewManager = LinearLayoutManager(requireContext())
val dataListAdapter = DataListAdapter(this) val dataListAdapter = LiveDataAdapter(this)
recyclerView.apply { recyclerView.apply {
setHasFixedSize(true) setHasFixedSize(true)
@ -63,7 +63,7 @@ class DataListFragment : PokerAnalyticsFragment(), DisplayableDelegate {
} }
this.addButton.setOnClickListener { this.addButton.setOnClickListener {
this.dataType.relatedDataList?.let { this.dataType.relatedResultsRepresentable?.let {
EditableDataActivity.newInstance( EditableDataActivity.newInstance(
requireContext(), requireContext(),
dataType = it.ordinal, dataType = it.ordinal,
@ -83,7 +83,7 @@ class DataListFragment : PokerAnalyticsFragment(), DisplayableDelegate {
this.title.text = this.dataType.name.toLowerCase().capitalize() this.title.text = this.dataType.name.toLowerCase().capitalize()
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
this.dataType.relatedDataList?.let { this.dataType.relatedResultsRepresentable?.let {
this.items = it.items(realm) this.items = it.items(realm)
this.items.addChangeListener { newItems -> this.items.addChangeListener { newItems ->
Timber.d("newItems: ${newItems.size}") Timber.d("newItems: ${newItems.size}")

@ -11,18 +11,20 @@ import io.realm.RealmObject
import kotlinx.android.synthetic.main.fragment_editable_data.* import kotlinx.android.synthetic.main.fragment_editable_data.*
import kotlinx.android.synthetic.main.fragment_editable_data.view.* import kotlinx.android.synthetic.main.fragment_editable_data.view.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.DataList import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.adapter.components.*
import net.pokeranalytics.android.ui.fragment.components.BottomSheetDelegate import net.pokeranalytics.android.ui.fragment.components.BottomSheetDelegate
import net.pokeranalytics.android.ui.fragment.components.BottomSheetFragment import net.pokeranalytics.android.ui.fragment.components.BottomSheetFragment
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
import net.pokeranalytics.android.ui.view.RowEditable
import net.pokeranalytics.android.ui.view.RowRepresentable
class EditableDataFragment : PokerAnalyticsFragment(), DynamicRowCallback, BottomSheetDelegate { class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, BottomSheetDelegate {
private lateinit var item: RealmObject private lateinit var item: RealmObject
private lateinit var dataType: DataList private lateinit var liveDataType: LiveData
private lateinit var dynamicListAdapter: DynamicListAdapter private lateinit var rowRepresentableAdapter: RowRepresentableAdapter
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_editable_data, container, false) return inflater.inflate(R.layout.fragment_editable_data, container, false)
@ -34,24 +36,24 @@ class EditableDataFragment : PokerAnalyticsFragment(), DynamicRowCallback, Botto
initUI() initUI()
} }
override fun onRowSelected(row: DynamicRowInterface) { override fun onRowSelected(row: RowRepresentable) {
BottomSheetFragment.create(fragmentManager, row, this, (this.item as EditableDataSource).getBottomSheetData(row)) BottomSheetFragment.create(fragmentManager, row, this, (this.item as RowEditable).getBottomSheetData(row))
} }
override fun clickOnAdd(row: DynamicRowInterface) { override fun clickOnAdd(row: RowRepresentable) {
Toast.makeText(requireContext(), "Add new element: $row", Toast.LENGTH_SHORT).show() Toast.makeText(requireContext(), "Add new element: $row", Toast.LENGTH_SHORT).show()
} }
override fun clickOnClear(row: DynamicRowInterface) { override fun clickOnClear(row: RowRepresentable) {
Toast.makeText(requireContext(), "Clear: $row", Toast.LENGTH_SHORT).show() Toast.makeText(requireContext(), "Clear: $row", Toast.LENGTH_SHORT).show()
} }
override fun setValue(value: Any, row: DynamicRowInterface) { override fun setValue(value: Any, row: RowRepresentable) {
(this.item as EditableDataSource).setBottomSheetValue(value, row) (this.item as RowEditable).updateValue(value, row)
this.getRealm().executeTransaction { this.getRealm().executeTransaction {
it.copyToRealmOrUpdate(this.item) it.copyToRealmOrUpdate(this.item)
} }
dynamicListAdapter.refreshRow(row) rowRepresentableAdapter.refreshRow(row)
} }
private fun initData() { private fun initData() {
@ -78,19 +80,19 @@ class EditableDataFragment : PokerAnalyticsFragment(), DynamicRowCallback, Botto
*/ */
fun setData(dataType: Int, primaryKey: String?) { fun setData(dataType: Int, primaryKey: String?) {
this.dataType = DataList.values()[dataType] this.liveDataType = LiveData.values()[dataType]
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
var proxyItem : RealmObject? = this.dataType.getData(realm, primaryKey) var proxyItem : RealmObject? = this.liveDataType.getData(realm, primaryKey)
proxyItem?.let { proxyItem?.let {
this.appBar.toolbar.title = "Update ${this.dataType.name.toLowerCase().capitalize()}" this.appBar.toolbar.title = "Update ${this.liveDataType.name.toLowerCase().capitalize()}"
} ?: run { } ?: run {
this.appBar.toolbar.title = "New ${this.dataType.name.toLowerCase().capitalize()}" this.appBar.toolbar.title = "New ${this.liveDataType.name.toLowerCase().capitalize()}"
} }
this.item = this.dataType.updateOrCreate(realm, primaryKey) this.item = this.liveDataType.updateOrCreate(realm, primaryKey)
this.dynamicListAdapter = DynamicListAdapter((this.item as DynamicRowDelegate), this) this.rowRepresentableAdapter = RowRepresentableAdapter((this.item as RowRepresentableDataSource), this)
this.recyclerView.adapter = dynamicListAdapter this.recyclerView.adapter = rowRepresentableAdapter
} }
} }

@ -8,24 +8,24 @@ import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.fragment_new_session.* import kotlinx.android.synthetic.main.fragment_new_session.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.DataList import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.model.realm.*
import net.pokeranalytics.android.ui.activity.EditableDataActivity import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.components.DynamicListAdapter import net.pokeranalytics.android.ui.adapter.components.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.components.DynamicRowCallback import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDelegate
import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.adapter.components.SessionRow import net.pokeranalytics.android.ui.view.SessionRow
import net.pokeranalytics.android.ui.fragment.components.BottomSheetDelegate import net.pokeranalytics.android.ui.fragment.components.BottomSheetDelegate
import net.pokeranalytics.android.ui.fragment.components.BottomSheetFragment import net.pokeranalytics.android.ui.fragment.components.BottomSheetFragment
import net.pokeranalytics.android.ui.fragment.components.DateTimePickerManager import net.pokeranalytics.android.ui.fragment.components.DateTimePickerManager
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
import java.util.* import java.util.*
class NewSessionFragment : PokerAnalyticsFragment(), DynamicRowCallback, BottomSheetDelegate { class NewSessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, BottomSheetDelegate {
private lateinit var currentSession: Session private lateinit var currentSession: Session
private lateinit var sessionAdapter : DynamicListAdapter private lateinit var sessionAdapterRow : RowRepresentableAdapter
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_new_session, container, false) return inflater.inflate(R.layout.fragment_new_session, container, false)
@ -37,7 +37,7 @@ class NewSessionFragment : PokerAnalyticsFragment(), DynamicRowCallback, BottomS
initUI() initUI()
} }
override fun onRowSelected(row: DynamicRowInterface) { override fun onRowSelected(row: RowRepresentable) {
val data = currentSession.getBottomSheetData(row) val data = currentSession.getBottomSheetData(row)
when(row) { when(row) {
SessionRow.START_DATE -> DateTimePickerManager.create(requireContext(), row, this, currentSession.timeFrame?.startDate) SessionRow.START_DATE -> DateTimePickerManager.create(requireContext(), row, this, currentSession.timeFrame?.startDate)
@ -46,19 +46,19 @@ class NewSessionFragment : PokerAnalyticsFragment(), DynamicRowCallback, BottomS
} }
} }
override fun onActionSelected(row: DynamicRowInterface) { override fun onActionSelected(row: RowRepresentable) {
Toast.makeText(requireContext(), "Action for row: $row", Toast.LENGTH_SHORT).show() Toast.makeText(requireContext(), "Action for row: $row", Toast.LENGTH_SHORT).show()
} }
override fun clickOnAdd(row: DynamicRowInterface) { override fun clickOnAdd(row: RowRepresentable) {
when(row) { when(row) {
SessionRow.GAME -> EditableDataActivity.newInstance(requireContext(), DataList.GAME.ordinal) SessionRow.GAME -> EditableDataActivity.newInstance(requireContext(), LiveData.GAME.ordinal)
SessionRow.BANKROLL -> EditableDataActivity.newInstance(requireContext(), DataList.BANKROLL.ordinal) SessionRow.BANKROLL -> EditableDataActivity.newInstance(requireContext(), LiveData.BANKROLL.ordinal)
SessionRow.LOCATION -> EditableDataActivity.newInstance(requireContext(), DataList.LOCATION.ordinal) SessionRow.LOCATION -> EditableDataActivity.newInstance(requireContext(), LiveData.LOCATION.ordinal)
} }
} }
override fun clickOnClear(row: DynamicRowInterface) { override fun clickOnClear(row: RowRepresentable) {
when(row) { when(row) {
SessionRow.GAME -> currentSession.game = null SessionRow.GAME -> currentSession.game = null
SessionRow.BANKROLL -> currentSession.bankroll = null SessionRow.BANKROLL -> currentSession.bankroll = null
@ -71,10 +71,10 @@ class NewSessionFragment : PokerAnalyticsFragment(), DynamicRowCallback, BottomS
SessionRow.START_DATE -> currentSession.timeFrame?.setDate(Date(), null) SessionRow.START_DATE -> currentSession.timeFrame?.setDate(Date(), null)
SessionRow.END_DATE -> currentSession.timeFrame?.setDate(Date(), null) SessionRow.END_DATE -> currentSession.timeFrame?.setDate(Date(), null)
} }
sessionAdapter.notifyItemChanged(SessionRow.values().indexOf(row)) sessionAdapterRow.notifyItemChanged(SessionRow.values().indexOf(row))
} }
override fun setValue(value: Any, row: DynamicRowInterface) { override fun setValue(value: Any, row: RowRepresentable) {
when(row) { when(row) {
SessionRow.GAME -> if (value is Game) currentSession.game = value SessionRow.GAME -> if (value is Game) currentSession.game = value
SessionRow.BANKROLL -> if (value is Bankroll) currentSession.bankroll = value SessionRow.BANKROLL -> if (value is Bankroll) currentSession.bankroll = value
@ -95,7 +95,7 @@ class NewSessionFragment : PokerAnalyticsFragment(), DynamicRowCallback, BottomS
currentSession.timeFrame = timeFrame currentSession.timeFrame = timeFrame
} }
} }
sessionAdapter.notifyItemChanged(SessionRow.values().indexOf(row)) sessionAdapterRow.notifyItemChanged(SessionRow.values().indexOf(row))
} }
private fun initData() { private fun initData() {
@ -112,12 +112,12 @@ class NewSessionFragment : PokerAnalyticsFragment(), DynamicRowCallback, BottomS
activity.supportActionBar?.setDisplayHomeAsUpEnabled(true) activity.supportActionBar?.setDisplayHomeAsUpEnabled(true)
val viewManager = LinearLayoutManager(requireContext()) val viewManager = LinearLayoutManager(requireContext())
sessionAdapter = DynamicListAdapter(currentSession, this) sessionAdapterRow = RowRepresentableAdapter(currentSession, this)
recyclerView.apply { recyclerView.apply {
setHasFixedSize(true) setHasFixedSize(true)
layoutManager = viewManager layoutManager = viewManager
adapter = sessionAdapter adapter = sessionAdapterRow
} }
} }

@ -10,8 +10,10 @@ import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.activity.DataListActivity import net.pokeranalytics.android.ui.activity.DataListActivity
import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.adapter.components.*
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.SettingRow
class SettingsFragment : PokerAnalyticsFragment(), DynamicRowDelegate, DynamicRowCallback { class SettingsFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, RowRepresentableDelegate {
companion object { companion object {
@ -26,7 +28,7 @@ class SettingsFragment : PokerAnalyticsFragment(), DynamicRowDelegate, DynamicRo
} }
} }
private lateinit var settingsAdapter: DynamicListAdapter private lateinit var settingsAdapterRow: RowRepresentableAdapter
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
@ -38,13 +40,13 @@ class SettingsFragment : PokerAnalyticsFragment(), DynamicRowDelegate, DynamicRo
initData() initData()
} }
override fun adapterRows(): ArrayList<DynamicRowInterface> { override fun adapterRows(): ArrayList<RowRepresentable> {
val rows = ArrayList<DynamicRowInterface>() val rows = ArrayList<RowRepresentable>()
rows.addAll(SettingRow.values()) rows.addAll(SettingRow.values())
return rows return rows
} }
override fun onRowSelected(row: DynamicRowInterface) { override fun onRowSelected(row: RowRepresentable) {
DataListActivity.newInstance(requireContext(), (row as SettingRow).ordinal) DataListActivity.newInstance(requireContext(), (row as SettingRow).ordinal)
} }
@ -54,14 +56,14 @@ class SettingsFragment : PokerAnalyticsFragment(), DynamicRowDelegate, DynamicRo
private fun initData() { private fun initData() {
val viewManager = LinearLayoutManager(requireContext()) val viewManager = LinearLayoutManager(requireContext())
settingsAdapter = DynamicListAdapter( settingsAdapterRow = RowRepresentableAdapter(
this, this this, this
) )
recyclerView.apply { recyclerView.apply {
setHasFixedSize(true) setHasFixedSize(true)
layoutManager = viewManager layoutManager = viewManager
adapter = settingsAdapter adapter = settingsAdapterRow
} }
} }
} }

@ -8,14 +8,12 @@ import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.fragment_settings.* import kotlinx.android.synthetic.main.fragment_settings.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.ui.activity.DataListActivity import net.pokeranalytics.android.ui.adapter.components.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.components.DynamicListAdapter import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.components.DynamicRowDelegate import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface
import net.pokeranalytics.android.ui.adapter.components.SettingRow
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
class StatsFragment : PokerAnalyticsFragment(), DynamicRowDelegate { class StatsFragment : PokerAnalyticsFragment(), RowRepresentableDataSource {
companion object { companion object {
@ -30,7 +28,7 @@ class StatsFragment : PokerAnalyticsFragment(), DynamicRowDelegate {
} }
} }
private lateinit var statsAdapter: DynamicListAdapter private lateinit var statsAdapterRow: RowRepresentableAdapter
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_stats, container, false) return inflater.inflate(R.layout.fragment_stats, container, false)
@ -41,8 +39,8 @@ class StatsFragment : PokerAnalyticsFragment(), DynamicRowDelegate {
initData() initData()
} }
override fun adapterRows(): ArrayList<DynamicRowInterface> { override fun adapterRows(): ArrayList<RowRepresentable> {
val rows = ArrayList<DynamicRowInterface>() val rows = ArrayList<RowRepresentable>()
rows.addAll(Stat.values()) rows.addAll(Stat.values())
return rows return rows
} }
@ -53,14 +51,14 @@ class StatsFragment : PokerAnalyticsFragment(), DynamicRowDelegate {
private fun initData() { private fun initData() {
val viewManager = LinearLayoutManager(requireContext()) val viewManager = LinearLayoutManager(requireContext())
this.statsAdapter = DynamicListAdapter( this.statsAdapterRow = RowRepresentableAdapter(
this this
) )
recyclerView.apply { recyclerView.apply {
setHasFixedSize(true) setHasFixedSize(true)
layoutManager = viewManager layoutManager = viewManager
adapter = statsAdapter adapter = statsAdapterRow
} }
} }
} }

@ -2,6 +2,7 @@ package net.pokeranalytics.android.ui.fragment.components
import android.text.InputType import android.text.InputType
import io.realm.RealmResults import io.realm.RealmResults
import net.pokeranalytics.android.ui.view.RowRepresentable
class BottomSheetData( class BottomSheetData(
var defaultValue: Any? = null, var defaultValue: Any? = null,

@ -8,12 +8,12 @@ import kotlinx.android.synthetic.main.bottom_sheet_double_list.*
import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.* import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.Game import net.pokeranalytics.android.model.realm.Game
import net.pokeranalytics.android.ui.adapter.components.DataListAdapter import net.pokeranalytics.android.ui.adapter.components.LiveDataAdapter
import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource import net.pokeranalytics.android.ui.adapter.components.LiveDataDataSource
import net.pokeranalytics.android.ui.adapter.components.DisplayableDelegate import net.pokeranalytics.android.ui.adapter.components.LiveDataDelegate
class BottomSheetDoubleListFragment : BottomSheetFragment(), DisplayableDelegate { class BottomSheetDoubleListFragment : BottomSheetFragment(), LiveDataDelegate {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -22,7 +22,7 @@ class BottomSheetDoubleListFragment : BottomSheetFragment(), DisplayableDelegate
initUI() initUI()
} }
override fun data(position: Int): DisplayableDataSource { override fun data(position: Int): LiveDataDataSource {
//TODO: Change that //TODO: Change that
return Game() return Game()
} }
@ -50,7 +50,7 @@ class BottomSheetDoubleListFragment : BottomSheetFragment(), DisplayableDelegate
LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_double_list, view?.bottomSheetContainer, true) LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_double_list, view?.bottomSheetContainer, true)
val viewManager = LinearLayoutManager(requireContext()) val viewManager = LinearLayoutManager(requireContext())
val dataAdapter = DataListAdapter(this, R.layout.row_bottom_sheet_title) val dataAdapter = LiveDataAdapter(this, R.layout.row_bottom_sheet_title)
gameNameRecyclerView.apply { gameNameRecyclerView.apply {
setHasFixedSize(true) setHasFixedSize(true)

@ -9,7 +9,7 @@ import androidx.fragment.app.FragmentManager
import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import kotlinx.android.synthetic.main.fragment_bottom_sheet.* import kotlinx.android.synthetic.main.fragment_bottom_sheet.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface import net.pokeranalytics.android.ui.view.RowRepresentable
enum class BottomSheetType { enum class BottomSheetType {
NONE, NONE,
@ -22,15 +22,15 @@ enum class BottomSheetType {
} }
interface BottomSheetDelegate { interface BottomSheetDelegate {
fun clickOnAdd(row: DynamicRowInterface) fun clickOnAdd(row: RowRepresentable)
fun clickOnClear(row: DynamicRowInterface) fun clickOnClear(row: RowRepresentable)
fun setValue(value: Any, row: DynamicRowInterface) fun setValue(value: Any, row: RowRepresentable)
} }
open class BottomSheetFragment : BottomSheetDialogFragment() { open class BottomSheetFragment : BottomSheetDialogFragment() {
lateinit var row: DynamicRowInterface lateinit var row: RowRepresentable
lateinit var bottomSheetDelegate: BottomSheetDelegate lateinit var bottomSheetDelegate: BottomSheetDelegate
private var data: ArrayList<BottomSheetData> = ArrayList() private var data: ArrayList<BottomSheetData> = ArrayList()
@ -38,7 +38,7 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
companion object { companion object {
fun create( fun create(
fragmentManager: FragmentManager?, fragmentManager: FragmentManager?,
row: DynamicRowInterface, row: RowRepresentable,
bottomSheetDelegate: BottomSheetDelegate, bottomSheetDelegate: BottomSheetDelegate,
data: ArrayList<BottomSheetData> data: ArrayList<BottomSheetData>
): BottomSheetFragment { ): BottomSheetFragment {

@ -9,14 +9,14 @@ import kotlinx.android.synthetic.main.bottom_sheet_double_list.*
import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.* import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.Game import net.pokeranalytics.android.model.realm.Game
import net.pokeranalytics.android.ui.adapter.components.DataListAdapter import net.pokeranalytics.android.ui.adapter.components.LiveDataAdapter
import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource import net.pokeranalytics.android.ui.adapter.components.LiveDataDataSource
import net.pokeranalytics.android.ui.adapter.components.DisplayableDelegate import net.pokeranalytics.android.ui.adapter.components.LiveDataDelegate
class BottomSheetListFragment : BottomSheetFragment(), DisplayableDelegate { class BottomSheetListFragment : BottomSheetFragment(), LiveDataDelegate {
private var realmData: RealmResults<*>? = null private var realmData: RealmResults<*>? = null
private lateinit var dataAdapter: DataListAdapter private lateinit var dataAdapter: LiveDataAdapter
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
@ -29,9 +29,9 @@ class BottomSheetListFragment : BottomSheetFragment(), DisplayableDelegate {
dataAdapter.notifyDataSetChanged() dataAdapter.notifyDataSetChanged()
} }
override fun data(position: Int): DisplayableDataSource { override fun data(position: Int): LiveDataDataSource {
realmData?.let { realmData?.let {
return it[position] as DisplayableDataSource return it[position] as LiveDataDataSource
} }
//TODO: Change that //TODO: Change that
return Game() return Game()
@ -70,7 +70,7 @@ class BottomSheetListFragment : BottomSheetFragment(), DisplayableDelegate {
LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_list, view?.bottomSheetContainer, true) LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_list, view?.bottomSheetContainer, true)
val viewManager = LinearLayoutManager(requireContext()) val viewManager = LinearLayoutManager(requireContext())
dataAdapter = DataListAdapter(this, R.layout.row_bottom_sheet_title) dataAdapter = LiveDataAdapter(this, R.layout.row_bottom_sheet_title)
gameNameRecyclerView.apply { gameNameRecyclerView.apply {
setHasFixedSize(true) setHasFixedSize(true)

@ -8,7 +8,7 @@ import android.text.format.DateFormat
import android.widget.DatePicker import android.widget.DatePicker
import android.widget.TimePicker import android.widget.TimePicker
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface import net.pokeranalytics.android.ui.view.RowRepresentable
import java.util.* import java.util.*
class DateTimePickerManager : DatePickerDialog.OnDateSetListener, class DateTimePickerManager : DatePickerDialog.OnDateSetListener,
@ -16,14 +16,14 @@ class DateTimePickerManager : DatePickerDialog.OnDateSetListener,
private var context: Context? = null private var context: Context? = null
lateinit var row: DynamicRowInterface lateinit var row: RowRepresentable
lateinit var bottomSheetDelegate: BottomSheetDelegate lateinit var bottomSheetDelegate: BottomSheetDelegate
lateinit var calendar: Calendar lateinit var calendar: Calendar
companion object { companion object {
fun create( fun create(
context: Context, context: Context,
row: DynamicRowInterface, row: RowRepresentable,
bottomSheetDelegate: BottomSheetDelegate, bottomSheetDelegate: BottomSheetDelegate,
date: Date? date: Date?
) : DateTimePickerManager { ) : DateTimePickerManager {

@ -1,7 +0,0 @@
package net.pokeranalytics.android.ui.fragment.components
open class DynamicListFragment : PokerAnalyticsFragment() {
}

@ -4,7 +4,6 @@ import android.os.Bundle
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import io.realm.Realm import io.realm.Realm
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface
open class PokerAnalyticsFragment: Fragment() { open class PokerAnalyticsFragment: Fragment() {

@ -0,0 +1,8 @@
package net.pokeranalytics.android.ui.view
import net.pokeranalytics.android.ui.fragment.components.BottomSheetData
interface RowEditable {
fun getBottomSheetData(row: RowRepresentable): ArrayList<BottomSheetData>
fun updateValue(value: Any, row: RowRepresentable)
}

@ -0,0 +1,158 @@
package net.pokeranalytics.android.ui.view
import android.content.Context
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.ui.fragment.components.BottomSheetType
interface RowRepresentable {
fun localizedTitle(context: Context): String {
this.resId?.let {
return context.getString(it)
}
return "LOCALISATION NOT FOUND"
}
val resId: Int?
get() {
return null
}
val viewType: Int
get() {
return 0
}
val bottomSheetType: BottomSheetType
get() {
return BottomSheetType.NONE
}
val relatedResultsRepresentable: LiveData?
get() {
return null
}
}
enum class SessionRow : RowRepresentable {
GAME,
BLINDS,
LOCATION,
BANKROLL,
START_DATE,
END_DATE,
COMMENT;
override val resId: Int?
get() {
return when (this) {
BLINDS -> R.string.blinds
GAME -> R.string.game
LOCATION -> R.string.location
BANKROLL -> R.string.bankroll
COMMENT -> R.string.comment
START_DATE -> R.string.start_date
END_DATE -> R.string.end_date
}
}
override val viewType: Int
get() {
return when (this) {
BLINDS, GAME, BANKROLL, LOCATION, COMMENT -> RowViewType.TITLE_VALUE.ordinal
START_DATE, END_DATE -> RowViewType.TITLE_VALUE_ACTION.ordinal
}
}
override val bottomSheetType: BottomSheetType
get() {
return when (this) {
BLINDS -> BottomSheetType.DOUBLE_EDIT_TEXT
GAME -> BottomSheetType.LIST
LOCATION -> BottomSheetType.LIST
BANKROLL -> BottomSheetType.LIST
COMMENT -> BottomSheetType.EDIT_TEXT
else -> BottomSheetType.NONE
}
}
}
enum class SimpleRow : RowRepresentable {
NAME;
override val resId: Int? = R.string.name
override val viewType: Int = RowViewType.TITLE_VALUE.ordinal
override val bottomSheetType: BottomSheetType = BottomSheetType.EDIT_TEXT
}
enum class BankrollRow : RowRepresentable {
LIVE,
CURRENCY;
override val resId: Int?
get() {
return when (this) {
LIVE -> R.string.live
CURRENCY -> R.string.currency
}
}
override val viewType: Int
get() {
return when (this) {
LIVE, CURRENCY -> RowViewType.TITLE_VALUE.ordinal
}
}
override val bottomSheetType: BottomSheetType
get() {
return when (this) {
LIVE -> BottomSheetType.NONE
CURRENCY -> BottomSheetType.LIST
}
}
}
enum class GameRow : RowRepresentable {
}
enum class LocationRow : RowRepresentable {
}
enum class TransactionTypeRow : RowRepresentable {
}
enum class TournamentFeatureRow : RowRepresentable {
}
enum class SettingRow: RowRepresentable {
BANKROLL,
GAME,
LOCATION,
TOURNAMENT_TYPE,
TRANSACTION_TYPE;
override val resId: Int?
get() {
return when (this) {
BANKROLL -> R.string.bankroll
GAME -> R.string.game
LOCATION -> R.string.location
TOURNAMENT_TYPE -> R.string.tournament_type
TRANSACTION_TYPE -> R.string.transaction_type
}
}
override val viewType: Int = RowViewType.TITLE.ordinal
override val relatedResultsRepresentable : LiveData?
get() {
return when (this) {
BANKROLL -> LiveData.BANKROLL
GAME -> LiveData.GAME
LOCATION -> LiveData.LOCATION
TOURNAMENT_TYPE -> LiveData.TOURNAMENT_TYPE
TRANSACTION_TYPE -> LiveData.TRANSACTION_TYPE
}
}
}

@ -1,4 +1,4 @@
package net.pokeranalytics.android.ui.adapter.components package net.pokeranalytics.android.ui.view
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
@ -6,10 +6,11 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.row_title_value_action.view.* import kotlinx.android.synthetic.main.row_title_value_action.view.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDataSource
interface DynamicHolder { interface DynamicHolder {
fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate? = null, listener: View.OnClickListener, actionListener: View.OnClickListener? = null) {} fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource? = null, listener: View.OnClickListener, actionListener: View.OnClickListener? = null) {}
} }
@ -20,33 +21,37 @@ enum class RowViewType {
TITLE_VALUE, TITLE_VALUE,
TITLE_VALUE_ACTION; TITLE_VALUE_ACTION;
inner class FakeViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), DynamicHolder { inner class FakeViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
override fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate?, listener: View.OnClickListener, actionListener: View.OnClickListener?) { DynamicHolder {
override fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource?, listener: View.OnClickListener, actionListener: View.OnClickListener?) {
} }
} }
inner class TitleViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), DynamicHolder { inner class TitleViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
override fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate?, listener: View.OnClickListener, actionListener: View.OnClickListener?) { DynamicHolder {
override fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource?, listener: View.OnClickListener, actionListener: View.OnClickListener?) {
itemView.title.text = row.localizedTitle(itemView.context) itemView.title.text = row.localizedTitle(itemView.context)
itemView.container.setOnClickListener(listener) itemView.container.setOnClickListener(listener)
} }
} }
inner class TitleValueViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), DynamicHolder { inner class TitleValueViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
override fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate?, listener: View.OnClickListener, actionListener: View.OnClickListener?) { DynamicHolder {
override fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource?, listener: View.OnClickListener, actionListener: View.OnClickListener?) {
itemView.title.text = row.localizedTitle(itemView.context) itemView.title.text = row.localizedTitle(itemView.context)
delegate?.let { rowRepresentableDataSource?.let {
itemView.value.text = it.stringForRow(row) itemView.value.text = it.stringForRow(row)
} }
itemView.container.setOnClickListener(listener) itemView.container.setOnClickListener(listener)
} }
} }
inner class TitleValueActionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), DynamicHolder { inner class TitleValueActionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
override fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate?, listener: View.OnClickListener, actionListener: View.OnClickListener?) { DynamicHolder {
override fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource?, listener: View.OnClickListener, actionListener: View.OnClickListener?) {
itemView.title.text = row.localizedTitle(itemView.context) itemView.title.text = row.localizedTitle(itemView.context)
delegate?.let { rowDelegate -> rowRepresentableDataSource?.let { rowDelegate ->
val value = rowDelegate.stringForRow(row) val value = rowDelegate.stringForRow(row)
itemView.value.text = value itemView.value.text = value

@ -27,4 +27,21 @@
<string name="add">Add</string> <string name="add">Add</string>
<string name="done">Done</string> <string name="done">Done</string>
<string name="net_result">Net Result</string>
<string name="hourly_rate">Hourly Rate</string>
<string name="average">Average</string>
<string name="number_of_groups">Number of groups</string>
<string name="number_of_games">Number of games</string>
<string name="duration">Duration</string>
<string name="average_duration">Average duration</string>
<string name="net_bb_per_100_hands">Net(BB) per 100 hands</string>
<string name="hourly_rate_bb">Hourly rate (BB)</string>
<string name="average_net_bb">Average net (BB)</string>
<string name="win_ratio">Win ratio</string>
<string name="average_buyin">Average buyin</string>
<string name="roi">ROI</string>
<string name="standard_deviation">Standard deviation</string>
<string name="standard_deviation_hourly">Standard deviation hourly</string>
<string name="standard_deviation_bb_per_100_hands">Standard deviation BB per 100 hands</string>
<string name="hands_played">Hands played</string>
</resources> </resources>

Loading…
Cancel
Save