Creates HH row for the feed

hh
Laurent 6 years ago
parent 6b15412b45
commit 12dc039a1b
  1. 50
      app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/Card.kt
  2. 55
      app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/HandHistory.kt
  3. 16
      app/src/main/java/net/pokeranalytics/android/ui/adapter/FeedHandHistoryRowRepresentableAdapter.kt
  4. 6
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/views/RowHandHistoryViewHolder.kt
  5. 47
      app/src/main/java/net/pokeranalytics/android/ui/view/HandHistoryRowView.kt
  6. 3
      app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt
  7. 7
      app/src/main/res/drawable/rounded_background.xml
  8. 3
      app/src/main/res/layout/row_hand_history.xml
  9. 93
      app/src/main/res/layout/row_hand_history_view.xml
  10. 12
      app/src/main/res/layout/view_card.xml
  11. 7
      app/src/main/res/layout/view_card_separator.xml
  12. 3
      app/src/main/res/values/colors.xml
  13. 6
      app/src/main/res/values/styles.xml

@ -4,6 +4,10 @@ import android.content.Context
import android.text.SpannableString import android.text.SpannableString
import android.text.TextUtils import android.text.TextUtils
import android.text.style.ForegroundColorSpan import android.text.style.ForegroundColorSpan
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.widget.AppCompatTextView
import io.realm.Realm import io.realm.Realm
import io.realm.RealmObject import io.realm.RealmObject
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
@ -14,6 +18,9 @@ import net.pokeranalytics.android.ui.view.RowViewType
interface CardProperty interface CardProperty
/***
* Returns a CharSequence containing each card representation
*/
fun List<Card>.formatted(context: Context) : CharSequence? { fun List<Card>.formatted(context: Context) : CharSequence? {
var span: CharSequence? = null var span: CharSequence? = null
this.forEach { this.forEach {
@ -40,6 +47,10 @@ open class Card : RealmObject() {
} }
} }
/***
* The Value of a Card
* Can represent all values from Deuce to Ace, or a blank
*/
class Value(var value: Int?) : CardProperty, RowRepresentable { class Value(var value: Int?) : CardProperty, RowRepresentable {
companion object { companion object {
@ -61,7 +72,6 @@ open class Card : RealmObject() {
else -> "X" else -> "X"
} }
} }
} }
override fun getDisplayName(context: Context): String { override fun getDisplayName(context: Context): String {
@ -99,10 +109,10 @@ open class Card : RealmObject() {
val color: Int val color: Int
get() { get() {
return when (this) { return when (this) {
UNDEFINED -> R.color.white UNDEFINED -> R.color.grey
SPADES -> R.color.white_dark SPADES -> R.color.black
HEART -> R.color.red HEART -> R.color.red
DIAMOND -> R.color.diamond DIAMOND -> R.color.blue
CLOVER -> R.color.clover CLOVER -> R.color.clover
} }
} }
@ -117,7 +127,7 @@ open class Card : RealmObject() {
/*** /***
* The card value: 2..A * The card value: 2..A
* 0: undefined * can be undefined
*/ */
var value: Int? = null var value: Int? = null
@ -148,9 +158,12 @@ open class Card : RealmObject() {
*/ */
var index: Int = 0 var index: Int = 0
/***
* Returns the street where the card belongs based on its [index]
*/
val street: Street val street: Street
get() { get() {
return when (index) { return when (this.index) {
in 0..2 -> Street.FLOP in 0..2 -> Street.FLOP
3 -> Street.TURN 3 -> Street.TURN
4 -> Street.RIVER 4 -> Street.RIVER
@ -159,18 +172,35 @@ open class Card : RealmObject() {
} }
/*** /***
* Formats the Card into a Spannable String with the appropriate color * Formats the Card into a Spannable String with the appropriate color for the card suit
* [lineBreak] adds "\n" between the value and the suit
*/ */
fun formatted(context: Context) : SpannableString { fun formatted(context: Context, lineBreak: Boolean = false) : SpannableString {
val spannable = SpannableString(this.formattedValue + Suit.format(this.suit)) val suit = Suit.format(this.suit)
val spannable = if (lineBreak) {
SpannableString(this.formattedValue + "\n" + suit)
} else {
SpannableString(this.formattedValue + suit)
}
val suitStart = spannable.indexOf(suit)
spannable.setSpan( spannable.setSpan(
ForegroundColorSpan(context.getColor(Suit.color(this.suit))), ForegroundColorSpan(context.getColor(Suit.color(this.suit))),
0, suitStart,
spannable.length, spannable.length,
SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE
) )
return spannable return spannable
} }
/***
* Returns a view showing the card [value] and [suit]
*/
fun view(context: Context, layoutInflater: LayoutInflater, root: ViewGroup): View {
val textView = layoutInflater.inflate(R.layout.view_card, root, false) as AppCompatTextView
textView.text = this.formatted(context, true)
return textView
}
} }

@ -1,6 +1,10 @@
package net.pokeranalytics.android.model.realm.handhistory package net.pokeranalytics.android.model.realm.handhistory
import android.content.Context import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.widget.AppCompatTextView
import io.realm.RealmList import io.realm.RealmList
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.annotations.Ignore import io.realm.annotations.Ignore
@ -306,4 +310,55 @@ open class HandHistory : RealmObject(), RowRepresentable, Identifiable, Filterab
return actionItems.joinToString(" ") return actionItems.joinToString(" ")
} }
/***
* Creates a list of cards for the hand history to give a representation of the hand
* We will try to add a minimum of 5 cards using by priority:
* - the hero hand
* - the opponents hands
* - the board
*/
fun cardViews(context: Context, viewGroup: ViewGroup): List<View> {
val views = mutableListOf<View>()
val layoutInflater = LayoutInflater.from(context)
// Create all the possible cards list: hero, opponents, board
val cardSets = mutableListOf<List<Card>>()
// Hero
this.heroIndex?.let { hIndex ->
this.playerSetupForPosition(hIndex)?.cards?.let {
cardSets.add(it)
}
}
// Opponents
this.playerSetups.filter { it.cards.isNotEmpty() && it.position != this.heroIndex }.forEach {
cardSets.add(it.cards)
}
// Board
cardSets.add(this.board)
// Try to add cards while we haven't reach at least 4
while (views.size < 5 && cardSets.isNotEmpty()) {
val cardSet = cardSets.removeAt(0)
if (views.isNotEmpty() && cardSet.isNotEmpty()) { // add separator with previous set of cards
views.add(layoutInflater.inflate(R.layout.view_card_separator, viewGroup) as AppCompatTextView)
}
cardSet.forEach { views.add(it.view(context, layoutInflater, viewGroup)) }
}
// Add 5 blank cards if no card has been added
if (views.isEmpty()) {
val blankCard = Card()
(1..5).forEach { _ ->
val view = blankCard.view(context, layoutInflater, viewGroup)
view.setBackgroundColor(context.getColor(R.color.kaki_light))
views.add(view)
}
}
return views
}
} }

@ -38,6 +38,14 @@ class FeedHandHistoryRowRepresentableAdapter(
inner class RowHandHistoryViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), inner class RowHandHistoryViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
BindableHolder { BindableHolder {
// override fun onBind(position: Int, row: RowRepresentable, adapter: RecyclerAdapter) {
// itemView.handHistoryRow.setData(row as HandHistory)
// val listener = View.OnClickListener {
// adapter.delegate?.onRowSelected(position, row)
// }
// itemView.handHistoryRow.setOnClickListener(listener)
// }
fun bind(position: Int, row: HandHistory?, adapter: FeedHandHistoryRowRepresentableAdapter) { fun bind(position: Int, row: HandHistory?, adapter: FeedHandHistoryRowRepresentableAdapter) {
itemView.handHistoryRow.setData(row as HandHistory) itemView.handHistoryRow.setData(row as HandHistory)
@ -62,8 +70,8 @@ class FeedHandHistoryRowRepresentableAdapter(
} }
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return if (viewType == RowViewType.ROW_TRANSACTION.ordinal) { return if (viewType == RowViewType.HAND_HISTORY.ordinal) {
val layout = LayoutInflater.from(parent.context).inflate(R.layout.row_transaction, parent, false) val layout = LayoutInflater.from(parent.context).inflate(R.layout.row_hand_history, parent, false)
RowHandHistoryViewHolder(layout) RowHandHistoryViewHolder(layout)
} else { } else {
val layout = LayoutInflater.from(parent.context).inflate(R.layout.row_header_title, parent, false) val layout = LayoutInflater.from(parent.context).inflate(R.layout.row_header_title, parent, false)
@ -77,8 +85,8 @@ class FeedHandHistoryRowRepresentableAdapter(
return if (sortedHeaders.containsKey(position)) { return if (sortedHeaders.containsKey(position)) {
RowViewType.HEADER_TITLE.ordinal RowViewType.HEADER_TITLE.ordinal
} else { } else {
1 // 1
// RowViewType.ROW_HAND_HISTORY.ordinal RowViewType.HAND_HISTORY.ordinal
} }
} }

@ -5,18 +5,20 @@ import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.row_hand_history.view.* import kotlinx.android.synthetic.main.row_hand_history.view.*
import net.pokeranalytics.android.model.realm.handhistory.HandHistory import net.pokeranalytics.android.model.realm.handhistory.HandHistory
import net.pokeranalytics.android.ui.adapter.BindableHolder import net.pokeranalytics.android.ui.adapter.BindableHolder
import net.pokeranalytics.android.ui.adapter.FeedHandHistoryRowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RecyclerAdapter
import net.pokeranalytics.android.ui.view.RowRepresentable
class RowHandHistoryViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), class RowHandHistoryViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
BindableHolder { BindableHolder {
fun bind(position: Int, row: HandHistory?, adapter: FeedHandHistoryRowRepresentableAdapter) { override fun onBind(position: Int, row: RowRepresentable, adapter: RecyclerAdapter) {
itemView.handHistoryRow.setData(row as HandHistory) itemView.handHistoryRow.setData(row as HandHistory)
val listener = View.OnClickListener { val listener = View.OnClickListener {
adapter.delegate?.onRowSelected(position, row) adapter.delegate?.onRowSelected(position, row)
} }
itemView.handHistoryRow.setOnClickListener(listener) itemView.handHistoryRow.setOnClickListener(listener)
} }
} }

@ -5,11 +5,13 @@ import android.util.AttributeSet
import android.view.LayoutInflater import android.view.LayoutInflater
import android.widget.FrameLayout import android.widget.FrameLayout
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import kotlinx.android.synthetic.main.row_transaction_view.view.* import io.realm.Realm
import kotlinx.android.synthetic.main.row_hand_history_view.view.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.handhistory.Street
import net.pokeranalytics.android.model.realm.handhistory.Card
import net.pokeranalytics.android.model.realm.handhistory.HandHistory import net.pokeranalytics.android.model.realm.handhistory.HandHistory
import net.pokeranalytics.android.util.extensions.getDayNumber import net.pokeranalytics.android.util.extensions.formatted
import net.pokeranalytics.android.util.extensions.getShortDayName
/** /**
* Display a transaction row * Display a transaction row
@ -48,9 +50,44 @@ class HandHistoryRowView : FrameLayout {
*/ */
fun setData(handHistory: HandHistory) { fun setData(handHistory: HandHistory) {
rowHandHistory.cardsLayout.removeAllViews()
val realm = Realm.getDefaultInstance()
realm.executeTransaction {
val list = listOf(Card.newInstance(it, null, Card.Suit.CLOVER),
Card.newInstance(Realm.getDefaultInstance(), 12, Card.Suit.HEART)
)
list.forEach { card ->
val view = card.view(context, LayoutInflater.from(context), rowHandHistory.cardsLayout)
rowHandHistory.cardsLayout.addView(view)
}
LayoutInflater.from(context).inflate(R.layout.view_card_separator, rowHandHistory.cardsLayout)
val list2 = listOf(Card.newInstance(it, null, Card.Suit.CLOVER),
Card.newInstance(Realm.getDefaultInstance(), 12, Card.Suit.HEART)
)
list2.forEach { card ->
val view = card.view(context, LayoutInflater.from(context), rowHandHistory.cardsLayout)
rowHandHistory.cardsLayout.addView(view)
}
}
// handHistory.cardViews(context).forEach { view ->
// rowHandHistory.cardsLayout.addView(view)
// }
rowHandHistory.amount.text = handHistory.potSizeForStreet(Street.SUMMARY).formatted()
// Date // Date
rowHandHistory.transactionDateDay.text = handHistory.date.getShortDayName() // rowHandHistory.transactionDateDay.text = handHistory.date.getShortDayName()
rowHandHistory.transactionDateNumber.text = handHistory.date.getDayNumber() // rowHandHistory.transactionDateNumber.text = handHistory.date.getDayNumber()
// Title / Game type // Title / Game type
// var title = handHistory.type?.name ?: "" + " " + handHistory.comment // var title = handHistory.type?.name ?: "" + " " + handHistory.comment

@ -35,6 +35,7 @@ import net.pokeranalytics.android.ui.extensions.setTextFormat
import net.pokeranalytics.android.ui.fragment.BankrollRowRepresentable import net.pokeranalytics.android.ui.fragment.BankrollRowRepresentable
import net.pokeranalytics.android.ui.graph.AxisFormatting import net.pokeranalytics.android.ui.graph.AxisFormatting
import net.pokeranalytics.android.ui.graph.setStyle import net.pokeranalytics.android.ui.graph.setStyle
import net.pokeranalytics.android.ui.modules.handhistory.views.RowHandHistoryViewHolder
import net.pokeranalytics.android.ui.view.holder.RowViewHolder import net.pokeranalytics.android.ui.view.holder.RowViewHolder
import net.pokeranalytics.android.ui.view.rowrepresentable.* import net.pokeranalytics.android.ui.view.rowrepresentable.*
import net.pokeranalytics.android.util.extensions.longDate import net.pokeranalytics.android.util.extensions.longDate
@ -86,6 +87,7 @@ enum class RowViewType(private var layoutRes: Int) : ViewIdentifier {
LIST(R.layout.row_list), LIST(R.layout.row_list),
ROW_PLAYER(R.layout.row_player), ROW_PLAYER(R.layout.row_player),
ROW_PLAYER_IMAGE(R.layout.row_player_image), ROW_PLAYER_IMAGE(R.layout.row_player_image),
HAND_HISTORY(R.layout.row_hand_history_view),
// ROW_HAND_ACTION(R.layout.row_hand_action), // ROW_HAND_ACTION(R.layout.row_hand_action),
// ROW_HAND_STREET(R.layout.row_hand_cards), // ROW_HAND_STREET(R.layout.row_hand_cards),
@ -142,6 +144,7 @@ enum class RowViewType(private var layoutRes: Int) : ViewIdentifier {
LEGEND_DEFAULT -> LegendDefaultViewHolder(layout) LEGEND_DEFAULT -> LegendDefaultViewHolder(layout)
// Hand History // Hand History
HAND_HISTORY -> RowHandHistoryViewHolder(layout)
// ROW_HAND_HISTORY -> RowHandHistoryViewHolder(layout) // ROW_HAND_HISTORY -> RowHandHistoryViewHolder(layout)
// ROW_HAND_ACTION -> RowHandAction(layout) // ROW_HAND_ACTION -> RowHandAction(layout)
// ROW_HAND_STREET -> RowHandStreet(layout) // ROW_HAND_STREET -> RowHandStreet(layout)

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF"/>
<!-- <stroke android:width="3dp" android:color="#B1BCBE" />-->
<corners android:radius="6dp"/>
<padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" />
</shape>

@ -2,7 +2,8 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:orientation="vertical"
android:padding="4dp">
<net.pokeranalytics.android.ui.view.HandHistoryRowView <net.pokeranalytics.android.ui.view.HandHistoryRowView
android:id="@+id/handHistoryRow" android:id="@+id/handHistoryRow"

@ -6,78 +6,51 @@
android:layout_height="56dp" android:layout_height="56dp"
android:background="?selectableItemBackground"> android:background="?selectableItemBackground">
<androidx.appcompat.widget.AppCompatTextView <LinearLayout
android:id="@+id/transactionDateDay" android:id="@+id/cardsLayout"
style="@style/PokerAnalyticsTheme.TextView.SessionRow.Date" android:orientation="horizontal"
android:layout_width="32dp" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:gravity="center"
android:textAllCaps="true"
app:fontFamily="@font/roboto_mono_medium"
app:layout_constraintBottom_toTopOf="@+id/transactionDateNumber"
app:layout_constraintStart_toStartOf="@+id/guidelineStart"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed"
tools:text="THU" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/transactionDateNumber"
style="@style/PokerAnalyticsTheme.TextView.SessionRow.DateNumber"
android:layout_width="32dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="8dp" android:layout_marginStart="16dp"
android:gravity="center" android:gravity="center_vertical"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/transactionDateDay"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="@+id/transactionDateDay"
app:layout_constraintTop_toBottomOf="@+id/transactionDateDay"
tools:text="21" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/transactionTitle"
style="@style/PokerAnalyticsTheme.TextView.SessionRow.Title"
android:layout_width="0dp"
android:layout_height="24dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
app:layout_constraintBottom_toTopOf="@+id/transactionSubtitle"
app:layout_constraintEnd_toStartOf="@+id/transactionAmount"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/transactionDateDay"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed" app:layout_constraintStart_toStartOf="parent" />
tools:text="Deposit: Live" />
<!-- <androidx.appcompat.widget.AppCompatTextView-->
<!-- android:layout_width="24dp"-->
<!-- android:layout_height="42dp"-->
<!-- style="@style/PokerAnalyticsTheme.CardTextView"-->
<!-- android:textColor="@color/black"-->
<!-- android:background="@drawable/rounded_background"-->
<!-- android:text="5\n♣"-->
<!-- android:gravity="center"-->
<!-- android:layout_marginEnd="4dp"-->
<!-- android:lines="2"-->
<!-- />-->
<androidx.appcompat.widget.AppCompatTextView <!-- <androidx.appcompat.widget.AppCompatTextView-->
android:id="@+id/transactionSubtitle" <!-- android:layout_width="24dp"-->
android:layout_width="0dp" <!-- android:layout_height="42dp"-->
android:layout_height="wrap_content" <!-- style="@style/PokerAnalyticsTheme.CardTextView"-->
android:layout_marginEnd="8dp" <!-- android:textColor="@color/black"-->
android:layout_marginBottom="2dp" <!-- android:background="@drawable/rounded_background"-->
android:ellipsize="end" <!-- android:text="A\n♥"-->
android:fontFamily="@font/roboto" <!-- android:gravity="center"-->
android:maxLines="1" <!-- android:lines="2"-->
android:textColor="@color/kaki_lighter" <!-- />-->
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="parent" <!-- </LinearLayout>-->
app:layout_constraintEnd_toStartOf="@+id/transactionAmount"
app:layout_constraintStart_toStartOf="@+id/transactionTitle"
app:layout_constraintTop_toBottomOf="@+id/transactionTitle"
tools:text="Live"
tools:visibility="visible" />
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/transactionAmount" android:id="@+id/amount"
style="@style/PokerAnalyticsTheme.TextView.SessionRow.Result" style="@style/PokerAnalyticsTheme.TextView.SessionRow.Result"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
app:layout_constraintBottom_toBottomOf="@+id/transactionSubtitle"
app:layout_constraintEnd_toStartOf="@+id/nextArrow" app:layout_constraintEnd_toStartOf="@+id/nextArrow"
app:layout_constraintTop_toTopOf="@+id/transactionTitle" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="$ 1000" /> tools:text="$ 1000" />
<ImageView <ImageView

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.AppCompatTextView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
style="@style/PokerAnalyticsTheme.CardTextView"
android:layout_width="24dp"
android:layout_height="42dp"
android:layout_marginEnd="4dp"
android:background="@drawable/rounded_background"
android:gravity="center"
android:lines="2"
tools:text="5\n♣" />

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="1dp"
android:layout_height="36dp"
android:layout_marginStart="4dp"
android:layout_marginEnd="8dp"
android:background="@color/kaki" />

@ -38,6 +38,7 @@
<color name="blue">#1b8ec8</color> <color name="blue">#1b8ec8</color>
<color name="purple">#8e35c8</color> <color name="purple">#8e35c8</color>
<color name="grey">#999999</color>
<color name="chart_default">#5c7258</color> <color name="chart_default">#5c7258</color>
<color name="chart_highlight_indicator">#f8ffe5</color> <color name="chart_highlight_indicator">#f8ffe5</color>
@ -55,6 +56,6 @@
<color name="player_color_9">#ff971e</color> <color name="player_color_9">#ff971e</color>
<color name="diamond">#ff971e</color> <color name="diamond">#ff971e</color>
<color name="clover">#71fb94</color> <color name="clover">#479E5D</color>
</resources> </resources>

@ -24,6 +24,12 @@
</style> </style>
<!-- Defaults -->
<style name="PokerAnalyticsTheme.CardTextView">
<item name="android:textSize">16sp</item>
<item name="android:textColor">@color/black</item>
<item name="android:fontFamily">@font/roboto_bold</item>
</style>
<!-- Defaults --> <!-- Defaults -->
<style name="PokerAnalyticsTheme.DefaultText"> <style name="PokerAnalyticsTheme.DefaultText">

Loading…
Cancel
Save