From 33dc9437bca7e6558a85c8235cc130d79311f240 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Fri, 22 Feb 2019 13:02:41 +0100 Subject: [PATCH 1/2] updated RowRepresentable --- .../pokeranalytics/android/model/LiveData.kt | 2 + .../android/model/realm/Bankroll.kt | 15 ++-- .../android/model/realm/Game.kt | 16 ++-- .../android/model/realm/Location.kt | 9 ++- .../android/model/realm/TournamentFeature.kt | 9 ++- .../android/model/realm/TransactionType.kt | 9 ++- .../components/RowRepresentableAdapter.kt | 77 ++++++++++++------- .../android/ui/fragment/DataListFragment.kt | 32 +++++--- .../ui/fragment/EditableDataFragment.kt | 9 +-- .../android/ui/view/RowRepresentable.kt | 8 +- .../android/ui/view/RowViewType.kt | 35 ++++++++- 11 files changed, 160 insertions(+), 61 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt b/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt index 48212554..48a1065d 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt @@ -16,6 +16,8 @@ interface ObjectSavable { fun isValidForSave(): Boolean { return true } + + fun uniqueIdentifier(): String } /** 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 240ce6de..6ef2e2d3 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 @@ -8,15 +8,12 @@ import net.pokeranalytics.android.model.ObjectSavable import net.pokeranalytics.android.ui.adapter.components.LiveDataDataSource import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDataSource import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetData -import net.pokeranalytics.android.ui.view.BankrollRow -import net.pokeranalytics.android.ui.view.RowEditable -import net.pokeranalytics.android.ui.view.RowRepresentable -import net.pokeranalytics.android.ui.view.SimpleRow +import net.pokeranalytics.android.ui.view.* import java.util.* import kotlin.collections.ArrayList open class Bankroll(name: String = "") : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, - RowEditable, ObjectSavable { + RowEditable, ObjectSavable, RowRepresentable { companion object { fun newInstance() : Bankroll { @@ -42,6 +39,14 @@ open class Bankroll(name: String = "") : RealmObject(), RowRepresentableDataSour // @todo rate management + override fun getDisplayName(): String { + return this.name + } + + override fun uniqueIdentifier(): String { + return this.id + } + override val title: String get() = this.name override val primaryKey: String get() = this.id 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 2171bfb4..186a9579 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 @@ -4,16 +4,15 @@ import android.text.InputType import io.realm.RealmObject import io.realm.annotations.PrimaryKey import net.pokeranalytics.android.model.ObjectSavable +import net.pokeranalytics.android.ui.adapter.components.DisplayableDelegate import net.pokeranalytics.android.ui.adapter.components.LiveDataDataSource import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDataSource import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetData -import net.pokeranalytics.android.ui.view.GameRow -import net.pokeranalytics.android.ui.view.RowEditable -import net.pokeranalytics.android.ui.view.RowRepresentable -import net.pokeranalytics.android.ui.view.SimpleRow +import net.pokeranalytics.android.ui.view.* import java.util.* -open class Game : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable, ObjectSavable { +open class Game : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable, ObjectSavable, + RowRepresentable { @PrimaryKey var id = UUID.randomUUID().toString() @@ -26,6 +25,13 @@ open class Game : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, override val title: String get() = this.name override val primaryKey: String get() = this.id + override fun getDisplayName(): String { + return this.name + } + + override fun uniqueIdentifier(): String { + return this.id + } override fun adapterRows(): ArrayList { val rows = 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 e5d24908..b6fa2e76 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 @@ -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, LiveDataDataSource, RowEditable, ObjectSavable, RowRepresentable { @PrimaryKey var id = UUID.randomUUID().toString() @@ -29,6 +29,13 @@ open class Location : RealmObject(), RowRepresentableDataSource, LiveDataDataSou override val title: String get() = this.name override val primaryKey: String get() = this.id + override fun getDisplayName(): String { + return this.name + } + + override fun uniqueIdentifier(): String { + return this.id + } override fun adapterRows(): ArrayList { val rows = ArrayList() 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 b90c304b..edd3e5a8 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 @@ -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, LiveDataDataSource, RowEditable, ObjectSavable, RowRepresentable { @PrimaryKey var id = UUID.randomUUID().toString() @@ -22,6 +22,13 @@ open class TournamentFeature : RealmObject(), RowRepresentableDataSource, LiveDa override val title: String get() = this.name override val primaryKey: String get() = this.id + override fun getDisplayName(): String { + return this.name + } + + override fun uniqueIdentifier(): String { + return this.id + } override fun adapterRows(): ArrayList { val rows = 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 f569440e..1f4dc94f 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 @@ -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, LiveDataDataSource, RowEditable, ObjectSavable, RowRepresentable { @PrimaryKey var id = UUID.randomUUID().toString() @@ -32,6 +32,13 @@ open class TransactionType : RealmObject(), RowRepresentableDataSource, LiveData override val title: String get() = this.name override val primaryKey: String get() = this.id + override fun getDisplayName(): String { + return this.name + } + + override fun uniqueIdentifier(): String { + return this.id + } override fun adapterRows(): ArrayList { val rows = ArrayList() diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowRepresentableAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowRepresentableAdapter.kt index 9a1eb91c..b32ff748 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowRepresentableAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowRepresentableAdapter.kt @@ -1,23 +1,49 @@ package net.pokeranalytics.android.ui.adapter.components +import android.inputmethodservice.Keyboard import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil 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.RowRepresentableDiffCallback -import net.pokeranalytics.android.ui.view.RowViewType +import net.pokeranalytics.android.ui.view.* + +interface RowRepresentableDataSource : DisplayableDataSource { + fun rowRepresentableForPosition(position:Int): RowRepresentable { + if (this.numberOfRows() > position) { + return this.adapterRows()[position] + } else { + throw IllegalStateException("Need to implement Data Source") + } + } + + fun numberOfRows(): Int { + return this.adapterRows().size + } + + fun viewTypeForPosition(position:Int): Int { + return this.rowRepresentableForPosition(position).viewType + } + + fun indexForRow(row:RowRepresentable): Int { + return this.adapterRows().indexOf(row) + } +} + +interface RowRepresentableDelegate : DisplayableDelegate { + fun onIndexSelected(position: Int) {} +} /** * An interface used to provide RowRepresentableAdapter content and value in the form of rows */ -interface RowRepresentableDataSource { +interface DisplayableDataSource { /** * Returns a list of rows */ - fun adapterRows(): ArrayList + fun adapterRows(): ArrayList { + return ArrayList() + } /** * Returns a boolean for a specific row @@ -48,39 +74,29 @@ interface RowRepresentableDataSource { * - switch (bool) * - static content * */ - } /** * A delegate used to propagate UI actions */ -interface RowRepresentableDelegate { +interface DisplayableDelegate { fun onRowSelected(row: RowRepresentable) {} fun onActionSelected(row: RowRepresentable) {} } /** * An adapter capable of displaying a list of RowRepresentables - * @param rowRepresentableDataSource the datasource providing rows - * @param rowRepresentableDelegate the delegate, notified of UI actions + * @param dataSource the datasource providing rows + * @param delegate the delegate, notified of UI actions */ class RowRepresentableAdapter( - var rowRepresentableDataSource: RowRepresentableDataSource, - var rowRepresentableDelegate: RowRepresentableDelegate? = null + var dataSource: RowRepresentableDataSource, + var delegate: RowRepresentableDelegate? = null ) : RecyclerView.Adapter() { - /** - * The list of rows to display - */ - private var rows: ArrayList = ArrayList() - - init { - this.rows = rowRepresentableDataSource.adapterRows() - } - override fun getItemViewType(position: Int): Int { - return this.rows[position].viewType + return this.dataSource.viewTypeForPosition(position) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { @@ -89,28 +105,29 @@ class RowRepresentableAdapter( } override fun getItemCount(): Int { - return this.rows.size + return this.dataSource.numberOfRows() } override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - val dynamicRow = this.rows[position] + val dynamicRow = this.dataSource.rowRepresentableForPosition(position) val listener = View.OnClickListener { - rowRepresentableDelegate?.onRowSelected(dynamicRow) + delegate?.onRowSelected(dynamicRow) + delegate?.onIndexSelected(position) } val actionListener = View.OnClickListener { - rowRepresentableDelegate?.onActionSelected(dynamicRow) + delegate?.onActionSelected(dynamicRow) } - (holder as BindableHolder).bind(dynamicRow, this.rowRepresentableDataSource, listener, actionListener) + (holder as BindableHolder).bind(dynamicRow, this.dataSource, listener, actionListener) } /** * Refresh the row in the adapter */ fun refreshRow(row: RowRepresentable) { - val index = rows.indexOf(row) + val index = this.dataSource.indexForRow(row) if (index >= 0) { notifyItemChanged(index) } @@ -120,9 +137,11 @@ class RowRepresentableAdapter( * Update UI */ fun updateRows(newRows: ArrayList) { - val diffResult = DiffUtil.calculateDiff(RowRepresentableDiffCallback(newRows, rows, rowRepresentableDataSource)) + /* + val diffResult = DiffUtil.calculateDiff(RowRepresentableDiffCallback(newRows, rows, dataSource)) this.rows = newRows diffResult.dispatchUpdatesTo(this) + */ } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt index a5e69cc5..5b7798c4 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt @@ -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.RowViewType import net.pokeranalytics.android.ui.view.SettingRow import timber.log.Timber -class DataListFragment : PokerAnalyticsFragment(), LiveDataDelegate { +class DataListFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, RowRepresentableDelegate{ private lateinit var dataType: SettingRow @@ -31,20 +35,28 @@ class DataListFragment : PokerAnalyticsFragment(), LiveDataDelegate { initUI() } - override fun data(position: Int): LiveDataDataSource { - return (items[position] as LiveDataDataSource) + override fun rowRepresentableForPosition(position: Int): RowRepresentable { + return this.items[position] as RowRepresentable } - override fun onRowSelected(position: Int) { + override fun numberOfRows(): Int { + return this.items.size + } + + override fun viewTypeForPosition(position: Int): Int { + return RowViewType.DATA.ordinal + } + + override fun indexForRow(row: RowRepresentable): Int { + return this.items.indexOf(row) + } + + override fun onIndexSelected(position: Int) { this.dataType.relatedResultsRepresentable?.let { - EditableDataActivity.newInstance(requireContext(), it.ordinal, this.data(position).primaryKey) + EditableDataActivity.newInstance(requireContext(), it.ordinal, (this.items[position] as ObjectSavable).uniqueIdentifier()) } } - override fun size(): Int { - return items.size - } - private fun initData() { } @@ -54,7 +66,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) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt index 27c2dcc4..bde542bb 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt @@ -12,10 +12,7 @@ import net.pokeranalytics.android.R import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.ObjectSavable import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity -import net.pokeranalytics.android.ui.adapter.components.LiveDataDataSource -import net.pokeranalytics.android.ui.adapter.components.RowRepresentableAdapter -import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDataSource -import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDelegate +import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetDelegate import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetFragment @@ -66,16 +63,16 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, override fun clickOnClear(row: RowRepresentable) { Toast.makeText(requireContext(), "Clear: $row", Toast.LENGTH_SHORT).show() - (this.item as RowEditable).updateValue(null, row) this.getRealm().executeTransaction { + (this.item as RowEditable).updateValue(null, row) it.copyToRealmOrUpdate(this.item) } rowRepresentableAdapter.refreshRow(row) } override fun setValue(value: Any?, row: RowRepresentable) { - (this.item as RowEditable).updateValue(value, row) this.getRealm().executeTransaction { + (this.item as RowEditable).updateValue(value, row) it.copyToRealmOrUpdate(this.item) } rowRepresentableAdapter.refreshRow(row) 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 6174bc78..f3770e73 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 @@ -29,11 +29,17 @@ interface Localizable { } } + +interface RowRepresentable : Displayable { + fun getDisplayName(): String { + return "UNKNOWN NAME" + } +} /** * An interface used so that enums values can be represented visually * as rows in RecyclerViews */ -interface RowRepresentable : Localizable { +interface Displayable: Localizable { /** * The type of view associated with the row */ 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 73bf2d22..3dab41d9 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,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_header_title_value.view.* import kotlinx.android.synthetic.main.row_title.view.* @@ -26,7 +28,9 @@ enum class RowViewType { EDIT_TEXT, TITLE, TITLE_VALUE, - TITLE_VALUE_ACTION; + TITLE_VALUE_ACTION, + DATA, + BOTTOM_SHEET_DATA; inner class FakeViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { @@ -34,6 +38,20 @@ enum class RowViewType { } } + inner class DataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { + override fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource?, listener: View.OnClickListener, actionListener: View.OnClickListener?) { + itemView.findViewById(R.id.rowTitle_title).text = row.getDisplayName() + itemView.findViewById(R.id.rowTitle_container).setOnClickListener(listener) + } + } + + inner class BottomSheetDataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { + override fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource?, listener: View.OnClickListener, actionListener: View.OnClickListener?) { + itemView.findViewById(R.id.title).text = row.getDisplayName() + itemView.findViewById(R.id.container).setOnClickListener(listener) + } + } + inner class TitleViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { override fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource?, listener: View.OnClickListener, actionListener: View.OnClickListener?) { @@ -115,7 +133,20 @@ enum class RowViewType { false ) ) - + DATA -> DataViewHolder( + LayoutInflater.from(parent.context).inflate( + R.layout.row_title, + parent, + false + ) + ) + BOTTOM_SHEET_DATA -> BottomSheetDataViewHolder( + LayoutInflater.from(parent.context).inflate( + R.layout.row_bottom_sheet_title, + parent, + false + ) + ) else -> FakeViewHolder(parent) } } From 4242e4cfb76359dc37a4b71bdd22bb87efc037ba Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Fri, 22 Feb 2019 13:27:21 +0100 Subject: [PATCH 2/2] remove usage of LiveDataAdapter and related interface --- .../pokeranalytics/android/model/LiveData.kt | 4 +- .../android/model/realm/Bankroll.kt | 5 +- .../android/model/realm/Game.kt | 4 +- .../android/model/realm/Location.kt | 4 +- .../android/model/realm/Session.kt | 15 ++---- .../android/model/realm/TournamentFeature.kt | 4 +- .../android/model/realm/TransactionType.kt | 4 +- .../ui/adapter/components/LiveDataAdapter.kt | 1 - .../ui/fragment/EditableDataFragment.kt | 2 +- .../bottomsheet/BottomSheetListFragment.kt | 46 ++++++++++------- .../BottomSheetListGameFragment.kt | 49 ++++++++++++------- 11 files changed, 72 insertions(+), 66 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt b/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt index 48a1065d..1d79a807 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt @@ -66,8 +66,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 { 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 6ef2e2d3..be0cc9d9 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 @@ -12,7 +12,7 @@ import net.pokeranalytics.android.ui.view.* import java.util.* import kotlin.collections.ArrayList -open class Bankroll(name: String = "") : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, +open class Bankroll(name: String = "") : RealmObject(), RowRepresentableDataSource, RowEditable, ObjectSavable, RowRepresentable { companion object { @@ -47,9 +47,6 @@ open class Bankroll(name: String = "") : RealmObject(), RowRepresentableDataSour return this.id } - override val title: String get() = this.name - override val primaryKey: String get() = this.id - override fun adapterRows(): ArrayList { val rows = ArrayList() rows.add(SimpleRow.NAME) 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 186a9579..2ff50761 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 @@ -11,7 +11,7 @@ import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheet import net.pokeranalytics.android.ui.view.* import java.util.* -open class Game : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable, ObjectSavable, +open class Game : RealmObject(), RowRepresentableDataSource, RowEditable, ObjectSavable, RowRepresentable { @PrimaryKey @@ -23,8 +23,6 @@ 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 getDisplayName(): String { return this.name } 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 b6fa2e76..733d6de6 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 @@ -13,7 +13,7 @@ import net.pokeranalytics.android.ui.view.SimpleRow import java.util.* -open class Location : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable, ObjectSavable, RowRepresentable { +open class Location : RealmObject(), RowRepresentableDataSource, RowEditable, ObjectSavable, RowRepresentable { @PrimaryKey var id = UUID.randomUUID().toString() @@ -27,8 +27,6 @@ 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 getDisplayName(): String { return this.name } 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 e023d1e5..9da0cf4b 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 @@ -23,7 +23,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, RowEditable { @PrimaryKey @@ -194,7 +194,7 @@ open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource gameTitle += limit } if (game != null) { - gameTitle += game?.title + gameTitle += game?.name } return gameTitle } @@ -256,9 +256,9 @@ open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource return when (row) { SessionRow.BUY_IN -> buyin.toCurrency() SessionRow.BLINDS -> if (cgSmallBlind != null && cgBigBlind != null) "$cgSmallBlind / $cgBigBlind" else "--" - SessionRow.GAME -> game?.title ?: "--" - SessionRow.LOCATION -> location?.title ?: "--" - SessionRow.BANKROLL -> bankroll?.title ?: "--" + SessionRow.GAME -> game?.name ?: "--" + SessionRow.LOCATION -> location?.name ?: "--" + SessionRow.BANKROLL -> bankroll?.name ?: "--" SessionRow.TABLE_SIZE -> tableSize?.toString() ?: "--" SessionRow.START_DATE -> if (timeFrame != null) timeFrame?.startDate?.short() ?: "--" else "--" SessionRow.END_DATE -> if (timeFrame != null) timeFrame?.endDate?.short() ?: "--" else "--" @@ -276,11 +276,6 @@ open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource } } - - override var title: String = "Change that: $creationDate" - override val primaryKey: String get() = this.id - - override fun getBottomSheetData(row: RowRepresentable): ArrayList { val data = ArrayList() 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 edd3e5a8..a765249b 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 @@ -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, RowRepresentable { +open class TournamentFeature : RealmObject(), RowRepresentableDataSource, RowEditable, ObjectSavable, RowRepresentable { @PrimaryKey var id = UUID.randomUUID().toString() @@ -20,8 +20,6 @@ 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 getDisplayName(): String { return this.name } 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 1f4dc94f..8e526eab 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 @@ -13,7 +13,7 @@ import net.pokeranalytics.android.ui.view.TransactionTypeRow import java.util.* -open class TransactionType : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable, ObjectSavable, RowRepresentable { +open class TransactionType : RealmObject(), RowRepresentableDataSource, RowEditable, ObjectSavable, RowRepresentable { @PrimaryKey var id = UUID.randomUUID().toString() @@ -30,8 +30,6 @@ 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 getDisplayName(): String { return this.name } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/LiveDataAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/LiveDataAdapter.kt index 5cb5cbfe..f2e3b683 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/LiveDataAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/LiveDataAdapter.kt @@ -16,7 +16,6 @@ enum class LiveDataViewType { interface LiveDataDataSource { val title: String - val primaryKey: String } interface LiveDataDelegate { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt index bde542bb..9b9de841 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt @@ -138,7 +138,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() diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt index 2131c53e..abca4c07 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt @@ -8,16 +8,14 @@ import io.realm.RealmResults 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.LiveDataViewType +import net.pokeranalytics.android.ui.adapter.components.* +import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.ui.view.RowViewType -class BottomSheetListFragment : BottomSheetFragment(), LiveDataDelegate { +class BottomSheetListFragment : BottomSheetFragment(), RowRepresentableDataSource, RowRepresentableDelegate { 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) @@ -30,15 +28,32 @@ class BottomSheetListFragment : BottomSheetFragment(), LiveDataDelegate { dataAdapter.notifyDataSetChanged() } - override fun data(position: Int): LiveDataDataSource { + override fun rowRepresentableForPosition(position: Int): RowRepresentable { realmData?.let { - return it[position] as LiveDataDataSource + return it[position] as RowRepresentable } - //TODO: Change that - return Game() + return super.rowRepresentableForPosition(position) } - override fun onRowSelected(position: Int) { + override fun numberOfRows(): Int { + realmData?.let { + return it.size + } + return super.numberOfRows() + } + + override fun viewTypeForPosition(position: Int): Int { + return RowViewType.BOTTOM_SHEET_DATA.ordinal + } + + override fun indexForRow(row: RowRepresentable): Int { + realmData?.let { + return it.indexOf(row) + } + return super.indexForRow(row) + } + + override fun onIndexSelected(position: Int) { realmData?.let { val selectedData = it[position] selectedData?.let {data -> @@ -46,10 +61,7 @@ class BottomSheetListFragment : BottomSheetFragment(), LiveDataDelegate { dismiss() } } - } - - override fun size(): Int { - return realmData?.size ?: 0 + super.onIndexSelected(position) } /** @@ -70,7 +82,7 @@ class BottomSheetListFragment : BottomSheetFragment(), LiveDataDelegate { LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_list, view?.bottomSheetContainer, true) val viewManager = LinearLayoutManager(requireContext()) - dataAdapter = LiveDataAdapter(this, LiveDataViewType.BOTTOM_SHEET_DATA) + dataAdapter = RowRepresentableAdapter(this, this) reyclerView.apply { setHasFixedSize(true) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListGameFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListGameFragment.kt index f97672fd..e566a340 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListGameFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListGameFragment.kt @@ -10,17 +10,16 @@ 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.LimitTypesAdapter -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.LiveDataViewType +import net.pokeranalytics.android.ui.adapter.components.* +import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.ui.view.RowViewType import timber.log.Timber -class BottomSheetListGameFragment : BottomSheetFragment(), LiveDataDelegate { +class BottomSheetListGameFragment : BottomSheetFragment(), RowRepresentableDataSource, RowRepresentableDelegate { 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) @@ -33,15 +32,33 @@ class BottomSheetListGameFragment : BottomSheetFragment(), LiveDataDelegate { dataAdapter.notifyDataSetChanged() } - override fun data(position: Int): LiveDataDataSource { + + override fun rowRepresentableForPosition(position: Int): RowRepresentable { + realmData?.let { + return it[position] as RowRepresentable + } + return super.rowRepresentableForPosition(position) + } + + override fun numberOfRows(): Int { realmData?.let { - return it[position] as LiveDataDataSource + return it.size } - //TODO: Change that - return Game() + return super.numberOfRows() + } + + override fun viewTypeForPosition(position: Int): Int { + return RowViewType.BOTTOM_SHEET_DATA.ordinal } - override fun onRowSelected(position: Int) { + override fun indexForRow(row: RowRepresentable): Int { + realmData?.let { + return it.indexOf(row) + } + return super.indexForRow(row) + } + + override fun onIndexSelected(position: Int) { realmData?.let { val selectedData = it[position] selectedData?.let {data -> @@ -49,13 +66,7 @@ class BottomSheetListGameFragment : BottomSheetFragment(), LiveDataDelegate { dismiss() } } - } - - override fun size(): Int { - - Timber.d("Games: ${realmData?.size}") - - return realmData?.size ?: 0 + super.onIndexSelected(position) } /** @@ -91,7 +102,7 @@ class BottomSheetListGameFragment : BottomSheetFragment(), LiveDataDelegate { val viewManager2 = LinearLayoutManager(requireContext()) - dataAdapter = LiveDataAdapter(this, LiveDataViewType.BOTTOM_SHEET_DATA) + dataAdapter = RowRepresentableAdapter(this, this) recyclerView2.apply { setHasFixedSize(true)