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. 23
      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)
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
}
val selected = adapter.dataSource.isSelected(position, row, Street.FLOP.ordinal)
if (selected) turnEditText.requestFocus() else turnEditText.clearFocus()
val selected = adapter.dataSource.isSelected(position, row, Street.TURN.ordinal)
toggleFocus(turnEditText, selected)
}
itemView.findViewById<EditText>(R.id.riverEditText)?.let { riverEditText ->
@ -414,8 +414,8 @@ class HandHistoryAdapter(
riverEditText.text = null
}
val selected = adapter.dataSource.isSelected(position, row, Street.FLOP.ordinal)
if (selected) riverEditText.requestFocus() else riverEditText.clearFocus()
val selected = adapter.dataSource.isSelected(position, row, Street.RIVER.ordinal)
toggleFocus(riverEditText, selected)
}
}
@ -428,23 +428,25 @@ class HandHistoryAdapter(
*/
inner class RowHandPlayerSummary(itemView: View) : RowHandHolder(itemView) {
private val CARDS_TAG = 0
init {
// 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) {
// Both are required, otherwise requestFocus() fails
amountEditText.isFocusable = true
amountEditText.isFocusableInTouchMode = true
cardsEditText.isFocusable = true
cardsEditText.isFocusableInTouchMode = true
amountEditText.requestFocus()
cardsEditText.requestFocus()
editTextSelected(amountEditText, true, HHKeyboard.AMOUNT.ordinal)
editTextSelected(cardsEditText, true, CARDS_TAG)
}
return@setOnTouchListener true
}
@ -459,30 +461,24 @@ class HandHistoryAdapter(
val playerCardView = row as PlayerCardsRow
// Position
itemView.findViewById<Button>(R.id.positionButton)?.let { button ->
button.text = playerCardView.position.value
itemView.findViewById<Button>(R.id.positionButton)?.let { positionButton ->
positionButton.text = playerCardView.position.value
}
// Amount
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
cardsEditText.isFocusable = 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.setText(playerCardView.cardHolder?.cards?.formatted(itemView.context))
if (selected) {
cardsEditText.requestFocus()
} else {
cardsEditText.clearFocus()
}
toggleFocus(cardsEditText, selected)
}
}
}

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

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

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

Loading…
Cancel
Save