From 1e77667aef4ab10e3dee6366d610e4752ac3b2e5 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Mon, 18 Feb 2019 17:43:06 +0100 Subject: [PATCH] udpate SettingRow, add new DataList Enum --- .../android/model/realm/Bankroll.kt | 5 +- .../android/model/realm/DataList.kt | 69 +++++++++++++++++ .../adapter/components/DynamicRowInterface.kt | 76 +++++++++---------- .../android/ui/fragment/DataListFragment.kt | 6 +- .../ui/fragment/EditableDataFragment.kt | 21 ++--- 5 files changed, 115 insertions(+), 62 deletions(-) create mode 100644 app/src/main/java/net/pokeranalytics/android/model/realm/DataList.kt 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 002417dc..5e3d78dc 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,8 +1,6 @@ package net.pokeranalytics.android.model.realm -import android.content.Context -import io.realm.RealmList -import io.realm.RealmObject +import io.realm.* import io.realm.annotations.PrimaryKey import net.pokeranalytics.android.ui.adapter.components.BankrollRow import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource @@ -11,7 +9,6 @@ import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface import java.util.* import kotlin.collections.ArrayList - open class Bankroll(name: String = "") : RealmObject(), DynamicRowDelegate, DisplayableDataSource { companion object { diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/DataList.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/DataList.kt new file mode 100644 index 00000000..5ffea23c --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/DataList.kt @@ -0,0 +1,69 @@ +package net.pokeranalytics.android.model.realm + +import io.realm.Realm +import io.realm.RealmObject +import io.realm.RealmResults +import io.realm.Sort +import java.util.* + +enum class DataList { + NONE, + BANKROLL, + GAME, + LOCATION, + TOURNAMENT_TYPE, + TRANSACTION_TYPE; + + fun items(realm: Realm, fieldName: String? = null, sortOrder: Sort? = null): RealmResults<*> { + return realm.where(this.relatedEntity).findAll().sort(fieldName?:this.sortingFieldName, sortOrder?:this.sorting) + } + + var sortingFieldName: String = "name" + var sorting: Sort = Sort.DESCENDING + + + val relatedEntity: Class < out RealmObject > + get() { + return when (this) { + NONE -> RealmObject::class.java + BANKROLL -> Bankroll::class.java + GAME -> Game::class.java + LOCATION -> Location::class.java + TOURNAMENT_TYPE -> TournamentFeature::class.java + TRANSACTION_TYPE -> TransactionType::class.java + } + } + + fun getData(realm:Realm, primaryKey:String?): RealmObject? { + var proxyItem: RealmObject? = null + primaryKey?.let { + val t = realm.where(this.relatedEntity).equalTo("id", it).findFirst() + t?.let { + proxyItem = t + } + } + return proxyItem + } + + fun updateOrCreate(realm:Realm, primaryKey:String?): RealmObject { + var proxyItem: RealmObject? = this.getData(realm, primaryKey) + proxyItem?.let { + return realm.copyFromRealm(it) + } ?: run { + realm.beginTransaction() + val t = realm.createObject(this.relatedEntity, UUID.randomUUID().toString()) + realm.commitTransaction() + return realm.copyFromRealm(t) + } + } + +} + +/* +interface ListableDataSource { + fun items(realm: Realm, fieldName: String? = null, sortOrder: Sort? = null): RealmResults<*> + var sortingFieldName: String + var sorting: Sort + var relatedEntity: Class < out RealmObject > +} +*/ \ No newline at end of file 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 da23bfe5..8418bb76 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 @@ -12,15 +12,20 @@ import net.pokeranalytics.android.ui.fragment.components.BottomSheetType interface DynamicRowInterface { fun localizedTitle(context: Context): String - var viewType: Int - var bottomSheetType: BottomSheetType -} + val viewType: Int + get() { + return 0 + } -interface DynamicValues { - fun items(realm: Realm): RealmResults<*> - var sortingFieldName: String - var sorting: Sort - fun clazz(): Class + val bottomSheetType: BottomSheetType + get() { + return BottomSheetType.NONE + } + + val relatedDataList: DataList + get() { + return DataList.NONE + } } class SectionRow(stringRes: Int) : DynamicRowInterface { @@ -30,9 +35,6 @@ class SectionRow(stringRes: Int) : DynamicRowInterface { override fun localizedTitle(context: Context): String { return context.getString(this.stringRes) } - - override var viewType: Int = 0 - override var bottomSheetType: BottomSheetType = BottomSheetType.NONE } enum class SessionRow(val resId: Int) : DynamicRowInterface { @@ -44,14 +46,14 @@ enum class SessionRow(val resId: Int) : DynamicRowInterface { return context.getString(this.resId) } - override var viewType: Int = RowViewType.HEADER.ordinal + override val viewType: Int get() { return when (this) { BLINDS, GAME, DATE -> RowViewType.TITLE_VALUE.ordinal } } - override var bottomSheetType: BottomSheetType = BottomSheetType.NONE + override val bottomSheetType: BottomSheetType get() { return when (this) { BLINDS -> BottomSheetType.DOUBLE_EDIT_TEXT @@ -71,14 +73,14 @@ enum class BankrollRow(val resId: Int) : DynamicRowInterface { return context.getString(this.resId) } - override var viewType: Int = RowViewType.HEADER.ordinal + override val viewType: Int get() { return when (this) { NAME, LIVE, CURRENCY -> RowViewType.TITLE_VALUE.ordinal } } - override var bottomSheetType: BottomSheetType = BottomSheetType.NONE + override val bottomSheetType: BottomSheetType get() { return when (this) { NAME -> BottomSheetType.EDIT_TEXT @@ -95,14 +97,14 @@ enum class GameRow(val resId: Int) : DynamicRowInterface { return context.getString(this.resId) } - override var viewType: Int = RowViewType.HEADER.ordinal + override val viewType: Int get() { return when (this) { NAME -> RowViewType.TITLE_VALUE.ordinal } } - override var bottomSheetType: BottomSheetType = BottomSheetType.NONE + override val bottomSheetType: BottomSheetType get() { return when (this) { NAME -> BottomSheetType.EDIT_TEXT @@ -117,14 +119,14 @@ enum class LocationRow(val resId: Int) : DynamicRowInterface { return context.getString(this.resId) } - override var viewType: Int = RowViewType.HEADER.ordinal + override val viewType: Int get() { return when (this) { NAME -> RowViewType.TITLE_VALUE.ordinal } } - override var bottomSheetType: BottomSheetType = BottomSheetType.NONE + override val bottomSheetType: BottomSheetType get() { return when (this) { NAME -> BottomSheetType.EDIT_TEXT @@ -139,14 +141,14 @@ enum class TransactionTypeRow(val resId: Int) : DynamicRowInterface { return context.getString(this.resId) } - override var viewType: Int = RowViewType.HEADER.ordinal + override val viewType: Int get() { return when (this) { NAME -> RowViewType.TITLE_VALUE.ordinal } } - override var bottomSheetType: BottomSheetType = BottomSheetType.NONE + override val bottomSheetType: BottomSheetType get() { return when (this) { NAME -> BottomSheetType.EDIT_TEXT @@ -161,14 +163,14 @@ enum class TournamentFeatureRow(val resId: Int) : DynamicRowInterface { return context.getString(this.resId) } - override var viewType: Int = RowViewType.HEADER.ordinal + override val viewType: Int get() { return when (this) { NAME -> RowViewType.TITLE_VALUE.ordinal } } - override var bottomSheetType: BottomSheetType = BottomSheetType.NONE + override val bottomSheetType: BottomSheetType get() { return when (this) { NAME -> BottomSheetType.EDIT_TEXT @@ -176,7 +178,7 @@ enum class TournamentFeatureRow(val resId: Int) : DynamicRowInterface { } } -enum class SettingRow(val resId: Int) : DynamicRowInterface, DynamicValues { +enum class SettingRow(val resId: Int) : DynamicRowInterface { BANKROLL(R.string.bankroll), GAME(R.string.game), LOCATION(R.string.location), @@ -188,22 +190,16 @@ enum class SettingRow(val resId: Int) : DynamicRowInterface, DynamicValues { } override var viewType: Int = RowViewType.TITLE.ordinal - override var bottomSheetType: BottomSheetType = BottomSheetType.NONE - override fun items(realm: Realm): RealmResults<*> { - return realm.where(this.clazz()).findAll().sort(this.sortingFieldName, this.sorting) - } - - override var sortingFieldName: String = "name" - override var sorting: Sort = Sort.DESCENDING - - override fun clazz(): Class { - return when (this) { - BANKROLL -> Bankroll::class.java - GAME -> Game::class.java - LOCATION -> Location::class.java - TOURNAMENT_TYPE -> TournamentFeature::class.java - TRANSACTION_TYPE -> TransactionType::class.java + override val relatedDataList : DataList + get() { + return when (this) { + BANKROLL -> DataList.BANKROLL + GAME -> DataList.GAME + LOCATION -> DataList.LOCATION + TOURNAMENT_TYPE -> DataList.TOURNAMENT_TYPE + TRANSACTION_TYPE-> DataList.TRANSACTION_TYPE + } } - } + } \ 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 c401d67e..a75395be 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 @@ -36,7 +36,7 @@ class DataListFragment : PokerAnalyticsFragment(), DisplayableDelegate { } override fun onRowSelected(position: Int) { - EditableDataActivity.newInstance(requireContext(), this.dataType.ordinal, this.data(position).primaryKey) + EditableDataActivity.newInstance(requireContext(), this.dataType.relatedDataList.ordinal, this.data(position).primaryKey) } override fun size(): Int { @@ -61,7 +61,7 @@ class DataListFragment : PokerAnalyticsFragment(), DisplayableDelegate { } this.addButton.setOnClickListener { - EditableDataActivity.newInstance(requireContext(), dataType = this.dataType.ordinal, primaryKey = null) + EditableDataActivity.newInstance(requireContext(), dataType = this.dataType.relatedDataList.ordinal, primaryKey = null) } } @@ -74,7 +74,7 @@ class DataListFragment : PokerAnalyticsFragment(), DisplayableDelegate { this.dataType = SettingRow.values()[dataType] this.title.text = this.dataType.name.toLowerCase().capitalize() val realm = Realm.getDefaultInstance() - this.items = this.dataType.items(realm) + this.items = this.dataType.relatedDataList.items(realm) this.items.addChangeListener { newItems -> Timber.d("newItems: ${newItems.size}") this.recyclerView.adapter?.notifyDataSetChanged() 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 defa6052..c6a15fa4 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 @@ -13,6 +13,7 @@ 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.realm.Bankroll +import net.pokeranalytics.android.model.realm.DataList import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.fragment.components.BottomSheetDelegate @@ -23,7 +24,7 @@ import java.util.* class EditableDataFragment : PokerAnalyticsFragment(), DynamicRowCallback, BottomSheetDelegate { private lateinit var item: RealmObject - private var dataType: SettingRow = SettingRow.BANKROLL + private var dataType: DataList = DataList.NONE override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_editable_data, container, false) @@ -68,27 +69,17 @@ class EditableDataFragment : PokerAnalyticsFragment(), DynamicRowCallback, Botto */ fun setData(dataType: Int, primaryKey: String?) { - this.dataType = SettingRow.values()[dataType] + this.dataType = DataList.values()[dataType] val realm = Realm.getDefaultInstance() - var proxyItem : RealmObject? = null - primaryKey?.let { - val t = realm.where(this.dataType.clazz()).equalTo("id", it).findFirst() - t?.let { - proxyItem = t - } - } - + var proxyItem : RealmObject? = this.dataType.getData(realm, primaryKey) proxyItem?.let { - this.item = realm.copyFromRealm(it) this.appBar.toolbar.title = "Update ${this.dataType.name.toLowerCase().capitalize()}" } ?: run { - realm.beginTransaction() - val t = realm.createObject(this.dataType.clazz(), UUID.randomUUID().toString()) - realm.commitTransaction() - this.item = realm.copyFromRealm(t) this.appBar.toolbar.title = "New ${this.dataType.name.toLowerCase().capitalize()}" } + this.item = this.dataType.updateOrCreate(realm, primaryKey) + val dynamicListAdapter = DynamicListAdapter((this.item as DynamicRowDelegate), this) this.recyclerView.adapter = dynamicListAdapter