Fixes various card selection issues

hh
Laurent 6 years ago
parent 0a2870b6d9
commit 85fdbdaa9d
  1. 42
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/HandHistoryAdapter.kt
  2. 8
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/HandHistorySettings.kt
  3. 29
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/HandHistoryViewModel.kt
  4. 14
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/views/CardsRow.kt

@ -384,7 +384,7 @@ class HandHistoryAdapter(
flopEditText.setText(text) flopEditText.setText(text)
val selected = adapter.dataSource.isSelected(position, row, Street.FLOP.ordinal) val selected = adapter.dataSource.isSelected(position, row, Street.FLOP.ordinal)
if (selected) flopEditText.requestFocus() else flopEditText.clearFocus() toggleFocus(flopEditText, selected)
} }
@ -399,8 +399,8 @@ class HandHistoryAdapter(
turnEditText.text = null turnEditText.text = null
} }
val selected = adapter.dataSource.isSelected(position, row, Street.FLOP.ordinal) val selected = adapter.dataSource.isSelected(position, row, Street.TURN.ordinal)
if (selected) turnEditText.requestFocus() else turnEditText.clearFocus() toggleFocus(turnEditText, selected)
} }
itemView.findViewById<EditText>(R.id.riverEditText)?.let { riverEditText -> itemView.findViewById<EditText>(R.id.riverEditText)?.let { riverEditText ->
@ -414,8 +414,8 @@ class HandHistoryAdapter(
riverEditText.text = null riverEditText.text = null
} }
val selected = adapter.dataSource.isSelected(position, row, Street.FLOP.ordinal) val selected = adapter.dataSource.isSelected(position, row, Street.RIVER.ordinal)
if (selected) riverEditText.requestFocus() else riverEditText.clearFocus() toggleFocus(riverEditText, selected)
} }
} }
@ -428,23 +428,25 @@ class HandHistoryAdapter(
*/ */
inner class RowHandPlayerSummary(itemView: View) : RowHandHolder(itemView) { inner class RowHandPlayerSummary(itemView: View) : RowHandHolder(itemView) {
private val CARDS_TAG = 0
init { init {
// Cards // Cards
itemView.findViewById<EditText>(R.id.cardsEditText)?.let { amountEditText -> itemView.findViewById<EditText>(R.id.cardsEditText)?.let { cardsEditText ->
amountEditText.isFocusableInTouchMode = true cardsEditText.isFocusableInTouchMode = true
amountEditText.setOnTouchListener { _, event -> cardsEditText.setOnTouchListener { _, event ->
if (event.action == MotionEvent.ACTION_UP) { if (event.action == MotionEvent.ACTION_UP) {
// Both are required, otherwise requestFocus() fails // Both are required, otherwise requestFocus() fails
amountEditText.isFocusable = true cardsEditText.isFocusable = true
amountEditText.isFocusableInTouchMode = true cardsEditText.isFocusableInTouchMode = true
amountEditText.requestFocus() cardsEditText.requestFocus()
editTextSelected(amountEditText, true, HHKeyboard.AMOUNT.ordinal) editTextSelected(cardsEditText, true, CARDS_TAG)
} }
return@setOnTouchListener true return@setOnTouchListener true
} }
@ -459,30 +461,24 @@ class HandHistoryAdapter(
val playerCardView = row as PlayerCardsRow val playerCardView = row as PlayerCardsRow
// Position // Position
itemView.findViewById<Button>(R.id.positionButton)?.let { button -> itemView.findViewById<Button>(R.id.positionButton)?.let { positionButton ->
button.text = playerCardView.position.value positionButton.text = playerCardView.position.value
} }
// Amount // Amount
itemView.findViewById<EditText>(R.id.cardsEditText)?.let { cardsEditText -> itemView.findViewById<EditText>(R.id.cardsEditText)?.let { cardsEditText ->
val tag = HHKeyboard.AMOUNT.ordinal
val selected = adapter.dataSource.isSelected(position, row, tag) val selected = adapter.dataSource.isSelected(position, row, CARDS_TAG)
// Both are required, otherwise requestFocus() fails // Both are required, otherwise requestFocus() fails
cardsEditText.isFocusable = selected cardsEditText.isFocusable = selected
cardsEditText.isFocusableInTouchMode = selected cardsEditText.isFocusableInTouchMode = selected
Timber.d("Amount at $position is selected: $selected, focusable = ${cardsEditText.isFocusable}, isFocusableInTouchMode = ${cardsEditText.isFocusableInTouchMode}, hasFocus = ${cardsEditText.hasFocus()}, enabled = ${cardsEditText.isEnabled}") Timber.d("cardsEditText at $position is selected: $selected, focusable = ${cardsEditText.isFocusable}, isFocusableInTouchMode = ${cardsEditText.isFocusableInTouchMode}, hasFocus = ${cardsEditText.hasFocus()}, enabled = ${cardsEditText.isEnabled}")
cardsEditText.setBackgroundColor(color(selected)) cardsEditText.setBackgroundColor(color(selected))
cardsEditText.setText(playerCardView.cardHolder?.cards?.formatted(itemView.context)) cardsEditText.setText(playerCardView.cardHolder?.cards?.formatted(itemView.context))
toggleFocus(cardsEditText, selected)
if (selected) {
cardsEditText.requestFocus()
} else {
cardsEditText.clearFocus()
}
} }
} }
} }

@ -4,14 +4,6 @@ import net.pokeranalytics.android.model.handhistory.Position
import net.pokeranalytics.android.ui.modules.handhistory.HandRowType import net.pokeranalytics.android.ui.modules.handhistory.HandRowType
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
enum class HandHistorySettings : RowRepresentable {
BASE,
STRADDLE,
COMMENT,
PLAYER_SETUP;
}
class StraddleRowRepresentable( class StraddleRowRepresentable(
var positions: LinkedHashSet<Position>, var positions: LinkedHashSet<Position>,
var selectedPositions: LinkedHashSet<Position>) : RowRepresentable { var selectedPositions: LinkedHashSet<Position>) : RowRepresentable {

@ -502,18 +502,23 @@ class HandHistoryViewModel : ViewModel(), RowRepresentableDataSource, CardCentra
override fun isSelected(position: Int, row: RowRepresentable, tag: Int): Boolean { override fun isSelected(position: Int, row: RowRepresentable, tag: Int): Boolean {
return when (row) { val currentSelection = this.selectionLiveData
HandRowType.BLINDS -> { val isSelectedIndex = (position == currentSelection.value?.index)
false val isSelectedTag = (tag == currentSelection.value?.tag)
} return isSelectedIndex && isSelectedTag
is ComputedAction -> {
val currentSelection = this.selectionLiveData // return when (row) {
val isSelectedIndex = (position == currentSelection.value?.index) // HandRowType.BLINDS -> {
val isSelectedTag = (tag == currentSelection.value?.tag) // false
isSelectedIndex && isSelectedTag // }
} // is ComputedAction -> {
else -> false // val currentSelection = this.selectionLiveData
} // val isSelectedIndex = (position == currentSelection.value?.index)
// val isSelectedTag = (tag == currentSelection.value?.tag)
// isSelectedIndex && isSelectedTag
// }
// else -> false
// }
} }
fun cardSelectionEnded() { fun cardSelectionEnded() {

@ -17,7 +17,7 @@ interface CardHolder {
abstract class CardsRow(var cardHolder: CardHolder?) : HandHistoryRow { abstract class CardsRow(var cardHolder: CardHolder?) : HandHistoryRow {
private val MAX_CARDS = 7 private val MAXCARDS = 7
val cardCount: Int val cardCount: Int
get() { return this.cardHolder?.cards?.size ?: 0 } get() { return this.cardHolder?.cards?.size ?: 0 }
@ -28,7 +28,7 @@ abstract class CardsRow(var cardHolder: CardHolder?) : HandHistoryRow {
override fun tagForCompletion(handHistory: HandHistory): Int? { override fun tagForCompletion(handHistory: HandHistory): Int? {
return when { return when {
this.cardCount < cardLimit() ?: MAX_CARDS -> 0 this.cardCount < cardLimit() ?: MAXCARDS -> 0
this.cardHolder?.cards?.lastOrNull()?.suit == null -> 0 this.cardHolder?.cards?.lastOrNull()?.suit == null -> 0
else -> null else -> null
} }
@ -81,7 +81,7 @@ abstract class CardsRow(var cardHolder: CardHolder?) : HandHistoryRow {
} }
if (this.cardHolder == null) { if (this.cardHolder == null) {
this.createHolder() this.cardHolder = this.createHolder()
} }
this.cardHolder?.cards?.lastOrNull()?.let { this.cardHolder?.cards?.lastOrNull()?.let {
@ -101,7 +101,7 @@ abstract class CardsRow(var cardHolder: CardHolder?) : HandHistoryRow {
protected open fun canAddMoreCards(): Boolean { protected open fun canAddMoreCards(): Boolean {
this.cardLimit()?.let { limit -> this.cardLimit()?.let { limit ->
return this.cardCount < limit return !(this.cardCount >= limit && lastCard()?.suit != null)
} }
return true return true
} }
@ -141,7 +141,11 @@ class StreetCardsRow(var street: Street, cardHolder: CardHolder) : CardsRow(card
} }
override fun tagForCompletion(handHistory: HandHistory): Int? { override fun tagForCompletion(handHistory: HandHistory): Int? {
return this.street.ordinal return if (canAddMoreCards()) {
this.street.ordinal
} else {
null
}
} }
override fun cardLimit() : Int { override fun cardLimit() : Int {

Loading…
Cancel
Save