diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt b/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt index eaabcf1b..e9e3895f 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt @@ -73,8 +73,6 @@ enum class Stat : RowRepresentable { } override val viewType: Int = RowViewType.TITLE_VALUE.ordinal - override var displayHeader: Boolean = false - override var headerValues: ArrayList = ArrayList() } /** diff --git a/app/src/main/java/net/pokeranalytics/android/model/Limit.kt b/app/src/main/java/net/pokeranalytics/android/model/Limit.kt index 3a907b02..beba08e6 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/Limit.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/Limit.kt @@ -37,8 +37,6 @@ enum class Limit : RowRepresentable { return this.longName } - override var displayHeader: Boolean = false - override var headerValues: ArrayList = ArrayList() } /* diff --git a/app/src/main/java/net/pokeranalytics/android/model/TableSize.kt b/app/src/main/java/net/pokeranalytics/android/model/TableSize.kt index df445b25..f4a4d55e 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/TableSize.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/TableSize.kt @@ -34,6 +34,4 @@ class TableSize(var numberOfPlayer: Int) : RowRepresentable { override val viewType: Int get() = RowViewType.TITLE_GRID.ordinal - override var displayHeader: Boolean = false - override var headerValues: ArrayList = ArrayList() } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt index 5af300a9..904f8fbd 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt @@ -96,8 +96,4 @@ open class Bankroll(name: String = "") : RealmObject(), Savable, return this.name.isNotEmpty() } - @Ignore - override var displayHeader: Boolean = false - @Ignore - override var headerValues: ArrayList = ArrayList() } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt index 43dedd4e..42478cff 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt @@ -77,8 +77,4 @@ open class Game : RealmObject(), Savable, RowRepresentableDataSource, return this.name.isNotEmpty() } - @Ignore - override var displayHeader: Boolean = false - @Ignore - override var headerValues: ArrayList = ArrayList() } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt index f334b695..d82185e1 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt @@ -1,7 +1,6 @@ package net.pokeranalytics.android.model.realm import io.realm.RealmObject -import io.realm.annotations.Ignore import io.realm.annotations.PrimaryKey import net.pokeranalytics.android.model.interfaces.Savable import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource @@ -14,65 +13,61 @@ import java.util.* open class Location : RealmObject(), Savable, RowRepresentableDataSource, RowRepresentable { - @PrimaryKey - var id = UUID.randomUUID().toString() + @PrimaryKey + var id = UUID.randomUUID().toString() - // The name of the location - var name: String = "" + // The name of the location + var name: String = "" - // the longitude of the location - var longitude: Double? = null + // the longitude of the location + var longitude: Double? = null - // the latitude of the location - var latitude: Double? = null + // the latitude of the location + var latitude: Double? = null - override fun getDisplayName(): String { - return this.name - } + override fun getDisplayName(): String { + return this.name + } - override fun uniqueIdentifier(): String { - return this.id - } + override fun uniqueIdentifier(): String { + return this.id + } - override fun adapterRows(): ArrayList { - val rows = ArrayList() - rows.add(SimpleRow.NAME) - rows.addAll(LocationRow.values()) - return rows - } + override fun adapterRows(): ArrayList { + val rows = ArrayList() + rows.add(SimpleRow.NAME) + rows.addAll(LocationRow.values()) + return rows + } - override fun stringForRow(row: RowRepresentable): String { - return when (row) { - SimpleRow.NAME -> this.name - else -> return super.stringForRow(row) - } - } + override fun stringForRow(row: RowRepresentable): String { + return when (row) { + SimpleRow.NAME -> this.name + else -> return super.stringForRow(row) + } + } - override fun editDescriptors(row: RowRepresentable): ArrayList { - val data = java.util.ArrayList() - when (row) { - SimpleRow.NAME -> data.add( - RowRepresentableEditDescriptor( - this.name, - SimpleRow.NAME.resId - ) - ) - } - return data - } + override fun editDescriptors(row: RowRepresentable): ArrayList { + val data = java.util.ArrayList() + when (row) { + SimpleRow.NAME -> data.add( + RowRepresentableEditDescriptor( + this.name, + SimpleRow.NAME.resId + ) + ) + } + return data + } - override fun updateValue(value: Any?, row: RowRepresentable) { - when (row) { - SimpleRow.NAME -> this.name = value as String? ?: "" - } - } + override fun updateValue(value: Any?, row: RowRepresentable) { + when (row) { + SimpleRow.NAME -> this.name = value as String? ?: "" + } + } - override fun isValidForSave(): Boolean { - return this.name.isNotEmpty() - } + override fun isValidForSave(): Boolean { + return this.name.isNotEmpty() + } - @Ignore - override var displayHeader: Boolean = false - @Ignore - override var headerValues: ArrayList = ArrayList() } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt index 34be3cc8..ae4edf57 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt @@ -27,6 +27,7 @@ import kotlin.collections.ArrayList open class Session : RealmObject(), SessionInterface, Savable, RowRepresentableDataSource, RowRepresentable { + enum class Type { CASH_GAME, TOURNAMENT @@ -122,12 +123,6 @@ open class Session : RealmObject(), SessionInterface, Savable, // The features of the tournament, like Knockout, Shootout, Turbo... var tournamentFeatures: RealmList = RealmList() - @Ignore - override var displayHeader: Boolean = false - - @Ignore - override var headerValues: ArrayList = ArrayList() - /** * Start a session */ diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt index fcb91e91..0f8976ce 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt @@ -67,8 +67,4 @@ open class TournamentFeature : RealmObject(), Savable, RowRepresentableDataSourc return this.name.isNotEmpty() } - @Ignore - override var displayHeader: Boolean = false - @Ignore - override var headerValues: ArrayList = ArrayList() } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentType.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentType.kt index 5d9f69a5..fbf73592 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentType.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentType.kt @@ -1,7 +1,6 @@ package net.pokeranalytics.android.model.realm import io.realm.RealmObject -import io.realm.annotations.Ignore import io.realm.annotations.PrimaryKey import net.pokeranalytics.android.model.interfaces.Savable import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource @@ -32,9 +31,4 @@ open class TournamentType : RealmObject(), Savable, RowRepresentableDataSource, } } - @Ignore - override var displayHeader: Boolean = false - @Ignore - override var headerValues: ArrayList = ArrayList() - } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt index a90c5007..6e3df58f 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt @@ -2,7 +2,6 @@ package net.pokeranalytics.android.model.realm import android.text.InputType import io.realm.RealmObject -import io.realm.annotations.Ignore import io.realm.annotations.PrimaryKey import net.pokeranalytics.android.model.interfaces.Savable import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource @@ -76,10 +75,6 @@ open class TransactionType : RealmObject(), Savable, RowRepresentableDataSource, return this.name.isNotEmpty() } - @Ignore - override var displayHeader: Boolean = false - @Ignore - override var headerValues: ArrayList = ArrayList() } enum class TransactionKind { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt index 5190d51e..a47dc74a 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt @@ -4,11 +4,15 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.LinearLayoutManager import io.realm.RealmResults import io.realm.Sort import io.realm.kotlin.where import kotlinx.android.synthetic.main.fragment_history.* +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch import net.pokeranalytics.android.R import net.pokeranalytics.android.model.interfaces.Savable import net.pokeranalytics.android.model.realm.Session @@ -17,12 +21,15 @@ import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment +import net.pokeranalytics.android.ui.view.HistorySessionDiffCallback import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType +import net.pokeranalytics.android.ui.view.rowrepresentable.HeaderRowRepresentable import net.pokeranalytics.android.util.getMonthAndYear import net.pokeranalytics.android.util.isSameDay import net.pokeranalytics.android.util.isSameMonth import net.pokeranalytics.android.util.longDate +import timber.log.Timber import java.util.* class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, RowRepresentableDelegate { @@ -39,6 +46,7 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, Ro private lateinit var historyAdapter: RowRepresentableAdapter private lateinit var realmSessions: RealmResults private val sessions: ArrayList = ArrayList() + private val rows: ArrayList = ArrayList() override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_history, container, false) @@ -57,10 +65,9 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, Ro override fun onResume() { super.onResume() - historyAdapter.notifyDataSetChanged() - sessions.clear() - sessions.addAll(getRealm().copyFromRealm(realmSessions)) + //rows.clear() + //sessions.addAll(getRealm().copyFromRealm(realmSessions)) createSessionsHeaders() } @@ -88,8 +95,6 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, Ro val viewManager = LinearLayoutManager(requireContext()) historyAdapter = RowRepresentableAdapter(this, this) - createSessionsHeaders() - recyclerView.apply { setHasFixedSize(true) layoutManager = viewManager @@ -102,45 +107,71 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, Ro */ private fun createSessionsHeaders() { - val groupedByDay = false + Timber.d("createSessionsHeaders") - val calendar = Calendar.getInstance() - val currentCalendar = Calendar.getInstance() + val oldRows = ArrayList() + oldRows.addAll(rows) - for ((index, session) in sessions.withIndex()) { - currentCalendar.time = session.creationDate - if (groupedByDay) { - if (!calendar.isSameDay(currentCalendar) || index == 0) { - calendar.time = currentCalendar.time - session.displayHeader = true - session.headerValues = arrayListOf(session.creationDate.longDate(), "$ 123") - } - } else { - if (!calendar.isSameMonth(currentCalendar) || index == 0) { - calendar.time = currentCalendar.time - session.displayHeader = true - session.headerValues = arrayListOf(session.creationDate.getMonthAndYear(), "$ 123") + rows.clear() + sessions.clear() + sessions.addAll(getRealm().copyFromRealm(realmSessions)) + + GlobalScope.launch { + + delay(100) + + val groupedByDay = false + val calendar = Calendar.getInstance() + val currentCalendar = Calendar.getInstance() + + for ((index, session) in sessions.withIndex()) { + currentCalendar.time = session.creationDate + if (groupedByDay) { + if (!calendar.isSameDay(currentCalendar) || index == 0) { + calendar.time = currentCalendar.time + val header = HeaderRowRepresentable( + customViewType = RowViewType.HEADER_SESSION, + title = session.creationDate.longDate() + ) + rows.add(header) + } + } else { + if (!calendar.isSameMonth(currentCalendar) || index == 0) { + calendar.time = currentCalendar.time + val header = HeaderRowRepresentable( + customViewType = RowViewType.HEADER_SESSION, + title = session.creationDate.getMonthAndYear() + ) + rows.add(header) + } } + rows.add(session) } - } + val diffResult = DiffUtil.calculateDiff(HistorySessionDiffCallback(rows, oldRows)) + historyAdapter.updateRows(diffResult) + } } override fun rowRepresentableForPosition(position: Int): RowRepresentable { - return this.sessions[position] + return this.rows[position] } override fun numberOfRows(): Int { - return this.sessions.size + return this.rows.size } override fun viewTypeForPosition(position: Int): Int { - return RowViewType.ROW_SESSION.ordinal + if (rows[position].viewType == RowViewType.HEADER_SESSION.ordinal) { + return RowViewType.HEADER_SESSION.ordinal + } else { + return RowViewType.ROW_SESSION.ordinal + } } override fun indexForRow(row: RowRepresentable): Int { - return this.sessions.indexOf(row) + return this.rows.indexOf(row) } override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/HistorySessionDiffCallback.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/HistorySessionDiffCallback.kt new file mode 100644 index 00000000..a0badd28 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/HistorySessionDiffCallback.kt @@ -0,0 +1,57 @@ +package net.pokeranalytics.android.ui.view + +import androidx.annotation.Nullable +import androidx.recyclerview.widget.DiffUtil +import net.pokeranalytics.android.model.realm.Session +import net.pokeranalytics.android.ui.view.rowrepresentable.HeaderRowRepresentable + +class HistorySessionDiffCallback(var newRows: List, var oldRows: List) : + DiffUtil.Callback() { + + override fun getOldListSize(): Int { + return oldRows.size + } + + override fun getNewListSize(): Int { + return newRows.size + } + + override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean { + + if (oldRows[oldItemPosition] is Session && newRows[newItemPosition] is Session) { + val session1 = oldRows[oldItemPosition] as Session + val session2 = newRows[newItemPosition] as Session + return session1.id == session2.id + } else if (oldRows[oldItemPosition] is HeaderRowRepresentable && newRows[newItemPosition] is HeaderRowRepresentable) { + val header1 = oldRows[oldItemPosition] as HeaderRowRepresentable + val header2 = newRows[newItemPosition] as HeaderRowRepresentable + return header1.title == header2.title + } + + return false + } + + override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean { + // Force to update all the rows that were already there + + if (oldRows[oldItemPosition] is Session && newRows[newItemPosition] is Session) { + val session1 = oldRows[oldItemPosition] as Session + val session2 = newRows[newItemPosition] as Session + + return false //session1.id == session2.id + + } else if (oldRows[oldItemPosition] is HeaderRowRepresentable && newRows[newItemPosition] is HeaderRowRepresentable) { + val header1 = oldRows[oldItemPosition] as HeaderRowRepresentable + val header2 = newRows[newItemPosition] as HeaderRowRepresentable + return header1.title == header2.title + } + + return false + } + + @Nullable + override fun getChangePayload(oldItemPosition: Int, newItemPosition: Int): Any? { + //you can return particular field for changed item. + return super.getChangePayload(oldItemPosition, newItemPosition) + } +} \ 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 b7aa3730..3b74557a 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 @@ -44,16 +44,6 @@ interface Displayable : Localizable { get() { return BottomSheetType.NONE } - - val displayHeader: Boolean - get() { - return false - } - - val headerValues: ArrayList - get() { - return ArrayList() - } } /** 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 badf2572..f8ebe941 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 @@ -3,13 +3,13 @@ package net.pokeranalytics.android.ui.view import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.core.view.isVisible import androidx.recyclerview.widget.RecyclerView import kotlinx.android.synthetic.main.row_bottom_sheet_grid_title.view.* import kotlinx.android.synthetic.main.row_bottom_sheet_title.view.* import kotlinx.android.synthetic.main.row_header_title_amount.view.* import kotlinx.android.synthetic.main.row_header_title_value.view.* import kotlinx.android.synthetic.main.row_history_session.view.* +import kotlinx.android.synthetic.main.row_history_session_header.view.* import kotlinx.android.synthetic.main.row_stats_title_value.view.* import kotlinx.android.synthetic.main.row_title.view.* import kotlinx.android.synthetic.main.row_title_switch.view.* @@ -27,7 +27,7 @@ interface BindableHolder { fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { - } + } } @@ -37,6 +37,7 @@ enum class RowViewType { HEADER_TITLE_VALUE, HEADER_TITLE_AMOUNT, HEADER_TITLE_AMOUNT_BIG, + HEADER_SESSION, EDIT_TEXT, TITLE, TITLE_VALUE, @@ -92,7 +93,8 @@ enum class RowViewType { LayoutInflater.from(parent.context).inflate( R.layout.row_bottom_sheet_grid_title, parent, - false) + false + ) ) TITLE_SWITCH -> TitleSwitchViewHolder( LayoutInflater.from(parent.context).inflate( @@ -122,11 +124,21 @@ enum class RowViewType { false ) ) + HEADER_SESSION -> { + HeaderSessionViewHolder( + LayoutInflater.from(parent.context).inflate( + R.layout.row_history_session_header, + parent, + false + ) + ) + } ROW_SESSION -> RowSessionViewHolder( LayoutInflater.from(parent.context).inflate( R.layout.row_history_session, parent, - false) + false + ) ) STAT -> StatsTitleValueViewHolder( LayoutInflater.from(parent.context).inflate( @@ -176,29 +188,28 @@ enum class RowViewType { } } - inner class TitleViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { - override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { + override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { itemView.rowTitle_title.text = row.localizedTitle(itemView.context) - val listener = View.OnClickListener { - adapter.delegate?.onRowSelected(position, row) - } - itemView.rowTitle_container.setOnClickListener(listener) + val listener = View.OnClickListener { + adapter.delegate?.onRowSelected(position, row) + } + itemView.rowTitle_container.setOnClickListener(listener) } } inner class TitleValueViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { - override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { + override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { itemView.rowTitleValue_title.text = row.localizedTitle(itemView.context) - adapter.dataSource?.let { + adapter.dataSource?.let { itemView.rowTitleValue_value.text = it.stringForRow(row, itemView.context) } - val listener = View.OnClickListener { - adapter.delegate?.onRowSelected(position, row) - } - itemView.rowTitleValue_container.setOnClickListener(listener) + val listener = View.OnClickListener { + adapter.delegate?.onRowSelected(position, row) + } + itemView.rowTitleValue_container.setOnClickListener(listener) itemView.rowTitleValue_separator.visibility = if (row.needSeparator) View.VISIBLE else View.GONE } } @@ -230,45 +241,45 @@ enum class RowViewType { inner class TitleSwitchViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { - override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { + override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { itemView.rowTitleSwitch_title.text = row.localizedTitle(itemView.context) - adapter.dataSource.let { + adapter.dataSource.let { itemView.rowTitleSwitch_switch.isChecked = it.boolForRow(row) - itemView.rowTitleSwitch_switch.setOnCheckedChangeListener { buttonView, isChecked -> - adapter.delegate?.onRowValueChanged(isChecked, row) - } + itemView.rowTitleSwitch_switch.setOnCheckedChangeListener { buttonView, isChecked -> + adapter.delegate?.onRowValueChanged(isChecked, row) + } } - val listener = View.OnClickListener { - itemView.rowTitleSwitch_switch.isChecked = !itemView.rowTitleSwitch_switch.isChecked - } - itemView.rowTitleSwitch_container.setOnClickListener(listener) - itemView.rowTitleSwitch_separator.visibility = if (row.needSeparator) View.VISIBLE else View.GONE + val listener = View.OnClickListener { + itemView.rowTitleSwitch_switch.isChecked = !itemView.rowTitleSwitch_switch.isChecked + } + itemView.rowTitleSwitch_container.setOnClickListener(listener) + itemView.rowTitleSwitch_separator.visibility = if (row.needSeparator) View.VISIBLE else View.GONE } } inner class TitleValueActionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { - override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { + override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { itemView.rowTitleValueAction_title.text = row.localizedTitle(itemView.context) adapter.dataSource.let { rowDelegate -> val value = rowDelegate.stringForRow(row, itemView.context) itemView.rowTitleValueAction_value.text = value itemView.rowTitleValueAction_action.visibility = if (value == "--") View.GONE else View.VISIBLE - rowDelegate.actionIconForRow(row)?.let {icon -> + rowDelegate.actionIconForRow(row)?.let { icon -> itemView.rowTitleValueAction_action.setImageResource(icon) } } - val listener = View.OnClickListener { - adapter.delegate?.onRowSelected(position, row) - } - val actionListener = View.OnClickListener { - adapter.delegate?.onRowSelected(position, row, true) - } - itemView.rowTitleValueAction_container.setOnClickListener(listener) + val listener = View.OnClickListener { + adapter.delegate?.onRowSelected(position, row) + } + val actionListener = View.OnClickListener { + adapter.delegate?.onRowSelected(position, row, true) + } + itemView.rowTitleValueAction_container.setOnClickListener(listener) itemView.rowTitleValueAction_action.setOnClickListener(actionListener) } } @@ -293,17 +304,28 @@ enum class RowViewType { } } + + inner class HeaderSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), + BindableHolder { + override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { + itemView.sessionHeaderTitle.text = row.localizedTitle(itemView.context) + } + } + inner class RowSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { + //TODO: Header + /* if (row.displayHeader) { itemView.sessionHeader.isVisible = true itemView.sessionHeader.text = row.headerValues.firstOrNull() ?: "" } else { itemView.sessionHeader.isVisible = false } + */ itemView.sessionRow.setData(row as Session) val listener = View.OnClickListener { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/BankrollRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/BankrollRow.kt index 905925f3..68eb181d 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/BankrollRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/BankrollRow.kt @@ -30,7 +30,4 @@ enum class BankrollRow : RowRepresentable { } } - override var displayHeader: Boolean = false - override var headerValues: ArrayList = ArrayList() - } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/GameRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/GameRow.kt index 68e70018..0c4234fc 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/GameRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/GameRow.kt @@ -29,6 +29,4 @@ enum class GameRow : RowRepresentable { } } - override var displayHeader: Boolean = false - override var headerValues: ArrayList = ArrayList() } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/HeaderRowRepresentable.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/HeaderRowRepresentable.kt index d95411fb..bec9dfe3 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/HeaderRowRepresentable.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/HeaderRowRepresentable.kt @@ -8,7 +8,7 @@ import net.pokeranalytics.android.ui.view.RowViewType * A class to display headers as row representable */ class HeaderRowRepresentable( - customViewType: RowViewType? = RowViewType.HEADER, + var customViewType: RowViewType? = RowViewType.HEADER, override var resId: Int? = null, var title: String? = null, var value: String? = null @@ -27,7 +27,5 @@ class HeaderRowRepresentable( override val viewType: Int = customViewType?.ordinal ?: RowViewType.HEADER.ordinal - override var displayHeader: Boolean = false - override var headerValues: ArrayList = ArrayList() } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/LocationRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/LocationRow.kt index 2651073c..2cc89860 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/LocationRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/LocationRow.kt @@ -30,6 +30,4 @@ enum class LocationRow : RowRepresentable { } } - override var displayHeader: Boolean = false - override var headerValues: ArrayList = ArrayList() } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SessionRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SessionRow.kt index 408babda..2d22d3e5 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SessionRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SessionRow.kt @@ -127,6 +127,4 @@ enum class SessionRow : RowRepresentable { } } - override var displayHeader: Boolean = false - override var headerValues: ArrayList = ArrayList() } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SimpleRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SimpleRow.kt index fcdf9b6a..95c0c1df 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SimpleRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SimpleRow.kt @@ -12,6 +12,4 @@ enum class SimpleRow : RowRepresentable { override val resId: Int? = R.string.name override val viewType: Int = RowViewType.TITLE_VALUE.ordinal override val bottomSheetType: BottomSheetType = BottomSheetType.EDIT_TEXT - override var displayHeader: Boolean = false - override var headerValues: ArrayList = ArrayList() } \ No newline at end of file diff --git a/app/src/main/res/layout/row_history_session_header.xml b/app/src/main/res/layout/row_history_session_header.xml new file mode 100644 index 00000000..7599c69f --- /dev/null +++ b/app/src/main/res/layout/row_history_session_header.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file