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

# Conflicts:
#	app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
feature/top10
Aurelien Hubert 7 years ago
commit 67e067cd3c
  1. 10
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  2. 3
      app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt
  3. 52
      app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt
  4. 121
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt
  5. 35
      app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt

@ -23,7 +23,8 @@ import net.pokeranalytics.android.util.toCurrency
import java.util.*
import kotlin.collections.ArrayList
open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource, RowEditable {
open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource,
RowEditable, RowRepresentable {
@PrimaryKey
var id = UUID.randomUUID().toString()
@ -248,10 +249,12 @@ open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource
return 0.0
}
override fun getDisplayName(): String {
return "session ${this.creationDate}"
}
override fun adapterRows(): ArrayList<RowRepresentable> {
val rows = ArrayList<RowRepresentable>()
rows.clear()
rows.addAll(SessionRow.getRowsForState(getState()))
return rows
}
@ -263,8 +266,7 @@ open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource
override fun stringForRow(row: RowRepresentable): String {
return when (row) {
SessionRow.BUY_IN -> buyin.toCurrency()
SessionRow.CASHED_OUT -> result?.cashout?.toCurrency() ?: "--"
SessionRow.BLINDS -> getBlinds()
SessionRow.BLINDS -> if (cgSmallBlind != null && cgBigBlind != null) "$cgSmallBlind / $cgBigBlind" else "--"
SessionRow.GAME -> game?.name ?: "--"
SessionRow.LOCATION -> location?.name ?: "--"
SessionRow.BANKROLL -> bankroll?.name ?: "--"

@ -3,6 +3,7 @@ package net.pokeranalytics.android.ui.activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.fragment.app.Fragment
import com.google.android.material.bottomnavigation.BottomNavigationView
import kotlinx.android.synthetic.main.activity_home.*
import net.pokeranalytics.android.R
@ -68,7 +69,7 @@ class HomeActivity : PokerAnalyticsActivity() {
else -> ""
}
val fragment = when(index) {
val fragment: Fragment = when(index) {
0 -> HistoryFragment()
1 -> StatsFragment()
else -> SettingsFragment()

@ -9,13 +9,19 @@ import androidx.recyclerview.widget.LinearLayoutManager
import io.realm.RealmResults
import kotlinx.android.synthetic.main.fragment_history.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.ObjectSavable
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.ui.activity.SessionActivity
import net.pokeranalytics.android.ui.adapter.HistoryAdapter
import net.pokeranalytics.android.ui.adapter.components.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDelegate
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.util.data.sessionDao
class HistoryFragment : PokerAnalyticsFragment() {
class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, RowRepresentableDelegate {
companion object {
fun newInstance(): HistoryFragment {
@ -26,8 +32,8 @@ class HistoryFragment : PokerAnalyticsFragment() {
}
}
private lateinit var historyAdapter: HistoryAdapter
private var realmSessions: RealmResults<Session>? = null
private lateinit var historyAdapter: RowRepresentableAdapter
private lateinit var realmSessions: RealmResults<Session>
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_history, container, false)
@ -41,7 +47,7 @@ class HistoryFragment : PokerAnalyticsFragment() {
override fun onDestroyView() {
super.onDestroyView()
realmSessions?.removeAllChangeListeners()
realmSessions.removeAllChangeListeners()
}
/**
@ -70,28 +76,34 @@ class HistoryFragment : PokerAnalyticsFragment() {
* Init data
*/
private fun initData() {
realmSessions = getRealm().sessionDao().findAllSessions()
realmSessions?.let {
val viewManager = LinearLayoutManager(requireContext())
historyAdapter = RowRepresentableAdapter(this, this)
val viewManager = LinearLayoutManager(requireContext())
historyAdapter = HistoryAdapter(it)
recyclerView.apply {
setHasFixedSize(true)
layoutManager = viewManager
adapter = historyAdapter
}
}
recyclerView.apply {
setHasFixedSize(true)
layoutManager = viewManager
adapter = historyAdapter
}
override fun rowRepresentableForPosition(position: Int): RowRepresentable {
return this.realmSessions[position] as RowRepresentable
}
historyAdapter.onClickOnSession = {position, session ->
SessionActivity.newInstance(requireContext(), sessionId = session.id)
}
override fun numberOfRows(): Int {
return this.realmSessions.size
}
it.addChangeListener { newSessions ->
historyAdapter.notifyDataSetChanged()
}
}
override fun viewTypeForPosition(position: Int): Int {
return RowViewType.ROW_SESSION.ordinal
}
override fun indexForRow(row: RowRepresentable): Int {
return this.realmSessions.indexOf(row)
}
override fun onRowSelected(row: RowRepresentable) {
SessionActivity.newInstance(requireContext(), sessionId = (row as ObjectSavable).uniqueIdentifier())
}
}

@ -1,16 +1,131 @@
package net.pokeranalytics.android.ui.fragment.components.bottomsheet
import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import androidx.recyclerview.widget.GridLayoutManager
import kotlinx.android.synthetic.main.bottom_sheet_grid.*
import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.*
import net.pokeranalytics.android.ui.adapter.TableSizeGridAdapter
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.adapter.components.*
import net.pokeranalytics.android.ui.view.GridSpacingItemDecoration
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.util.px
class TableSize(var numberOfPlayer:Int): RowRepresentable {
companion object {
val all = Array(8, init =
{ index -> TableSize(index+2)})
}
override val resId: Int?
get() {
return if (this.numberOfPlayer == 2) {
R.string.heads_up
} else {
R.string.max
}
}
override fun localizedTitle(context: Context): String {
this.resId?.let {
return if (this.numberOfPlayer == 2) {
context.getString(it)
} else {
"$this.numberOfPlayer$context.getString(it)"
}
}
return super.localizedTitle(context)
}
override val viewType: Int
get() = RowViewType.TITLE_GRID.ordinal
}
class BottomSheetTableSizeGridFragment : BottomSheetFragment(), RowRepresentableDataSource, RowRepresentableDelegate {
private lateinit var dataAdapter: RowRepresentableAdapter
private var defaultSize: Int? = null
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initData()
initUI()
}
override fun onResume() {
super.onResume()
dataAdapter.notifyDataSetChanged()
}
override fun getValue(): Any? {
return defaultSize
}
/**
* Init data
*/
private fun initData() {
val bottomSheetData = getData()
if (bottomSheetData.isNotEmpty() && bottomSheetData.first().defaultValue != null) {
defaultSize = bottomSheetData.first().defaultValue as Int?
}
}
/**
* Init UI
*/
private fun initUI() {
setAddButtonVisible(false)
LayoutInflater.from(requireContext())
.inflate(net.pokeranalytics.android.R.layout.bottom_sheet_grid, view?.bottomSheetContainer, true)
val viewManager = GridLayoutManager(requireContext(), 3)
dataAdapter = RowRepresentableAdapter(this, this)
val spanCount = 3
val spacing = 2.px
val includeEdge = false
reyclerView.apply {
setHasFixedSize(true)
layoutManager = viewManager
adapter = dataAdapter
addItemDecoration(GridSpacingItemDecoration(spanCount, spacing, includeEdge))
}
}
override fun rowRepresentableForPosition(position: Int): RowRepresentable {
return TableSize.all[position]
}
override fun indexForRow(row: RowRepresentable): Int {
return TableSize.all.indexOf(row)
}
override fun numberOfRows(): Int {
return TableSize.all.size
}
override fun onRowSelected(row: RowRepresentable) {
bottomSheetDelegate.setValue((this.row as TableSize).numberOfPlayer, this.row)
dismiss()
}
override fun stringForRow(row: RowRepresentable): String {
this.context?.let {
return row.localizedTitle(it)
}
return "UNKNOWN CONTEXT FOR ROW $row"
}
}
/*
class BottomSheetTableSizeGridFragment : BottomSheetFragment() {
private var dataList: ArrayList<String> = ArrayList()
@ -79,4 +194,6 @@ class BottomSheetTableSizeGridFragment : BottomSheetFragment() {
}
}
}
*/

@ -6,11 +6,15 @@ import android.view.ViewGroup
import androidx.appcompat.widget.AppCompatTextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.row_bottom_sheet_grid_title.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_title.view.*
import kotlinx.android.synthetic.main.row_title_value.view.*
import kotlinx.android.synthetic.main.row_title_value_action.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.ui.adapter.TableSizeGridAdapter
import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDataSource
/**
@ -30,7 +34,9 @@ enum class RowViewType {
TITLE_VALUE,
TITLE_VALUE_ACTION,
DATA,
BOTTOM_SHEET_DATA;
BOTTOM_SHEET_DATA,
TITLE_GRID,
ROW_SESSION;
inner class FakeViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
BindableHolder {
@ -38,6 +44,21 @@ enum class RowViewType {
}
}
inner class RowSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
BindableHolder {
override fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource?, listener: View.OnClickListener, actionListener: View.OnClickListener?) {
itemView.sessionRow.setData(row as Session)
itemView.sessionRow.setOnClickListener(listener)
}
}
inner class CellSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder {
override fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource?, listener: View.OnClickListener, actionListener: View.OnClickListener?) {
itemView.title.text = row.localizedTitle(itemView.context)
itemView.container.setOnClickListener(listener)
}
}
inner class DataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder {
override fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource?, listener: View.OnClickListener, actionListener: View.OnClickListener?) {
itemView.findViewById<AppCompatTextView>(R.id.rowTitle_title).text = row.getDisplayName()
@ -147,6 +168,18 @@ enum class RowViewType {
false
)
)
TITLE_GRID -> CellSessionViewHolder(
LayoutInflater.from(parent.context).inflate(
R.layout.row_bottom_sheet_grid_title,
parent,
false)
)
ROW_SESSION -> RowSessionViewHolder(
LayoutInflater.from(parent.context).inflate(
R.layout.row_history_session,
parent,
false)
)
else -> FakeViewHolder(parent)
}
}

Loading…
Cancel
Save