Adds export button + HH text export

hh
Laurent 6 years ago
parent 457cb4f95e
commit ef52c4a071
  1. 2
      app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/Card.kt
  2. 110
      app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/HandHistory.kt
  3. 12
      app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/PlayerSetup.kt
  4. 39
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/HandHistoryFragment.kt
  5. 4
      app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt
  6. 5
      app/src/main/java/net/pokeranalytics/android/util/extensions/StringExtensions.kt
  7. 9
      app/src/main/res/drawable/ic_get_app.xml
  8. 6
      app/src/main/res/menu/toolbar_hand_history.xml
  9. 2
      app/src/main/res/values/strings.xml

@ -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) }
/***

@ -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<Card> {
// return this.board.sortedBy { it.index }.take(street.totalBoardCards).toMutableList()
// }
//
fun cardsForStreet(street: Street): MutableList<Card> {
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<Action>
get() {
return this.actions.sortedBy { it.index }
}
fun undefinedPositions(): List<Position> {
val positions = Position.positionsPerPlayers(this.numberOfPlayers)
val copy = positions.clone() as LinkedHashSet<Position>
@ -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<CharSequence>(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<Position>, 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<Position>, 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(" ")
}
}

@ -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<Card> = RealmList()
// fun cardValueSelected(value: Card.Value) {
//
// }
//
// fun cardSuitSelected(suit: Card.Suit) {
//
// }
}

@ -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<CharSequence>(
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")
}
}

@ -95,4 +95,8 @@ interface Localizable {
return "LOCALISATION NOT FOUND"
}
fun localizedString(context: Context): CharSequence {
return ""
}
}

@ -0,0 +1,5 @@
package net.pokeranalytics.android.util.extensions
fun String.addLineReturn(n: Int = 1): String {
return this.plus("\n".repeat(n))
}

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M19,9h-4V3H9v6H5l7,7 7,-7zM5,18v2h14v-2H5z"/>
</vector>

@ -7,6 +7,12 @@
android:title="@string/save"
app:showAsAction="always" />
<item
android:id="@+id/export"
android:title="@string/export"
android:icon="@drawable/ic_get_app"
app:showAsAction="always" />
<item
android:id="@+id/add"
android:title="@string/add_a_hand_history"

@ -794,5 +794,7 @@
<string name="mississipi">mississipi</string>
<string name="add_vilain">Add vilain</string>
<string name="forward">Forward</string>
<string name="video">Video</string>
<string name="text">Text</string>
</resources>

Loading…
Cancel
Save