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

feature/top10
Laurent 7 years ago
commit b8b88eb872
  1. 2
      app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt
  2. 2
      app/src/main/java/net/pokeranalytics/android/model/Limit.kt
  3. 2
      app/src/main/java/net/pokeranalytics/android/model/TableSize.kt
  4. 2
      app/src/main/java/net/pokeranalytics/android/model/extensions/SessionExtensions.kt
  5. 4
      app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt
  6. 4
      app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt
  7. 97
      app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt
  8. 35
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  9. 4
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt
  10. 6
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentType.kt
  11. 5
      app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt
  12. 2
      app/src/main/java/net/pokeranalytics/android/ui/adapter/HomePagerAdapter.kt
  13. 80
      app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt
  14. 12
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt
  15. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt
  16. 12
      app/src/main/java/net/pokeranalytics/android/ui/view/DynamicValueTextView.kt
  17. 57
      app/src/main/java/net/pokeranalytics/android/ui/view/HistorySessionDiffCallback.kt
  18. 2
      app/src/main/java/net/pokeranalytics/android/ui/view/HomeViewPager.kt
  19. 10
      app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt
  20. 92
      app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt
  21. 4
      app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt
  22. 3
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/BankrollRow.kt
  23. 2
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/GameRow.kt
  24. 4
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/HeaderRowRepresentable.kt
  25. 2
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/LocationRow.kt
  26. 6
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SessionRow.kt
  27. 2
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SimpleRow.kt
  28. 2
      app/src/main/res/layout/activity_home.xml
  29. 2
      app/src/main/res/layout/row_header_title_amount.xml
  30. 2
      app/src/main/res/layout/row_header_title_amount_big.xml
  31. 2
      app/src/main/res/layout/row_header_title_value.xml
  32. 17
      app/src/main/res/layout/row_history_session_header.xml
  33. 2
      app/src/main/res/layout/row_session_view.xml
  34. 2
      app/src/main/res/values/attrs.xml

@ -95,8 +95,6 @@ enum class Stat : RowRepresentable {
}
override val viewType: Int = RowViewType.TITLE_VALUE.ordinal
override var displayHeader: Boolean = false
override var headerValues: ArrayList<String> = ArrayList()
}
/**

@ -37,8 +37,6 @@ enum class Limit : RowRepresentable {
return this.longName
}
override var displayHeader: Boolean = false
override var headerValues: ArrayList<String> = ArrayList()
}
/*

@ -34,6 +34,4 @@ class TableSize(var numberOfPlayer: Int) : RowRepresentable {
override val viewType: Int
get() = RowViewType.TITLE_GRID.ordinal
override var displayHeader: Boolean = false
override var headerValues: ArrayList<String> = ArrayList()
}

@ -18,7 +18,7 @@ enum class SessionState {
fun Session.getState(): SessionState {
if (timeFrame == null) {
return SessionState.INVALID
return SessionState.PENDING
}
val endDate = timeFrame?.endDate

@ -96,8 +96,4 @@ open class Bankroll(name: String = "") : RealmObject(), Savable,
return this.name.isNotEmpty()
}
@Ignore
override var displayHeader: Boolean = false
@Ignore
override var headerValues: ArrayList<String> = ArrayList()
}

@ -77,8 +77,4 @@ open class Game : RealmObject(), Savable, RowRepresentableDataSource,
return this.name.isNotEmpty()
}
@Ignore
override var displayHeader: Boolean = false
@Ignore
override var headerValues: ArrayList<String> = ArrayList()
}

@ -1,7 +1,6 @@
package net.pokeranalytics.android.model.realm
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
@ -14,65 +13,61 @@ import java.util.*
open class Location : RealmObject(), Savable, RowRepresentableDataSource, RowRepresentable {
@PrimaryKey
var id = UUID.randomUUID().toString()
@PrimaryKey
var id = UUID.randomUUID().toString()
// The name of the location
var name: String = ""
// The name of the location
var name: String = ""
// the longitude of the location
var longitude: Double? = null
// the longitude of the location
var longitude: Double? = null
// the latitude of the location
var latitude: Double? = null
// the latitude of the location
var latitude: Double? = null
override fun getDisplayName(): String {
return this.name
}
override fun getDisplayName(): String {
return this.name
}
override fun uniqueIdentifier(): String {
return this.id
}
override fun uniqueIdentifier(): String {
return this.id
}
override fun adapterRows(): ArrayList<RowRepresentable> {
val rows = ArrayList<RowRepresentable>()
rows.add(SimpleRow.NAME)
rows.addAll(LocationRow.values())
return rows
}
override fun adapterRows(): ArrayList<RowRepresentable> {
val rows = ArrayList<RowRepresentable>()
rows.add(SimpleRow.NAME)
rows.addAll(LocationRow.values())
return rows
}
override fun stringForRow(row: RowRepresentable): String {
return when (row) {
SimpleRow.NAME -> this.name
else -> return super.stringForRow(row)
}
}
override fun stringForRow(row: RowRepresentable): String {
return when (row) {
SimpleRow.NAME -> this.name
else -> return super.stringForRow(row)
}
}
override fun editDescriptors(row: RowRepresentable): ArrayList<RowRepresentableEditDescriptor> {
val data = java.util.ArrayList<RowRepresentableEditDescriptor>()
when (row) {
SimpleRow.NAME -> data.add(
RowRepresentableEditDescriptor(
this.name,
SimpleRow.NAME.resId
)
)
}
return data
}
override fun editDescriptors(row: RowRepresentable): ArrayList<RowRepresentableEditDescriptor> {
val data = java.util.ArrayList<RowRepresentableEditDescriptor>()
when (row) {
SimpleRow.NAME -> data.add(
RowRepresentableEditDescriptor(
this.name,
SimpleRow.NAME.resId
)
)
}
return data
}
override fun updateValue(value: Any?, row: RowRepresentable) {
when (row) {
SimpleRow.NAME -> this.name = value as String? ?: ""
}
}
override fun updateValue(value: Any?, row: RowRepresentable) {
when (row) {
SimpleRow.NAME -> this.name = value as String? ?: ""
}
}
override fun isValidForSave(): Boolean {
return this.name.isNotEmpty()
}
override fun isValidForSave(): Boolean {
return this.name.isNotEmpty()
}
@Ignore
override var displayHeader: Boolean = false
@Ignore
override var headerValues: ArrayList<String> = ArrayList()
}

@ -33,11 +33,6 @@ open class Session : RealmObject(), SessionInterface, Savable,
}
companion object {
// Type: cash game = 0, tournament = 1
const val TYPE_GAME = 0
const val TYPE_TOURNAMENT = 1
fun newInstance(): Session {
val session = Session()
session.result = Result()
@ -52,7 +47,7 @@ open class Session : RealmObject(), SessionInterface, Savable,
/**
* Indicates the type of session, cash game or tournament
*/
var type: Int = TYPE_GAME
var type: Int = Type.CASH_GAME.ordinal
// The result of the main user
var result: Result? = null
@ -122,16 +117,24 @@ open class Session : RealmObject(), SessionInterface, Savable,
// The features of the tournament, like Knockout, Shootout, Turbo...
var tournamentFeatures: RealmList<TournamentFeature> = RealmList()
@Ignore
override var displayHeader: Boolean = false
/**
* Return if this session is a tournament
*/
fun isTournament(): Boolean {
return type == Type.TOURNAMENT.ordinal
}
@Ignore
override var headerValues: ArrayList<String> = ArrayList()
/**
* Return if this session is a cash game
*/
fun isCashGame(): Boolean {
return type == Type.CASH_GAME.ordinal
}
/**
* Start a session
* Start or continue a session
*/
fun startSession() {
fun startOrContinue() {
realm.executeTransaction {
when (getState()) {
SessionState.PENDING -> {
@ -152,7 +155,7 @@ open class Session : RealmObject(), SessionInterface, Savable,
/**
* Pause a session
*/
fun pauseSession() {
fun pause() {
realm.executeTransaction {
when (getState()) {
SessionState.STARTED -> {
@ -166,7 +169,7 @@ open class Session : RealmObject(), SessionInterface, Savable,
/**
* Stop a session
*/
fun stopSession() {
fun stop() {
realm.executeTransaction {
when (getState()) {
SessionState.STARTED, SessionState.PAUSED -> {
@ -182,7 +185,7 @@ open class Session : RealmObject(), SessionInterface, Savable,
/**
* Restart a session
*/
fun restartSession() {
fun restart() {
realm.executeTransaction {
this.timeFrame?.paused = false
this.timeFrame?.pauseDate = null
@ -341,7 +344,7 @@ open class Session : RealmObject(), SessionInterface, Savable,
)
)
if (type == TYPE_GAME) {
if (!isTournament()) {
rows.add(
HeaderRowRepresentable(
RowViewType.HEADER_TITLE_VALUE,

@ -67,8 +67,4 @@ open class TournamentFeature : RealmObject(), Savable, RowRepresentableDataSourc
return this.name.isNotEmpty()
}
@Ignore
override var displayHeader: Boolean = false
@Ignore
override var headerValues: ArrayList<String> = ArrayList()
}

@ -1,7 +1,6 @@
package net.pokeranalytics.android.model.realm
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
@ -32,9 +31,4 @@ open class TournamentType : RealmObject(), Savable, RowRepresentableDataSource,
}
}
@Ignore
override var displayHeader: Boolean = false
@Ignore
override var headerValues: ArrayList<String> = ArrayList()
}

@ -2,7 +2,6 @@ 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
@ -76,10 +75,6 @@ open class TransactionType : RealmObject(), Savable, RowRepresentableDataSource,
return this.name.isNotEmpty()
}
@Ignore
override var displayHeader: Boolean = false
@Ignore
override var headerValues: ArrayList<String> = ArrayList()
}
enum class TransactionKind {

@ -27,7 +27,7 @@ class HomePagerAdapter(fragmentManager: FragmentManager) : FragmentStatePagerAda
}
override fun getCount(): Int {
return 5
return 3
}
override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {

@ -4,11 +4,14 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.LinearLayoutManager
import io.realm.RealmResults
import io.realm.Sort
import io.realm.kotlin.where
import kotlinx.android.synthetic.main.fragment_history.*
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.model.realm.Session
@ -17,12 +20,15 @@ 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
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.getMonthAndYear
import net.pokeranalytics.android.util.isSameDay
import net.pokeranalytics.android.util.isSameMonth
import net.pokeranalytics.android.util.longDate
import timber.log.Timber
import java.util.*
class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, RowRepresentableDelegate {
@ -39,6 +45,7 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, Ro
private lateinit var historyAdapter: RowRepresentableAdapter
private lateinit var realmSessions: RealmResults<Session>
private val sessions: ArrayList<Session> = ArrayList()
private val rows: ArrayList<RowRepresentable> = ArrayList()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_history, container, false)
@ -57,10 +64,9 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, Ro
override fun onResume() {
super.onResume()
historyAdapter.notifyDataSetChanged()
sessions.clear()
sessions.addAll(getRealm().copyFromRealm(realmSessions))
//rows.clear()
//sessions.addAll(getRealm().copyFromRealm(realmSessions))
createSessionsHeaders()
}
@ -88,8 +94,6 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, Ro
val viewManager = LinearLayoutManager(requireContext())
historyAdapter = RowRepresentableAdapter(this, this)
createSessionsHeaders()
recyclerView.apply {
setHasFixedSize(true)
layoutManager = viewManager
@ -102,45 +106,69 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, Ro
*/
private fun createSessionsHeaders() {
val groupedByDay = false
Timber.d("createSessionsHeaders")
val calendar = Calendar.getInstance()
val currentCalendar = Calendar.getInstance()
val oldRows = ArrayList<RowRepresentable>()
oldRows.addAll(rows)
for ((index, session) in sessions.withIndex()) {
currentCalendar.time = session.creationDate
if (groupedByDay) {
if (!calendar.isSameDay(currentCalendar) || index == 0) {
calendar.time = currentCalendar.time
session.displayHeader = true
session.headerValues = arrayListOf(session.creationDate.longDate(), "$ 123")
}
} else {
if (!calendar.isSameMonth(currentCalendar) || index == 0) {
calendar.time = currentCalendar.time
session.displayHeader = true
session.headerValues = arrayListOf(session.creationDate.getMonthAndYear(), "$ 123")
rows.clear()
sessions.clear()
sessions.addAll(getRealm().copyFromRealm(realmSessions))
GlobalScope.launch {
val groupedByDay = false
val calendar = Calendar.getInstance()
val currentCalendar = Calendar.getInstance()
for ((index, session) in sessions.withIndex()) {
currentCalendar.time = session.creationDate
if (groupedByDay) {
if (!calendar.isSameDay(currentCalendar) || index == 0) {
calendar.time = currentCalendar.time
val header = HeaderRowRepresentable(
customViewType = RowViewType.HEADER_SESSION,
title = session.creationDate.longDate()
)
rows.add(header)
}
} else {
if (!calendar.isSameMonth(currentCalendar) || index == 0) {
calendar.time = currentCalendar.time
val header = HeaderRowRepresentable(
customViewType = RowViewType.HEADER_SESSION,
title = session.creationDate.getMonthAndYear()
)
rows.add(header)
}
}
rows.add(session)
}
}
val diffResult = DiffUtil.calculateDiff(HistorySessionDiffCallback(rows, oldRows))
historyAdapter.updateRows(diffResult)
}
}
override fun rowRepresentableForPosition(position: Int): RowRepresentable {
return this.sessions[position]
return this.rows[position]
}
override fun numberOfRows(): Int {
return this.sessions.size
return this.rows.size
}
override fun viewTypeForPosition(position: Int): Int {
return RowViewType.ROW_SESSION.ordinal
return if (rows[position].viewType == RowViewType.HEADER_SESSION.ordinal) {
RowViewType.HEADER_SESSION.ordinal
} else {
RowViewType.ROW_SESSION.ordinal
}
}
override fun indexForRow(row: RowRepresentable): Int {
return this.sessions.indexOf(row)
return this.rows.indexOf(row)
}
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {

@ -234,10 +234,10 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
private fun manageSessionState() {
when (currentSession.getState()) {
SessionState.PENDING, SessionState.PAUSED -> {
currentSession.startSession()
currentSession.startOrContinue()
}
SessionState.STARTED -> {
currentSession.pauseSession()
currentSession.pause()
}
else -> {
}
@ -249,7 +249,7 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
* Stop the current session
*/
private fun stopSession() {
currentSession.stopSession()
currentSession.stop()
updateSessionUI()
}
@ -257,7 +257,7 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
* Restart timer
*/
private fun restartTimer() {
currentSession.restartSession()
currentSession.restart()
updateSessionUI()
}
@ -281,12 +281,12 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
} else {
realm.beginTransaction()
currentSession = realm.createObject(Session::class.java, UUID.randomUUID().toString())
currentSession.type = if (isTournament) Session.TYPE_TOURNAMENT else Session.TYPE_GAME
currentSession.type = if (isTournament) Session.Type.TOURNAMENT.ordinal else Session.Type.CASH_GAME.ordinal
realm.commitTransaction()
}
toolbar.title =
if (currentSession.type == Session.TYPE_TOURNAMENT) getString(R.string.tournament) else getString(R.string.cash_game)
if (currentSession.isTournament()) getString(R.string.tournament) else getString(R.string.cash_game)
sessionAdapter = RowRepresentableAdapter(currentSession, this)
recyclerView.adapter = sessionAdapter

@ -94,7 +94,7 @@ class StatsFragment : PokerAnalyticsFragment(), RowRepresentableDataSource {
val tSessions = mutableListOf<Session>()
allSessions.forEach { session ->
if (session.type == Session.Type.CASH_GAME.ordinal) {
if (session.isCashGame()) {
cgSessions.add(session)
} else {
tSessions.add(session)

@ -7,7 +7,11 @@ import androidx.core.content.ContextCompat
import net.pokeranalytics.android.R
import net.pokeranalytics.android.util.toCurrency
class PokerAnalyticsTextView: AppCompatTextView {
/**
* Extended TextView to display amount in the right color / currency
* Work in progress
*/
class DynamicValueTextView: AppCompatTextView {
var isCurrency: Boolean = false
var amount: Double = 0.0
@ -32,10 +36,10 @@ class PokerAnalyticsTextView: AppCompatTextView {
* Init class
*/
private fun init(attrs: AttributeSet?) {
context.theme.obtainStyledAttributes( attrs, R.styleable.PokerAnalyticsTextView, 0, 0).apply {
context.theme.obtainStyledAttributes( attrs, R.styleable.DynamicValueTextView, 0, 0).apply {
try {
isCurrency = getBoolean(R.styleable.PokerAnalyticsTextView_isCurrency, false)
amount = getFloat(R.styleable.PokerAnalyticsTextView_amount, 0f).toDouble()
isCurrency = getBoolean(R.styleable.DynamicValueTextView_isCurrency, false)
amount = getFloat(R.styleable.DynamicValueTextView_amount, 0f).toDouble()
updateUI()
} finally {
recycle()

@ -0,0 +1,57 @@
package net.pokeranalytics.android.ui.view
import androidx.annotation.Nullable
import androidx.recyclerview.widget.DiffUtil
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.ui.view.rowrepresentable.HeaderRowRepresentable
class HistorySessionDiffCallback(var newRows: List<RowRepresentable>, var oldRows: List<RowRepresentable>) :
DiffUtil.Callback() {
override fun getOldListSize(): Int {
return oldRows.size
}
override fun getNewListSize(): Int {
return newRows.size
}
override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
if (oldRows[oldItemPosition] is Session && newRows[newItemPosition] is Session) {
val session1 = oldRows[oldItemPosition] as Session
val session2 = newRows[newItemPosition] as Session
return session1.id == session2.id
} else if (oldRows[oldItemPosition] is HeaderRowRepresentable && newRows[newItemPosition] is HeaderRowRepresentable) {
val header1 = oldRows[oldItemPosition] as HeaderRowRepresentable
val header2 = newRows[newItemPosition] as HeaderRowRepresentable
return header1.title == header2.title
}
return false
}
override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
// Force to update all the rows that were already there
if (oldRows[oldItemPosition] is Session && newRows[newItemPosition] is Session) {
val session1 = oldRows[oldItemPosition] as Session
val session2 = newRows[newItemPosition] as Session
return false //session1.id == session2.id
} else if (oldRows[oldItemPosition] is HeaderRowRepresentable && newRows[newItemPosition] is HeaderRowRepresentable) {
val header1 = oldRows[oldItemPosition] as HeaderRowRepresentable
val header2 = newRows[newItemPosition] as HeaderRowRepresentable
return header1.title == header2.title
}
return false
}
@Nullable
override fun getChangePayload(oldItemPosition: Int, newItemPosition: Int): Any? {
//you can return particular field for changed item.
return super.getChangePayload(oldItemPosition, newItemPosition)
}
}

@ -8,7 +8,7 @@ import androidx.viewpager.widget.ViewPager
/**
* Poker Analytics ViewPager
*/
class PokerAnalyticsViewPager(context: Context, attrs: AttributeSet) : ViewPager(context, attrs) {
class HomeViewPager(context: Context, attrs: AttributeSet) : ViewPager(context, attrs) {
var enablePaging: Boolean = false

@ -45,16 +45,6 @@ interface Displayable : Localizable {
get() {
return BottomSheetType.NONE
}
val displayHeader: Boolean
get() {
return false
}
val headerValues: ArrayList<String>
get() {
return ArrayList<String>()
}
}
/**

@ -3,13 +3,13 @@ package net.pokeranalytics.android.ui.view
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.row_bottom_sheet_grid_title.view.*
import kotlinx.android.synthetic.main.row_bottom_sheet_title.view.*
import kotlinx.android.synthetic.main.row_header_title_amount.view.*
import kotlinx.android.synthetic.main.row_header_title_value.view.*
import kotlinx.android.synthetic.main.row_history_session.view.*
import kotlinx.android.synthetic.main.row_history_session_header.view.*
import kotlinx.android.synthetic.main.row_stats_title_value.view.*
import kotlinx.android.synthetic.main.row_title.view.*
import kotlinx.android.synthetic.main.row_title_switch.view.*
@ -27,7 +27,7 @@ interface BindableHolder {
fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) {
}
}
}
@ -37,6 +37,7 @@ enum class RowViewType {
HEADER_TITLE_VALUE,
HEADER_TITLE_AMOUNT,
HEADER_TITLE_AMOUNT_BIG,
HEADER_SESSION,
EDIT_TEXT,
TITLE,
TITLE_VALUE,
@ -92,7 +93,8 @@ enum class RowViewType {
LayoutInflater.from(parent.context).inflate(
R.layout.row_bottom_sheet_grid_title,
parent,
false)
false
)
)
TITLE_SWITCH -> TitleSwitchViewHolder(
LayoutInflater.from(parent.context).inflate(
@ -122,11 +124,21 @@ enum class RowViewType {
false
)
)
HEADER_SESSION -> {
HeaderSessionViewHolder(
LayoutInflater.from(parent.context).inflate(
R.layout.row_history_session_header,
parent,
false
)
)
}
ROW_SESSION -> RowSessionViewHolder(
LayoutInflater.from(parent.context).inflate(
R.layout.row_history_session,
parent,
false)
false
)
)
STAT -> StatsTitleValueViewHolder(
LayoutInflater.from(parent.context).inflate(
@ -176,29 +188,28 @@ enum class RowViewType {
}
}
inner class TitleViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
BindableHolder {
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) {
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) {
itemView.rowTitle_title.text = row.localizedTitle(itemView.context)
val listener = View.OnClickListener {
adapter.delegate?.onRowSelected(position, row)
}
itemView.rowTitle_container.setOnClickListener(listener)
val listener = View.OnClickListener {
adapter.delegate?.onRowSelected(position, row)
}
itemView.rowTitle_container.setOnClickListener(listener)
}
}
inner class TitleValueViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
BindableHolder {
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) {
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) {
itemView.rowTitleValue_title.text = row.localizedTitle(itemView.context)
adapter.dataSource?.let {
adapter.dataSource?.let {
itemView.rowTitleValue_value.text = it.stringForRow(row, itemView.context)
}
val listener = View.OnClickListener {
adapter.delegate?.onRowSelected(position, row)
}
itemView.rowTitleValue_container.setOnClickListener(listener)
val listener = View.OnClickListener {
adapter.delegate?.onRowSelected(position, row)
}
itemView.rowTitleValue_container.setOnClickListener(listener)
itemView.rowTitleValue_separator.visibility = if (row.needSeparator) View.VISIBLE else View.GONE
}
}
@ -232,45 +243,45 @@ enum class RowViewType {
inner class TitleSwitchViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
BindableHolder {
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) {
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) {
itemView.rowTitleSwitch_title.text = row.localizedTitle(itemView.context)
adapter.dataSource.let {
adapter.dataSource.let {
itemView.rowTitleSwitch_switch.isChecked = it.boolForRow(row)
itemView.rowTitleSwitch_switch.setOnCheckedChangeListener { buttonView, isChecked ->
adapter.delegate?.onRowValueChanged(isChecked, row)
}
itemView.rowTitleSwitch_switch.setOnCheckedChangeListener { buttonView, isChecked ->
adapter.delegate?.onRowValueChanged(isChecked, row)
}
}
val listener = View.OnClickListener {
itemView.rowTitleSwitch_switch.isChecked = !itemView.rowTitleSwitch_switch.isChecked
}
itemView.rowTitleSwitch_container.setOnClickListener(listener)
itemView.rowTitleSwitch_separator.visibility = if (row.needSeparator) View.VISIBLE else View.GONE
val listener = View.OnClickListener {
itemView.rowTitleSwitch_switch.isChecked = !itemView.rowTitleSwitch_switch.isChecked
}
itemView.rowTitleSwitch_container.setOnClickListener(listener)
itemView.rowTitleSwitch_separator.visibility = if (row.needSeparator) View.VISIBLE else View.GONE
}
}
inner class TitleValueActionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
BindableHolder {
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) {
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) {
itemView.rowTitleValueAction_title.text = row.localizedTitle(itemView.context)
adapter.dataSource.let { rowDelegate ->
val value = rowDelegate.stringForRow(row, itemView.context)
itemView.rowTitleValueAction_value.text = value
itemView.rowTitleValueAction_action.visibility = if (value == "--") View.GONE else View.VISIBLE
rowDelegate.actionIconForRow(row)?.let {icon ->
rowDelegate.actionIconForRow(row)?.let { icon ->
itemView.rowTitleValueAction_action.setImageResource(icon)
}
}
val listener = View.OnClickListener {
adapter.delegate?.onRowSelected(position, row)
}
val actionListener = View.OnClickListener {
adapter.delegate?.onRowSelected(position, row, true)
}
itemView.rowTitleValueAction_container.setOnClickListener(listener)
val listener = View.OnClickListener {
adapter.delegate?.onRowSelected(position, row)
}
val actionListener = View.OnClickListener {
adapter.delegate?.onRowSelected(position, row, true)
}
itemView.rowTitleValueAction_container.setOnClickListener(listener)
itemView.rowTitleValueAction_action.setOnClickListener(actionListener)
}
}
@ -295,17 +306,28 @@ enum class RowViewType {
}
}
inner class HeaderSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
BindableHolder {
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) {
itemView.sessionHeaderTitle.text = row.localizedTitle(itemView.context)
}
}
inner class RowSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
BindableHolder {
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) {
//TODO: Header
/*
if (row.displayHeader) {
itemView.sessionHeader.isVisible = true
itemView.sessionHeader.text = row.headerValues.firstOrNull() ?: ""
} else {
itemView.sessionHeader.isVisible = false
}
*/
itemView.sessionRow.setData(row as Session)
val listener = View.OnClickListener {

@ -64,7 +64,7 @@ class SessionRowView : FrameLayout {
// Title / Game type
var title = ""
if (session.type == Session.TYPE_TOURNAMENT) {
if (session.isTournament()) {
if (session.tournamentEntryFee != null) {
title += session.tournamentEntryFee?.toCurrency()
}
@ -76,7 +76,7 @@ class SessionRowView : FrameLayout {
title = context.getString(R.string.tournament).capitalize()
}
} else if (session.type == Session.TYPE_GAME) {
} else {
if (session.cgSmallBlind != null && session.cgBigBlind != null) {
title += session.getBlinds()
}

@ -30,7 +30,4 @@ enum class BankrollRow : RowRepresentable {
}
}
override var displayHeader: Boolean = false
override var headerValues: ArrayList<String> = ArrayList()
}

@ -29,6 +29,4 @@ enum class GameRow : RowRepresentable {
}
}
override var displayHeader: Boolean = false
override var headerValues: ArrayList<String> = ArrayList()
}

@ -8,7 +8,7 @@ import net.pokeranalytics.android.ui.view.RowViewType
* A class to display headers as row representable
*/
class HeaderRowRepresentable(
customViewType: RowViewType? = RowViewType.HEADER,
var customViewType: RowViewType? = RowViewType.HEADER,
override var resId: Int? = null,
var title: String? = null,
var value: String? = null
@ -27,7 +27,5 @@ class HeaderRowRepresentable(
override val viewType: Int = customViewType?.ordinal ?: RowViewType.HEADER.ordinal
override var displayHeader: Boolean = false
override var headerValues: ArrayList<String> = ArrayList()
}

@ -30,6 +30,4 @@ enum class LocationRow : RowRepresentable {
}
}
override var displayHeader: Boolean = false
override var headerValues: ArrayList<String> = ArrayList()
}

@ -36,7 +36,7 @@ enum class SessionRow : RowRepresentable {
*/
fun getRows(type: Int, sessionState: SessionState): ArrayList<RowRepresentable> {
when (type) {
Session.TYPE_TOURNAMENT -> {
Session.Type.TOURNAMENT.ordinal -> {
return when (sessionState) {
SessionState.PENDING -> {
arrayListOf(
@ -54,7 +54,7 @@ enum class SessionRow : RowRepresentable {
else -> arrayListOf()
}
}
Session.TYPE_GAME -> {
Session.Type.CASH_GAME.ordinal -> {
return when (sessionState) {
SessionState.PENDING -> {
arrayListOf(GAME, BLINDS, LOCATION, BANKROLL, TABLE_SIZE, START_DATE, END_DATE)
@ -127,6 +127,4 @@ enum class SessionRow : RowRepresentable {
}
}
override var displayHeader: Boolean = false
override var headerValues: ArrayList<String> = ArrayList()
}

@ -12,6 +12,4 @@ enum class SimpleRow : RowRepresentable {
override val resId: Int? = R.string.name
override val viewType: Int = RowViewType.TITLE_VALUE.ordinal
override val bottomSheetType: BottomSheetType = BottomSheetType.EDIT_TEXT
override var displayHeader: Boolean = false
override var headerValues: ArrayList<String> = ArrayList()
}

@ -25,7 +25,7 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar" /> -->
<net.pokeranalytics.android.ui.view.PokerAnalyticsViewPager
<net.pokeranalytics.android.ui.view.HomeViewPager
android:id="@+id/viewPager"
android:layout_width="0dp"
android:layout_height="0dp"

@ -24,7 +24,7 @@
app:layout_constraintTop_toTopOf="parent"
tools:text="Title" />
<net.pokeranalytics.android.ui.view.PokerAnalyticsTextView
<net.pokeranalytics.android.ui.view.DynamicValueTextView
android:id="@+id/rowHeaderTitleAmount.value"
style="@style/PokerAnalyticsTheme.TextView.RowValue"
android:layout_width="0dp"

@ -24,7 +24,7 @@
app:layout_constraintTop_toTopOf="parent"
tools:text="Title" />
<net.pokeranalytics.android.ui.view.PokerAnalyticsTextView
<net.pokeranalytics.android.ui.view.DynamicValueTextView
android:id="@+id/rowHeaderTitleAmount.value"
style="@style/PokerAnalyticsTheme.TextView.RowValue"
android:layout_width="0dp"

@ -22,7 +22,7 @@
app:layout_constraintTop_toTopOf="parent"
tools:text="Title" />
<net.pokeranalytics.android.ui.view.PokerAnalyticsTextView
<net.pokeranalytics.android.ui.view.DynamicValueTextView
android:id="@+id/rowHeaderTitleValue.value"
style="@style/PokerAnalyticsTheme.TextView.RowValue"
android:layout_width="0dp"

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/sessionHeaderTitle"
style="@style/PokerAnalyticsTheme.TextView.SessionHeader"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
tools:text="Header" />
</LinearLayout>

@ -151,7 +151,7 @@
app:layout_constraintEnd_toStartOf="@+id/nextArrow"
app:layout_constraintTop_toTopOf="@+id/sessionTitle">
<net.pokeranalytics.android.ui.view.PokerAnalyticsTextView
<net.pokeranalytics.android.ui.view.DynamicValueTextView
android:id="@+id/gameResult"
style="@style/PokerAnalyticsTheme.TextView.SessionRow.Result"
android:layout_width="wrap_content"

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="PokerAnalyticsTextView">
<declare-styleable name="DynamicValueTextView">
<attr name="isCurrency" format="boolean" />
<attr name="amount" format="float" />
</declare-styleable>

Loading…
Cancel
Save