diff --git a/app/src/main/java/net/pokeranalytics/android/model/handhistory/HHBuilder.kt b/app/src/main/java/net/pokeranalytics/android/model/handhistory/HHBuilder.kt index 100552f3..c83c9091 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/handhistory/HHBuilder.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/handhistory/HHBuilder.kt @@ -6,6 +6,7 @@ import net.pokeranalytics.android.model.realm.handhistory.Action import net.pokeranalytics.android.model.realm.handhistory.HandHistory import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType +import net.pokeranalytics.android.ui.view.handhistory.HandHistoryKeyboard import net.pokeranalytics.android.ui.view.handhistory.StreetHeader import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable import java.util.* @@ -138,7 +139,7 @@ class HHBuilder { * for convenience we remove all the following actions to avoid managing complex cases * Also calculates the player effective amounts in proper cases */ - private fun selectAction(index: Int, actionType: Action.Type) : Boolean { + fun selectAction(index: Int, actionType: Action.Type) : Boolean { val computedAction = this.actionForIndex(index) computedAction.action.type = actionType @@ -178,7 +179,7 @@ class HHBuilder { * Sets the amount for the action at the provided [index] * In the case of an UNDEFINED_ALLIN, define if it's a RAISE_ALLIN or a CALL_ALLIN */ - private fun setAmount(index: Int, amount: Double) { + fun setAmount(index: Int, amount: Double) { val computedAction = this.actionForIndex(index) val revisedAmount = computedAction.playerRemainingStack?.let { min(it, amount) } ?: amount @@ -298,4 +299,11 @@ class HHBuilder { return rows } + /*** + * Finds the index of the first incomplete action, if existing + */ + fun findIndexForEdition(): Pair? { + return Pair(2, HandHistoryKeyboard.ACTION) // TODO implement + } + } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/Action.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/Action.kt index fe91f2f7..a7691184 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/Action.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/Action.kt @@ -3,10 +3,12 @@ package net.pokeranalytics.android.model.realm.handhistory import io.realm.RealmObject import net.pokeranalytics.android.R import net.pokeranalytics.android.exceptions.PAIllegalStateException +import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.ui.view.RowViewType open class Action : RealmObject() { - enum class Type(var resId: Int) { + enum class Type(override var resId: Int) : RowRepresentable { POST_SB(R.string.posts_sb), POST_BB(R.string.post_bb), @@ -30,6 +32,15 @@ open class Action : RealmObject() { } } + override val viewType: Int = RowViewType.TITLE_GRID.ordinal + + companion object { + + val defaultTypes: List + get() { return listOf(FOLD, CHECK, BET, CALL, RAISE, UNDEFINED_ALLIN) } + + } + } /*** diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/Card.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/Card.kt index 1273ba7e..bcfcf0c1 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/Card.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/Card.kt @@ -1,19 +1,39 @@ package net.pokeranalytics.android.model.realm.handhistory import io.realm.RealmObject +import net.pokeranalytics.android.exceptions.PAIllegalStateException open class Card : RealmObject() { - enum class Suit { - SPADES, - HEART, - DIAMOND, - CLOVER + companion object { + + fun valueFormatted(value: Int) : String { + return when(value) { + 0 -> "x" + in 2..9 -> "$value" + 10 -> "T" + 11 -> "J" + 12 -> "Q" + 13 -> "K" + 14 -> "A" + else -> throw PAIllegalStateException("card value '$value' not handled") + } + } + + } + + enum class Suit(val value: String) { + UNDEFINED("x"), + SPADES("♠︎"), + HEART("♥︎"), + DIAMOND("♦︎"), + CLOVER("♣︎") } /*** * The card value: 2..A + * 0: undefined */ var value: Int = 0 diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/HandHistoryFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/HandHistoryFragment.kt index afc51b53..495c62ea 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/HandHistoryFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/HandHistoryFragment.kt @@ -6,21 +6,26 @@ import android.view.View import android.view.ViewGroup import androidx.lifecycle.ViewModelProviders import androidx.recyclerview.widget.LinearLayoutManager -import kotlinx.android.synthetic.main.fragment_settings.* +import kotlinx.android.synthetic.main.fragment_hand_history.* +import kotlinx.android.synthetic.main.fragment_settings.recyclerView import net.pokeranalytics.android.R import net.pokeranalytics.android.exceptions.PAIllegalStateException import net.pokeranalytics.android.model.handhistory.HHBuilder import net.pokeranalytics.android.model.handhistory.HandSetup +import net.pokeranalytics.android.model.realm.handhistory.Action +import net.pokeranalytics.android.model.realm.handhistory.Card import net.pokeranalytics.android.model.realm.handhistory.HandHistory import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.fragment.components.RealmFragment import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.ui.view.handhistory.HandHistoryKeyboard +import net.pokeranalytics.android.ui.view.handhistory.KeyboardListener import net.pokeranalytics.android.ui.viewmodel.HandHistoryViewModel import net.pokeranalytics.android.util.extensions.findById -class HandHistoryFragment : RealmFragment(), RowRepresentableDataSource, RowRepresentableDelegate { +class HandHistoryFragment : RealmFragment(), RowRepresentableDataSource, RowRepresentableDelegate, KeyboardListener { private lateinit var model: HandHistoryViewModel @@ -90,6 +95,22 @@ class HandHistoryFragment : RealmFragment(), RowRepresentableDataSource, RowRepr this.rows = this.model.builder.value?.rowRepresentables() ?: listOf() + this.keyboard.keyboardListener = this + + this.edit() + } + + private fun edit() { + + this.model.findIndexForEdition()?.let { + this.keyboard.show(it) + this.highlightCell(it) + } + + } + + private fun highlightCell(handHistoryKeyboard: HandHistoryKeyboard) { + } // RowRepresentableDataSource @@ -110,4 +131,18 @@ class HandHistoryFragment : RealmFragment(), RowRepresentableDataSource, RowRepr return this.rows[position].viewType } + // Keyboard Listener + + override fun actionSelected(action: Action.Type) { + this.model.actionSelected(action) + } + + override fun cardSelected(value: Card, suit: Card.Suit) { + this.model.cardSelected(value, suit) + } + + override fun amountSelected(amount: Double) { + this.model.amountSelected(amount) + } + } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt index 2526d20e..d8e34e67 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt @@ -88,7 +88,7 @@ open class BottomSheetListFragment : BottomSheetFragment(), LiveRowRepresentable val dataAdapter = RowRepresentableAdapter(this, this) this.viewModel.dataAdapter = dataAdapter - reyclerView.apply { + recyclerView.apply { setHasFixedSize(true) layoutManager = viewManager adapter = dataAdapter diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetStaticListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetStaticListFragment.kt index f85dc2c2..8ffb0bb0 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetStaticListFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetStaticListFragment.kt @@ -51,7 +51,7 @@ class BottomSheetStaticListFragment : BottomSheetFragment(), StaticRowRepresenta val dataAdapter = RowRepresentableAdapter(this, this) this.viewModel.dataAdapter = dataAdapter - reyclerView.apply { + recyclerView.apply { setHasFixedSize(true) layoutManager = viewManager adapter = dataAdapter diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt index d58f839d..b20bcdce 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt @@ -6,6 +6,7 @@ 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.R import net.pokeranalytics.android.model.TableSize import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate @@ -34,7 +35,7 @@ class BottomSheetTableSizeGridFragment : BottomSheetFragment(), StaticRowReprese */ private fun initUI() { LayoutInflater.from(requireContext()) - .inflate(net.pokeranalytics.android.R.layout.bottom_sheet_grid, view?.bottomSheetContainer, true) + .inflate(R.layout.bottom_sheet_grid, view?.bottomSheetContainer, true) val viewManager = GridLayoutManager(requireContext(), 3) val dataAdapter = RowRepresentableAdapter(this, this) @@ -44,7 +45,7 @@ class BottomSheetTableSizeGridFragment : BottomSheetFragment(), StaticRowReprese val spacing = 2.px val includeEdge = false - reyclerView.apply { + recyclerView.apply { setHasFixedSize(true) layoutManager = viewManager adapter = dataAdapter @@ -59,7 +60,6 @@ class BottomSheetTableSizeGridFragment : BottomSheetFragment(), StaticRowReprese override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { this.viewModel.defaultSize = (row as TableSize).numberOfPlayer this.viewModel.onRowValueChanged() -// this.delegate.onRowValueChanged((row as TableSize).numberOfPlayer, this.row) dismiss() } @@ -69,4 +69,5 @@ class BottomSheetTableSizeGridFragment : BottomSheetFragment(), StaticRowReprese } return "UNKNOWN CONTEXT FOR ROW $row" } + } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt index a33110a6..660bf1c0 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt @@ -4,6 +4,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Button +import android.widget.EditText import android.widget.FrameLayout import androidx.appcompat.widget.AppCompatImageView import androidx.appcompat.widget.AppCompatTextView @@ -695,12 +696,19 @@ enum class RowViewType(private var layoutRes: Int) { computedAction.action.type?.resId?.let { button.text = itemView.context.getString(it) } + button.setOnClickListener { + adapter.delegate?.onRowSelected(position, row) + } } itemView.findViewById