From d5bc0309aac54aa8415c3395c6a2af6f96c5c869 Mon Sep 17 00:00:00 2001 From: Laurent Date: Wed, 12 Feb 2020 17:46:46 +0100 Subject: [PATCH] Factor the way EditText are handled --- .../model/realm/handhistory/HandHistory.kt | 5 +- .../model/realm/handhistory/PlayerSetup.kt | 5 +- .../modules/handhistory/HandHistoryAdapter.kt | 247 +++++++++++------- .../handhistory/HandHistoryFragment.kt | 9 +- .../handhistory/{views => model}/CardsRow.kt | 61 +++-- .../handhistory/model/ComputedAction.kt | 17 +- .../handhistory/model/HandHistoryViewModel.kt | 63 +++-- ...pRowRepresentable.kt => PlayerSetupRow.kt} | 33 ++- 8 files changed, 288 insertions(+), 152 deletions(-) rename app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/{views => model}/CardsRow.kt (72%) rename app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/{PlayerSetupRowRepresentable.kt => PlayerSetupRow.kt} (69%) diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/HandHistory.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/HandHistory.kt index da677968..4cd9ef59 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/HandHistory.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/HandHistory.kt @@ -11,11 +11,12 @@ import net.pokeranalytics.android.model.handhistory.Street import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.model.interfaces.TimeFilterable import net.pokeranalytics.android.model.realm.Session -import net.pokeranalytics.android.ui.modules.handhistory.views.CardHolder +import net.pokeranalytics.android.ui.modules.handhistory.model.CardHolder import net.pokeranalytics.android.ui.view.RowRepresentable import java.util.* -open class HandHistory : RealmObject(), RowRepresentable, Identifiable, Filterable, TimeFilterable, CardHolder { +open class HandHistory : RealmObject(), RowRepresentable, Identifiable, Filterable, TimeFilterable, + CardHolder { @PrimaryKey override var id = UUID.randomUUID().toString() diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/PlayerSetup.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/PlayerSetup.kt index bbb7d038..27839c77 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/PlayerSetup.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/PlayerSetup.kt @@ -3,9 +3,10 @@ package net.pokeranalytics.android.model.realm.handhistory import io.realm.RealmList import io.realm.RealmObject import net.pokeranalytics.android.model.realm.Player -import net.pokeranalytics.android.ui.modules.handhistory.views.CardHolder +import net.pokeranalytics.android.ui.modules.handhistory.model.CardHolder -open class PlayerSetup : RealmObject(), CardHolder { +open class PlayerSetup : RealmObject(), + CardHolder { /*** * The player 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 70a9ee00..a0c8049c 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_cards.view.* import kotlinx.android.synthetic.main.row_hhsettings_blinds.view.* import kotlinx.android.synthetic.main.row_hhsettings_player_setup.view.* import kotlinx.android.synthetic.main.row_hhsettings_straddle.view.* @@ -21,7 +22,6 @@ import net.pokeranalytics.android.exceptions.PAIllegalStateException import net.pokeranalytics.android.model.handhistory.Position import net.pokeranalytics.android.model.handhistory.Street import net.pokeranalytics.android.model.realm.handhistory.HandHistory -import net.pokeranalytics.android.model.realm.handhistory.formatted import net.pokeranalytics.android.ui.adapter.BindableHolder import net.pokeranalytics.android.ui.adapter.RecyclerAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource @@ -29,13 +29,10 @@ import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.extensions.px import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType import net.pokeranalytics.android.ui.modules.handhistory.model.* -import net.pokeranalytics.android.ui.modules.handhistory.views.PlayerCardsRow import net.pokeranalytics.android.ui.modules.handhistory.views.PositionAdapter -import net.pokeranalytics.android.ui.modules.handhistory.views.StreetCardsRow 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 import timber.log.Timber @@ -70,7 +67,7 @@ enum class HandRowType(var layoutRes: Int) : ViewIdentifier, RowRepresentable, H } } - override fun keyboardForTag(tag: Int): HHKeyboard { + override fun keyboardForTag(tag: Int): HHKeyboard? { return when (this) { BLINDS -> HHKeyboard.AMOUNT else -> throw PAIllegalStateException("unmanaged tag $tag") @@ -193,7 +190,30 @@ class HandHistoryAdapter( this.currentPosition = position } - protected fun toggleFocus(editText: EditText, focused: Boolean) { + protected fun configureEditTexts(index: Int, position: Int, row: RowRepresentable, adapter: RecyclerAdapter) { + this.configureEditTexts(index..index, position, row, adapter) + } + + protected fun configureEditTexts(range: IntRange, position: Int, row: RowRepresentable, adapter: RecyclerAdapter) { + + range.forEach { tag -> + val string = adapter.dataSource.stringForRow(row, itemView.context, tag) + + // Text + val editText = itemView.findViewWithTag(tag) ?: throw PAIllegalStateException("Edit Text not found for tag: $tag, class: $this") + editText.setText(string) + + // Focus + val selected = adapter.dataSource.isSelected(position, row, tag) + toggleFocus(editText, selected) + + // Background + editText.setBackgroundColor(color(selected)) + } + + } + + private fun toggleFocus(editText: EditText, focused: Boolean) { if (focused) { editText.requestFocus() } else { @@ -202,43 +222,43 @@ class HandHistoryAdapter( } open fun editTextForTag(tag: Int) : EditText { - throw PAIllegalStateException("Should overriden by class : $this") + return itemView.findViewWithTag(tag) +// throw PAIllegalStateException("Field at tag: $tag requires to return an EditText in order to connect the keyboard to it. Should be overridden by class : $this") } } inner class RowHandBlinds(itemView: View) : RowHandHolder(itemView) { + init { + itemView.smallBlindEditText.tag = 0 + itemView.bigBlindEditText.tag = 1 + itemView.anteEditText.tag = 2 + } + // sb, bb, ante, bb ante override fun onBind(position: Int, row: RowRepresentable, adapter: RecyclerAdapter) { super.onBind(position, row, adapter) - itemView.smallBlindEditText.setText(adapter.dataSource.stringForRow(row, itemView.context, 0)) - itemView.bigBlindEditText.setText(adapter.dataSource.stringForRow(row, itemView.context, 1)) - itemView.anteEditText.setText(adapter.dataSource.stringForRow(row, itemView.context, 2)) - itemView.bbAnteSwitch.isChecked = adapter.dataSource.isSelected(position, row, 0) - - val sbSelected = adapter.dataSource.isSelected(position, row, 0) - toggleFocus(itemView.smallBlindEditText, sbSelected) - - val bbSelected = adapter.dataSource.isSelected(position, row, 1) - toggleFocus(itemView.bigBlindEditText, bbSelected) - - val anteSelected = adapter.dataSource.isSelected(position, row, 2) - toggleFocus(itemView.anteEditText, anteSelected) + configureEditTexts(0..2, position, row, adapter) + +// itemView.smallBlindEditText.setText(adapter.dataSource.stringForRow(row, itemView.context, 0)) +// itemView.bigBlindEditText.setText(adapter.dataSource.stringForRow(row, itemView.context, 1)) +// itemView.anteEditText.setText(adapter.dataSource.stringForRow(row, itemView.context, 2)) +// itemView.bbAnteSwitch.isChecked = adapter.dataSource.isSelected(position, row, 0) +// +// val sbSelected = adapter.dataSource.isSelected(position, row, 0) +// toggleFocus(itemView.smallBlindEditText, sbSelected) +// +// val bbSelected = adapter.dataSource.isSelected(position, row, 1) +// toggleFocus(itemView.bigBlindEditText, bbSelected) +// +// val anteSelected = adapter.dataSource.isSelected(position, row, 2) +// toggleFocus(itemView.anteEditText, anteSelected) } - override fun editTextForTag(tag: Int): EditText { - return when (tag) { - 0 -> itemView.smallBlindEditText - 1 -> itemView.bigBlindEditText - 2 -> itemView.anteEditText - else -> throw PAIllegalStateException("unmanaged tag $tag") - } - } - } inner class RowHandStraddle(itemView: View) : RowHandHolder(itemView) { @@ -271,9 +291,7 @@ class HandHistoryAdapter( itemView.positionsChipGroup.addView(chip) } - } - } /** @@ -282,6 +300,9 @@ class HandHistoryAdapter( inner class RowHandAction(itemView: View) : RowHandHolder(itemView) { init { + itemView.actionButton.tag = ComputedAction.Tag.ACTION.ordinal + itemView.amountEditText.tag = ComputedAction.Tag.AMOUNT.ordinal + // Action itemView.findViewById