udpate SettingRow, add new DataList Enum

dev_raz_wip
Razmig Sarkissian 7 years ago
parent bd82713b4a
commit 1e77667aef
  1. 5
      app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt
  2. 69
      app/src/main/java/net/pokeranalytics/android/model/realm/DataList.kt
  3. 70
      app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt
  4. 6
      app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt
  5. 21
      app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.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 {

@ -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 >
}
*/

@ -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
}
val bottomSheetType: BottomSheetType
get() {
return BottomSheetType.NONE
}
interface DynamicValues {
fun items(realm: Realm): RealmResults<*>
var sortingFieldName: String
var sorting: Sort
fun clazz(): Class<out RealmObject>
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<out RealmObject> {
override val relatedDataList : DataList
get() {
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
BANKROLL -> DataList.BANKROLL
GAME -> DataList.GAME
LOCATION -> DataList.LOCATION
TOURNAMENT_TYPE -> DataList.TOURNAMENT_TYPE
TRANSACTION_TYPE-> DataList.TRANSACTION_TYPE
}
}
}

@ -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()

@ -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

Loading…
Cancel
Save