diff --git a/app/src/main/java/net/pokeranalytics/android/model/handhistory/HHBuilder.kt b/app/src/main/java/net/pokeranalytics/android/model/handhistory/HHBuilder.kt index c29a249b..56ae164f 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/handhistory/HHBuilder.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/handhistory/HHBuilder.kt @@ -55,19 +55,13 @@ class HHBuilder { } /*** - * Fills the [actionsPerStreet] variable with the proper actions + * Fills the [sortedActions] variable with the proper actions * Pre-computes the potsizes for the video export */ private fun load() { -// var potSize = 0.0 var totalPotSize = 0.0 - // on veut sortir: - // une liste d'action pour générer des images / des animations => ImageRepresentable? - // une liste de lignes à afficher dans un tableau => RowRepresentable - // => ne pas oublier flop / turn / river / résumé - // sorted actions val computedActions = mutableListOf() val sortedActions = this.handHistory.actions.sortedBy { it.index } @@ -78,15 +72,6 @@ class HHBuilder { } this.sortedActions = computedActions -// Street.values().forEach { street -> -// val filteredActions = sortedActions.filter { it.street == street.ordinal } -// val computedActions = filteredActions.map { action -> -// totalPotSize += action.effectiveAmount -// ComputedAction(action, potSize, totalPotSize, action.positionRemainingStack) -// } -// this.actionsPerStreet[street] = computedActions -// potSize = totalPotSize -// } } /*** @@ -265,7 +250,7 @@ class HHBuilder { } /*** - * Saves the current hand state, represented by [actionsPerStreet], in the database + * Saves the current hand state in the database */ private fun save() { @@ -279,7 +264,10 @@ class HHBuilder { rows.add(StreetHeader(street, this.handHistory.cardsForStreet(street), potSize)) val actions = this.sortedActions.filter { it.action.street == street.ordinal } rows.addAll(actions) - potSize = actions.last().totalPotSize + + if (actions.isNotEmpty()) { + potSize = actions.last().totalPotSize + } } return rows diff --git a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt index cbdec38b..90601f1d 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt @@ -187,6 +187,11 @@ class PokerAnalyticsMigration : RealmMigration { hhSchema.addField("numberOfPlayers", Int::class.java) hhSchema.addField("comment", String::class.java) hhSchema.addField("heroIndex", Int::class.java).setRequired("heroIndex", false) + hhSchema.addField("dayOfWeek", Integer::class.java) + hhSchema.addField("month", Integer::class.java) + hhSchema.addField("year", Integer::class.java) + hhSchema.addField("dayOfMonth", Integer::class.java) + val cardSchema = schema.create("Card") cardSchema.addField("value", Int::class.java) 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 1242fe1d..6e0e8d48 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 @@ -4,14 +4,17 @@ import io.realm.RealmList import io.realm.RealmObject import io.realm.annotations.Ignore import io.realm.annotations.PrimaryKey +import net.pokeranalytics.android.model.filter.Filterable import net.pokeranalytics.android.model.handhistory.HandSetup 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.view.RowRepresentable import java.util.* -open class HandHistory : RealmObject(), Identifiable { +open class HandHistory : RealmObject(), RowRepresentable, Identifiable, Filterable, TimeFilterable { @PrimaryKey override var id = UUID.randomUUID().toString() @@ -23,6 +26,10 @@ open class HandHistory : RealmObject(), Identifiable { * The date of the hand history */ var date: Date = Date() + set(value) { + field = value + this.updateTimeParameter(field) + } /*** * The session whose hand was played @@ -79,6 +86,12 @@ open class HandHistory : RealmObject(), Identifiable { */ var playerSetups: RealmList = RealmList() + // Timed interface + override var dayOfWeek: Int? = null + override var month: Int? = null + override var year: Int? = null + override var dayOfMonth: Int? = null + fun configure(handSetup: HandSetup) { handSetup.tableSize?.let { this.numberOfPlayers = it } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/HandHistoryActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/HandHistoryActivity.kt index 522eb07d..3b8cbb9c 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/HandHistoryActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/HandHistoryActivity.kt @@ -16,8 +16,8 @@ class HandHistoryActivity : BaseActivity() { companion object { - fun newInstance(fragment: Fragment, id: String?) { - val intent = Intent(fragment.requireContext(), DataListActivity::class.java) + fun newInstance(fragment: Fragment, id: String? = null) { + val intent = Intent(fragment.requireContext(), HandHistoryActivity::class.java) id?.let { intent.putExtra(IntentKey.IDENTIFIER.keyName, it) } fragment.startActivityForResult(intent, RequestCode.NEW_HAND_HISTORY.value) } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/FeedHandHistoryRowRepresentableAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/FeedHandHistoryRowRepresentableAdapter.kt new file mode 100644 index 00000000..ac6f60f5 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/FeedHandHistoryRowRepresentableAdapter.kt @@ -0,0 +1,164 @@ +package net.pokeranalytics.android.ui.adapter + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.appcompat.widget.AppCompatTextView +import androidx.recyclerview.widget.RecyclerView +import io.realm.RealmResults +import kotlinx.android.synthetic.main.row_hand_history.view.* +import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.realm.handhistory.HandHistory +import net.pokeranalytics.android.ui.view.BindableHolder +import net.pokeranalytics.android.ui.view.RowViewType +import net.pokeranalytics.android.util.NULL_TEXT +import net.pokeranalytics.android.util.extensions.getMonthAndYear +import java.util.* +import kotlin.collections.HashMap + + +/** + * An adapter capable of displaying a list of RowRepresentables + * @param dataSource the datasource providing rows + * @param delegate the delegate, notified of UI actions + */ +class FeedHandHistoryRowRepresentableAdapter( + var delegate: RowRepresentableDelegate? = null, + var realmHandHistories: RealmResults, + var distinctHandHistoryHeaders: RealmResults +) : + RecyclerView.Adapter() { + + private var headersPositions = HashMap() + private lateinit var sortedHeaders: SortedMap + + init { + refreshData() + } + + inner class RowHandHistoryViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), + BindableHolder { + + fun bind(position: Int, row: HandHistory?, adapter: FeedHandHistoryRowRepresentableAdapter) { + + itemView.handHistoryRow.setData(row as HandHistory) + val listener = View.OnClickListener { + adapter.delegate?.onRowSelected(position, row) + } + itemView.handHistoryRow.setOnClickListener(listener) + } + + } + /** + * Display a header + */ + inner class HeaderTitleViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), + BindableHolder { + fun bind(title: String) { + // Title + itemView.findViewById(R.id.title)?.let { + it.text = title + } + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + return if (viewType == RowViewType.ROW_TRANSACTION.ordinal) { + val layout = LayoutInflater.from(parent.context).inflate(R.layout.row_transaction, parent, false) + RowHandHistoryViewHolder(layout) + } else { + val layout = LayoutInflater.from(parent.context).inflate(R.layout.row_header_title, parent, false) + HeaderTitleViewHolder(layout) + } + + } + + + override fun getItemViewType(position: Int): Int { + return if (sortedHeaders.containsKey(position)) { + RowViewType.HEADER_TITLE.ordinal + } else { + 1 +// RowViewType.ROW_HAND_HISTORY.ordinal + } + } + + override fun getItemCount(): Int { + return realmHandHistories.size + distinctHandHistoryHeaders.size + } + + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + if (holder is RowHandHistoryViewHolder) { + holder.bind(position, getHandHistoryForPosition(position), this) + } else if (holder is HeaderTitleViewHolder) { + holder.bind(getHeaderForPosition(position)) + } + } + + /** + * Return the header + */ + private fun getHeaderForPosition(position: Int): String { + if (sortedHeaders.containsKey(position)) { + val realmHeaderPosition = sortedHeaders.keys.indexOf(position) + return distinctHandHistoryHeaders[realmHeaderPosition]?.date?.getMonthAndYear() ?: "" + } + return NULL_TEXT + } + + /** + * Get real index + */ + private fun getHandHistoryForPosition(position: Int): HandHistory? { + + // Row position + var headersBefore = 0 + for (key in sortedHeaders.keys) { + if (position > key) { + headersBefore++ + } else { + break + } + } + + return realmHandHistories[position - headersBefore] + } + + /** + * Refresh headers positions + */ + fun refreshData() { + + headersPositions.clear() + + var previousYear = Int.MAX_VALUE + var previousMonth = Int.MAX_VALUE + + val calendar = Calendar.getInstance() + + // Add headers if the date doesn't exist yet + for ((index, handHistory) in realmHandHistories.withIndex()) { + calendar.time = handHistory.date + if (checkHeaderCondition(calendar, previousYear, previousMonth)) { + headersPositions[index + headersPositions.size] = handHistory.date + previousYear = calendar.get(Calendar.YEAR) + previousMonth = calendar.get(Calendar.MONTH) + } + } + + sortedHeaders = headersPositions.toSortedMap() + + } + + /** + * Check if we need to add a header + * Can be change to manage different condition + */ + private fun checkHeaderCondition(currentCalendar: Calendar, previousYear: Int, previousMonth: Int): Boolean { + return currentCalendar.get(Calendar.YEAR) == previousYear && currentCalendar.get(Calendar.MONTH) < previousMonth || (currentCalendar.get( + Calendar.YEAR) < previousYear) + + } + + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt index 0300ac10..e02b4363 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt @@ -2,10 +2,6 @@ package net.pokeranalytics.android.ui.fragment import android.app.Activity.RESULT_OK import android.content.Intent -import android.graphics.Bitmap -import android.graphics.Canvas -import android.graphics.Paint -import android.graphics.Rect import android.os.Bundle import android.view.* import android.widget.Toast @@ -25,12 +21,13 @@ import net.pokeranalytics.android.model.interfaces.Editable import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.Transaction +import net.pokeranalytics.android.model.realm.handhistory.HandHistory import net.pokeranalytics.android.ui.activity.* import net.pokeranalytics.android.ui.activity.components.RequestCode +import net.pokeranalytics.android.ui.adapter.FeedHandHistoryRowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.FeedSessionRowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.FeedTransactionRowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate -import net.pokeranalytics.android.ui.extensions.toByteArray import net.pokeranalytics.android.ui.fragment.components.FilterableFragment import net.pokeranalytics.android.ui.interfaces.FilterActivityRequestCode import net.pokeranalytics.android.ui.interfaces.FilterableType @@ -39,8 +36,6 @@ import net.pokeranalytics.android.ui.view.SmoothScrollLinearLayoutManager import net.pokeranalytics.android.util.Preferences import net.pokeranalytics.android.util.billing.AppGuard import net.pokeranalytics.android.util.extensions.count -import net.pokeranalytics.android.util.video.MMediaMuxer -import timber.log.Timber import java.text.SimpleDateFormat import java.util.* @@ -48,7 +43,8 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { private enum class Tab { SESSIONS, - TRANSACTIONS + TRANSACTIONS, + HAND_HISTORY } companion object { @@ -66,10 +62,12 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { private var currentTab = Tab.SESSIONS - private lateinit var feedSessionAdapter: FeedSessionRowRepresentableAdapter - private lateinit var feedTransactionAdapter: FeedTransactionRowRepresentableAdapter + private lateinit var sessionAdapter: FeedSessionRowRepresentableAdapter + private lateinit var transactionAdapter: FeedTransactionRowRepresentableAdapter + private lateinit var handHistoryAdapter: FeedHandHistoryRowRepresentableAdapter private lateinit var realmTransactions: RealmResults + private lateinit var realmHandHistories: RealmResults private lateinit var betaLimitDate: Date private var newSessionCreated: Boolean = false @@ -78,7 +76,7 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { private var selectedTransactionPosition: Int = -1 override val observedEntities: List> = - listOf(Session::class.java, Transaction::class.java) + listOf(Session::class.java, Transaction::class.java, HandHistory::class.java) override fun entitiesChanged( clazz: Class, @@ -88,12 +86,16 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { when (clazz.kotlin) { Session::class -> { - this.feedSessionAdapter.refreshData() - this.feedSessionAdapter.notifyDataSetChanged() + this.sessionAdapter.refreshData() + this.sessionAdapter.notifyDataSetChanged() } Transaction::class -> { - this.feedTransactionAdapter.refreshData() - this.feedTransactionAdapter.notifyDataSetChanged() + this.transactionAdapter.refreshData() + this.transactionAdapter.notifyDataSetChanged() + } + HandHistory::class -> { + this.handHistoryAdapter.refreshData() + this.handHistoryAdapter.notifyDataSetChanged() } } @@ -133,7 +135,7 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { when (item?.itemId) { R.id.duplicate -> { - val sessionId = this.feedSessionAdapter.sessionIdForPosition(menuPosition) + val sessionId = this.sessionAdapter.sessionIdForPosition(menuPosition) if (sessionId != null) { createNewSession(true, sessionId = sessionId, duplicate = true) } else { @@ -204,6 +206,8 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { this.selectTab(Tab.TRANSACTIONS) } else if (requestCode == RequestCode.NEW_SESSION.value && resultCode == RESULT_OK) { this.selectTab(Tab.SESSIONS) + } else if (requestCode == RequestCode.NEW_HAND_HISTORY.value && resultCode == RESULT_OK) { + this.selectTab(Tab.HAND_HISTORY) } } @@ -229,6 +233,9 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { RequestCode.FEED_TRANSACTION_DETAILS.value ) } + is HandHistory -> { + HandHistoryActivity.newInstance(this, row.id) + } } } @@ -237,7 +244,7 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { */ private fun initUI() { - this.feedSessionAdapter = FeedSessionRowRepresentableAdapter(getRealm(), this) + this.sessionAdapter = FeedSessionRowRepresentableAdapter(getRealm(), this) registerForContextMenu(this.menuRecyclerView) @@ -287,6 +294,9 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { Tab.TRANSACTIONS.ordinal -> { currentFilterable = FilterableType.TRANSACTION } + Tab.HAND_HISTORY.ordinal -> { + currentFilterable = FilterableType.HAND_HISTORY + } } tabChanged(tab.position) } @@ -331,10 +341,10 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { when (filter?.filterableType) { FilterableType.SESSION -> { - this.feedSessionAdapter.filter = filter + this.sessionAdapter.filter = filter } else -> { - this.feedSessionAdapter.filter = null + this.sessionAdapter.filter = null } } } @@ -357,7 +367,7 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { getRealm().where().distinct("year", "month").findAll() } distinctDateTransactions = distinctDateTransactions.sort("date", Sort.DESCENDING) - this.feedTransactionAdapter = + this.transactionAdapter = FeedTransactionRowRepresentableAdapter( this, realmTransactions, @@ -366,6 +376,33 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { } + private fun loadHandHistories(filter: Filter? = null) { + val handHistoryFilter: Filter? = filter?.let { + if (it.filterableType == FilterableType.HAND_HISTORY) { + it + } else { + null + } + } + + // Transactions + this.realmHandHistories = + handHistoryFilter?.results() ?: run { getRealm().where().findAll() } + this.realmHandHistories = this.realmHandHistories.sort("date", Sort.DESCENDING) + + var distinctDates = handHistoryFilter?.results("year", "month") ?: run { + getRealm().where().distinct("year", "month").findAll() + } + distinctDates = distinctDates.sort("date", Sort.DESCENDING) + this.handHistoryAdapter = + FeedHandHistoryRowRepresentableAdapter( + this, + realmHandHistories, + distinctDates + ) + + } + /** * Create a new cash game */ @@ -423,56 +460,52 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { */ private fun createNewHandHistory() { - Timber.d("**** Start video test") - - val width = 480 - val height = 480 + HandHistoryActivity.newInstance(this) -// val testView = View(requireContext()) -// testView.setBackgroundColor(requireContext().getColor(R.color.blue)) -// testView.layoutParams = ViewGroup.LayoutParams(width, height) +// Timber.d("**** Start video test") // -// val videoView = VideoView(requireContext()) - - val bitmap = Bitmap.createBitmap(480, 480, Bitmap.Config.ARGB_8888) - val canvas = Canvas(bitmap) - - val paint = Paint() - paint.isAntiAlias = true - paint.style = Paint.Style.STROKE - paint.strokeWidth = 20.0.toFloat() - paint.color = requireContext().getColor(R.color.blue) - - canvas.drawRect(Rect(0,0, width, height), paint) - - bitmap.let { - - val muxer = MMediaMuxer() - - Timber.d("width = ${it.width}, height = ${it.height}") - - val width = (it.width / 2) * 2 - val height= (it.height / 2) * 2 - - muxer.Init(requireActivity(), width, height, "hhVideo", "YES!") - - Timber.d("**** Adds frames") - for (i in 0..50) { - - try { - val byteArray = it.toByteArray() - muxer.AddFrame(byteArray) - } catch (e: Exception) { - Timber.e("error = ${e.message}") - } - } - Timber.d("**** Create video") - muxer.CreateVideo() - - val path = muxer.GetPath() - Timber.d("**** Video path = $path") - } +// val width = 480 +// val height = 480 +// +// val bitmap = Bitmap.createBitmap(480, 480, Bitmap.Config.ARGB_8888) +// val canvas = Canvas(bitmap) +// +// val paint = Paint() +// paint.isAntiAlias = true +// paint.style = Paint.Style.STROKE +// paint.strokeWidth = 20.0.toFloat() +// paint.color = requireContext().getColor(R.color.blue) +// +// canvas.drawRect(Rect(0,0, width, height), paint) +// +// bitmap.let { +// +// val muxer = MMediaMuxer() +// +// Timber.d("width = ${it.width}, height = ${it.height}") +// +// val width = (it.width / 2) * 2 +// val height= (it.height / 2) * 2 +// +// muxer.Init(requireActivity(), width, height, "hhVideo", "YES!") +// +// Timber.d("**** Adds frames") +// for (i in 0..50) { +// +// try { +// val byteArray = it.toByteArray() +// muxer.AddFrame(byteArray) +// } catch (e: Exception) { +// Timber.e("error = ${e.message}") +// } +// } +// Timber.d("**** Create video") +// muxer.CreateVideo() +// +// val path = muxer.GetPath() +// Timber.d("**** Video path = $path") +// } } @@ -506,6 +539,7 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { val filter: Filter? = this.currentFilter(this.requireContext(), getRealm()) this.loadSessions(filter) this.loadTransactions(filter) + this.loadHandHistories(filter) filter?.let { when (it.filterableType) { @@ -531,6 +565,7 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { super.removeFilter() this.loadSessions() this.loadTransactions() + this.loadHandHistories() this.setAdapter() } @@ -547,8 +582,8 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { private fun setAdapter() { when (this.currentTab) { - Tab.SESSIONS -> menuRecyclerView.adapter = feedSessionAdapter - Tab.TRANSACTIONS -> menuRecyclerView.adapter = feedTransactionAdapter + Tab.SESSIONS -> menuRecyclerView.adapter = sessionAdapter + Tab.TRANSACTIONS -> menuRecyclerView.adapter = transactionAdapter } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/HandHistoryRowView.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/HandHistoryRowView.kt new file mode 100644 index 00000000..6b163de6 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/HandHistoryRowView.kt @@ -0,0 +1,68 @@ +package net.pokeranalytics.android.ui.view + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.widget.FrameLayout +import androidx.constraintlayout.widget.ConstraintLayout +import kotlinx.android.synthetic.main.row_transaction_view.view.* +import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.realm.handhistory.HandHistory +import net.pokeranalytics.android.util.extensions.getDayNumber +import net.pokeranalytics.android.util.extensions.getShortDayName + +/** + * Display a transaction row + */ +class HandHistoryRowView : FrameLayout { + + private lateinit var rowHandHistory: ConstraintLayout + + /** + * Constructors + */ + constructor(context: Context) : super(context) { + init() + } + + constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) { + init() + } + + constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { + init() + } + + /** + * Init + */ + private fun init() { + val layoutInflater = LayoutInflater.from(context) + rowHandHistory = layoutInflater.inflate(R.layout.row_hand_history_view, this, false) as ConstraintLayout + val layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) + addView(rowHandHistory, layoutParams) + } + + /** + * Set the session data to the view + */ + fun setData(handHistory: HandHistory) { + + // Date + rowHandHistory.transactionDateDay.text = handHistory.date.getShortDayName() + rowHandHistory.transactionDateNumber.text = handHistory.date.getDayNumber() + + // Title / Game type +// var title = handHistory.type?.name ?: "" + " " + handHistory.comment +// var subtitle = handHistory.bankroll?.name +// +// rowHandHistory.transactionTitle.text = title +// rowHandHistory.transactionSubtitle.text = subtitle +// +// Amount +// val formattedStat = ComputedStat(Stat.NET_RESULT, handHistory.amount, currency = handHistory.bankroll?.utilCurrency).format() +// rowHandHistory.transactionAmount.setTextFormat(formattedStat, context) + + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt index f957f5d2..4568665e 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt @@ -84,6 +84,7 @@ enum class RowViewType(private var layoutRes: Int) { // Custom row ROW_SESSION(R.layout.row_feed_session), ROW_TRANSACTION(R.layout.row_transaction), +// ROW_HAND_HISTORY(R.layout.row_hand_history), ROW_TOP_10(R.layout.row_top_10), ROW_BUTTON(R.layout.row_button), ROW_FOLLOW_US(R.layout.row_follow_us), @@ -95,7 +96,7 @@ enum class RowViewType(private var layoutRes: Int) { ROW_PLAYER(R.layout.row_player), ROW_PLAYER_IMAGE(R.layout.row_player_image), ROW_HAND_ACTION(R.layout.row_hand_action), - ROW_HAND_STREET(R.layout.row_hand_street), + ROW_HAND_STREET(R.layout.row_hand_cards), // Separator SEPARATOR(R.layout.row_separator); @@ -124,7 +125,6 @@ enum class RowViewType(private var layoutRes: Int) { // Row Transaction ROW_TOP_10 -> RowTop10ViewHolder(layout) - ROW_PLAYER -> RowPlayerViewHolder(layout) ROW_PLAYER_IMAGE -> RowPlayerImageViewHolder(layout) @@ -145,6 +145,7 @@ enum class RowViewType(private var layoutRes: Int) { LEGEND_DEFAULT -> LegendDefaultViewHolder(layout) // Hand History +// ROW_HAND_HISTORY -> RowHandHistoryViewHolder(layout) ROW_HAND_ACTION -> RowHandAction(layout) ROW_HAND_STREET -> RowHandStreet(layout) @@ -579,7 +580,6 @@ enum class RowViewType(private var layoutRes: Int) { } } - /** * Display a top 10 row */ diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/handhistory/StreetHeader.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/handhistory/StreetHeader.kt index dde88bbf..776681e0 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/handhistory/StreetHeader.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/handhistory/StreetHeader.kt @@ -6,4 +6,6 @@ import net.pokeranalytics.android.ui.view.RowRepresentable class StreetHeader(var street: Street, var cards: List, var potSize: Double) : RowRepresentable { + override val viewType: Int = 0 + } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/holder/RowHandHistoryViewHolder.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/holder/RowHandHistoryViewHolder.kt new file mode 100644 index 00000000..89da7c52 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/holder/RowHandHistoryViewHolder.kt @@ -0,0 +1,22 @@ +package net.pokeranalytics.android.ui.view.holder + +import android.view.View +import androidx.recyclerview.widget.RecyclerView +import kotlinx.android.synthetic.main.row_hand_history.view.* +import net.pokeranalytics.android.model.realm.handhistory.HandHistory +import net.pokeranalytics.android.ui.adapter.FeedHandHistoryRowRepresentableAdapter +import net.pokeranalytics.android.ui.view.BindableHolder + +class RowHandHistoryViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), + BindableHolder { + + fun bind(position: Int, row: HandHistory?, adapter: FeedHandHistoryRowRepresentableAdapter) { + + itemView.handHistoryRow.setData(row as HandHistory) + val listener = View.OnClickListener { + adapter.delegate?.onRowSelected(position, row) + } + itemView.handHistoryRow.setOnClickListener(listener) + } + +} \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_feed.xml b/app/src/main/res/layout/fragment_feed.xml index 3c58f015..54513ca7 100644 --- a/app/src/main/res/layout/fragment_feed.xml +++ b/app/src/main/res/layout/fragment_feed.xml @@ -44,6 +44,12 @@ android:layout_height="wrap_content" android:text="@string/operations" /> + + diff --git a/app/src/main/res/layout/row_hand_action.xml b/app/src/main/res/layout/row_hand_action.xml index 3509b841..a5ae5d16 100644 --- a/app/src/main/res/layout/row_hand_action.xml +++ b/app/src/main/res/layout/row_hand_action.xml @@ -1,6 +1,42 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/row_hand_cards.xml b/app/src/main/res/layout/row_hand_cards.xml new file mode 100644 index 00000000..7217bb2c --- /dev/null +++ b/app/src/main/res/layout/row_hand_cards.xml @@ -0,0 +1,37 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/row_hand_history.xml b/app/src/main/res/layout/row_hand_history.xml new file mode 100644 index 00000000..c1d8d759 --- /dev/null +++ b/app/src/main/res/layout/row_hand_history.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/row_hand_history_view.xml b/app/src/main/res/layout/row_hand_history_view.xml new file mode 100644 index 00000000..3473977d --- /dev/null +++ b/app/src/main/res/layout/row_hand_history_view.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/row_hand_street.xml b/app/src/main/res/layout/row_hand_street.xml deleted file mode 100644 index 3509b841..00000000 --- a/app/src/main/res/layout/row_hand_street.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file