parent
66730eb43e
commit
2d2a7aa446
@ -0,0 +1,49 @@ |
||||
package net.pokeranalytics.android.model.handhistory |
||||
|
||||
import net.pokeranalytics.android.exceptions.PAIllegalStateException |
||||
import net.pokeranalytics.android.model.realm.handhistory.Card |
||||
|
||||
interface BoardChangedListener { |
||||
fun boardChanged() |
||||
} |
||||
|
||||
class BoardManager(cards: List<Card>, var listener: BoardChangedListener) { |
||||
|
||||
private var sortedBoardCards: MutableList<Card> = mutableListOf() |
||||
|
||||
val allCards: List<Card> |
||||
get() { |
||||
return this.sortedBoardCards |
||||
} |
||||
|
||||
init { |
||||
this.sortedBoardCards = cards.sortedBy { it.index }.toMutableList() |
||||
} |
||||
|
||||
fun add(card: Card) { |
||||
|
||||
if (this.sortedBoardCards.size == 5) { |
||||
throw PAIllegalStateException("Can't add anymore cards") |
||||
} |
||||
|
||||
card.index = this.sortedBoardCards.size |
||||
|
||||
this.sortedBoardCards.add(card) |
||||
this.listener.boardChanged() |
||||
} |
||||
|
||||
fun clearStreet(street: Street) { |
||||
this.sortedBoardCards.removeAll { it.street == street } |
||||
this.listener.boardChanged() |
||||
} |
||||
|
||||
fun lastCard(street: Street) : Card? { |
||||
return this.sortedBoardCards.lastOrNull { it.street == street } |
||||
} |
||||
|
||||
fun remove(card: Card) { |
||||
this.sortedBoardCards.remove(card) |
||||
this.listener.boardChanged() |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,62 @@ |
||||
package net.pokeranalytics.android.ui.modules.handhistory.views |
||||
|
||||
import android.view.LayoutInflater |
||||
import android.view.ViewGroup |
||||
import androidx.recyclerview.widget.RecyclerView |
||||
import net.pokeranalytics.android.R |
||||
import net.pokeranalytics.android.model.realm.handhistory.Card |
||||
import net.pokeranalytics.android.ui.adapter.BindableHolder |
||||
import net.pokeranalytics.android.ui.adapter.RecyclerAdapter |
||||
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource |
||||
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate |
||||
import net.pokeranalytics.android.ui.view.RowRepresentable |
||||
import net.pokeranalytics.android.ui.view.RowViewType |
||||
import net.pokeranalytics.android.ui.view.holder.RowViewHolder |
||||
import timber.log.Timber |
||||
|
||||
class CardSuitAdapter(var keyboardListener: KeyboardListener) : |
||||
RecyclerView.Adapter<RecyclerView.ViewHolder>(), |
||||
RowRepresentableDataSource, RowRepresentableDelegate, RecyclerAdapter { |
||||
|
||||
override var dataSource: RowRepresentableDataSource = this |
||||
override var delegate: RowRepresentableDelegate? = this |
||||
|
||||
private val suits = Card.Suit.values().toList() |
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { |
||||
val layout = LayoutInflater.from(parent.context).inflate(R.layout.row_cell, parent, false) |
||||
return RowViewHolder(layout) |
||||
} |
||||
|
||||
override fun getItemCount(): Int { |
||||
return this.suits.size |
||||
} |
||||
|
||||
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { |
||||
this.rowRepresentableForPosition(position)?.let { |
||||
(holder as BindableHolder).onBind(position, it, this) |
||||
} |
||||
} |
||||
|
||||
override fun adapterRows(): List<RowRepresentable>? { |
||||
return this.suits |
||||
} |
||||
|
||||
override fun rowRepresentableForPosition(position: Int): RowRepresentable? { |
||||
return this.suits[position] |
||||
} |
||||
|
||||
override fun numberOfRows(): Int { |
||||
return this.suits.size |
||||
} |
||||
|
||||
override fun viewTypeForPosition(position: Int): Int { |
||||
return RowViewType.TITLE_GRID.ordinal |
||||
} |
||||
|
||||
override fun onRowSelected(position: Int, row: RowRepresentable, tag: Int) { |
||||
Timber.d("/////onRowSelected") |
||||
keyboardListener.cardSuitSelected(this.suits[position]) |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,60 @@ |
||||
package net.pokeranalytics.android.ui.modules.handhistory.views |
||||
|
||||
import android.view.LayoutInflater |
||||
import android.view.ViewGroup |
||||
import androidx.recyclerview.widget.RecyclerView |
||||
import net.pokeranalytics.android.R |
||||
import net.pokeranalytics.android.model.realm.handhistory.Card |
||||
import net.pokeranalytics.android.ui.adapter.BindableHolder |
||||
import net.pokeranalytics.android.ui.adapter.RecyclerAdapter |
||||
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource |
||||
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate |
||||
import net.pokeranalytics.android.ui.view.RowRepresentable |
||||
import net.pokeranalytics.android.ui.view.RowViewType |
||||
import net.pokeranalytics.android.ui.view.holder.RowViewHolder |
||||
import timber.log.Timber |
||||
|
||||
class CardValueAdapter(var keyboardListener: KeyboardListener) : |
||||
RecyclerView.Adapter<RecyclerView.ViewHolder>(), |
||||
RowRepresentableDataSource, RowRepresentableDelegate, RecyclerAdapter { |
||||
|
||||
override var dataSource: RowRepresentableDataSource = this |
||||
override var delegate: RowRepresentableDelegate? = this |
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { |
||||
val layout = LayoutInflater.from(parent.context).inflate(R.layout.row_cell, parent, false) |
||||
return RowViewHolder(layout) |
||||
} |
||||
|
||||
override fun getItemCount(): Int { |
||||
return Card.Value.values.size |
||||
} |
||||
|
||||
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { |
||||
this.rowRepresentableForPosition(position)?.let { |
||||
(holder as BindableHolder).onBind(position, it, this) |
||||
} |
||||
} |
||||
|
||||
override fun adapterRows(): List<RowRepresentable>? { |
||||
return Card.Value.values |
||||
} |
||||
|
||||
override fun rowRepresentableForPosition(position: Int): RowRepresentable? { |
||||
return Card.Value.values[position] |
||||
} |
||||
|
||||
override fun numberOfRows(): Int { |
||||
return Card.Value.values.size |
||||
} |
||||
|
||||
override fun viewTypeForPosition(position: Int): Int { |
||||
return RowViewType.TITLE_GRID.ordinal |
||||
} |
||||
|
||||
override fun onRowSelected(position: Int, row: RowRepresentable, tag: Int) { |
||||
Timber.d("/////onRowSelected") |
||||
keyboardListener.cardValueSelected(Card.Value.values[position]) |
||||
} |
||||
|
||||
} |
||||
@ -1,7 +1,67 @@ |
||||
package net.pokeranalytics.android.ui.modules.handhistory.views |
||||
|
||||
import android.content.Context |
||||
import android.view.LayoutInflater |
||||
import androidx.recyclerview.widget.GridLayoutManager |
||||
import androidx.recyclerview.widget.LinearLayoutManager |
||||
import androidx.recyclerview.widget.RecyclerView |
||||
import kotlinx.android.synthetic.main.view_hand_keyboard_action.view.closeButton |
||||
import kotlinx.android.synthetic.main.view_hand_keyboard_card.view.* |
||||
import net.pokeranalytics.android.R |
||||
import net.pokeranalytics.android.exceptions.PAIllegalStateException |
||||
|
||||
class KeyboardCardView(context: Context) : AbstractKeyboardView(context) { |
||||
|
||||
private lateinit var cardValueAdapter: CardValueAdapter |
||||
private lateinit var cardSuitAdapter: CardSuitAdapter |
||||
|
||||
init { |
||||
|
||||
LayoutInflater.from(context) |
||||
.inflate(R.layout.view_hand_keyboard_card, this, true) |
||||
|
||||
this.nextButton.setOnClickListener { |
||||
this.keyboardListener?.cardSelectionEnded() |
||||
} |
||||
|
||||
this.clearButton.setOnClickListener { |
||||
this.keyboardListener?.clearCards() |
||||
} |
||||
|
||||
this.closeButton.setOnClickListener { |
||||
this.keyboardListener?.closeKeyboard() |
||||
} |
||||
|
||||
this.backSpaceButton.setOnClickListener { |
||||
this.keyboardListener?.cardBackSpaceSelected() |
||||
} |
||||
|
||||
} |
||||
|
||||
override fun onListenerSet(listener: KeyboardListener) { |
||||
|
||||
// Position Recycler |
||||
this.keyboardListener?.let { |
||||
this.cardValueAdapter = CardValueAdapter(it) |
||||
this.cardSuitAdapter = CardSuitAdapter(it) |
||||
} ?: throw PAIllegalStateException("keyboard listener not set") |
||||
|
||||
val cardValueViewManager = GridLayoutManager(this.context, 7) |
||||
this.valueRecyclerView.apply { |
||||
setHasFixedSize(true) |
||||
layoutManager = cardValueViewManager |
||||
adapter = cardValueAdapter |
||||
// addItemDecoration(GridSpacingItemDecoration(spanCount, spacing, includeEdge)) |
||||
} |
||||
|
||||
val cardSuitViewManager = LinearLayoutManager(context, RecyclerView.HORIZONTAL, false) |
||||
this.suitRecyclerView.apply { |
||||
setHasFixedSize(true) |
||||
layoutManager = cardSuitViewManager |
||||
adapter = cardSuitAdapter |
||||
// addItemDecoration(GridSpacingItemDecoration(spanCount, spacing, includeEdge)) |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue