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 |
package net.pokeranalytics.android.ui.modules.handhistory.views |
||||||
|
|
||||||
import android.content.Context |
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) { |
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