Video export early works

hh
Laurent 6 years ago
parent 54de3f4c80
commit 982ded7e66
  1. 5
      app/src/main/AndroidManifest.xml
  2. 11
      app/src/main/java/net/pokeranalytics/android/model/handhistory/Street.kt
  3. 6
      app/src/main/java/net/pokeranalytics/android/ui/modules/feed/FeedFragment.kt
  4. 19
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/HandHistoryFragment.kt
  5. 10
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/ActionList.kt
  6. 11
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/ComputedAction.kt
  7. 7
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/replayer/ChipCanvas.kt
  8. 34
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/replayer/HandStep.kt
  9. 33
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/replayer/PlayerCanvas.kt
  10. 13
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/replayer/ReplayerConfiguration.kt
  11. 56
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/replayer/ReplayerFragment.kt
  12. 26
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/replayer/ReplayerView.kt
  13. 51
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/replayer/TableCanvas.kt
  14. 35
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/replayer/TestActivity.kt
  15. 13
      app/src/main/res/layout/activity_test.xml
  16. 36
      app/src/main/res/layout/fragment_replayer.xml

@ -66,6 +66,11 @@
android:launchMode="singleTop" android:launchMode="singleTop"
android:theme="@style/PokerAnalyticsTheme.MenuDialog" /> android:theme="@style/PokerAnalyticsTheme.MenuDialog" />
<activity
android:name="net.pokeranalytics.android.ui.modules.handhistory.replayer.TestActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity <activity
android:name="net.pokeranalytics.android.ui.modules.bankroll.BankrollActivity" android:name="net.pokeranalytics.android.ui.modules.bankroll.BankrollActivity"
android:launchMode="singleTop" android:launchMode="singleTop"

@ -1,8 +1,13 @@
package net.pokeranalytics.android.model.handhistory package net.pokeranalytics.android.model.handhistory
import android.content.Context
import android.graphics.Canvas
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.modules.handhistory.replayer.HandStep
import net.pokeranalytics.android.ui.modules.handhistory.replayer.ReplayerConfiguration
import net.pokeranalytics.android.ui.modules.handhistory.replayer.TableCanvas
enum class Street { enum class Street : HandStep {
PREFLOP, PREFLOP,
FLOP, FLOP,
TURN, TURN,
@ -35,5 +40,9 @@ enum class Street {
return values()[this.ordinal + 1] return values()[this.ordinal + 1]
} }
override fun draw(configuration: ReplayerConfiguration, canvas: Canvas, context: Context) {
TableCanvas.drawStreet(this, configuration, canvas, context)
}
} }

@ -32,6 +32,7 @@ import net.pokeranalytics.android.ui.modules.filter.FilterableType
import net.pokeranalytics.android.ui.modules.datalist.DataListActivity import net.pokeranalytics.android.ui.modules.datalist.DataListActivity
import net.pokeranalytics.android.ui.modules.filter.FiltersActivity import net.pokeranalytics.android.ui.modules.filter.FiltersActivity
import net.pokeranalytics.android.ui.modules.handhistory.HandHistoryActivity import net.pokeranalytics.android.ui.modules.handhistory.HandHistoryActivity
import net.pokeranalytics.android.ui.modules.handhistory.replayer.TestActivity
import net.pokeranalytics.android.ui.modules.session.SessionActivity import net.pokeranalytics.android.ui.modules.session.SessionActivity
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.SmoothScrollLinearLayoutManager import net.pokeranalytics.android.ui.view.SmoothScrollLinearLayoutManager
@ -465,6 +466,11 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate {
*/ */
private fun createNewHandHistory() { private fun createNewHandHistory() {
val intent = Intent(requireContext(), TestActivity::class.java)
startActivity(intent)
return
AppGuard.endOfUse?.let { endDate -> AppGuard.endOfUse?.let { endDate ->
if (Date().after(endDate)) { if (Date().after(endDate)) {
this.showEndOfUseMessage() this.showEndOfUseMessage()

@ -4,6 +4,7 @@ import android.animation.ValueAnimator
import android.app.Activity import android.app.Activity
import android.app.AlertDialog import android.app.AlertDialog
import android.content.Intent import android.content.Intent
import android.graphics.Bitmap
import android.os.Bundle import android.os.Bundle
import android.os.Handler import android.os.Handler
import android.view.* import android.view.*
@ -17,6 +18,7 @@ import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.PAIllegalStateException import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.handhistory.Position import net.pokeranalytics.android.model.handhistory.Position
import net.pokeranalytics.android.model.handhistory.Street
import net.pokeranalytics.android.model.realm.Player import net.pokeranalytics.android.model.realm.Player
import net.pokeranalytics.android.model.realm.handhistory.Action import net.pokeranalytics.android.model.realm.handhistory.Action
import net.pokeranalytics.android.model.realm.handhistory.Card import net.pokeranalytics.android.model.realm.handhistory.Card
@ -30,6 +32,9 @@ import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheet
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.modules.datalist.DataListActivity import net.pokeranalytics.android.ui.modules.datalist.DataListActivity
import net.pokeranalytics.android.ui.modules.handhistory.model.* import net.pokeranalytics.android.ui.modules.handhistory.model.*
import net.pokeranalytics.android.ui.modules.handhistory.replayer.HandStep
import net.pokeranalytics.android.ui.modules.handhistory.replayer.ReplayerConfiguration
import net.pokeranalytics.android.ui.modules.handhistory.replayer.TableCanvas
import net.pokeranalytics.android.ui.modules.handhistory.views.KeyboardListener import net.pokeranalytics.android.ui.modules.handhistory.views.KeyboardListener
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.SmoothScrollLinearLayoutManager import net.pokeranalytics.android.ui.view.SmoothScrollLinearLayoutManager
@ -680,6 +685,20 @@ class HandHistoryFragment : RealmFragment(), RowRepresentableDelegate, KeyboardL
private fun videoExport() { private fun videoExport() {
val config = ReplayerConfiguration(this.model.handHistory)
val bitmap = Bitmap.createBitmap(480, 480, Bitmap.Config.ARGB_8888)
val tc = TableCanvas(bitmap)
// draw initial table
TableCanvas.initializeTable(config, tc, requireContext())
HandStep.build(this.model.handHistory).forEach {
it.draw(config, tc, requireContext())
}
// Timber.d("**** Start video test") // Timber.d("**** Start video test")
// //
// val width = 480 // val width = 480

@ -30,7 +30,7 @@ interface ActionListListener : PlayerSetupCreationListener {
/*** /***
* ActionList is the class that governs the poker rules and let the user create a HandHistory * ActionList is the class that governs the poker rules and let the user create a HandHistory
*/ */
class ActionList(var listener: ActionListListener) : ArrayList<ComputedAction>(), ActionManager { class ActionList(var listener: ActionListListener? = null) : ArrayList<ComputedAction>(), ActionManager {
private lateinit var handHistory: HandHistory private lateinit var handHistory: HandHistory
@ -190,7 +190,7 @@ class ActionList(var listener: ActionListListener) : ArrayList<ComputedAction>()
*/ */
private fun fireListener() { private fun fireListener() {
if (this.sizeChanged) { if (this.sizeChanged) {
this.listener.actionCountChanged() this.listener?.actionCountChanged()
this.sizeChanged = false this.sizeChanged = false
} }
} }
@ -347,7 +347,7 @@ class ActionList(var listener: ActionListListener) : ArrayList<ComputedAction>()
} }
if (activePositions.isNotEmpty()) { if (activePositions.isNotEmpty()) {
this.listener.actionCountChanged() this.listener?.actionCountChanged()
} }
} }
@ -417,7 +417,7 @@ class ActionList(var listener: ActionListListener) : ArrayList<ComputedAction>()
if (nextStreet != null && this.firstOrNull { it.street == nextStreet } == null) { if (nextStreet != null && this.firstOrNull { it.street == nextStreet } == null) {
if (nextStreet == Street.SUMMARY) { if (nextStreet == Street.SUMMARY) {
this.listener.actionCountChanged() // force recreation of builder rows this.listener?.actionCountChanged() // force recreation of builder rows
} else { } else {
createStreet(nextStreet) createStreet(nextStreet)
} }
@ -506,7 +506,7 @@ class ActionList(var listener: ActionListListener) : ArrayList<ComputedAction>()
playerSetup.stack = stack playerSetup.stack = stack
if (created) { if (created) {
this.listener.playerSetupCreated() this.listener?.playerSetupCreated()
} }
} }

@ -1,5 +1,7 @@
package net.pokeranalytics.android.ui.modules.handhistory.model package net.pokeranalytics.android.ui.modules.handhistory.model
import android.content.Context
import android.graphics.Canvas
import net.pokeranalytics.android.exceptions.PAIllegalStateException import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.handhistory.Position import net.pokeranalytics.android.model.handhistory.Position
import net.pokeranalytics.android.model.handhistory.Street import net.pokeranalytics.android.model.handhistory.Street
@ -7,6 +9,9 @@ import net.pokeranalytics.android.model.realm.handhistory.Action
import net.pokeranalytics.android.model.realm.handhistory.HandHistory import net.pokeranalytics.android.model.realm.handhistory.HandHistory
import net.pokeranalytics.android.model.realm.handhistory.toReadRow import net.pokeranalytics.android.model.realm.handhistory.toReadRow
import net.pokeranalytics.android.ui.modules.handhistory.HandRowType import net.pokeranalytics.android.ui.modules.handhistory.HandRowType
import net.pokeranalytics.android.ui.modules.handhistory.replayer.HandStep
import net.pokeranalytics.android.ui.modules.handhistory.replayer.ReplayerConfiguration
import net.pokeranalytics.android.ui.modules.handhistory.replayer.TableCanvas
import kotlin.math.max import kotlin.math.max
/*** /***
@ -33,7 +38,7 @@ class ComputedAction(var manager: ActionManager,
var action: Action, var action: Action,
var totalPotSize: Double = 0.0, var totalPotSize: Double = 0.0,
var position: Position var position: Position
) : HandHistoryRow, PositionalRow { ) : HandHistoryRow, PositionalRow, HandStep {
/*** /***
* The remaining stack before acting * The remaining stack before acting
@ -303,4 +308,8 @@ class ComputedAction(var manager: ActionManager,
override val positionIndex: Int override val positionIndex: Int
get() { return this.action.position } get() { return this.action.position }
override fun draw(configuration: ReplayerConfiguration, canvas: Canvas, context: Context) {
TableCanvas.drawAction(this, configuration, canvas, context)
}
} }

@ -0,0 +1,7 @@
package net.pokeranalytics.android.ui.modules.handhistory.replayer
import android.graphics.Canvas
class ChipCanvas : Canvas() {
}

@ -0,0 +1,34 @@
package net.pokeranalytics.android.ui.modules.handhistory.replayer
import android.content.Context
import android.graphics.Canvas
import net.pokeranalytics.android.model.handhistory.Street
import net.pokeranalytics.android.model.realm.handhistory.HandHistory
import net.pokeranalytics.android.ui.modules.handhistory.model.ActionList
interface HandStep {
fun draw(configuration: ReplayerConfiguration, canvas: Canvas, context: Context)
companion object {
fun build(handHistory: HandHistory): List<HandStep> {
val actionList = ActionList()
actionList.load(handHistory)
val steps = mutableListOf<HandStep>()
Street.values().forEach { street ->
steps.add(street)
val streetActions = actionList.filter { it.street == street }
for (action in streetActions) {
steps.add(action)
}
}
return steps
}
}
}

@ -0,0 +1,33 @@
package net.pokeranalytics.android.ui.modules.handhistory.replayer
import android.graphics.Canvas
import net.pokeranalytics.android.model.realm.Player
import net.pokeranalytics.android.model.realm.handhistory.Card
class PlayerCanvas : Canvas() {
fun setPlayer(player: Player) {
}
fun setRemainingStack(stack: Double) {
}
fun setPicture(file: String) {
}
fun setCards(cards: List<Card>) {
}
fun showCards(show: Boolean) {
}
fun fold() {
}
}

@ -0,0 +1,13 @@
package net.pokeranalytics.android.ui.modules.handhistory.replayer
import net.pokeranalytics.android.model.realm.handhistory.HandHistory
class ReplayerConfiguration(var handHistory: HandHistory) {
val speed: Double = 1.0
val showVillainHands: Boolean = true
}

@ -0,0 +1,56 @@
package net.pokeranalytics.android.ui.modules.handhistory.replayer
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.fragment.components.BaseFragment
class ReplayerFragment : BaseFragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_replayer, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initData()
initUI()
}
private fun initData() {
}
private fun initUI() {
}
fun play() {
}
fun resume() {
}
fun nextAction() {
}
fun previousAction() {
}
fun nextHand() {
}
fun previousHand() {
}
}

@ -0,0 +1,26 @@
package net.pokeranalytics.android.ui.modules.handhistory.replayer
import android.content.Context
import android.graphics.Canvas
import android.util.AttributeSet
import android.view.View
import timber.log.Timber
class ReplayerView(context: Context, attrs: AttributeSet) : View(context, attrs) {
lateinit var replayerConfiguration: ReplayerConfiguration
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
Timber.d("ReplayerView > onMeasure")
}
override fun onDraw(canvas: Canvas?) {
Timber.d("ReplayerView > onDraw")
canvas?.let {
// TableCanvas.draw(this.replayerConfiguration, it, context)
}
}
}

@ -0,0 +1,51 @@
package net.pokeranalytics.android.ui.modules.handhistory.replayer
import android.content.Context
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.Paint
import android.graphics.RectF
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.handhistory.Street
import net.pokeranalytics.android.model.realm.handhistory.HandHistory
import net.pokeranalytics.android.ui.modules.handhistory.model.ComputedAction
class TableCanvas(bitmap: Bitmap) : Canvas(bitmap) {
companion object {
const val STROKE_WIDTH = 20.0f
fun initializeTable(config: ReplayerConfiguration, canvas: Canvas, context: Context) {
}
fun drawStreet(street: Street, config: ReplayerConfiguration, canvas: Canvas, context: Context) {
}
fun drawAction(action: ComputedAction, config: ReplayerConfiguration, canvas: Canvas, context: Context) {
}
////////
fun setPot(pot: Double, totalPot: Double) {
}
}
fun load(context: Context) {
// create canvasses
val paint = Paint()
paint.color = context.getColor(R.color.green)
paint.style = Paint.Style.STROKE
paint.strokeWidth = STROKE_WIDTH
paint.isAntiAlias = true
val rect = RectF(10f, 10f, 10f, 10.0f)
drawRoundRect(rect, 8f, 8f, paint)
}
}

@ -0,0 +1,35 @@
package net.pokeranalytics.android.ui.modules.handhistory.replayer
import android.graphics.Bitmap
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_test.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.activity.components.BaseActivity
class TestActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_test)
initUI()
}
fun initUI() {
}
override fun onStart() {
super.onStart()
val bm = Bitmap.createBitmap(
this.container.width,
this.container.height,
Bitmap.Config.ARGB_8888)
val tc = TableCanvas(bm)
tc.load(this)
this.image_view.setImageBitmap(bm)
}
}

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/image_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="test" />
</FrameLayout>

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:theme="@style/PokerAnalyticsTheme.Toolbar.Session"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:title="@string/more" />
</com.google.android.material.appbar.AppBarLayout>
<net.pokeranalytics.android.ui.modules.handhistory.replayer.ReplayerView
android:id="@+id/replayer"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/appBar" />
</androidx.constraintlayout.widget.ConstraintLayout>
Loading…
Cancel
Save