diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/Card.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/Card.kt index 4e1a9fd4..1a5b2f48 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/Card.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/Card.kt @@ -124,7 +124,7 @@ open class Card : RealmObject() { /*** * Returns the formatted value of the card */ - val formattedValue: String + private val formattedValue: String get() { return Value.format(this.value) } /*** 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 af061c05..d3f2f132 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 @@ -1,17 +1,23 @@ package net.pokeranalytics.android.model.realm.handhistory +import android.content.Context import io.realm.RealmList import io.realm.RealmObject import io.realm.annotations.Ignore import io.realm.annotations.PrimaryKey +import net.pokeranalytics.android.R import net.pokeranalytics.android.model.filter.Filterable import net.pokeranalytics.android.model.handhistory.HandSetup import net.pokeranalytics.android.model.handhistory.Position +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.model.CardHolder import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.util.extensions.addLineReturn +import net.pokeranalytics.android.util.extensions.formatted +import net.pokeranalytics.android.util.extensions.fullDate import java.util.* open class HandHistory : RealmObject(), RowRepresentable, Identifiable, Filterable, TimeFilterable, @@ -148,10 +154,10 @@ open class HandHistory : RealmObject(), RowRepresentable, Identifiable, Filterab this.actions.add(action) } -// fun cardsForStreet(street: Street): MutableList { -// return this.board.sortedBy { it.index }.take(street.totalBoardCards).toMutableList() -// } -// + fun cardsForStreet(street: Street): MutableList { + return this.board.sortedBy { it.index }.take(street.totalBoardCards).toMutableList() + } + // fun playerSetupForPosition(position: Int) : PlayerSetup { // this.playerSetups.firstOrNull { it.position == position }?.let { // return it @@ -182,6 +188,11 @@ open class HandHistory : RealmObject(), RowRepresentable, Identifiable, Filterab } } + private val sortedActions: List + get() { + return this.actions.sortedBy { it.index } + } + fun undefinedPositions(): List { val positions = Position.positionsPerPlayers(this.numberOfPlayers) val copy = positions.clone() as LinkedHashSet @@ -198,4 +209,95 @@ open class HandHistory : RealmObject(), RowRepresentable, Identifiable, Filterab return playerSetup } + /*** + * Returns the pot size at the start of the given [street] + */ + fun potSizeForStreet(street: Street): Double { + val sortedActions = this.sortedActions + val firstIndexOfStreet = sortedActions.firstOrNull { it.street == street }?.index + ?: sortedActions.size + return this.anteSum + sortedActions.take(firstIndexOfStreet).sumByDouble { it.effectiveAmount } + } + + override fun localizedString(context: Context): CharSequence { + + val positions = Position.positionsPerPlayers(this.numberOfPlayers) + + var string = "" + + // Settings + val players = "${this.numberOfPlayers} ${context.getString(R.string.players)}" + val firstLineComponents = mutableListOf(this.date.fullDate(), players) + + this.smallBlind?.let { sb -> + this.bigBlind?.let { bb -> + firstLineComponents.add("$sb/$bb") + } + } + if (this.ante > 0.0) { + firstLineComponents.add("ante ${this.ante}") + } + string = string.plus(firstLineComponents.joinToString(" - ")) + string = string.addLineReturn(2) + + // Players + this.playerSetups.sortedBy { it.position }.forEach { + string = string.plus(localizedPlayerSetup(it, positions, context)) + string = string.addLineReturn() + } + + // Actions per street + val sortedActions = this.actions.sortedBy { it.index } + Street.values().forEach { street -> + + string = string.addLineReturn(2) + + val streetActions = sortedActions.filter { it.street == street } + if (streetActions.isNotEmpty()) { + + val streetItems = mutableListOf(context.getString(street.resId)) + + val potSize = this.potSizeForStreet(street) + if (potSize > 0) { + streetItems.add(context.getString(R.string.pot_size)) + streetItems.add(potSize.formatted()) + } + + if (this.cards.isNotEmpty()) { + streetItems.add(this.cardsForStreet(street).formatted(context) ?: "") + } + string = string.plus(streetItems.joinToString(" ")) + string = string.addLineReturn() + + streetActions.forEach { action -> + string = string.plus(localizedAction(action, positions, context)) + string = string.addLineReturn() + } + } + + } + + return string + } + + private fun localizedPlayerSetup(playerSetup: PlayerSetup, positions: LinkedHashSet, context: Context): String { + val playerItems = mutableListOf(positions.elementAt(playerSetup.position).value) + playerItems.add("[${this.cards.formatted(context)}]") + playerSetup.stack?.let { stack -> + playerItems.add("- $stack") + } + return playerItems.joinToString(" ") + } + + private fun localizedAction(action: Action, positions: LinkedHashSet, context: Context): String { + val actionItems = mutableListOf(positions.elementAt(action.position).value) + action.type?.let { type -> + actionItems.add(context.getString(type.resId)) + } + action.amount?.let { amount -> + actionItems.add(amount.formatted()) + } + return actionItems.joinToString(" ") + } + } \ No newline at end of file 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 66a9fe51..62b1bc16 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 @@ -4,9 +4,9 @@ import io.realm.RealmList import io.realm.RealmObject import net.pokeranalytics.android.model.realm.Player import net.pokeranalytics.android.ui.modules.handhistory.model.CardHolder +import net.pokeranalytics.android.ui.view.Localizable -open class PlayerSetup : RealmObject(), - CardHolder { +open class PlayerSetup : RealmObject(), CardHolder, Localizable { /*** * The player @@ -28,12 +28,4 @@ open class PlayerSetup : RealmObject(), */ override var cards: RealmList = RealmList() -// fun cardValueSelected(value: Card.Value) { -// -// } -// -// fun cardSuitSelected(suit: Card.Suit) { -// -// } - } 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 ce8d0e2c..36580cfd 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 @@ -1,6 +1,7 @@ package net.pokeranalytics.android.ui.modules.handhistory import android.animation.ValueAnimator +import android.app.AlertDialog import android.os.Bundle import android.view.* import android.view.animation.AccelerateDecelerateInterpolator @@ -29,6 +30,7 @@ import net.pokeranalytics.android.ui.view.SmoothScrollLinearLayoutManager import net.pokeranalytics.android.util.extensions.findById import timber.log.Timber + class HandHistoryFragment : RealmFragment(), RowRepresentableDelegate, KeyboardListener { /*** @@ -208,6 +210,7 @@ class HandHistoryFragment : RealmFragment(), RowRepresentableDelegate, KeyboardL R.id.delete -> deleteHand() R.id.back -> showPreviousHand() R.id.forward -> showNextHand() + R.id.export -> exportHand() } return true } @@ -548,4 +551,40 @@ class HandHistoryFragment : RealmFragment(), RowRepresentableDelegate, KeyboardL this.findNextActionToEdit(0) } + private fun exportHand() { + + val builder: AlertDialog.Builder = AlertDialog.Builder(context) + builder.setTitle(R.string.export) + builder.setItems(arrayOf( + getString(R.string.video), + "GIF", + getString(R.string.text) + )) { _, index -> + // The 'which' argument contains the index position + // of the selected item + when (index) { + 0 -> this.videoExport() + 1 -> this.gifExport() + 2 -> this.textExport() + } + } + builder.create().show() + + } + + private fun videoExport() { + + } + + private fun gifExport() { + + } + + private fun textExport() { + + val s = this.model.handHistory.localizedString(this.requireContext()) + Timber.d("hand = $s") + + } + } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt index 2239258c..07ca8aaa 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt @@ -95,4 +95,8 @@ interface Localizable { return "LOCALISATION NOT FOUND" } + fun localizedString(context: Context): CharSequence { + return "" + } + } diff --git a/app/src/main/java/net/pokeranalytics/android/util/extensions/StringExtensions.kt b/app/src/main/java/net/pokeranalytics/android/util/extensions/StringExtensions.kt new file mode 100644 index 00000000..abdedc0e --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/util/extensions/StringExtensions.kt @@ -0,0 +1,5 @@ +package net.pokeranalytics.android.util.extensions + +fun String.addLineReturn(n: Int = 1): String { + return this.plus("\n".repeat(n)) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_get_app.xml b/app/src/main/res/drawable/ic_get_app.xml new file mode 100644 index 00000000..bad8ceca --- /dev/null +++ b/app/src/main/res/drawable/ic_get_app.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/menu/toolbar_hand_history.xml b/app/src/main/res/menu/toolbar_hand_history.xml index c147419b..fc35bc22 100644 --- a/app/src/main/res/menu/toolbar_hand_history.xml +++ b/app/src/main/res/menu/toolbar_hand_history.xml @@ -7,6 +7,12 @@ android:title="@string/save" app:showAsAction="always" /> + + mississipi Add vilain Forward + Video + Text