Compare commits

...

1 Commits

Author SHA1 Message Date
Razmig Sarkissian 757da5623a merge interface wip 7 years ago
  1. 5
      app/src/main/java/net/pokeranalytics/android/model/LiveData.kt
  2. 16
      app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt
  3. 10
      app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt
  4. 10
      app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt
  5. 12
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  6. 10
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt
  7. 10
      app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt
  8. 2
      app/src/main/java/net/pokeranalytics/android/ui/adapter/components/LiveDataAdapter.kt
  9. 57
      app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowRepresentableAdapter.kt
  10. 25
      app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt
  11. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt
  12. 27
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt
  13. 74
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt
  14. 33
      app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt

@ -13,6 +13,7 @@ import net.pokeranalytics.android.ui.view.Localizable
* An interface to easily handle the validity of any object we want to save
*/
interface ObjectSavable {
fun uniqueIdentifier(): String
fun isValidForSave(): Boolean {
return true
}
@ -64,8 +65,8 @@ enum class LiveData : Localizable {
}
}
fun deleteData(realm:Realm, data:LiveDataDataSource) {
realm.where(this.relatedEntity).equalTo("id", data.primaryKey).findAll().deleteAllFromRealm()
fun deleteData(realm:Realm, data:ObjectSavable) {
realm.where(this.relatedEntity).equalTo("id", data.uniqueIdentifier()).findAll().deleteAllFromRealm()
}
fun updateOrCreate(realm:Realm, primaryKey:String?): RealmObject {

@ -1,6 +1,7 @@
package net.pokeranalytics.android.model.realm
import android.text.InputType
import io.realm.Realm
import io.realm.RealmList
import io.realm.RealmObject
import io.realm.annotations.PrimaryKey
@ -15,7 +16,7 @@ import net.pokeranalytics.android.ui.view.SimpleRow
import java.util.*
import kotlin.collections.ArrayList
open class Bankroll(name: String = "") : RealmObject(), RowRepresentableDataSource, LiveDataDataSource,
open class Bankroll(name: String = "") : RealmObject(), RowRepresentableDataSource,
RowEditable, ObjectSavable {
companion object {
@ -42,10 +43,12 @@ open class Bankroll(name: String = "") : RealmObject(), RowRepresentableDataSour
// @todo rate management
override val title: String get() = this.name
override val primaryKey: String get() = this.id
override fun uniqueIdentifier(): String {
return this.id
}
override fun adapterRows(): ArrayList<RowRepresentable> {
override val adapterRows: ArrayList<RowRepresentable>
get() {
val rows = ArrayList<RowRepresentable>()
rows.add(SimpleRow.NAME)
rows.addAll(BankrollRow.values())
@ -83,6 +86,11 @@ open class Bankroll(name: String = "") : RealmObject(), RowRepresentableDataSour
}
override fun isValidForSave(): Boolean {
val realm = Realm.getDefaultInstance()
return (realm.where(Bankroll::class.java)
.notEqualTo("id", this.id)
.equalTo("name", this.name)
.findAll().size == 0)
return this.name.isNotEmpty()
}
}

@ -13,7 +13,7 @@ import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.SimpleRow
import java.util.*
open class Game : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable, ObjectSavable {
open class Game : RealmObject(), RowRepresentableDataSource, RowEditable, ObjectSavable {
@PrimaryKey
var id = UUID.randomUUID().toString()
@ -24,10 +24,12 @@ open class Game : RealmObject(), RowRepresentableDataSource, LiveDataDataSource,
// A shorter name for the game
var shortName: String? = null
override val title: String get() = this.name
override val primaryKey: String get() = this.id
override fun uniqueIdentifier(): String {
return this.id
}
override fun adapterRows(): ArrayList<RowRepresentable> {
override val adapterRows: ArrayList<RowRepresentable>
get() {
val rows = ArrayList<RowRepresentable>()
rows.add(SimpleRow.NAME)
rows.addAll(GameRow.values())

@ -13,7 +13,7 @@ import net.pokeranalytics.android.ui.view.SimpleRow
import java.util.*
open class Location : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable, ObjectSavable {
open class Location : RealmObject(), RowRepresentableDataSource, RowEditable, ObjectSavable {
@PrimaryKey
var id = UUID.randomUUID().toString()
@ -27,10 +27,12 @@ open class Location : RealmObject(), RowRepresentableDataSource, LiveDataDataSou
// the latitude of the location
var latitude: Double? = null
override val title: String get() = this.name
override val primaryKey: String get() = this.id
override fun uniqueIdentifier(): String {
return this.id
}
override fun adapterRows(): ArrayList<RowRepresentable> {
override val adapterRows: ArrayList<RowRepresentable>
get() {
val rows = ArrayList<RowRepresentable>()
rows.add(SimpleRow.NAME)
rows.addAll(LocationRow.values())

@ -7,6 +7,7 @@ import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.SessionInterface
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.ObjectSavable
import net.pokeranalytics.android.model.extensions.SessionState
import net.pokeranalytics.android.model.extensions.getState
import net.pokeranalytics.android.ui.adapter.components.LiveDataDataSource
@ -21,7 +22,7 @@ import net.pokeranalytics.android.util.toCurrency
import java.util.*
import kotlin.collections.ArrayList
open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource, LiveDataDataSource,
open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource, ObjectSavable,
RowEditable {
@PrimaryKey
@ -232,7 +233,8 @@ open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource
return 0.0
}
override fun adapterRows(): ArrayList<RowRepresentable> {
override val adapterRows: ArrayList<RowRepresentable>
get() {
val rows = ArrayList<RowRepresentable>()
rows.addAll(SessionRow.getRowsForState(getState()))
return rows
@ -266,9 +268,9 @@ open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource
}
}
override var title: String = "Change that: $creationDate"
override val primaryKey: String get() = this.id
override fun uniqueIdentifier(): String {
return this.id
}
override fun getBottomSheetData(row: RowRepresentable): ArrayList<BottomSheetData> {

@ -12,7 +12,7 @@ import net.pokeranalytics.android.ui.view.SimpleRow
import net.pokeranalytics.android.ui.view.TournamentFeatureRow
import java.util.*
open class TournamentFeature : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable, ObjectSavable {
open class TournamentFeature : RealmObject(), RowRepresentableDataSource, RowEditable, ObjectSavable {
@PrimaryKey
var id = UUID.randomUUID().toString()
@ -20,10 +20,12 @@ open class TournamentFeature : RealmObject(), RowRepresentableDataSource, LiveDa
// The name of the feature
var name: String = ""
override val title: String get() = this.name
override val primaryKey: String get() = this.id
override fun uniqueIdentifier(): String {
return this.id
}
override fun adapterRows(): ArrayList<RowRepresentable> {
override val adapterRows: ArrayList<RowRepresentable>
get() {
val rows = ArrayList<RowRepresentable>()
rows.add(SimpleRow.NAME)
rows.addAll(TournamentFeatureRow.values())

@ -13,7 +13,7 @@ import net.pokeranalytics.android.ui.view.TransactionTypeRow
import java.util.*
open class TransactionType : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable, ObjectSavable {
open class TransactionType : RealmObject(), RowRepresentableDataSource, RowEditable, ObjectSavable {
@PrimaryKey
var id = UUID.randomUUID().toString()
@ -30,10 +30,12 @@ open class TransactionType : RealmObject(), RowRepresentableDataSource, LiveData
// The predefined kind, if necessary, like: Withdrawal, deposit, or tips
var kind: Int? = null
override val title: String get() = this.name
override val primaryKey: String get() = this.id
override fun uniqueIdentifier(): String {
return this.id
}
override fun adapterRows(): ArrayList<RowRepresentable> {
override val adapterRows: ArrayList<RowRepresentable>
get() {
val rows = ArrayList<RowRepresentable>()
rows.add(SimpleRow.NAME)
rows.addAll(TransactionTypeRow.values())

@ -11,7 +11,6 @@ import net.pokeranalytics.android.ui.view.RowViewType
interface LiveDataDataSource {
val title: String
val primaryKey: String
}
interface LiveDataDelegate {
@ -30,7 +29,6 @@ class LiveDataAdapter(var adapterDelegate: LiveDataDelegate, var layout: Int? =
} catch (e: Exception) {
e.printStackTrace()
}
}
}

@ -1,11 +1,13 @@
package net.pokeranalytics.android.ui.adapter.components
import android.content.Context
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import net.pokeranalytics.android.ui.view.BindableHolder
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.SimpleRow
/**
* An interface used to provide RowRepresentableAdapter content and value in the form of rows
@ -15,7 +17,21 @@ interface RowRepresentableDataSource {
/**
* Returns a list of rows
*/
fun adapterRows(): ArrayList<RowRepresentable>
val adapterRows: ArrayList<RowRepresentable>?
get() {
return null
}
fun dataForPosition(position: Int): RowRepresentableDataSource? {
return null
}
fun size(): Int {
this.adapterRows?.let {
return it.size
}
return 0
}
/**
* Returns a boolean for a specific row
@ -55,6 +71,7 @@ interface RowRepresentableDataSource {
interface RowRepresentableDelegate {
fun onRowSelected(row: RowRepresentable) {}
fun onActionSelected(row: RowRepresentable) {}
fun dataSelected(data: RowRepresentableDataSource) {}
}
/**
@ -62,60 +79,66 @@ interface RowRepresentableDelegate {
* @param rowRepresentableDataSource the datasource providing rows
* @param rowRepresentableDelegate the delegate, notified of UI actions
*/
class RowRepresentableAdapter(var rowRepresentableDataSource: RowRepresentableDataSource, var rowRepresentableDelegate: RowRepresentableDelegate? = null) :
class RowRepresentableAdapter(var rowRepresentableDataSource: RowRepresentableDataSource, var rowRepresentableDelegate: RowRepresentableDelegate? = null, var layout: Int? = null) :
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
/**
* The list of rows to display
*/
private var rows: ArrayList<RowRepresentable> = ArrayList()
init {
this.rows = rowRepresentableDataSource.adapterRows()
}
override fun getItemViewType(position: Int): Int {
return this.rows[position].viewType
this.rowRepresentableDataSource.adapterRows?.let {
return it[position].viewType
} ?: run {
return RowViewType.DATA.ordinal
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val rowViewType: RowViewType = RowViewType.values()[viewType]
return rowViewType.viewHolder(parent)
return rowViewType.viewHolder(parent, layout)
}
override fun getItemCount(): Int {
return this.rows.size
return this.rowRepresentableDataSource.size()
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val dynamicRow = this.rows[position]
this.rowRepresentableDataSource.adapterRows?.let {rows ->
val listener = View.OnClickListener {
rowRepresentableDelegate?.onRowSelected(dynamicRow)
rowRepresentableDelegate?.onRowSelected(rows[position])
}
val actionListener = View.OnClickListener {
rowRepresentableDelegate?.onActionSelected(dynamicRow)
rowRepresentableDelegate?.onActionSelected(rows[position])
}
(holder as BindableHolder).bind(dynamicRow, this.rowRepresentableDataSource, listener, actionListener)
(holder as BindableHolder).bind(rows[position], this.rowRepresentableDataSource, listener, actionListener)
} ?: run {
this.rowRepresentableDataSource.dataForPosition(position)?.let { dataSource ->
val listener = View.OnClickListener {
rowRepresentableDelegate?.dataSelected(dataSource)
}
(holder as BindableHolder).bind(SimpleRow.NAME, dataSource, listener, null)
}
}
}
/**
* Refresh the row in the adapter
*/
fun refreshRow(row: RowRepresentable) {
this.rowRepresentableDataSource.adapterRows?.let {rows ->
val index = rows.indexOf(row)
if (index >= 0) {
notifyItemChanged(index)
}
}
}
/**
* Refresh all adapter rows
*/
fun refreshAllRows() {
this.rows = rowRepresentableDataSource.adapterRows()
notifyDataSetChanged()
}

@ -5,17 +5,21 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import io.realm.ObjectChangeSet
import io.realm.Realm
import io.realm.RealmResults
import kotlinx.android.synthetic.main.fragment_data_list.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.ObjectSavable
import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.adapter.components.*
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.SettingRow
import net.pokeranalytics.android.ui.view.SimpleRow
import timber.log.Timber
class DataListFragment : PokerAnalyticsFragment(), LiveDataDelegate {
class DataListFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, RowRepresentableDelegate {
private lateinit var dataType: SettingRow
@ -31,18 +35,19 @@ class DataListFragment : PokerAnalyticsFragment(), LiveDataDelegate {
initUI()
}
override fun data(position: Int): LiveDataDataSource {
return (items[position] as LiveDataDataSource)
}
override fun onRowSelected(position: Int) {
this.dataType.relatedResultsRepresentable?.let {
EditableDataActivity.newInstance(requireContext(), it.ordinal, this.data(position).primaryKey)
}
override fun dataForPosition(position: Int): RowRepresentableDataSource? {
return this.items[position] as RowRepresentableDataSource
}
override fun size(): Int {
return items.size
return this.items.size
}
override fun dataSelected(data: RowRepresentableDataSource) {
this.dataType.relatedResultsRepresentable?.let {
EditableDataActivity.newInstance(requireContext(), it.ordinal, (data as ObjectSavable).uniqueIdentifier())
}
}
private fun initData() {
@ -54,7 +59,7 @@ class DataListFragment : PokerAnalyticsFragment(), LiveDataDelegate {
private fun initUI() {
val viewManager = LinearLayoutManager(requireContext())
val dataListAdapter = LiveDataAdapter(this)
val dataListAdapter = RowRepresentableAdapter(this, this)
recyclerView.apply {
setHasFixedSize(true)

@ -112,7 +112,7 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate,
Toast.makeText(requireContext(), "isManaged", Toast.LENGTH_SHORT).show()
Timber.d("is managed")
this.getRealm().executeTransaction {
this.liveDataType.deleteData(it, (this.item as LiveDataDataSource))
this.liveDataType.deleteData(it, (this.item as ObjectSavable))
}
} else {
Toast.makeText(requireContext(), "isNotManaged", Toast.LENGTH_SHORT).show()

@ -9,14 +9,13 @@ import kotlinx.android.synthetic.main.bottom_sheet_list.*
import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.Game
import net.pokeranalytics.android.ui.adapter.components.LiveDataAdapter
import net.pokeranalytics.android.ui.adapter.components.LiveDataDataSource
import net.pokeranalytics.android.ui.adapter.components.LiveDataDelegate
import net.pokeranalytics.android.ui.adapter.components.*
import net.pokeranalytics.android.ui.view.RowRepresentable
class BottomSheetListFragment : BottomSheetFragment(), LiveDataDelegate {
class BottomSheetListFragment : BottomSheetFragment(), RowRepresentableDelegate, RowRepresentableDataSource {
private var realmData: RealmResults<*>? = null
private lateinit var dataAdapter: LiveDataAdapter
private lateinit var dataAdapter: RowRepresentableAdapter
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
@ -29,23 +28,17 @@ class BottomSheetListFragment : BottomSheetFragment(), LiveDataDelegate {
dataAdapter.notifyDataSetChanged()
}
override fun data(position: Int): LiveDataDataSource {
realmData?.let {
return it[position] as LiveDataDataSource
override fun dataForPosition(position: Int): RowRepresentableDataSource? {
return this.realmData?.let {
it[position] as RowRepresentableDataSource
}
//TODO: Change that
return Game()
return null
}
override fun onRowSelected(position: Int) {
realmData?.let {
val selectedData = it[position]
selectedData?.let {data ->
override fun dataSelected(data: RowRepresentableDataSource) {
bottomSheetDelegate.setValue(data, row)
dismiss()
}
}
}
override fun size(): Int {
return realmData?.size ?: 0
@ -70,7 +63,7 @@ class BottomSheetListFragment : BottomSheetFragment(), LiveDataDelegate {
LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_list, view?.bottomSheetContainer, true)
val viewManager = LinearLayoutManager(requireContext())
dataAdapter = LiveDataAdapter(this, R.layout.row_bottom_sheet_title)
dataAdapter = RowRepresentableAdapter(this, this, R.layout.row_bottom_sheet_title)
reyclerView.apply {
setHasFixedSize(true)

@ -1,20 +1,52 @@
package net.pokeranalytics.android.ui.fragment.components.bottomsheet
import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import androidx.recyclerview.widget.GridLayoutManager
import kotlinx.android.synthetic.main.bottom_sheet_grid.*
import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.*
import net.pokeranalytics.android.ui.adapter.TableSizeGridAdapter
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.adapter.components.*
import net.pokeranalytics.android.ui.view.GridSpacingItemDecoration
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.util.px
class TableSize(private var numberOfPlayer:Int): RowRepresentable {
companion object {
val all = Array(8, init =
{ index -> TableSize(index+2)})
}
override val resId: Int?
get() {
return if (this.numberOfPlayer == 2) {
R.string.heads_up
} else {
R.string.max
}
}
class BottomSheetTableSizeGridFragment : BottomSheetFragment() {
override fun localizedTitle(context: Context): String {
this.resId?.let {
return if (this.numberOfPlayer == 2) {
context.getString(it)
} else {
"$this.numberOfPlayer$context.getString(it)"
}
}
return super.localizedTitle(context)
}
private var dataList: ArrayList<String> = ArrayList()
private lateinit var dataAdapter: TableSizeGridAdapter
override val viewType: Int
get() = RowViewType.GRID_TITLE.ordinal
}
class BottomSheetTableSizeGridFragment : BottomSheetFragment(), RowRepresentableDataSource, RowRepresentableDelegate {
private lateinit var dataAdapter: RowRepresentableAdapter
private var defaultSize: Int? = null
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -41,12 +73,6 @@ class BottomSheetTableSizeGridFragment : BottomSheetFragment() {
if (bottomSheetData.isNotEmpty() && bottomSheetData.first().defaultValue != null) {
defaultSize = bottomSheetData.first().defaultValue as Int?
}
dataList.add(getString(net.pokeranalytics.android.R.string.heads_up))
for (i in 3..10) {
dataList.add("$i-max")
}
}
/**
@ -60,11 +86,7 @@ class BottomSheetTableSizeGridFragment : BottomSheetFragment() {
.inflate(net.pokeranalytics.android.R.layout.bottom_sheet_grid, view?.bottomSheetContainer, true)
val viewManager = GridLayoutManager(requireContext(), 3)
dataAdapter = TableSizeGridAdapter(dataList)
dataAdapter.onClickOnItem = { position ->
bottomSheetDelegate.setValue(position + 2, row)
dismiss()
}
dataAdapter = RowRepresentableAdapter(this, this)
val spanCount = 3
val spacing = 2.px
@ -76,7 +98,29 @@ class BottomSheetTableSizeGridFragment : BottomSheetFragment() {
adapter = dataAdapter
addItemDecoration(GridSpacingItemDecoration(spanCount, spacing, includeEdge))
}
}
override fun rowRepresentableForPosition(position: Int): RowRepresentable? {
return TableSize.all[position]
}
override fun positionForRowRepresentable(rowRepresentable: RowRepresentable): Int? {
return TableSize.all.indexOf(rowRepresentable)
}
override fun size(): Int {
return TableSize.all.size
}
override fun onRowSelected(row: RowRepresentable) {
bottomSheetDelegate.setValue(null, this.row)
dismiss()
}
override fun stringForRow(row: RowRepresentable): String {
this.context?.let {
return row.localizedTitle(it)
}
return "UNKNOWN CONTEXT FOR ROW $row"
}
}

@ -3,6 +3,8 @@ package net.pokeranalytics.android.ui.view
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.widget.AppCompatTextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.row_title_value_action.view.*
import net.pokeranalytics.android.R
@ -12,9 +14,7 @@ import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDataSour
* An interface used to factor the configuration of RecyclerView.ViewHolder
*/
interface BindableHolder {
fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource? = null, listener: View.OnClickListener, actionListener: View.OnClickListener? = null) {}
}
enum class RowViewType {
@ -22,7 +22,9 @@ enum class RowViewType {
EDIT_TEXT,
TITLE,
TITLE_VALUE,
TITLE_VALUE_ACTION;
TITLE_VALUE_ACTION,
DATA,
GRID_TITLE;
inner class FakeViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
BindableHolder {
@ -55,7 +57,6 @@ enum class RowViewType {
override fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource?, listener: View.OnClickListener, actionListener: View.OnClickListener?) {
itemView.title.text = row.localizedTitle(itemView.context)
rowRepresentableDataSource?.let { rowDelegate ->
val value = rowDelegate.stringForRow(row)
itemView.value.text = value
itemView.action.visibility = if (value == "--") View.GONE else View.VISIBLE
@ -68,8 +69,25 @@ enum class RowViewType {
}
}
inner class CellSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder {
override fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource?, listener: View.OnClickListener, actionListener: View.OnClickListener?) {
itemView.title.text = row.localizedTitle(itemView.context)
itemView.container.setOnClickListener(listener)
}
}
inner class DataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder {
override fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource?, listener: View.OnClickListener, actionListener: View.OnClickListener?) {
try {
itemView.findViewById<AppCompatTextView>(R.id.title).text = rowRepresentableDataSource?.stringForRow(SimpleRow.NAME)
itemView.findViewById<ConstraintLayout>(R.id.container).setOnClickListener(listener)
} catch (e: Exception) {
e.printStackTrace()
}
}
}
fun viewHolder(parent: ViewGroup): RecyclerView.ViewHolder {
fun viewHolder(parent: ViewGroup, layout: Int? = null): RecyclerView.ViewHolder {
return when (this) {
TITLE -> TitleViewHolder(
LayoutInflater.from(parent.context).inflate(
@ -92,7 +110,12 @@ enum class RowViewType {
false
)
)
GRID_TITLE -> return CellSessionViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.row_bottom_sheet_grid_title, parent, false))
DATA -> {
val layoutToInflate = layout ?: R.layout.row_title
return DataViewHolder(LayoutInflater.from(parent.context).inflate(layoutToInflate, parent, false))
}
else -> FakeViewHolder(parent)
}
}

Loading…
Cancel
Save