diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/HandHistoryAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/HandHistoryAdapter.kt index 83bf9459..b7e90e7f 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/HandHistoryAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/HandHistoryAdapter.kt @@ -13,6 +13,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.google.android.material.chip.Chip import kotlinx.android.synthetic.main.row_hand_action.view.* +import kotlinx.android.synthetic.main.row_hand_action_read.view.* import kotlinx.android.synthetic.main.row_hand_cards.view.* import kotlinx.android.synthetic.main.row_hand_player_summary.view.* import kotlinx.android.synthetic.main.row_hhsettings_player_setup.view.* @@ -33,6 +34,7 @@ import net.pokeranalytics.android.ui.modules.handhistory.views.PositionAdapter import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.holder.RowViewHolder import net.pokeranalytics.android.ui.view.rowrepresentable.ViewIdentifier +import net.pokeranalytics.android.util.extensions.formatted enum class HandRowType(var layoutRes: Int) : ViewIdentifier, RowRepresentable, HandHistoryRow { @@ -46,7 +48,8 @@ enum class HandRowType(var layoutRes: Int) : ViewIdentifier, RowRepresentable, H PLAYER_NUMBER(R.layout.row_title_value), PLAYER_SETUP(R.layout.row_hhsettings_player_setup), ANTE(R.layout.row_title_value), - BIG_BLIND_ANTE(R.layout.row_title_switch) + BIG_BLIND_ANTE(R.layout.row_title_switch), + ACTION_READ(R.layout.row_hand_action_read) ; override val viewType: Int = this.ordinal @@ -155,8 +158,8 @@ class HandHistoryAdapter( HandRowType.STRADDLE -> RowHandStraddle(layout) HandRowType.PLAYER_SETUP -> RowHandPlayerSetup(layout) HandRowType.COMMENT -> RowViewHolder(layout) - HandRowType.PLAYER_NUMBER, HandRowType.ANTE, - HandRowType.BIG_BLIND_ANTE -> RowViewHolder(layout) + HandRowType.ACTION_READ -> RowActionRead(layout) + HandRowType.PLAYER_NUMBER, HandRowType.ANTE, HandRowType.BIG_BLIND_ANTE -> RowViewHolder(layout) } } @@ -432,6 +435,19 @@ class HandHistoryAdapter( } + inner class RowActionRead(itemView: View) : RowHandHolder(itemView) { + + override fun onBind(position: Int, row: RowRepresentable, adapter: RecyclerAdapter) { + + val actionReadRow = row as ActionReadRow + itemView.playersText.text = actionReadRow.positions.map { it.value }.joinToString(", ") + itemView.actionText.text = actionReadRow.action.localizedTitle(itemView.context) + itemView.amountText.text = actionReadRow.amount?.formatted() + + } + + } + /** * Display a hand street */ diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/ActionReadRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/ActionReadRow.kt new file mode 100644 index 00000000..5a345838 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/ActionReadRow.kt @@ -0,0 +1,12 @@ +package net.pokeranalytics.android.ui.modules.handhistory.model + +import net.pokeranalytics.android.model.handhistory.Position +import net.pokeranalytics.android.model.realm.handhistory.Action +import net.pokeranalytics.android.ui.modules.handhistory.HandRowType +import net.pokeranalytics.android.ui.view.RowRepresentable + +class ActionReadRow(var positions: MutableList, var action: Action.Type?, var amount: Double?) : RowRepresentable { + + override val viewType: Int = HandRowType.STREET.ordinal + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/ComputedAction.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/ComputedAction.kt index 7382fe83..89ac56e3 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/ComputedAction.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/ComputedAction.kt @@ -9,6 +9,21 @@ import net.pokeranalytics.android.ui.modules.handhistory.HandRowType import kotlin.math.max import kotlin.math.min +/*** + * An extension to transform a list of ComputedAction into + * a more compact and read-friendly list of ActionReadRow + */ +fun List.compact(): List { + val rows = mutableListOf() + this.forEach { + if (it.action.type == Action.Type.FOLD && rows.lastOrNull()?.action == Action.Type.FOLD) { + rows.lastOrNull()?.positions?.add(it.position) + } else { + rows.add(it.toReadRow()) + } + } + return rows +} /*** * ComputedAction is a convenience class which main role is to represent a hand history Action @@ -278,4 +293,11 @@ class ComputedAction(var manager: ActionManager, override val viewType: Int = HandRowType.ACTION.ordinal + /*** + * The "read mode" representation of the action + */ + fun toReadRow(): ActionReadRow { + return ActionReadRow(mutableListOf(this.position), this.action.type, this.action.amount) + } + } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/HandHistoryViewModel.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/HandHistoryViewModel.kt index d90373b0..58299703 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/HandHistoryViewModel.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/HandHistoryViewModel.kt @@ -206,8 +206,51 @@ class HandHistoryViewModel : ViewModel(), RowRepresentableDataSource, CardCentra private fun readRowRepresentation(): MutableList { val rows: MutableList = mutableListOf() rows.add(HandRowType.COMMENT) + rows.add(CustomizableRowRepresentable(customViewType = HandRowType.HEADER, resId = R.string.settings, value = "")) + + rows.add(HandRowType.PLAYER_NUMBER) + rows.add(HandRowType.ANTE) + + if (this.handSetup.type != Session.Type.CASH_GAME) { + rows.add(HandRowType.BIG_BLIND_ANTE) + } + + + this.playerSetups().forEach { + rows.add(it) + } + + Street.values().forEach { street -> + + when (street) { + Street.SUMMARY -> { + val lastActionIndex = this.sortedActions.size - 1 + + if (this.sortedActions.activePositions(lastActionIndex).size < 2 || this.sortedActions.isStreetActionClosed(lastActionIndex) == Street.SUMMARY) { + addStreetHeader(rows, street) - // TODO remove useless settings, collapse multifolds + val activePositions = this.sortedActions.activePositions(lastActionIndex, true) + activePositions.forEach { position -> + val positionIndex = this.sortedActions.positions.indexOf(position) + val playerCardsRow = PlayerCardsRow(this, + position, + positionIndex, + this.handHistory, + this.handHistory.playerSetupForPosition(positionIndex), + this.playerHandMaxCards) + rows.add(playerCardsRow) + } + } + } + else -> { + val actions = this.sortedActions.filter { it.street == street } + if (actions.isNotEmpty()) { + addStreetHeader(rows, street) + rows.addAll(actions.compact()) + } + } + } + } return rows } @@ -227,6 +270,7 @@ class HandHistoryViewModel : ViewModel(), RowRepresentableDataSource, CardCentra rows.add(HandRowType.BIG_BLIND_ANTE) } + // Straddle val positions = Position.positionsPerPlayers(this.handHistory.numberOfPlayers) if (this.handSetup.type != Session.Type.TOURNAMENT && this.isNew && positions.size > 2) { // don't allow any straddle changes if not new, or if it's a headsup diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/views/PositionAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/views/PositionAdapter.kt index 09cdaa25..b873b3da 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/views/PositionAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/views/PositionAdapter.kt @@ -12,7 +12,6 @@ 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 PositionAdapter(var listener: PositionSelectionListener? = null) : RecyclerView.Adapter(), @@ -26,7 +25,7 @@ class PositionAdapter(var listener: PositionSelectionListener? = null) : var positions: List = listOf() set(value) { field = value - Timber.d("Setting positions = $value") +// Timber.d("Setting positions = $value") notifyDataSetChanged() } diff --git a/app/src/main/res/layout/row_hand_action_read.xml b/app/src/main/res/layout/row_hand_action_read.xml new file mode 100644 index 00000000..2c52f4c7 --- /dev/null +++ b/app/src/main/res/layout/row_hand_action_read.xml @@ -0,0 +1,28 @@ + + + + + + + + + + \ No newline at end of file