diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableDataSource.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableDataSource.kt index 5c4ceec5..86bec578 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableDataSource.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableDataSource.kt @@ -172,6 +172,10 @@ interface DisplayableDataSource { return true } + fun backgroundColor(position: Int, row: RowRepresentable): Int? { + return null + } + } /** 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 0ceff616..e03e84b3 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 @@ -55,7 +55,8 @@ enum class HandRowType(var layoutRes: Int) : ViewIdentifier, RowRepresentable { PLAYER_SETUP_READ(R.layout.row_hhsettings_player_setup_read), ANTE(R.layout.row_title_value), BIG_BLIND_ANTE(R.layout.row_title_switch), - ACTION_READ(R.layout.row_hand_action_read) + ACTION_READ(R.layout.row_hand_action_read), + HERO_POSITION(R.layout.row_hhsettings_hero_position) ; override val viewType: Int = this.ordinal @@ -113,14 +114,15 @@ class HandHistoryAdapter( return when (rowType) { HandRowType.DEFAULT -> RowViewHolder(layout) HandRowType.HEADER -> RowViewHolder(layout) - HandRowType.ACTION -> RowHandAction(layout) - HandRowType.STREET -> RowHandStreet(layout) - HandRowType.PLAYER_SUMMARY -> RowHandPlayerSummary(layout) - HandRowType.STRADDLE -> RowHandStraddle(layout) - HandRowType.PLAYER_SETUP -> RowHandPlayerSetup(layout) - HandRowType.PLAYER_SETUP_READ -> RowHandReadOnlyPlayerSetup(layout) + HandRowType.ACTION -> RowActionHolder(layout) + HandRowType.STREET -> RowStreetHolder(layout) + HandRowType.PLAYER_SUMMARY -> RowPlayerSummaryHolder(layout) + HandRowType.STRADDLE -> RowStraddleHolder(layout) + HandRowType.PLAYER_SETUP -> RowPlayerSetupHolder(layout) + HandRowType.PLAYER_SETUP_READ -> RowReadOnlyPlayerSetupHolder(layout) HandRowType.COMMENT -> RowViewHolder(layout) - HandRowType.ACTION_READ -> RowActionRead(layout) + HandRowType.ACTION_READ -> RowActionReadHolder(layout) + HandRowType.HERO_POSITION -> RowPositionHolder(layout) HandRowType.PLAYER_NUMBER, HandRowType.ANTE, HandRowType.BIG_BLIND_ANTE -> RowViewHolder(layout) } } @@ -290,7 +292,7 @@ class HandHistoryAdapter( } - inner class RowHandStraddle(itemView: View) : RowHandHolder(itemView) { + inner class RowStraddleHolder(itemView: View) : RowHandHolder(itemView) { override fun onBind(position: Int, row: RowRepresentable, adapter: RecyclerAdapter) { super.onBind(position, row, adapter) @@ -325,7 +327,7 @@ class HandHistoryAdapter( /** * Display a hand action */ - inner class RowHandAction(itemView: View) : RowHandHolder(itemView) { + inner class RowActionHolder(itemView: View) : RowHandHolder(itemView) { init { itemView.actionButton.tag = ComputedAction.Tag.ACTION.ordinal @@ -404,7 +406,7 @@ class HandHistoryAdapter( } - inner class RowActionRead(itemView: View) : RowHandHolder(itemView) { + inner class RowActionReadHolder(itemView: View) : RowHandHolder(itemView) { override fun onBind(position: Int, row: RowRepresentable, adapter: RecyclerAdapter) { @@ -420,7 +422,7 @@ class HandHistoryAdapter( /** * Display a hand street */ - inner class RowHandStreet(itemView: View) : RowHandHolder(itemView) { + inner class RowStreetHolder(itemView: View) : RowHandHolder(itemView) { override fun onBind(position: Int, row: RowRepresentable, adapter: RecyclerAdapter) { super.onBind(position, row, adapter) @@ -436,7 +438,7 @@ class HandHistoryAdapter( /** * Display a hand action */ - inner class RowHandPlayerSummary(itemView: View) : RowHandHolder(itemView) { + inner class RowPlayerSummaryHolder(itemView: View) : RowHandHolder(itemView) { init { itemView.handLayout.tag = PlayerCardsRow.Tag.CARDS.ordinal @@ -502,7 +504,7 @@ class HandHistoryAdapter( } } - inner class RowHandReadOnlyPlayerSetup(itemView: View) : AbstractRowHandPlayerSetup(itemView) { + inner class RowReadOnlyPlayerSetupHolder(itemView: View) : AbstractRowHandPlayerSetup(itemView) { init { itemView.ps_player_image.tag = PlayerSetupRow.Tag.PLAYER.ordinal @@ -520,7 +522,36 @@ class HandHistoryAdapter( } - inner class RowHandPlayerSetup(itemView: View) : AbstractRowHandPlayerSetup(itemView) { + inner class RowPositionHolder(itemView: View) : RowHandHolder(itemView) { + + private var positionAdapter: PositionAdapter = PositionAdapter() + private var positionViewManager: LinearLayoutManager = + LinearLayoutManager(itemView.context, RecyclerView.HORIZONTAL, false) + + init { + itemView.position_recycler.apply { + setHasFixedSize(true) + layoutManager = positionViewManager + adapter = positionAdapter + } + } + + override fun onBind(position: Int, row: RowRepresentable, adapter: RecyclerAdapter) { + super.onBind(position, row, adapter) + + this.positionAdapter.positions = adapter.dataSource.contentForRow(row, itemView.context, Position::class) + this.positionAdapter.setOnClickListener { pos -> + adapter.delegate?.onRowValueChanged(pos, row) + this.positionAdapter.notifyDataSetChanged() + } + + val heroIndex = adapter.dataSource.intForRow(row) + positionAdapter.setSelectedPosition(heroIndex) + } + + } + + inner class RowPlayerSetupHolder(itemView: View) : AbstractRowHandPlayerSetup(itemView) { private var positionAdapter: PositionAdapter = PositionAdapter() private var positionViewManager: LinearLayoutManager diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/HandHistoryFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/HandHistoryFragment.kt index d237a434..182376c9 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/HandHistoryFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/HandHistoryFragment.kt @@ -358,6 +358,10 @@ class HandHistoryFragment : RealmFragment(), RowRepresentableDelegate, KeyboardL this.model.setBigBlindAnte(value as Boolean) this.handHistoryAdapter.notifyDataSetChanged() } + HandRowType.HERO_POSITION -> { + this.model.setHeroPosition(value as Position) + this.handHistoryAdapter.notifyItemChanged(this.indexOfRowRepresentable(row)) + } is ComputedAction -> { this.model.currentAmount = value as String } @@ -372,10 +376,10 @@ class HandHistoryFragment : RealmFragment(), RowRepresentableDelegate, KeyboardL this.handHistoryAdapter.notifyItemChanged(index) // Change the focus only for the row, don't look elsewhere - val anyEmpty = row.tagsForCompletion().any { row.isFieldNeedsInput(it, this.model.handHistory) } - if (anyEmpty) { - this.findNextActionToEdit(index) - } +// val anyEmpty = row.tagsForCompletion().any { row.isFieldNeedsInput(it, this.model.handHistory) } +// if (anyEmpty) { +// this.findNextActionToEdit(index) +// } } } } 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 be64a018..88898b83 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 @@ -288,6 +288,8 @@ class HandHistoryViewModel : ViewModel(), RowRepresentableDataSource, CardCentra rows.add(StraddleRowRepresentable(positions, this.straddlePositions)) } + rows.add(HandRowType.HERO_POSITION) + this.playerSetups().forEach { rows.add(it) } @@ -791,6 +793,13 @@ class HandHistoryViewModel : ViewModel(), RowRepresentableDataSource, CardCentra } } + override fun intForRow(row: RowRepresentable): Int { + return when (row) { + HandRowType.HERO_POSITION -> this.handHistory.heroIndex ?: - 1 + else -> throw PAIllegalStateException("undefined intForRow for $row") + } + } + override fun editDescriptors(row: RowRepresentable): List? { return when (row) { HandRowType.COMMENT -> listOf(RowRepresentableEditDescriptor(this.handHistory.comment, R.string.comment)) @@ -841,24 +850,28 @@ class HandHistoryViewModel : ViewModel(), RowRepresentableDataSource, CardCentra val hh = this.handHistory - val arrangedSetups = hh.playerSetups.sortedBy { it.position }.map { - val position = this.positionForIndex(it.position) - createPlayerSetupRow(it, position, false) - }.toMutableList() - - val heroSetup = arrangedSetups.firstOrNull { it.playerSetup?.position == hh.heroIndex } - heroSetup?.let { - it.hero = true - arrangedSetups.remove(it) - arrangedSetups.add(0, it) - } ?: run { - arrangedSetups.add(0, createPlayerSetupRow(hero = true)) + val arrangedSetups = mutableListOf() + if (hh.playerSetups.size < hh.numberOfPlayers) { + arrangedSetups.add(createPlayerSetupRow(hero = false)) } - if (arrangedSetups.size < hh.numberOfPlayers) { - arrangedSetups.add(createPlayerSetupRow(hero = false)) + val existingSetups = hh.playerSetups.sortedBy { it.position }.map { + val position = this.positionForIndex(it.position) + val hero = (it.position == hh.heroIndex) + createPlayerSetupRow(it, position, hero) } + arrangedSetups.addAll(existingSetups) + +// val heroSetup = arrangedSetups.firstOrNull { it.playerSetup?.position == hh.heroIndex } +// heroSetup?.let { +// it.hero = true +// arrangedSetups.remove(it) +// arrangedSetups.add(0, it) +// } ?: run { +// arrangedSetups.add(0, createPlayerSetupRow(hero = true)) +// } + return arrangedSetups } @@ -945,4 +958,8 @@ class HandHistoryViewModel : ViewModel(), RowRepresentableDataSource, CardCentra } ?: throw PAIllegalStateException("Click position not set for player selection") } + fun setHeroPosition(position: Position) { + this.handHistory.heroIndex = this.sortedActions.positions.indexOf(position) + } + } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/PlayerSetupRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/PlayerSetupRow.kt index 190c48d9..c4c4353c 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/PlayerSetupRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/PlayerSetupRow.kt @@ -46,7 +46,7 @@ class PlayerSetupRow(var hero: Boolean = false, fun title(context: Context): String { return if (this.hero) { - context.getString(R.string.hero) + context.getString(R.string.set_hero_position) } else { this.playerSetup?.let { setup -> setup.player?.name?.let { @@ -55,7 +55,7 @@ class PlayerSetupRow(var hero: Boolean = false, this.position?.value } } ?: run { - context.getString(R.string.add_vilain) + context.getString(R.string.set_position_details) } } } 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 b873b3da..c4c9d83a 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 @@ -22,6 +22,8 @@ class PositionAdapter(var listener: PositionSelectionListener? = null) : private var rawListener: ((Position) -> (Unit))? = null + private var selectedIndex: Int = -1 + var positions: List = listOf() set(value) { field = value @@ -65,8 +67,16 @@ class PositionAdapter(var listener: PositionSelectionListener? = null) : this.rawListener?.invoke(this.positions[position]) } + override fun backgroundColor(position: Int, row: RowRepresentable): Int? { + return if (position == this.selectedIndex) R.color.kaki_lighter else R.color.kaki_medium + } + fun setOnClickListener(listener: (Position) -> (Unit)) { this.rawListener = listener } + fun setSelectedPosition(index: Int) { + this.selectedIndex = index + } + } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/holder/RowViewHolder.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/holder/RowViewHolder.kt index eebde558..90519a46 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/holder/RowViewHolder.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/holder/RowViewHolder.kt @@ -89,17 +89,8 @@ class RowViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), Bindabl else -> { // Standard row // View background - itemView.findViewById(R.id.container)?.let { -// it.setBackgroundColor(itemView.context.getColor(R.color.kaki)) -// -// val enabled = adapter.dataSource.isEnabled(row, 0) -// val color = if (enabled) { -// R.color.kaki_light -// } else { -// R.color.kaki -// } -// it.setBackgroundColor(itemView.context.getColor(color)) -// it.isEnabled = enabled + adapter.dataSource.backgroundColor(position, row)?.let { color -> + itemView.findViewById(R.id.container)?.setBackgroundColor(itemView.context.getColor(color)) } // Title diff --git a/app/src/main/res/layout/row_hhsettings_hero_position.xml b/app/src/main/res/layout/row_hhsettings_hero_position.xml new file mode 100644 index 00000000..d8d55109 --- /dev/null +++ b/app/src/main/res/layout/row_hhsettings_hero_position.xml @@ -0,0 +1,22 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/row_hhsettings_player_setup.xml b/app/src/main/res/layout/row_hhsettings_player_setup.xml index e1b68af5..96f0aed8 100644 --- a/app/src/main/res/layout/row_hhsettings_player_setup.xml +++ b/app/src/main/res/layout/row_hhsettings_player_setup.xml @@ -1,6 +1,5 @@ @@ -44,9 +43,9 @@ android:orientation="horizontal" android:layout_width="0dp" android:layout_height="50dp" - android:layout_weight="1" + android:layout_weight="1.2" android:background="@drawable/rounded_board_background" - android:layout_marginStart="16dp" + android:layout_marginStart="8dp" android:paddingStart="4dp" android:paddingEnd="0dp" android:gravity="center"/> @@ -60,7 +59,8 @@ android:layout_height="wrap_content" android:gravity="end" android:inputType="none" - android:maxLines="1" /> + android:maxLines="1" + android:layout_marginStart="8dp" /> diff --git a/app/src/main/res/layout/row_hhsettings_player_setup_read.xml b/app/src/main/res/layout/row_hhsettings_player_setup_read.xml index c322e834..5030e107 100644 --- a/app/src/main/res/layout/row_hhsettings_player_setup_read.xml +++ b/app/src/main/res/layout/row_hhsettings_player_setup_read.xml @@ -24,7 +24,7 @@ android:id="@+id/ps_hand_layout" android:layout_width="0dp" android:layout_height="50dp" - android:layout_marginStart="16dp" + android:layout_marginStart="8dp" android:layout_weight="1" android:background="@drawable/rounded_board_background" android:gravity="center" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 56534efe..ac33c255 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -792,7 +792,8 @@ r_allin mississipi - Add vilain + Hero position + Set position details Forward Video Text