Separate RowUpdatable from model + name refactoring

split
Laurent 5 years ago
parent 54434ac955
commit d054ab04c3
  1. 14
      app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt
  2. 2
      app/src/main/java/net/pokeranalytics/android/model/interfaces/UsageCountable.kt
  3. 52
      app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt
  4. 3
      app/src/main/java/net/pokeranalytics/android/model/realm/Comment.kt
  5. 85
      app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt
  6. 3
      app/src/main/java/net/pokeranalytics/android/model/realm/CustomFieldEntry.kt
  7. 7
      app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt
  8. 5
      app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt
  9. 3
      app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt
  10. 3
      app/src/main/java/net/pokeranalytics/android/model/realm/Player.kt
  11. 2
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  12. 6
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt
  13. 4
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentName.kt
  14. 7
      app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt
  15. 5
      app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt
  16. 17
      app/src/main/java/net/pokeranalytics/android/model/realm/rows/BankrollRow.kt
  17. 57
      app/src/main/java/net/pokeranalytics/android/model/realm/rows/CustomFieldRow.kt
  18. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetStaticListFragment.kt
  19. 4
      app/src/main/java/net/pokeranalytics/android/ui/modules/data/BankrollDataFragment.kt
  20. 4
      app/src/main/java/net/pokeranalytics/android/ui/modules/data/EditableDataFragment.kt
  21. 2
      app/src/main/java/net/pokeranalytics/android/ui/modules/datalist/DataListViewModel.kt
  22. 3
      app/src/main/java/net/pokeranalytics/android/ui/modules/feed/FeedFragment.kt
  23. 4
      app/src/main/java/net/pokeranalytics/android/ui/modules/session/ResultCaptureSelectionPopup.kt
  24. 2
      app/src/main/java/net/pokeranalytics/android/ui/modules/session/SessionFragment.kt
  25. 13
      app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt
  26. 2
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSectionRow.kt
  27. 2
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SessionPropertiesRow.kt
  28. 6
      app/src/main/java/net/pokeranalytics/android/util/extensions/RealmExtensions.kt

@ -5,7 +5,6 @@ import io.realm.Realm
import io.realm.RealmModel import io.realm.RealmModel
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.ModelException import net.pokeranalytics.android.exceptions.ModelException
import net.pokeranalytics.android.ui.view.RowRepresentable
enum class SaveValidityStatus { enum class SaveValidityStatus {
VALID, VALID,
@ -23,7 +22,7 @@ enum class DeleteValidityStatus {
/** /**
* An interface to group object which are managed by the database * An interface to group object which are managed by the database
*/ */
interface Manageable : Savable, Deletable, Editable interface Manageable : Savable, Deletable
interface NameManageable : Manageable { interface NameManageable : Manageable {
var name: String var name: String
@ -68,17 +67,6 @@ interface Identifiable : RealmModel {
} }
} }
/**
* An interface to update the fields of an object
*/
interface Editable : Identifiable {
/**
* a method to handle the modification of the object.
* Through [RowRepresentable] the object is able to update the right variable with the new value.
*/
fun updateValue(value: Any?, row: RowRepresentable)
}
/** /**
* An interface to easily handle the validity of any object we want to save * An interface to easily handle the validity of any object we want to save
*/ */

@ -5,7 +5,7 @@ import io.realm.RealmModel
/** /**
* An interface to be able to track the usage of an object * An interface to be able to track the usage of an object
*/ */
interface CountableUsage : Identifiable { interface UsageCountable : Identifiable {
var useCount: Int var useCount: Int
get() { return 0 } get() { return 0 }
set(_) {} set(_) {}

@ -14,6 +14,7 @@ import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.NameManageable import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowUpdatable
import net.pokeranalytics.android.ui.view.rowrepresentable.BankrollPropertiesRow import net.pokeranalytics.android.ui.view.rowrepresentable.BankrollPropertiesRow
import net.pokeranalytics.android.ui.view.rowrepresentable.SessionPropertiesRow import net.pokeranalytics.android.ui.view.rowrepresentable.SessionPropertiesRow
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
@ -22,7 +23,8 @@ import net.pokeranalytics.android.util.UserDefaults
import java.util.* import java.util.*
enum class ResultCaptureType { enum class ResultCaptureType {
BUYIN_CASHEDOUT,
BUYIN_CASHED_OUT,
NET_RESULT; NET_RESULT;
companion object { companion object {
@ -33,13 +35,13 @@ enum class ResultCaptureType {
val rowRepresentables: List<RowRepresentable> val rowRepresentables: List<RowRepresentable>
get() { get() {
return when (this) { return when (this) {
BUYIN_CASHEDOUT -> buyinCashedOutFields BUYIN_CASHED_OUT -> buyinCashedOutFields
NET_RESULT -> netResultFields NET_RESULT -> netResultFields
} }
} }
} }
open class Bankroll : RealmObject(), NameManageable, RowRepresentable { open class Bankroll : RealmObject(), NameManageable, RowUpdatable {
@PrimaryKey @PrimaryKey
override var id = UUID.randomUUID().toString() override var id = UUID.randomUUID().toString()
@ -66,29 +68,6 @@ open class Bankroll : RealmObject(), NameManageable, RowRepresentable {
return this.currency?.rate ?: Currency.DEFAULT_RATE return this.currency?.rate ?: Currency.DEFAULT_RATE
} }
override fun getDisplayName(context: Context): String {
return this.name
}
override fun updateValue(value: Any?, row: RowRepresentable) {
when (row) {
SimpleRow.NAME -> this.name = value as String? ?: ""
BankrollPropertiesRow.ONLINE -> {
this.live = if (value is Boolean) !value else false
}
BankrollPropertiesRow.INITIAL_VALUE -> {
this.initialValue = value as Double? ?: 0.0
}
BankrollPropertiesRow.CURRENCY -> {
//TODO handle a use default currency option
this.currency?.code = value as String?
}
BankrollPropertiesRow.RATE -> {
this.currency?.rate = value as Double?
}
}
}
override fun isValidForDelete(realm: Realm): Boolean { override fun isValidForDelete(realm: Realm): Boolean {
return realm.where<Session>().equalTo("bankroll.id", id).findAll().isEmpty() return realm.where<Session>().equalTo("bankroll.id", id).findAll().isEmpty()
&& realm.where<Transaction>().equalTo("bankroll.id", id).findAll().isEmpty() && realm.where<Transaction>().equalTo("bankroll.id", id).findAll().isEmpty()
@ -124,7 +103,7 @@ open class Bankroll : RealmObject(), NameManageable, RowRepresentable {
return Preferences.getResultCaptureType(this, context) return Preferences.getResultCaptureType(this, context)
?: run { ?: run {
when (this.live) { when (this.live) {
true -> ResultCaptureType.BUYIN_CASHEDOUT true -> ResultCaptureType.BUYIN_CASHED_OUT
else -> ResultCaptureType.NET_RESULT else -> ResultCaptureType.NET_RESULT
} }
} }
@ -151,6 +130,25 @@ open class Bankroll : RealmObject(), NameManageable, RowRepresentable {
} }
override fun updateValue(value: Any?, row: RowRepresentable) {
when (row) {
SimpleRow.NAME -> this.name = value as String? ?: ""
BankrollPropertiesRow.ONLINE -> {
this.live = if (value is Boolean) !value else false
}
BankrollPropertiesRow.INITIAL_VALUE -> {
this.initialValue = value as Double? ?: 0.0
}
BankrollPropertiesRow.CURRENCY -> {
//TODO handle a use default currency option
this.currency?.code = value as String?
}
BankrollPropertiesRow.RATE -> {
this.currency?.rate = value as Double?
}
}
}
val utilCurrency: java.util.Currency val utilCurrency: java.util.Currency
get() { get() {
this.currency?.code?.let { this.currency?.code?.let {

@ -13,11 +13,12 @@ import net.pokeranalytics.android.model.interfaces.Manageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowUpdatable
import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.util.NULL_TEXT import net.pokeranalytics.android.util.NULL_TEXT
import java.util.* import java.util.*
open class Comment : RealmObject(), Manageable, RowRepresentable { open class Comment : RealmObject(), Manageable, RowRepresentable, RowUpdatable {
@PrimaryKey @PrimaryKey
override var id = UUID.randomUUID().toString() override var id = UUID.randomUUID().toString()

@ -18,6 +18,7 @@ import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowUpdatable
import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rowrepresentable.CustomFieldPropertiesRow import net.pokeranalytics.android.ui.view.rowrepresentable.CustomFieldPropertiesRow
import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable
@ -28,7 +29,7 @@ import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDataSource, RowRepresentable { open class CustomField : RealmObject(), RowRepresentable, RowUpdatable, NameManageable, StaticRowRepresentableDataSource {
companion object { companion object {
@ -111,13 +112,9 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa
@Ignore @Ignore
private var entriesToDelete: ArrayList<CustomFieldEntry> = ArrayList() private var entriesToDelete: ArrayList<CustomFieldEntry> = ArrayList()
@Ignore
override var viewType: Int = RowViewType.TITLE_VALUE_ARROW.ordinal
@Ignore @Ignore
private var rowRepresentation: List<RowRepresentable> = mutableListOf() private var rowRepresentation: List<RowRepresentable> = mutableListOf()
//helper //helper
val isListType: Boolean val isListType: Boolean
@ -130,14 +127,6 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa
return this.type == Type.AMOUNT.uniqueIdentifier return this.type == Type.AMOUNT.uniqueIdentifier
} }
override fun localizedTitle(context: Context): String {
return this.name
}
override fun getDisplayName(context: Context): String {
return this.name
}
override fun adapterRows(): List<RowRepresentable>? { override fun adapterRows(): List<RowRepresentable>? {
return rowRepresentation return rowRepresentation
} }
@ -178,13 +167,6 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa
return R.string.cf_entry_delete_popup_message return R.string.cf_entry_delete_popup_message
} }
override val bottomSheetType: BottomSheetType
get() {
return when (type) {
Type.LIST.uniqueIdentifier -> BottomSheetType.LIST_STATIC
else -> BottomSheetType.NUMERIC_TEXT
}
}
override fun deleteDependencies(realm: Realm) { override fun deleteDependencies(realm: Realm) {
if (isValid) { if (isValid) {
@ -204,28 +186,6 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa
} }
} }
override fun editingDescriptors(map: Map<String, Any?>): ArrayList<RowRepresentableEditDescriptor>? {
return when (type) {
Type.LIST.uniqueIdentifier -> {
val defaultValue: Any? by map
val data: RealmList<CustomFieldEntry>? by map
arrayListOf(
RowRepresentableEditDescriptor(defaultValue, staticData = data)
)
}
else -> {
val defaultValue: Double? by map
arrayListOf(
RowRepresentableEditDescriptor(
defaultValue, inputType = InputType.TYPE_CLASS_NUMBER
or InputType.TYPE_NUMBER_FLAG_DECIMAL
or InputType.TYPE_NUMBER_FLAG_SIGNED
)
)
}
}
}
/** /**
* Update the row representation * Update the row representation
*/ */
@ -343,4 +303,45 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa
} }
} }
@Ignore
override var viewType: Int = RowViewType.TITLE_VALUE_ARROW.ordinal
override fun localizedTitle(context: Context): String {
return this.name
}
override fun getDisplayName(context: Context): String {
return this.name
}
override val bottomSheetType: BottomSheetType
get() {
return when (this.type) {
Type.LIST.uniqueIdentifier -> BottomSheetType.LIST_STATIC
else -> BottomSheetType.NUMERIC_TEXT
}
}
override fun editingDescriptors(map: Map<String, Any?>): ArrayList<RowRepresentableEditDescriptor> {
return when (this.type) {
Type.LIST.uniqueIdentifier -> {
val defaultValue: Any? by map
val data: RealmList<CustomFieldEntry>? by map
arrayListOf(
RowRepresentableEditDescriptor(defaultValue, staticData = data)
)
}
else -> {
val defaultValue: Double? by map
arrayListOf(
RowRepresentableEditDescriptor(
defaultValue, inputType = InputType.TYPE_CLASS_NUMBER
or InputType.TYPE_NUMBER_FLAG_DECIMAL
or InputType.TYPE_NUMBER_FLAG_SIGNED
)
)
}
}
}
} }

@ -18,6 +18,7 @@ import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowUpdatable
import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.util.NULL_TEXT import net.pokeranalytics.android.util.NULL_TEXT
import net.pokeranalytics.android.util.extensions.toCurrency import net.pokeranalytics.android.util.extensions.toCurrency
@ -26,7 +27,7 @@ import java.util.*
import java.util.Currency import java.util.Currency
open class CustomFieldEntry : RealmObject(), NameManageable, RowRepresentable { open class CustomFieldEntry : RealmObject(), NameManageable, RowRepresentable, RowUpdatable {
@Ignore @Ignore
override val realmObjectClass: Class<out Identifiable> = CustomFieldEntry::class.java override val realmObjectClass: Class<out Identifiable> = CustomFieldEntry::class.java

@ -12,10 +12,7 @@ import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.interfaces.* import net.pokeranalytics.android.model.interfaces.*
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.modules.filter.FilterableType import net.pokeranalytics.android.ui.modules.filter.FilterableType
import net.pokeranalytics.android.ui.view.ImageDecorator import net.pokeranalytics.android.ui.view.*
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategoryRow import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategoryRow
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterItemRow import net.pokeranalytics.android.ui.view.rowrepresentable.FilterItemRow
import timber.log.Timber import timber.log.Timber
@ -26,7 +23,7 @@ import java.util.*
* It contains a list of [FilterCondition] describing the complete query to launch * It contains a list of [FilterCondition] describing the complete query to launch
* The [Filter] is working closely with a [Filterable] interface providing the entity we want the query being launched on * The [Filter] is working closely with a [Filterable] interface providing the entity we want the query being launched on
*/ */
open class Filter : RealmObject(), RowRepresentable, Editable, Deletable, CountableUsage, ImageDecorator { open class Filter : RealmObject(), RowRepresentable, RowUpdatable, Deletable, UsageCountable, ImageDecorator {
@Ignore @Ignore
override val realmObjectClass: Class<out Identifiable> = Filter::class.java override val realmObjectClass: Class<out Identifiable> = Filter::class.java

@ -8,20 +8,21 @@ import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import io.realm.kotlin.where import io.realm.kotlin.where
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.CountableUsage import net.pokeranalytics.android.model.interfaces.UsageCountable
import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.NameManageable import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowUpdatable
import net.pokeranalytics.android.ui.view.rowrepresentable.GamePropertiesRow import net.pokeranalytics.android.ui.view.rowrepresentable.GamePropertiesRow
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import net.pokeranalytics.android.util.NULL_TEXT import net.pokeranalytics.android.util.NULL_TEXT
import java.util.* import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
open class Game : RealmObject(), NameManageable, StaticRowRepresentableDataSource, RowRepresentable, CountableUsage { open class Game : RealmObject(), NameManageable, StaticRowRepresentableDataSource, RowRepresentable, RowUpdatable, UsageCountable {
@Ignore @Ignore
override val realmObjectClass: Class<out Identifiable> = Game::class.java override val realmObjectClass: Class<out Identifiable> = Game::class.java

@ -12,11 +12,12 @@ import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.NameManageable import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowUpdatable
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import java.util.* import java.util.*
open class Location : RealmObject(), NameManageable, RowRepresentable { open class Location : RealmObject(), NameManageable, RowRepresentable, RowUpdatable {
@Ignore @Ignore
override val realmObjectClass: Class<out Identifiable> = Location::class.java override val realmObjectClass: Class<out Identifiable> = Location::class.java

@ -12,6 +12,7 @@ import net.pokeranalytics.android.model.interfaces.*
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowUpdatable
import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.PlayerPropertiesRow import net.pokeranalytics.android.ui.view.rowrepresentable.PlayerPropertiesRow
@ -23,7 +24,7 @@ import net.pokeranalytics.android.util.extensions.mediumDate
import java.util.* import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
open class Player : RealmObject(), NameManageable, Savable, Deletable, StaticRowRepresentableDataSource, RowRepresentable { open class Player : RealmObject(), NameManageable, Savable, Deletable, StaticRowRepresentableDataSource, RowRepresentable, RowUpdatable {
@PrimaryKey @PrimaryKey
override var id = UUID.randomUUID().toString() override var id = UUID.randomUUID().toString()

@ -42,7 +42,7 @@ import java.util.Currency
typealias BB = Double typealias BB = Double
open class Session : RealmObject(), Savable, Editable, RowRepresentable, Timed, open class Session : RealmObject(), Savable, RowUpdatable, RowRepresentable, Timed,
TimeFilterable, Filterable, DatedBankrollGraphEntry { TimeFilterable, Filterable, DatedBankrollGraphEntry {
enum class Type(val value: String) { enum class Type(val value: String) {

@ -8,21 +8,21 @@ import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import io.realm.kotlin.where import io.realm.kotlin.where
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.CountableUsage import net.pokeranalytics.android.model.interfaces.UsageCountable
import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.NameManageable import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowUpdatable
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import net.pokeranalytics.android.ui.view.rowrepresentable.TournamentFeatureRow import net.pokeranalytics.android.ui.view.rowrepresentable.TournamentFeatureRow
import net.pokeranalytics.android.util.NULL_TEXT import net.pokeranalytics.android.util.NULL_TEXT
import java.util.* import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
open class TournamentFeature : RealmObject(), NameManageable, StaticRowRepresentableDataSource, RowRepresentable, open class TournamentFeature : RealmObject(), RowRepresentable, RowUpdatable, NameManageable, StaticRowRepresentableDataSource, UsageCountable {
CountableUsage {
companion object { companion object {
val rowRepresentation : List<RowRepresentable> by lazy { val rowRepresentation : List<RowRepresentable> by lazy {

@ -13,6 +13,7 @@ import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowUpdatable
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import net.pokeranalytics.android.ui.view.rowrepresentable.TournamentNameRow import net.pokeranalytics.android.ui.view.rowrepresentable.TournamentNameRow
import net.pokeranalytics.android.util.NULL_TEXT import net.pokeranalytics.android.util.NULL_TEXT
@ -20,7 +21,8 @@ import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
open class TournamentName : RealmObject(), NameManageable, StaticRowRepresentableDataSource, RowRepresentable { open class TournamentName : RealmObject(), NameManageable, StaticRowRepresentableDataSource,
RowUpdatable, RowRepresentable {
companion object { companion object {
val rowRepresentation : List<RowRepresentable> by lazy { val rowRepresentation : List<RowRepresentable> by lazy {
val rows = ArrayList<RowRepresentable>() val rows = ArrayList<RowRepresentable>()

@ -12,10 +12,7 @@ import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.interfaces.* import net.pokeranalytics.android.model.interfaces.*
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.graph.Graph import net.pokeranalytics.android.ui.graph.Graph
import net.pokeranalytics.android.ui.view.DefaultLegendValues import net.pokeranalytics.android.ui.view.*
import net.pokeranalytics.android.ui.view.LegendContent
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rowrepresentable.TransactionPropertiesRow import net.pokeranalytics.android.ui.view.rowrepresentable.TransactionPropertiesRow
import net.pokeranalytics.android.util.TextFormat import net.pokeranalytics.android.util.TextFormat
import net.pokeranalytics.android.util.extensions.findById import net.pokeranalytics.android.util.extensions.findById
@ -24,7 +21,7 @@ import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
open class Transaction : RealmObject(), Manageable, StaticRowRepresentableDataSource, RowRepresentable, TimeFilterable, open class Transaction : RealmObject(), RowRepresentable, RowUpdatable, Manageable, StaticRowRepresentableDataSource, TimeFilterable,
Filterable, DatedBankrollGraphEntry { Filterable, DatedBankrollGraphEntry {
companion object { companion object {

@ -13,6 +13,7 @@ import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.Localizable import net.pokeranalytics.android.ui.view.Localizable
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowUpdatable
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import net.pokeranalytics.android.ui.view.rowrepresentable.TransactionTypePropertiesRow import net.pokeranalytics.android.ui.view.rowrepresentable.TransactionTypePropertiesRow
import net.pokeranalytics.android.util.enumerations.IntIdentifiable import net.pokeranalytics.android.util.enumerations.IntIdentifiable
@ -21,8 +22,8 @@ import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
open class TransactionType : RealmObject(), NameManageable, StaticRowRepresentableDataSource, RowRepresentable, open class TransactionType : RealmObject(), RowRepresentable, RowUpdatable, NameManageable, StaticRowRepresentableDataSource,
CountableUsage { UsageCountable {
enum class Value(override var uniqueIdentifier: Int, val additive: Boolean) : IntIdentifiable, Localizable { enum class Value(override var uniqueIdentifier: Int, val additive: Boolean) : IntIdentifiable, Localizable {

@ -0,0 +1,17 @@
package net.pokeranalytics.android.model.realm.rows
import android.content.Context
import net.pokeranalytics.android.model.realm.Bankroll
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowUpdatable
import net.pokeranalytics.android.ui.view.rowrepresentable.BankrollPropertiesRow
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
class BankrollRow(var bankroll: Bankroll) : RowRepresentable {
override fun getDisplayName(context: Context): String {
return this.bankroll.name
}
}

@ -0,0 +1,57 @@
package net.pokeranalytics.android.model.realm.rows
import android.content.Context
import android.text.InputType
import io.realm.RealmList
import io.realm.annotations.Ignore
import net.pokeranalytics.android.model.realm.CustomField
import net.pokeranalytics.android.model.realm.CustomFieldEntry
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowViewType
class CustomFieldRow(var customField: CustomField) : RowRepresentable {
@Ignore
override var viewType: Int = RowViewType.TITLE_VALUE_ARROW.ordinal
override fun localizedTitle(context: Context): String {
return this.customField.name
}
override fun getDisplayName(context: Context): String {
return this.customField.name
}
override val bottomSheetType: BottomSheetType
get() {
return when (this.customField.type) {
CustomField.Type.LIST.uniqueIdentifier -> BottomSheetType.LIST_STATIC
else -> BottomSheetType.NUMERIC_TEXT
}
}
override fun editingDescriptors(map: Map<String, Any?>): ArrayList<RowRepresentableEditDescriptor> {
return when (this.customField.type) {
CustomField.Type.LIST.uniqueIdentifier -> {
val defaultValue: Any? by map
val data: RealmList<CustomFieldEntry>? by map
arrayListOf(
RowRepresentableEditDescriptor(defaultValue, staticData = data)
)
}
else -> {
val defaultValue: Double? by map
arrayListOf(
RowRepresentableEditDescriptor(
defaultValue, inputType = InputType.TYPE_CLASS_NUMBER
or InputType.TYPE_NUMBER_FLAG_DECIMAL
or InputType.TYPE_NUMBER_FLAG_SIGNED
)
)
}
}
}
}

@ -38,7 +38,7 @@ class BottomSheetStaticListFragment : BottomSheetFragment(), StaticRowRepresenta
// dataAdapter.notifyDataSetChanged() // dataAdapter.notifyDataSetChanged()
} }
override fun adapterRows(): List<RowRepresentable>? { override fun adapterRows(): List<RowRepresentable> {
return this.model.staticRows return this.model.staticRows
} }

@ -129,7 +129,7 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
override fun isSelected(position: Int, row: RowRepresentable, tag: Int): Boolean { override fun isSelected(position: Int, row: RowRepresentable, tag: Int): Boolean {
return when (row) { return when (row) {
BankrollPropertiesRow.CAPTURE_BUYIN_CASHED_OUT -> this.bankrollModel.selectedCaptureType.value == ResultCaptureType.BUYIN_CASHEDOUT BankrollPropertiesRow.CAPTURE_BUYIN_CASHED_OUT -> this.bankrollModel.selectedCaptureType.value == ResultCaptureType.BUYIN_CASHED_OUT
BankrollPropertiesRow.CAPTURE_NET_RESULT -> this.bankrollModel.selectedCaptureType.value == ResultCaptureType.NET_RESULT BankrollPropertiesRow.CAPTURE_NET_RESULT -> this.bankrollModel.selectedCaptureType.value == ResultCaptureType.NET_RESULT
else -> false else -> false
} }
@ -188,7 +188,7 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
RequestCode.CURRENCY.value RequestCode.CURRENCY.value
) )
BankrollPropertiesRow.REFRESH_RATE -> refreshRate() BankrollPropertiesRow.REFRESH_RATE -> refreshRate()
BankrollPropertiesRow.CAPTURE_BUYIN_CASHED_OUT -> this.bankrollModel.selectedCaptureType.value = ResultCaptureType.BUYIN_CASHEDOUT BankrollPropertiesRow.CAPTURE_BUYIN_CASHED_OUT -> this.bankrollModel.selectedCaptureType.value = ResultCaptureType.BUYIN_CASHED_OUT
BankrollPropertiesRow.CAPTURE_NET_RESULT -> this.bankrollModel.selectedCaptureType.value = ResultCaptureType.NET_RESULT BankrollPropertiesRow.CAPTURE_NET_RESULT -> this.bankrollModel.selectedCaptureType.value = ResultCaptureType.NET_RESULT
else -> super.onRowSelected(position, row, tag) else -> super.onRowSelected(position, row, tag)
} }

@ -10,13 +10,13 @@ import androidx.recyclerview.widget.RecyclerView
import io.realm.RealmModel import io.realm.RealmModel
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.PAIllegalStateException import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.interfaces.Editable
import net.pokeranalytics.android.model.interfaces.NameManageable import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.utils.CrashLogging import net.pokeranalytics.android.model.utils.CrashLogging
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowUpdatable
open class EditableDataFragment : DataManagerFragment(), RowRepresentableDelegate { open class EditableDataFragment : DataManagerFragment(), RowRepresentableDelegate {
@ -69,7 +69,7 @@ open class EditableDataFragment : DataManagerFragment(), RowRepresentableDelegat
override fun onRowValueChanged(value: Any?, row: RowRepresentable) { override fun onRowValueChanged(value: Any?, row: RowRepresentable) {
getRealm().executeTransaction { getRealm().executeTransaction {
try { try {
(this.model.item as Editable).updateValue(value, row) (this.model.item as RowUpdatable).updateValue(value, row)
} catch (e: Exception) { } catch (e: Exception) {
CrashLogging.log("Exception caught: row = $row, value=$value, class=${this.javaClass}") CrashLogging.log("Exception caught: row = $row, value=$value, class=${this.javaClass}")
throw e throw e

@ -35,7 +35,7 @@ class DataListViewModel : ViewModel(), LiveRowRepresentableDataSource {
var showAddButton: Boolean = false var showAddButton: Boolean = false
override fun rowRepresentableForPosition(position: Int): RowRepresentable? { override fun rowRepresentableForPosition(position: Int): RowRepresentable {
return this.items[position] as RowRepresentable return this.items[position] as RowRepresentable
} }

@ -18,7 +18,6 @@ import net.pokeranalytics.android.R
import net.pokeranalytics.android.databinding.FragmentFeedBinding import net.pokeranalytics.android.databinding.FragmentFeedBinding
import net.pokeranalytics.android.exceptions.PAIllegalStateException import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.interfaces.Editable
import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.model.realm.Transaction import net.pokeranalytics.android.model.realm.Transaction
@ -229,7 +228,7 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate, PurchaseLis
when (row) { when (row) {
is Session -> SessionActivity.newInstance( is Session -> SessionActivity.newInstance(
requireContext(), requireContext(),
sessionId = (row as Editable).id sessionId = row.id
) )
is Transaction -> { is Transaction -> {
selectedTransaction = row selectedTransaction = row

@ -39,7 +39,7 @@ class ResultCaptureSelectionPopup(
netResultChip.isCheckedIconVisible = true netResultChip.isCheckedIconVisible = true
val buyinCashoutChip = view.findViewById<Chip>(R.id.chip_buyin_cashout) val buyinCashoutChip = view.findViewById<Chip>(R.id.chip_buyin_cashout)
buyinCashoutChip.isChecked = type == ResultCaptureType.BUYIN_CASHEDOUT buyinCashoutChip.isChecked = type == ResultCaptureType.BUYIN_CASHED_OUT
buyinCashoutChip.isCheckedIconVisible = true buyinCashoutChip.isCheckedIconVisible = true
val buttonSessionOnly = view.findViewById<Button>(R.id.button_session_only) val buttonSessionOnly = view.findViewById<Button>(R.id.button_session_only)
@ -64,7 +64,7 @@ class ResultCaptureSelectionPopup(
val chipGroup = this.contentView.findViewById<ChipGroup>(R.id.result_capture_method) val chipGroup = this.contentView.findViewById<ChipGroup>(R.id.result_capture_method)
val rct = when (chipGroup.checkedChipId) { val rct = when (chipGroup.checkedChipId) {
R.id.chip_net_result -> ResultCaptureType.NET_RESULT R.id.chip_net_result -> ResultCaptureType.NET_RESULT
R.id.chip_buyin_cashout -> ResultCaptureType.BUYIN_CASHEDOUT R.id.chip_buyin_cashout -> ResultCaptureType.BUYIN_CASHED_OUT
else -> null else -> null
} }
rct?.let { rct?.let {

@ -645,7 +645,7 @@ class SessionFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRepr
ResultCaptureType.NET_RESULT -> { ResultCaptureType.NET_RESULT -> {
this.currentSession.clearBuyinCashedOut() this.currentSession.clearBuyinCashedOut()
} }
ResultCaptureType.BUYIN_CASHEDOUT -> { ResultCaptureType.BUYIN_CASHED_OUT -> {
this.currentSession.clearNetResult() this.currentSession.clearNetResult()
} }
} }

@ -2,6 +2,7 @@ package net.pokeranalytics.android.ui.view
import android.content.Context import android.content.Context
import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.util.NULL_TEXT import net.pokeranalytics.android.util.NULL_TEXT
@ -72,6 +73,18 @@ interface Displayable : Localizable {
} }
/**
* An interface to update the fields of an object
*/
interface RowUpdatable {
/**
* a method to handle the modification of the object.
* Through [RowRepresentable] the object is able to update the right variable with the new value.
*/
fun updateValue(value: Any?, row: RowRepresentable)
}
/** /**
* An interface to easily localize any object * An interface to easily localize any object
*/ */

@ -45,7 +45,7 @@ sealed class FilterSectionRow(override val resId: Int?) : RowRepresentable {
object NumberOfRebuy: FilterSectionRow(R.string.number_of_buyins) object NumberOfRebuy: FilterSectionRow(R.string.number_of_buyins)
object TransactionType: FilterSectionRow(R.string.operation_types) object TransactionType: FilterSectionRow(R.string.operation_types)
data class CustomField(var customField:net.pokeranalytics.android.model.realm.CustomField): FilterSectionRow(customField.resId) { data class CustomField(var customField:net.pokeranalytics.android.model.realm.CustomField): FilterSectionRow(null) {
override val name = this.customField::class.simpleName ?: throw PokerAnalyticsException.FilterElementUnknownName override val name = this.customField::class.simpleName ?: throw PokerAnalyticsException.FilterElementUnknownName
} }

@ -112,7 +112,7 @@ enum class SessionPropertiesRow : RowRepresentable {
session.hasNetResult -> ResultCaptureType.netResultFields session.hasNetResult -> ResultCaptureType.netResultFields
else -> { // #3 bankroll defaults else -> { // #3 bankroll defaults
when (session.bankroll?.resultCaptureType(context)) { when (session.bankroll?.resultCaptureType(context)) {
ResultCaptureType.BUYIN_CASHEDOUT -> ResultCaptureType.buyinCashedOutFields ResultCaptureType.BUYIN_CASHED_OUT -> ResultCaptureType.buyinCashedOutFields
ResultCaptureType.NET_RESULT -> ResultCaptureType.netResultFields ResultCaptureType.NET_RESULT -> ResultCaptureType.netResultFields
else -> ResultCaptureType.netResultFields else -> ResultCaptureType.netResultFields
} }

@ -1,7 +1,7 @@
package net.pokeranalytics.android.util.extensions package net.pokeranalytics.android.util.extensions
import io.realm.* import io.realm.*
import net.pokeranalytics.android.model.interfaces.CountableUsage import net.pokeranalytics.android.model.interfaces.UsageCountable
import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.NameManageable import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.model.realm.*
@ -65,7 +65,7 @@ fun < T : RealmModel> Realm.sorted(clazz: Class<T>, editableOnly: Boolean = fals
sortField = arrayOf("useCount", "name") sortField = arrayOf("useCount", "name")
resultSort = arrayOf(Sort.DESCENDING, Sort.ASCENDING) resultSort = arrayOf(Sort.DESCENDING, Sort.ASCENDING)
} }
is CountableUsage -> { is UsageCountable -> {
this.updateUsageCount(clazz) this.updateUsageCount(clazz)
sortField = arrayOf("useCount") sortField = arrayOf("useCount")
resultSort = arrayOf(Sort.DESCENDING) resultSort = arrayOf(Sort.DESCENDING)
@ -90,7 +90,7 @@ fun <T : RealmModel>Realm.updateUsageCount(clazz: Class<T>) {
this.executeTransaction { this.executeTransaction {
results.forEach { countableUsage -> results.forEach { countableUsage ->
val countable = (countableUsage as CountableUsage) val countable = (countableUsage as UsageCountable)
val fieldName = when (clazz.kotlin) { val fieldName = when (clazz.kotlin) {
TransactionType::class -> "type.id" TransactionType::class -> "type.id"
TournamentFeature::class -> "tournamentFeatures.id" TournamentFeature::class -> "tournamentFeatures.id"

Loading…
Cancel
Save