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

feature/top10
Razmig Sarkissian 7 years ago
commit d5f941b7c1
  1. 50
      app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt
  2. 2
      app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt
  3. 3
      app/src/main/java/net/pokeranalytics/android/model/Limit.kt
  4. 3
      app/src/main/java/net/pokeranalytics/android/model/TableSize.kt
  5. 16
      app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt
  6. 6
      app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt
  7. 6
      app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt
  8. 14
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  9. 12
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt
  10. 12
      app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt
  11. 59
      app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt
  12. 21
      app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt
  13. 24
      app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt
  14. 6
      app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt
  15. 52
      app/src/main/java/net/pokeranalytics/android/util/Extensions.kt
  16. 46
      app/src/main/res/layout/fragment_history.xml
  17. 3
      app/src/main/res/layout/fragment_session.xml
  18. 28
      app/src/main/res/layout/row_history_session.xml
  19. 2
      app/src/main/res/layout/row_session_view.xml
  20. 19
      app/src/main/res/values/styles.xml

@ -5,8 +5,11 @@ import io.realm.Realm
import io.realm.RealmConfiguration
import io.realm.RealmResults
import io.realm.kotlin.where
import net.pokeranalytics.android.model.Limit
import net.pokeranalytics.android.model.realm.Game
import net.pokeranalytics.android.model.realm.Result
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.model.realm.TimeFrame
import net.pokeranalytics.android.util.PokerAnalyticsLogs
import timber.log.Timber
import java.util.*
@ -86,6 +89,53 @@ class PokerAnalyticsApplication : Application() {
}
}
if (BuildConfig.DEBUG) {
val sessions = realm.where<Session>().findAll()
if (sessions.size < 10) {
for (index in 0..50) {
realm.executeTransaction {
val session = Session()
session.id = UUID.randomUUID().toString()
val calendar = Calendar.getInstance()
calendar.set(
(2017..2018).random(),
(0..11).random(),
(0..28).random(),
(0..23).random(),
(0..59).random()
)
val startDate = calendar.time
calendar.add(Calendar.HOUR_OF_DAY, (2..12).random())
calendar.add(Calendar.MINUTE, (0..59).random())
val endDate = calendar.time
val timeFrame = TimeFrame()
timeFrame.setDate(startDate, endDate)
session.timeFrame = timeFrame
session.creationDate = startDate
session.limit = Limit.values().random().ordinal
session.game = realm.where<Game>().findAll().random()
val result = Result()
result.buyin = arrayListOf(100, 200, 300, 500, 1000, 2000).random().toDouble()
result.netResult = arrayListOf(
-2500.0, -2000.0, -1500.0, -1000.0, -500.0, 200.0, 1000.0, 1500.0,
2500.0
).random()
session.result = result
realm.copyToRealmOrUpdate(session)
}
}
}
}
realm.close()
}
}

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

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

@ -33,4 +33,7 @@ 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()
}

@ -3,11 +3,14 @@ package net.pokeranalytics.android.model.realm
import android.text.InputType
import io.realm.RealmList
import io.realm.RealmObject
import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.view.BankrollRow
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.*
import net.pokeranalytics.android.ui.view.SimpleRow
import java.util.*
import kotlin.collections.ArrayList
@ -89,7 +92,12 @@ open class Bankroll(name: String = "") : RealmObject(), Savable,
}
}
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()
}

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

@ -2,6 +2,7 @@ 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
@ -71,4 +72,9 @@ open class Location : RealmObject(), Savable, RowRepresentableDataSource, RowRep
override fun isValidForSave(): Boolean {
return this.name.isNotEmpty()
}
@Ignore
override var displayHeader: Boolean = false
@Ignore
override var headerValues: ArrayList<String> = ArrayList()
}

@ -14,12 +14,12 @@ import net.pokeranalytics.android.model.extensions.SessionState
import net.pokeranalytics.android.model.extensions.getState
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.SessionRow
import net.pokeranalytics.android.util.getDuration
import net.pokeranalytics.android.util.round
import net.pokeranalytics.android.util.short
import net.pokeranalytics.android.util.shortDateTime
import net.pokeranalytics.android.util.toCurrency
import timber.log.Timber
import java.util.*
@ -95,6 +95,12 @@ 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
@Ignore
override var headerValues: ArrayList<String> = ArrayList()
/**
* Start a session
*/
@ -283,8 +289,8 @@ open class Session : RealmObject(), SessionInterface, Savable,
SessionRow.LOCATION -> location?.name ?: "--"
SessionRow.BANKROLL -> bankroll?.name ?: "--"
SessionRow.TABLE_SIZE -> tableSize?.toString() ?: "--"
SessionRow.START_DATE -> if (timeFrame != null) timeFrame?.startDate?.short() ?: "--" else "--"
SessionRow.END_DATE -> if (timeFrame != null) timeFrame?.endDate?.short() ?: "--" else "--"
SessionRow.START_DATE -> if (timeFrame != null) timeFrame?.startDate?.shortDateTime() ?: "--" else "--"
SessionRow.END_DATE -> if (timeFrame != null) timeFrame?.endDate?.shortDateTime() ?: "--" else "--"
SessionRow.COMMENT -> if (comment.isNotEmpty()) comment else "--"
else -> "--"
}

@ -2,6 +2,7 @@ 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
@ -62,7 +63,12 @@ open class TournamentFeature : RealmObject(), Savable, RowRepresentableDataSourc
}
}
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()
}

@ -2,6 +2,7 @@ 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
@ -68,9 +69,14 @@ open class TransactionType : RealmObject(), Savable, RowRepresentableDataSource,
}
}
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()
}
enum class TransactionKind {

@ -4,7 +4,6 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager
import io.realm.RealmResults
import io.realm.Sort
@ -20,6 +19,11 @@ import net.pokeranalytics.android.ui.adapter.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.getMonthAndYear
import net.pokeranalytics.android.util.isSameDay
import net.pokeranalytics.android.util.isSameMonth
import net.pokeranalytics.android.util.longDate
import java.util.*
class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource,
RowRepresentableDelegate {
@ -35,6 +39,7 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource,
private lateinit var historyAdapter: RowRepresentableAdapter
private lateinit var realmSessions: RealmResults<Session>
private val sessions: ArrayList<Session> = ArrayList()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_history, container, false)
@ -54,6 +59,10 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource,
override fun onResume() {
super.onResume()
historyAdapter.notifyDataSetChanged()
sessions.clear()
sessions.addAll(getRealm().copyFromRealm(realmSessions))
createSessionsHeaders()
}
/**
@ -61,7 +70,7 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource,
*/
private fun initUI() {
newSession.setOnClickListener {
newCashGame.setOnClickListener {
SessionActivity.newInstance(requireContext(), false)
}
@ -69,13 +78,6 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource,
SessionActivity.newInstance(requireContext(), true)
}
newHand.setOnClickListener {
Toast.makeText(requireContext(), "Open new hand", Toast.LENGTH_SHORT).show()
}
newTransaction.setOnClickListener {
Toast.makeText(requireContext(), "Open new transaction", Toast.LENGTH_SHORT).show()
}
}
/**
@ -83,9 +85,12 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource,
*/
private fun initData() {
realmSessions = getRealm().where<Session>().findAll().sort("timeFrame.startDate", Sort.DESCENDING)
val viewManager = LinearLayoutManager(requireContext())
historyAdapter = RowRepresentableAdapter(this, this)
createSessionsHeaders()
recyclerView.apply {
setHasFixedSize(true)
layoutManager = viewManager
@ -93,12 +98,42 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource,
}
}
/**
* Create the sessions headers
*/
private fun createSessionsHeaders() {
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
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")
}
}
}
}
override fun rowRepresentableForPosition(position: Int): RowRepresentable {
return this.realmSessions[position] as RowRepresentable
return this.sessions[position]
}
override fun numberOfRows(): Int {
return this.realmSessions.size
return this.sessions.size
}
override fun viewTypeForPosition(position: Int): Int {
@ -106,7 +141,7 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource,
}
override fun indexForRow(row: RowRepresentable): Int {
return this.realmSessions.indexOf(row)
return this.sessions.indexOf(row)
}
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {

@ -69,6 +69,10 @@ interface Displayable: Localizable {
get() {
return false
}
var displayHeader: Boolean
var headerValues: ArrayList<String>
}
enum class SessionRow : RowRepresentable {
@ -179,6 +183,9 @@ enum class SessionRow : RowRepresentable {
else -> BottomSheetType.NONE
}
}
override var displayHeader: Boolean = false
override var headerValues: ArrayList<String> = ArrayList()
}
enum class SimpleRow : RowRepresentable {
@ -187,6 +194,8 @@ 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()
}
enum class BankrollRow : RowRepresentable {
@ -212,6 +221,9 @@ enum class BankrollRow : RowRepresentable {
LIVE -> BottomSheetType.NONE
}
}
override var displayHeader: Boolean = false
override var headerValues: ArrayList<String> = ArrayList()
}
enum class GameRow : RowRepresentable {
@ -237,6 +249,9 @@ enum class GameRow : RowRepresentable {
SHORT_NAME -> BottomSheetType.EDIT_TEXT
}
}
override var displayHeader: Boolean = false
override var headerValues: ArrayList<String> = ArrayList()
}
enum class LocationRow : RowRepresentable {
@ -262,6 +277,9 @@ enum class LocationRow : RowRepresentable {
LOCATION_STATUS -> BottomSheetType.NONE
}
}
override var displayHeader: Boolean = false
override var headerValues: ArrayList<String> = ArrayList()
}
enum class TransactionTypeRow : RowRepresentable {
@ -303,4 +321,7 @@ enum class SettingRow : RowRepresentable {
else -> null
}
}
override var displayHeader: Boolean = false
override var headerValues: ArrayList<String> = ArrayList()
}

@ -3,6 +3,7 @@ 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.*
@ -50,13 +51,24 @@ enum class RowViewType {
inner class RowSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
BindableHolder {
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) {
itemView.sessionRow.setData(row as Session)
val listener = View.OnClickListener {
adapter.delegate?.onRowSelected(position, row)
}
itemView.sessionRow.setOnClickListener(listener)
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) {
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 {
adapter.delegate?.onRowSelected(position, row)
}
itemView.sessionRow.setOnClickListener(listener)
}
}
inner class CellSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder {

@ -5,12 +5,14 @@ import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.FrameLayout
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import kotlinx.android.synthetic.main.row_session_view.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.util.getDayNumber
import net.pokeranalytics.android.util.getShortDayName
import net.pokeranalytics.android.util.toCurrency
import timber.log.Timber
class SessionRowView : FrameLayout {
@ -60,6 +62,10 @@ class SessionRowView : FrameLayout {
rowHistorySession.gameInfo.text = session.getDuration(context)
rowHistorySession.gameResult.text = session.result?.netResult?.toCurrency() ?: "$0"
val result = session.result?.netResult ?: 0.0
val resultColor = if (result >= 0.0) R.color.green else R.color.red
rowHistorySession.gameResult.setTextColor(ContextCompat.getColor(context, resultColor))
}
}

@ -35,19 +35,54 @@ fun Double.toCurrency(): String {
return "$ ${formatter.format(this)}"
}
// Calendar
// Return if the calendar dates are in the same month
fun Calendar.isSameMonth(calendar: Calendar): Boolean {
return calendar.get(Calendar.YEAR) == this.get(Calendar.YEAR) &&
calendar.get(Calendar.MONTH) == this.get(Calendar.MONTH)
}
// Return if the calendar dates are in the same day
fun Calendar.isSameDay(calendar: Calendar): Boolean {
return calendar.get(Calendar.YEAR) == this.get(Calendar.YEAR) &&
calendar.get(Calendar.MONTH) == this.get(Calendar.MONTH) &&
calendar.get(Calendar.DAY_OF_MONTH) == this.get(Calendar.DAY_OF_MONTH)
}
// Date
// Return a short string of the date
fun Date.short(): String {
fun Date.shortDate(): String {
return DateFormat.getDateInstance(DateFormat.SHORT).format(this)
}
// Return a short string of the date
fun Date.mediumDate(): String {
return DateFormat.getDateInstance(DateFormat.MEDIUM).format(this)
}
// Return a long string of the date
fun Date.longDate(): String {
return DateFormat.getDateInstance(DateFormat.LONG).format(this)
}
// Return a short string of the date
fun Date.fullDate(): String {
return DateFormat.getDateInstance(DateFormat.FULL).format(this)
}
// Return a short string of the date & time
fun Date.shortDateTime(): String {
return DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(this)
}
// Return a medium string of the date
fun Date.medium(): String {
// Return a medium string of the date & time
fun Date.mediumDateTime(): String {
return DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM).format(this)
}
// Return the full string of the date
fun Date.full(): String {
// Return a long string of the date & time
fun Date.longDateTime(): String {
return DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG).format(this)
}
// Return the full string of the date & time
fun Date.fullDateTime(): String {
return DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL).format(this)
}
// Return the day number of the date
@ -56,8 +91,13 @@ fun Date.getDayNumber() : String {
}
// Return the 3 first letters of the date's day
fun Date.getShortDayName() : String {
return SimpleDateFormat("EE", Locale.getDefault()).format(this)
return SimpleDateFormat("EE", Locale.getDefault()).format(this).substring(0, 3)
}
// Return the month & year of the date
fun Date.getMonthAndYear(): String {
return SimpleDateFormat("MMMM YYYY", Locale.getDefault()).format(this).capitalize()
}
// Return the duration between two dates
fun Date.getDuration(context: Context, toDate: Date) : String {
val difference = (toDate.time - this.time).toInt()

@ -7,6 +7,7 @@
android:layout_height="match_parent"
tools:context=".ui.activity.HomeActivity">
<!--
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/newSession"
android:layout_width="48dp"
@ -17,6 +18,7 @@
android:elevation="4dp"
android:scaleType="fitCenter"
android:src="@drawable/add_cash_game"
android:visibility="gone"
app:layout_constraintEnd_toStartOf="@+id/newTournament"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
@ -31,6 +33,7 @@
android:elevation="4dp"
android:scaleType="fitCenter"
android:src="@drawable/add_tournoi"
android:visibility="gone"
app:layout_constraintEnd_toStartOf="@+id/newHand"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/newSession"
@ -45,6 +48,7 @@
android:elevation="4dp"
android:scaleType="fitCenter"
android:src="@drawable/add_hand"
android:visibility="gone"
app:layout_constraintEnd_toStartOf="@+id/newTransaction"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/newTournament"
@ -60,20 +64,58 @@
android:elevation="4dp"
android:scaleType="fitCenter"
android:src="@drawable/add_transaction"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/newHand"
app:layout_constraintTop_toTopOf="@+id/newSession" />
-->
<com.google.android.material.button.MaterialButton
android:id="@+id/newCashGame"
style="@style/PokerAnalyticsTheme.Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:text="@string/new_cash_game"
app:icon="@drawable/add_cash_game"
app:iconSize="32dp"
app:layout_constraintEnd_toStartOf="@+id/newTournament"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintHorizontal_chainStyle="spread"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.button.MaterialButton
android:id="@+id/newTournament"
style="@style/PokerAnalyticsTheme.Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:text="@string/new_tournament"
app:icon="@drawable/add_tournoi"
app:iconSize="32dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/newCashGame"
app:layout_constraintTop_toTopOf="parent" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="16dp"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/newHand"
app:layout_constraintTop_toBottomOf="@+id/newCashGame"
tools:listitem="@layout/row_history_session" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -159,6 +159,7 @@
android:layout_gravity="bottom|center"
android:layout_marginBottom="28dp"
android:elevation="16dp"
android:src="@drawable/ic_outline_play" />
android:src="@drawable/ic_outline_play"
android:tint="@color/black" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

@ -1,12 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<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/sessionHeader"
style="@style/PokerAnalyticsTheme.TextView.SessionHeader"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:visibility="gone"
tools:text="Header"
tools:visibility="visible" />
<net.pokeranalytics.android.ui.view.SessionRowView
android:id="@+id/sessionRow"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
android:id="@+id/sessionRow"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</FrameLayout>
</LinearLayout>

@ -40,7 +40,7 @@
style="@style/PokerAnalyticsTheme.TextView.SessionRow.Title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
app:layout_constraintBottom_toTopOf="@+id/gameInfo"

@ -101,6 +101,14 @@
</style>
<!-- Session Row -->
<style name="PokerAnalyticsTheme.TextView.SessionHeader">
<item name="android:textColor">@color/kaki_medium</item>
<item name="android:maxLines">1</item>
<item name="android:ellipsize">end</item>
<item name="android:fontFamily">@font/roboto_bold</item>
<item name="android:textSize">16sp</item>
</style>
<style name="PokerAnalyticsTheme.TextView.SessionRow">
<item name="android:textColor">@color/white</item>
<item name="android:maxLines">1</item>
@ -154,6 +162,17 @@
</style>
<!-- Button -->
<style name="PokerAnalyticsTheme.Button" parent="Widget.MaterialComponents.Button">
<item name="iconPadding">0dp</item>
<item name="iconTint">@color/black</item>
<item name="android:letterSpacing">-0.02</item>
<item name="android:fontFamily">@font/roboto_medium</item>
<item name="android:textColor">@color/black</item>
<item name="android:paddingStart">4dp</item>
<item name="android:paddingEnd">8dp</item>
<item name="android:textSize">12sp</item>
</style>
<style name="PokerAnalyticsTheme.Button.Borderless" parent="Widget.MaterialComponents.Button">
<item name="android:background">?selectableItemBackgroundBorderless</item>
<item name="android:textColor">@color/green</item>

Loading…
Cancel
Save