From 9e71e1465984898723040f8aa26b2c8591de5230 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Tue, 19 Feb 2019 15:13:22 +0100 Subject: [PATCH] clean up EditableDataSource --- .../pokeranalytics/android/model/DataList.kt | 9 +- .../android/model/realm/Bankroll.kt | 28 ++++-- .../android/model/realm/Game.kt | 28 ++++-- .../android/model/realm/Location.kt | 29 ++++-- .../android/model/realm/Session.kt | 6 +- .../android/model/realm/TournamentFeature.kt | 30 +++++-- .../android/model/realm/TransactionType.kt | 30 +++++-- .../ui/adapter/components/DataListAdapter.kt | 3 +- .../adapter/components/DynamicRowInterface.kt | 89 +++---------------- .../ui/fragment/EditableDataFragment.kt | 15 ++-- .../android/ui/fragment/NewSessionFragment.kt | 2 +- 11 files changed, 145 insertions(+), 124 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/DataList.kt b/app/src/main/java/net/pokeranalytics/android/model/DataList.kt index 38a5afed..8e6eba29 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/DataList.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/DataList.kt @@ -1,11 +1,19 @@ package net.pokeranalytics.android.model +import android.text.InputType import io.realm.Realm import io.realm.RealmObject import io.realm.RealmResults import io.realm.Sort import net.pokeranalytics.android.model.realm.* +import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface +import net.pokeranalytics.android.ui.adapter.components.EditableDataSource +import net.pokeranalytics.android.ui.adapter.components.SimpleRow +import net.pokeranalytics.android.ui.fragment.components.BottomSheetData +import net.pokeranalytics.android.ui.fragment.components.BottomSheetDelegate +import net.pokeranalytics.android.ui.fragment.components.BottomSheetFragment import java.util.* +import kotlin.collections.ArrayList enum class DataList { BANKROLL, @@ -55,7 +63,6 @@ enum class DataList { return realm.copyFromRealm(t) } } - } /* 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 5e3d78dc..549b39f8 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 @@ -1,15 +1,14 @@ package net.pokeranalytics.android.model.realm +import android.text.InputType import io.realm.* import io.realm.annotations.PrimaryKey -import net.pokeranalytics.android.ui.adapter.components.BankrollRow -import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource -import net.pokeranalytics.android.ui.adapter.components.DynamicRowDelegate -import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface +import net.pokeranalytics.android.ui.adapter.components.* +import net.pokeranalytics.android.ui.fragment.components.BottomSheetData import java.util.* import kotlin.collections.ArrayList -open class Bankroll(name: String = "") : RealmObject(), DynamicRowDelegate, DisplayableDataSource { +open class Bankroll(name: String = "") : RealmObject(), DynamicRowDelegate, DisplayableDataSource, EditableDataSource { companion object { fun newInstance() : Bankroll { @@ -35,18 +34,19 @@ open class Bankroll(name: String = "") : RealmObject(), DynamicRowDelegate, Disp // @todo rate management - override val title: String get() = 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) rows.addAll(BankrollRow.values()) return rows } override fun stringForRow(row: DynamicRowInterface): String { return when (row) { - BankrollRow.NAME -> this.id + SimpleRow.NAME -> this.name BankrollRow.LIVE -> if (this.live) "live" else "online" BankrollRow.CURRENCY -> this.currency?.code?: "" else -> return super.stringForRow(row) @@ -59,4 +59,18 @@ open class Bankroll(name: String = "") : RealmObject(), DynamicRowDelegate, Disp else -> return super.boolForRow(row) } } + + override fun getBottomSheetData(row: DynamicRowInterface): ArrayList { + val data = java.util.ArrayList() + when (row) { + SimpleRow.NAME -> data.add(BottomSheetData(this.name, "Name", InputType.TYPE_CLASS_TEXT)) + } + return data + } + + override fun setBottomSheetValue(value: Any, row: DynamicRowInterface) { + when (row) { + SimpleRow.NAME -> this.name = value as String + } + } } \ 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 e0a0da15..4b648e31 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 @@ -1,14 +1,14 @@ package net.pokeranalytics.android.model.realm +import android.text.InputType +import io.realm.Realm import io.realm.RealmObject import io.realm.annotations.PrimaryKey -import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource -import net.pokeranalytics.android.ui.adapter.components.DynamicRowDelegate -import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface -import net.pokeranalytics.android.ui.adapter.components.GameRow +import net.pokeranalytics.android.ui.adapter.components.* +import net.pokeranalytics.android.ui.fragment.components.BottomSheetData import java.util.* -open class Game : RealmObject(), DynamicRowDelegate, DisplayableDataSource { +open class Game : RealmObject(), DynamicRowDelegate, DisplayableDataSource, EditableDataSource { @PrimaryKey var id = UUID.randomUUID().toString() @@ -19,20 +19,34 @@ open class Game : RealmObject(), DynamicRowDelegate, DisplayableDataSource { // A shorter name for the game var shortName: String? = null - override val title: String get() = 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) rows.addAll(GameRow.values()) return rows } override fun stringForRow(row: DynamicRowInterface): String { return when (row) { - GameRow.NAME -> this.id + SimpleRow.NAME -> this.name else -> return super.stringForRow(row) } } + override fun getBottomSheetData(row: DynamicRowInterface): ArrayList { + val data = java.util.ArrayList() + when (row) { + SimpleRow.NAME -> data.add(BottomSheetData(this.name, "Name", InputType.TYPE_CLASS_TEXT)) + } + return data + } + + override fun setBottomSheetValue(value: Any, row: DynamicRowInterface) { + when (row) { + SimpleRow.NAME -> this.name = value as String + } + } } 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 e9fd9a0e..2292595f 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,15 +1,15 @@ package net.pokeranalytics.android.model.realm +import android.text.InputType +import io.realm.Realm import io.realm.RealmObject import io.realm.annotations.PrimaryKey -import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource -import net.pokeranalytics.android.ui.adapter.components.DynamicRowDelegate -import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface -import net.pokeranalytics.android.ui.adapter.components.LocationRow +import net.pokeranalytics.android.ui.adapter.components.* +import net.pokeranalytics.android.ui.fragment.components.BottomSheetData import java.util.* -open class Location : RealmObject(), DynamicRowDelegate, DisplayableDataSource { +open class Location : RealmObject(), DynamicRowDelegate, DisplayableDataSource, EditableDataSource { @PrimaryKey var id = UUID.randomUUID().toString() @@ -23,20 +23,35 @@ open class Location : RealmObject(), DynamicRowDelegate, DisplayableDataSource { // the latitude of the location var latitude: Double? = null - override val title: String get() = 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) rows.addAll(LocationRow.values()) return rows } override fun stringForRow(row: DynamicRowInterface): String { return when (row) { - LocationRow.NAME -> this.id + SimpleRow.NAME -> this.name else -> return super.stringForRow(row) } } + override fun getBottomSheetData(row: DynamicRowInterface): ArrayList { + val data = java.util.ArrayList() + when (row) { + SimpleRow.NAME -> data.add(BottomSheetData(this.name, "Name", InputType.TYPE_CLASS_TEXT)) + } + return data + } + + override fun setBottomSheetValue(value: Any, row: DynamicRowInterface) { + when (row) { + SimpleRow.NAME -> this.name = value as String + } + } + } 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 6333574f..11cd2108 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 @@ -151,7 +151,7 @@ open class Session : RealmObject(), SessionInterface, DynamicRowDelegate, Displa override var title: String = "Change that: $creationDate" override val primaryKey: String get() = this.id - override fun getBottomSheetData(row: DynamicRowInterface, realm: Realm): ArrayList { + override fun getBottomSheetData(row: DynamicRowInterface): ArrayList { val data = ArrayList() @@ -181,6 +181,10 @@ open class Session : RealmObject(), SessionInterface, DynamicRowDelegate, Displa return data } + + override fun setBottomSheetValue(value: Any, row: DynamicRowInterface) { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } } enum class TournamentKind { 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 ac36b4aa..64107524 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 @@ -1,14 +1,14 @@ package net.pokeranalytics.android.model.realm +import android.text.InputType +import io.realm.Realm import io.realm.RealmObject import io.realm.annotations.PrimaryKey -import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource -import net.pokeranalytics.android.ui.adapter.components.DynamicRowDelegate -import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface -import net.pokeranalytics.android.ui.adapter.components.TournamentFeatureRow +import net.pokeranalytics.android.ui.adapter.components.* +import net.pokeranalytics.android.ui.fragment.components.BottomSheetData import java.util.* -open class TournamentFeature : RealmObject(), DynamicRowDelegate, DisplayableDataSource { +open class TournamentFeature : RealmObject(), DynamicRowDelegate, DisplayableDataSource, EditableDataSource { @PrimaryKey var id = UUID.randomUUID().toString() @@ -16,19 +16,35 @@ open class TournamentFeature : RealmObject(), DynamicRowDelegate, DisplayableDat // The name of the feature var name: String = "" - override val title: String get() = 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) rows.addAll(TournamentFeatureRow.values()) return rows } override fun stringForRow(row: DynamicRowInterface): String { return when (row) { - TournamentFeatureRow.NAME -> this.id + SimpleRow.NAME -> this.name else -> return super.stringForRow(row) } } + + + override fun getBottomSheetData(row: DynamicRowInterface): ArrayList { + val data = java.util.ArrayList() + when (row) { + SimpleRow.NAME -> data.add(BottomSheetData(this.name, "Name", InputType.TYPE_CLASS_TEXT)) + } + return data + } + + override fun setBottomSheetValue(value: Any, row: DynamicRowInterface) { + when (row) { + SimpleRow.NAME -> this.name = value as String + } + } } \ No newline at end of file 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 b9b98cc0..f9ca1894 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 @@ -1,15 +1,15 @@ package net.pokeranalytics.android.model.realm +import android.text.InputType +import io.realm.Realm import io.realm.RealmObject import io.realm.annotations.PrimaryKey -import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource -import net.pokeranalytics.android.ui.adapter.components.DynamicRowDelegate -import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface -import net.pokeranalytics.android.ui.adapter.components.TransactionTypeRow +import net.pokeranalytics.android.ui.adapter.components.* +import net.pokeranalytics.android.ui.fragment.components.BottomSheetData import java.util.* -open class TransactionType : RealmObject(), DynamicRowDelegate, DisplayableDataSource { +open class TransactionType : RealmObject(), DynamicRowDelegate, DisplayableDataSource, EditableDataSource { @PrimaryKey var id = UUID.randomUUID().toString() @@ -26,21 +26,37 @@ open class TransactionType : RealmObject(), DynamicRowDelegate, DisplayableDataS // The predefined kind, if necessary, like: Withdrawal, deposit, or tips var kind: Int? = null - override val title: String get() = 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) rows.addAll(TransactionTypeRow.values()) return rows } override fun stringForRow(row: DynamicRowInterface): String { return when (row) { - TransactionTypeRow.NAME -> this.id + SimpleRow.NAME -> this.name else -> return super.stringForRow(row) } } + + override fun getBottomSheetData(row: DynamicRowInterface): ArrayList { + val data = java.util.ArrayList() + when (row) { + SimpleRow.NAME -> data.add(BottomSheetData(this.name, "Name", InputType.TYPE_CLASS_TEXT)) + } + return data + } + + override fun setBottomSheetValue(value: Any, row: DynamicRowInterface) { + when (row) { + SimpleRow.NAME -> this.name = value as String + } + } + } enum class TransactionKind { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DataListAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DataListAdapter.kt index 84ac672b..c899a62f 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DataListAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DataListAdapter.kt @@ -22,7 +22,8 @@ interface DisplayableDataSource { } interface EditableDataSource { - fun getBottomSheetData(row: DynamicRowInterface, realm: Realm): ArrayList + fun getBottomSheetData(row: DynamicRowInterface): ArrayList + fun setBottomSheetValue(value: Any, row: DynamicRowInterface) } class DataListAdapter(var delegate: DisplayableDelegate, var layout: Int? = null) : RecyclerView.Adapter() { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt index 39ce2911..e55491ce 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt @@ -66,8 +66,16 @@ enum class SessionRow(val resId: Int) : DynamicRowInterface { } +enum class SimpleRow(val resId: Int) : DynamicRowInterface { + NAME(R.string.name); + override fun localizedTitle(context: Context): String { + return context.getString(this.resId) + } + override val viewType: Int = RowViewType.TITLE_VALUE.ordinal + override val bottomSheetType: BottomSheetType = BottomSheetType.EDIT_TEXT +} + enum class BankrollRow(val resId: Int) : DynamicRowInterface { - NAME(R.string.name), LIVE(R.string.live), CURRENCY(R.string.currency); @@ -78,14 +86,13 @@ enum class BankrollRow(val resId: Int) : DynamicRowInterface { override val viewType: Int get() { return when (this) { - NAME, LIVE, CURRENCY -> RowViewType.TITLE_VALUE.ordinal + LIVE, CURRENCY -> RowViewType.TITLE_VALUE.ordinal } } override val bottomSheetType: BottomSheetType get() { return when (this) { - NAME -> BottomSheetType.EDIT_TEXT LIVE -> BottomSheetType.NONE CURRENCY -> BottomSheetType.LIST } @@ -93,91 +100,15 @@ enum class BankrollRow(val resId: Int) : DynamicRowInterface { } enum class GameRow(val resId: Int) : DynamicRowInterface { - NAME(R.string.name); - - override fun localizedTitle(context: Context): String { - return context.getString(this.resId) - } - - override val viewType: Int - get() { - return when (this) { - NAME -> RowViewType.TITLE_VALUE.ordinal - } - } - - override val bottomSheetType: BottomSheetType - get() { - return when (this) { - NAME -> BottomSheetType.EDIT_TEXT - } - } } enum class LocationRow(val resId: Int) : DynamicRowInterface { - NAME(R.string.name); - - override fun localizedTitle(context: Context): String { - return context.getString(this.resId) - } - - override val viewType: Int - get() { - return when (this) { - NAME -> RowViewType.TITLE_VALUE.ordinal - } - } - - override val bottomSheetType: BottomSheetType - get() { - return when (this) { - NAME -> BottomSheetType.EDIT_TEXT - } - } } enum class TransactionTypeRow(val resId: Int) : DynamicRowInterface { - NAME(R.string.name); - - override fun localizedTitle(context: Context): String { - return context.getString(this.resId) - } - - override val viewType: Int - get() { - return when (this) { - NAME -> RowViewType.TITLE_VALUE.ordinal - } - } - - override val bottomSheetType: BottomSheetType - get() { - return when (this) { - NAME -> BottomSheetType.EDIT_TEXT - } - } } enum class TournamentFeatureRow(val resId: Int) : DynamicRowInterface { - NAME(R.string.name); - - override fun localizedTitle(context: Context): String { - return context.getString(this.resId) - } - - override val viewType: Int - get() { - return when (this) { - NAME -> RowViewType.TITLE_VALUE.ordinal - } - } - - override val bottomSheetType: BottomSheetType - get() { - return when (this) { - NAME -> BottomSheetType.EDIT_TEXT - } - } } enum class SettingRow(val resId: Int) : DynamicRowInterface { 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 67e63e8e..dbdb5ee8 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 @@ -1,6 +1,7 @@ package net.pokeranalytics.android.ui.fragment import android.os.Bundle +import android.text.InputType import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -12,11 +13,10 @@ import kotlinx.android.synthetic.main.fragment_editable_data.* import kotlinx.android.synthetic.main.fragment_editable_data.view.* import net.pokeranalytics.android.R import net.pokeranalytics.android.model.DataList +import net.pokeranalytics.android.model.realm.Bankroll import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity -import net.pokeranalytics.android.ui.adapter.components.DynamicListAdapter -import net.pokeranalytics.android.ui.adapter.components.DynamicRowCallback -import net.pokeranalytics.android.ui.adapter.components.DynamicRowDelegate -import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface +import net.pokeranalytics.android.ui.adapter.components.* +import net.pokeranalytics.android.ui.fragment.components.BottomSheetData import net.pokeranalytics.android.ui.fragment.components.BottomSheetDelegate import net.pokeranalytics.android.ui.fragment.components.BottomSheetFragment import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment @@ -38,8 +38,7 @@ class EditableDataFragment : PokerAnalyticsFragment(), DynamicRowCallback, Botto } override fun onRowSelected(row: DynamicRowInterface) { - val data = item - BottomSheetFragment.create(fragmentManager, row, this, ArrayList()) + BottomSheetFragment.create(fragmentManager, row, this, (this.item as EditableDataSource).getBottomSheetData(row)) } override fun clickOnAdd(row: DynamicRowInterface) { @@ -55,6 +54,10 @@ class EditableDataFragment : PokerAnalyticsFragment(), DynamicRowCallback, Botto } override fun setValue(value: Any, row: DynamicRowInterface) { + (this.item as EditableDataSource).setBottomSheetValue(value, row) + this.getRealm().executeTransaction { + it.copyToRealm(this.item) + } Toast.makeText(requireContext(), "Callback for ${row.localizedTitle(requireContext())} ($value)", Toast.LENGTH_SHORT).show() } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/NewSessionFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/NewSessionFragment.kt index 8abd75d3..0ee3bd72 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/NewSessionFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/NewSessionFragment.kt @@ -36,7 +36,7 @@ class NewSessionFragment : PokerAnalyticsFragment(), DynamicRowCallback, BottomS } override fun onRowSelected(row: DynamicRowInterface) { - val data = currentSession.getBottomSheetData(row, getRealm()) + val data = currentSession.getBottomSheetData(row) BottomSheetFragment.create(fragmentManager, row, this, data) }