Compare commits

...

16 Commits
master ... dev

Author SHA1 Message Date
Laurent b1fce6a99d Merge branch 'dev' of gitlab.com:stax-river/poker-analytics into dev 6 years ago
Razmig Sarkissian 7abf6fd268 delete unused LocaleUtils 6 years ago
Razmig Sarkissian 7474b33a7e renaming exception 6 years ago
Razmig Sarkissian 7653ea86ce Merge branch 'master' into dev 6 years ago
Razmig Sarkissian c025f35d43 rename bottomsheetFragment to inputFragment for clarity 6 years ago
Razmig Sarkissian e8f83ba08b clean up bottom sheet and datetimepicker management 6 years ago
Razmig Sarkissian 8835a7d4d6 fix crash when creating a new transaction 6 years ago
Razmig Sarkissian 5882fd8cd6 WIP refactoring editDescriptor 6 years ago
Razmig Sarkissian 63d6c9b5b9 wip refactoring editDescriptor 6 years ago
Razmig Sarkissian 20494c7849 Merge branch 'master' into dev 6 years ago
Razmig Sarkissian 5689b8dfe4 wip refactoring editDescriptor 6 years ago
Razmig Sarkissian a2e9b8309c Merge branch 'master' into dev 6 years ago
Razmig Sarkissian ac2000ea8c Merge branch 'master' into dev 6 years ago
Razmig Sarkissian 86a2f3bb1b Merge branch 'master' into dev 6 years ago
Razmig Sarkissian fa5e098b31 fix issue with current week filter 6 years ago
Razmig Sarkissian fcb69f5711 fix issue with realm migration 7 years ago
  1. 2
      app/src/main/java/net/pokeranalytics/android/exceptions/Exceptions.kt
  2. 14
      app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt
  3. 12
      app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt
  4. 65
      app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt
  5. 23
      app/src/main/java/net/pokeranalytics/android/model/realm/CustomFieldEntry.kt
  6. 27
      app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt
  7. 18
      app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt
  8. 111
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  9. 2
      app/src/main/java/net/pokeranalytics/android/model/realm/TimeFrame.kt
  10. 14
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt
  11. 13
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentName.kt
  12. 11
      app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt
  13. 2
      app/src/main/java/net/pokeranalytics/android/model/utils/SessionSetManager.kt
  14. 5
      app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt
  15. 15
      app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableDataSource.kt
  16. 32
      app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt
  17. 12
      app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersListFragment.kt
  18. 29
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt
  19. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/DeletableItemFragment.kt
  20. 50
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetType.kt
  21. 8
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/input/InputDoubleEditTextFragment.kt
  22. 8
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/input/InputEditTextFragment.kt
  23. 8
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/input/InputEditTextMultiLinesFragment.kt
  24. 55
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/input/InputFragment.kt
  25. 50
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/input/InputFragmentType.kt
  26. 17
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/input/InputListFragment.kt
  27. 17
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/input/InputListGameFragment.kt
  28. 8
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/input/InputMultiSelectionFragment.kt
  29. 8
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/input/InputNumericTextFragment.kt
  30. 17
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/input/InputStaticListFragment.kt
  31. 8
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/input/InputSumFragment.kt
  32. 8
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/input/InputTableSizeGridFragment.kt
  33. 20
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/BankrollDataFragment.kt
  34. 14
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/CustomFieldDataFragment.kt
  35. 3
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/EditableDataFragment.kt
  36. 15
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/LocationDataFragment.kt
  37. 40
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/TransactionDataFragment.kt
  38. 5
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/TransactionTypeDataFragment.kt
  39. 37
      app/src/main/java/net/pokeranalytics/android/ui/helpers/DateTimePickerManager.kt
  40. 93
      app/src/main/java/net/pokeranalytics/android/ui/view/RowEditableDescriptor.kt
  41. 23
      app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt
  42. 14
      app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentableEditDescriptor.kt
  43. 63
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/BankrollRow.kt
  44. 57
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/CustomFieldRow.kt
  45. 44
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt
  46. 31
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/GameRow.kt
  47. 34
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/LocationRow.kt
  48. 233
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SessionRow.kt
  49. 7
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SimpleRow.kt
  50. 47
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/TournamentFeatureRow.kt
  51. 47
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/TournamentNameRow.kt
  52. 87
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/TransactionRow.kt
  53. 32
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/TransactionTypeRow.kt
  54. 36
      app/src/main/java/net/pokeranalytics/android/util/LocaleUtils.kt
  55. 2
      app/src/main/java/net/pokeranalytics/android/util/LocationManager.kt

@ -21,6 +21,8 @@ sealed class PokerAnalyticsException(message: String) : Exception(message) {
object QueryTypeUnhandled: PokerAnalyticsException(message = "queryWith type not handled")
object QueryValueMapUnexpectedValue: PokerAnalyticsException(message = "valueMap null not expected")
object FilterElementExpectedValueMissing : PokerAnalyticsException(message = "queryWith is empty or null")
object InputFragmentException : PokerAnalyticsException(message = "RowEditableDelegate must be a Fragment")
object DateTimePickerException: PokerAnalyticsException(message = "DataSource is not a DateRowEditableDescriptor")
data class FilterElementTypeMissing(val filterElementRow: FilterElementRow) : PokerAnalyticsException(message = "queryWith element '$filterElementRow' type is missing")
data class QueryValueMapMissingKeys(val missingKeys: List<String>) : PokerAnalyticsException(message = "valueMap does not contain $missingKeys")
data class UnknownQueryTypeForRow(val filterElementRow: FilterElementRow) : PokerAnalyticsException(message = "no queryWith type for $filterElementRow")

@ -15,7 +15,7 @@ import net.pokeranalytics.android.model.TournamentType
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.realm.*
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.fragment.components.input.InputFragmentType
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElementRow
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow
@ -593,7 +593,7 @@ sealed class QueryCondition : FilterElementRow {
}
override val viewType: Int = RowViewType.TITLE_VALUE_CHECK.ordinal
override val bottomSheetType: BottomSheetType = BottomSheetType.DOUBLE_EDIT_TEXT
override val inputFragmentType: InputFragmentType = InputFragmentType.DOUBLE_EDIT_TEXT
override fun labelForValue(value: Int, context: Context): String {
return value.toMinutes(context)
@ -952,15 +952,15 @@ sealed class QueryCondition : FilterElementRow {
}
}
override val bottomSheetType: BottomSheetType
override val inputFragmentType: InputFragmentType
get() {
return when (this) {
is PastDay -> BottomSheetType.EDIT_TEXT
is PastDay -> InputFragmentType.EDIT_TEXT
else -> {
when (this.operator) {
Operator.MORE -> BottomSheetType.EDIT_TEXT
Operator.LESS -> BottomSheetType.EDIT_TEXT
else -> BottomSheetType.NONE
Operator.MORE -> InputFragmentType.EDIT_TEXT
Operator.LESS -> InputFragmentType.EDIT_TEXT
else -> InputFragmentType.NONE
}
}
}

@ -15,7 +15,6 @@ import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.BankrollRow
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import net.pokeranalytics.android.util.UserDefaults
import java.util.*
@ -46,13 +45,22 @@ open class Bankroll : RealmObject(), NameManageable, RowRepresentable {
return this.currency?.rate ?: Currency.DEFAULT_RATE
}
val javaCurrency: java.util.Currency
get() {
return currency?.code?.let {
java.util.Currency.getInstance(it)
} ?: run {
UserDefaults.currency
}
}
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? ?: ""
BankrollRow.NAME -> this.name = value as String? ?: ""
BankrollRow.LIVE -> {
this.live = if (value is Boolean) !value else false
}

@ -2,6 +2,7 @@ package net.pokeranalytics.android.model.realm
import android.content.Context
import android.text.InputType
import androidx.fragment.app.Fragment
import io.realm.Realm
import io.realm.RealmList
import io.realm.RealmObject
@ -14,14 +15,15 @@ import net.pokeranalytics.android.model.interfaces.DeleteValidityStatus
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.fragment.components.input.InputFragment
import net.pokeranalytics.android.ui.fragment.components.input.InputFragmentType
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowEditableDataSource
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rowrepresentable.CustomFieldRow
import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import net.pokeranalytics.android.util.enumerations.IntIdentifiable
import java.util.*
import kotlin.collections.ArrayList
@ -125,9 +127,23 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa
return rowRepresentation
}
override fun startEditing(dataSource: Any?, parent: Fragment?) {
if (dataSource == null) return
if (dataSource !is Session) return
if (parent == null) return
if (parent !is RowRepresentableDelegate) return
val data = RowEditableDataSource()
when (type) {
Type.LIST.uniqueIdentifier -> data.append(dataSource.customFieldEntries.find { it.customField?.id == id }?.value, staticData = entries)
else -> data.append(dataSource.customFieldEntries.find { it.customField?.id == dataSource.id }?.numericValue, inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL or InputType.TYPE_NUMBER_FLAG_SIGNED)
}
InputFragment.buildAndShow(this, parent, data)
}
override fun updateValue(value: Any?, row: RowRepresentable) {
when (row) {
SimpleRow.NAME -> this.name = value as String? ?: ""
CustomFieldRow.NAME -> this.name = value as String? ?: ""
CustomFieldRow.TYPE -> this.type = (value as Type?)?.uniqueIdentifier ?: Type.LIST.uniqueIdentifier
CustomFieldRow.COPY_ON_DUPLICATE -> this.duplicateValue = value as Boolean? ?: false
}
@ -161,11 +177,11 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa
return R.string.cf_entry_delete_popup_message
}
override val bottomSheetType: BottomSheetType
override val inputFragmentType: InputFragmentType
get() {
return when (type) {
Type.LIST.uniqueIdentifier -> BottomSheetType.LIST_STATIC
else -> BottomSheetType.NUMERIC_TEXT
Type.LIST.uniqueIdentifier -> InputFragmentType.LIST_STATIC
else -> InputFragmentType.NUMERIC_TEXT
}
}
@ -176,45 +192,12 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa
}
}
override fun editDescriptors(row: RowRepresentable): ArrayList<RowRepresentableEditDescriptor>? {
return when (row) {
is CustomFieldEntry -> row.editingDescriptors(
mapOf(
"defaultValue" to row.value
)
)
else -> null
}
}
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
*/
private fun updatedRowRepresentationForCurrentState(): List<RowRepresentable> {
val rows = ArrayList<RowRepresentable>()
rows.add(SimpleRow.NAME)
rows.add(CustomFieldRow.NAME)
rows.add(CustomFieldRow.TYPE)
if (type == Type.LIST.uniqueIdentifier && entries.size >= 0) {

@ -2,6 +2,7 @@ package net.pokeranalytics.android.model.realm
import android.content.Context
import android.text.InputType
import androidx.fragment.app.Fragment
import io.realm.Realm
import io.realm.RealmObject
import io.realm.RealmResults
@ -15,9 +16,11 @@ import net.pokeranalytics.android.model.interfaces.DeleteValidityStatus
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.fragment.components.input.InputFragment
import net.pokeranalytics.android.ui.fragment.components.input.InputFragmentType
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowEditableDataSource
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.util.NULL_TEXT
import net.pokeranalytics.android.util.extensions.toCurrency
@ -81,7 +84,7 @@ open class CustomFieldEntry : RealmObject(), NameManageable, RowRepresentable {
}
@Ignore
override val bottomSheetType: BottomSheetType = BottomSheetType.EDIT_TEXT
override val inputFragmentType: InputFragmentType = InputFragmentType.EDIT_TEXT
override fun localizedTitle(context: Context): String {
return context.getString(R.string.value)
@ -91,13 +94,17 @@ open class CustomFieldEntry : RealmObject(), NameManageable, RowRepresentable {
return if (value.isNotEmpty()) value else NULL_TEXT
}
override fun editingDescriptors(map: Map<String, Any?>): ArrayList<RowRepresentableEditDescriptor>? {
val defaultValue: Any? by map
return arrayListOf(
RowRepresentableEditDescriptor(defaultValue, R.string.value, InputType.TYPE_CLASS_TEXT)
)
override fun startEditing(dataSource: Any?, parent: Fragment?) {
if (parent == null) return
if (parent !is RowRepresentableDelegate) return
val data = RowEditableDataSource()
data.append(this.value, R.string.value, InputType.TYPE_CLASS_TEXT)
InputFragment.buildAndShow(this, parent, data, isDeletable = true)
}
override val valueCanBeClearedWhenEditing: Boolean
get() = false
override fun isValidForSave(): Boolean {
return true
}

@ -1,6 +1,7 @@
package net.pokeranalytics.android.model.realm
import android.content.Context
import androidx.fragment.app.Fragment
import io.realm.*
import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey
@ -10,12 +11,11 @@ import net.pokeranalytics.android.model.filter.Filterable
import net.pokeranalytics.android.model.filter.Query
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.interfaces.*
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.fragment.components.input.InputFragment
import net.pokeranalytics.android.ui.fragment.components.input.InputFragmentType
import net.pokeranalytics.android.ui.interfaces.FilterableType
import net.pokeranalytics.android.ui.view.ImageDecorator
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.*
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategoryRow
import timber.log.Timber
import java.util.*
@ -193,20 +193,15 @@ open class Filter : RealmObject(), RowRepresentable, Editable, Deletable, Counta
return R.string.relationship_error
}
override val bottomSheetType: BottomSheetType
override val inputFragmentType: InputFragmentType
get() {
return BottomSheetType.EDIT_TEXT
return InputFragmentType.EDIT_TEXT
}
override fun localizedTitle(context: Context): String {
return context.getString(R.string.name)
}
override fun editingDescriptors(map: Map<String, Any?>): ArrayList<RowRepresentableEditDescriptor>? {
val defaultValue: String? by map
return arrayListOf(RowRepresentableEditDescriptor(defaultValue, R.string.name))
}
override fun updateValue(value: Any?, row: RowRepresentable) {
realm.executeTransaction {
val newName = value as String? ?: ""
@ -215,4 +210,12 @@ open class Filter : RealmObject(), RowRepresentable, Editable, Deletable, Counta
}
}
}
override fun startEditing(dataSource: Any?, parent: Fragment?) {
if (parent == null) return
if (parent !is RowRepresentableDelegate) return
val data = RowEditableDataSource()
data.append(this.name)
InputFragment.buildAndShow(this, parent, data, isDeletable = true, valueHasPlaceholder = false)
}
}

@ -14,9 +14,7 @@ import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.rowrepresentable.GameRow
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import net.pokeranalytics.android.util.NULL_TEXT
import java.util.*
import kotlin.collections.ArrayList
@ -29,7 +27,7 @@ open class Game : RealmObject(), NameManageable, StaticRowRepresentableDataSourc
companion object {
val rowRepresentation : List<RowRepresentable> by lazy {
val rows = ArrayList<RowRepresentable>()
rows.add(SimpleRow.NAME)
rows.add(GameRow.NAME)
// rows.addAll(GameRow.values())
rows
}
@ -62,28 +60,20 @@ open class Game : RealmObject(), NameManageable, StaticRowRepresentableDataSourc
}
override fun adapterRows(): List<RowRepresentable>? {
return Game.rowRepresentation
return rowRepresentation
}
override fun stringForRow(row: RowRepresentable): String {
return when (row) {
SimpleRow.NAME -> if (this.name.isNotEmpty()) this.name else NULL_TEXT
GameRow.NAME -> if (this.name.isNotEmpty()) this.name else NULL_TEXT
GameRow.SHORT_NAME -> this.shortName ?: NULL_TEXT
else -> return super.stringForRow(row)
}
}
override fun editDescriptors(row: RowRepresentable): ArrayList<RowRepresentableEditDescriptor>? {
return when (row) {
SimpleRow.NAME -> row.editingDescriptors(mapOf("defaultValue" to this.name))
GameRow.SHORT_NAME -> row.editingDescriptors(mapOf("defaultValue" to this.shortName))
else -> null
}
}
override fun updateValue(value: Any?, row: RowRepresentable) {
when (row) {
SimpleRow.NAME -> this.name = value as String? ?: ""
GameRow.NAME -> this.name = value as String? ?: ""
GameRow.SHORT_NAME -> this.shortName = value as String? ?: ""
}
}

@ -834,117 +834,6 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
}
}
override fun editDescriptors(row: RowRepresentable): ArrayList<RowRepresentableEditDescriptor>? {
return when (row) {
SessionRow.BANKROLL -> row.editingDescriptors(
mapOf(
"defaultValue" to this.bankroll,
"data" to realm.sorted<Bankroll>() // LiveData.Bankroll.items(realm)
)
)
SessionRow.GAME -> row.editingDescriptors(
mapOf(
"limit" to this.limit,
"defaultValue" to this.game,
"data" to realm.sorted<Game>() //LiveData.Game.items(realm)
)
)
SessionRow.LOCATION -> row.editingDescriptors(
mapOf(
"defaultValue" to this.location,
"data" to realm.sorted<Location>() // LiveData.Location.items(realm)
)
)
SessionRow.TOURNAMENT_FEATURE -> row.editingDescriptors(
mapOf(
"defaultValue" to this.tournamentFeatures,
"data" to realm.sorted<TournamentFeature>() //LiveData.TournamentFeature.items(realm)
)
)
SessionRow.TOURNAMENT_NAME -> row.editingDescriptors(
mapOf(
"defaultValue" to this.tournamentName,
"data" to realm.sorted<TournamentName>() //LiveData.TournamentName.items(realm)
)
)
SessionRow.TOURNAMENT_TYPE -> row.editingDescriptors(
mapOf(
"defaultValue" to this.tournamentType
)
)
SessionRow.TABLE_SIZE -> row.editingDescriptors(
mapOf(
"defaultValue" to this.tableSize
)
)
SessionRow.BLINDS -> row.editingDescriptors(
mapOf(
"sb" to cgSmallBlind?.round(),
"bb" to cgBigBlind?.round()
)
)
SessionRow.BUY_IN -> row.editingDescriptors(
mapOf(
"bb" to cgBigBlind,
"fee" to this.tournamentEntryFee,
"ratedBuyin" to result?.buyin
)
)
SessionRow.BREAK_TIME -> row.editingDescriptors(mapOf())
SessionRow.CASHED_OUT, SessionRow.PRIZE -> row.editingDescriptors(
mapOf(
"defaultValue" to result?.cashout
)
)
SessionRow.NET_RESULT -> row.editingDescriptors(
mapOf(
"defaultValue" to result?.netResult
)
)
SessionRow.COMMENT -> row.editingDescriptors(
mapOf(
"defaultValue" to this.comment
)
)
SessionRow.INITIAL_BUY_IN -> row.editingDescriptors(
mapOf(
"defaultValue" to this.tournamentEntryFee
)
)
SessionRow.PLAYERS -> row.editingDescriptors(
mapOf(
"defaultValue" to this.tournamentNumberOfPlayers
)
)
SessionRow.POSITION -> row.editingDescriptors(
mapOf(
"defaultValue" to this.result?.tournamentFinalPosition
)
)
SessionRow.TIPS -> row.editingDescriptors(
mapOf(
"sb" to cgSmallBlind?.round(),
"bb" to cgBigBlind?.round(),
"tips" to result?.tips
)
)
is CustomField -> {
row.editingDescriptors(
when (row.type) {
CustomField.Type.LIST.uniqueIdentifier -> mapOf(
"defaultValue" to customFieldEntries.find { it.customField?.id == row.id }?.value,
"data" to row.entries
)
else -> mapOf(
"defaultValue" to customFieldEntries.find { it.customField?.id == row.id }?.numericValue
)
}
)
}
else -> null
}
}
override fun updateValue(value: Any?, row: RowRepresentable) {
realm.executeTransaction {

@ -233,7 +233,7 @@
//
// /**
// * Multiple session sets update:
// * Merges all sets into one (delete all then create a new one)
// * Merges all sets into one (delete all then buildAndShow a new one)
// */
// private fun mergeSessionGroups(owner: Session, sessionSets: RealmResults<SessionSet>) {
//

@ -14,8 +14,6 @@ import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import net.pokeranalytics.android.ui.view.rowrepresentable.TournamentFeatureRow
import net.pokeranalytics.android.util.NULL_TEXT
import java.util.*
@ -27,7 +25,6 @@ open class TournamentFeature : RealmObject(), NameManageable, StaticRowRepresent
companion object {
val rowRepresentation : List<RowRepresentable> by lazy {
val rows = ArrayList<RowRepresentable>()
rows.add(SimpleRow.NAME)
rows.addAll(TournamentFeatureRow.values())
rows
}
@ -53,24 +50,19 @@ open class TournamentFeature : RealmObject(), NameManageable, StaticRowRepresent
}
override fun adapterRows(): List<RowRepresentable>? {
return TournamentFeature.rowRepresentation
return rowRepresentation
}
override fun stringForRow(row: RowRepresentable): String {
return when (row) {
SimpleRow.NAME -> if (this.name.isNotEmpty()) this.name else NULL_TEXT
TournamentFeatureRow.NAME -> if (this.name.isNotEmpty()) this.name else NULL_TEXT
else -> return super.stringForRow(row)
}
}
override fun editDescriptors(row: RowRepresentable): ArrayList<RowRepresentableEditDescriptor>? {
return row.editingDescriptors(mapOf(
"defaultValue" to this.name))
}
override fun updateValue(value: Any?, row: RowRepresentable) {
when (row) {
SimpleRow.NAME -> this.name = value as String? ?: ""
TournamentFeatureRow.NAME -> this.name = value as String? ?: ""
}
}

@ -12,8 +12,6 @@ import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import net.pokeranalytics.android.ui.view.rowrepresentable.TournamentNameRow
import net.pokeranalytics.android.util.NULL_TEXT
import java.util.*
@ -24,7 +22,6 @@ open class TournamentName : RealmObject(), NameManageable, StaticRowRepresentabl
companion object {
val rowRepresentation : List<RowRepresentable> by lazy {
val rows = ArrayList<RowRepresentable>()
rows.add(SimpleRow.NAME)
rows.addAll(TournamentNameRow.values())
rows
}
@ -45,25 +42,21 @@ open class TournamentName : RealmObject(), NameManageable, StaticRowRepresentabl
override fun updateValue(value: Any?, row: RowRepresentable) {
when (row) {
SimpleRow.NAME -> this.name = value as String? ?: ""
TournamentNameRow.NAME -> this.name = value as String? ?: ""
}
}
override fun adapterRows(): List<RowRepresentable>? {
return TournamentName.rowRepresentation
return rowRepresentation
}
override fun stringForRow(row: RowRepresentable): String {
return when (row) {
SimpleRow.NAME -> if (this.name.isNotEmpty()) this.name else NULL_TEXT
TournamentNameRow.NAME -> if (this.name.isNotEmpty()) this.name else NULL_TEXT
else -> return super.stringForRow(row)
}
}
override fun editDescriptors(row: RowRepresentable): ArrayList<RowRepresentableEditDescriptor>? {
return row.editingDescriptors(mapOf("defaultValue" to this.name))
}
override fun getFailedSaveMessage(status: SaveValidityStatus): Int {
return when (status) {
SaveValidityStatus.DATA_INVALID -> R.string.tournament_name_empty_field_error

@ -12,8 +12,6 @@ import net.pokeranalytics.android.model.interfaces.*
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.Localizable
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import net.pokeranalytics.android.ui.view.rowrepresentable.TransactionTypeRow
import net.pokeranalytics.android.util.enumerations.IntIdentifiable
import net.pokeranalytics.android.util.enumerations.IntSearchable
@ -55,7 +53,6 @@ open class TransactionType : RealmObject(), NameManageable, StaticRowRepresentab
companion object {
val rowRepresentation: List<RowRepresentable> by lazy {
val rows = ArrayList<RowRepresentable>()
rows.add(SimpleRow.NAME)
rows.addAll(TransactionTypeRow.values())
rows
}
@ -108,7 +105,7 @@ open class TransactionType : RealmObject(), NameManageable, StaticRowRepresentab
override fun stringForRow(row: RowRepresentable): String {
return when (row) {
SimpleRow.NAME -> this.name
TransactionTypeRow.NAME -> this.name
else -> return super.stringForRow(row)
}
}
@ -120,13 +117,9 @@ open class TransactionType : RealmObject(), NameManageable, StaticRowRepresentab
}
}
override fun editDescriptors(row: RowRepresentable): ArrayList<RowRepresentableEditDescriptor>? {
return row.editingDescriptors(mapOf("defaultValue" to this.name))
}
override fun updateValue(value: Any?, row: RowRepresentable) {
when (row) {
SimpleRow.NAME -> this.name = value as String? ?: ""
TransactionTypeRow.NAME -> this.name = value as String? ?: ""
TransactionTypeRow.TRANSACTION_ADDITIVE -> this.additive = value as Boolean? ?: false
}
}

@ -97,7 +97,7 @@ class SessionSetManager {
/**
* Multiple session sets update:
* Merges all sets into one (delete all then create a new one)
* Merges all sets into one (delete all then buildAndShow a new one)
*/
private fun mergeSessionGroups(session: Session, sessionSets: RealmResults<SessionSet>) {

@ -7,8 +7,11 @@ import net.pokeranalytics.android.ui.view.BindableHolder
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
interface RowRepresentableDelegate {
interface RowRepresentableDelegate: RowEditableDelegate {
fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean = false) {}
}
interface RowEditableDelegate {
fun onRowValueChanged(value: Any?, row: RowRepresentable) {}
fun onRowDeleted(row: RowRepresentable) {}
}

@ -3,13 +3,12 @@ package net.pokeranalytics.android.ui.adapter
import android.content.Context
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.util.TextFormat
/**
* Base Interface to provide the RowRepresentable to the adapter
*/
interface RowRepresentableDataSource: EditableDataSource, DisplayableDataSource, SelectableDataSource {
interface RowRepresentableDataSource: DisplayableDataSource, SelectableDataSource {
/**
* Returns a prebuild list of rows
@ -161,18 +160,6 @@ interface DisplayableDataSource {
}
}
/**
* An interface providing a way to describe how the edition of a [RowRepresentable] will be displayed
*/
interface EditableDataSource {
/**
* A list of [RowRepresentableEditDescriptor] object specifying the way the edition will be handled
*/
fun editDescriptors(row: RowRepresentable): ArrayList<RowRepresentableEditDescriptor>? {
return null
}
}
/**
* An interface providing a way to select a row

@ -18,8 +18,6 @@ import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.fragment.components.RealmFragment
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetFragment
import net.pokeranalytics.android.ui.helpers.DateTimePickerManager
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategoryRow
@ -65,35 +63,7 @@ open class FilterDetailsFragment : RealmFragment(), StaticRowRepresentableDataSo
updateRowsSelection(row)
return
}
when (row) {
is QueryCondition.DateQuery -> DateTimePickerManager.create(
requireContext(),
row,
this,
row.singleValue,
onlyDate = !row.showTime,
onlyTime = row.showTime
)
is QueryCondition.Duration -> {
var hours: String? = null
var minutes: String? = null
row.minutes?.let {
hours = if (it / 60 > 0) (it / 60).toString() else null
minutes = if (it % 60 > 0) (it % 60).toString() else null
}
val data = row.editingDescriptors(mapOf("hours" to hours, "minutes" to minutes))
BottomSheetFragment.create(fragmentManager, row, this, data, true)
}
is QueryCondition.ListOfValues<*> -> {
var valueAsString: String? = null
row.listOfValues.firstOrNull()?.let {
valueAsString = row.listOfValues.firstOrNull()?.toString()
}
val data = row.editingDescriptors(mapOf("valueAsString" to valueAsString))
BottomSheetFragment.create(fragmentManager, row, this, data, true)
}
}
row.startEditing(null, this)
}
override fun stringForRow(row: RowRepresentable, context: Context): String {

@ -10,10 +10,8 @@ import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.activity.FiltersActivity
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetFragment
import net.pokeranalytics.android.ui.interfaces.FilterHandler.Companion.INTENT_FILTER_UPDATE_FILTER_UI
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.util.Preferences
import timber.log.Timber
@ -55,13 +53,6 @@ open class FiltersListFragment : DataListFragment() {
return if (viewType != -1) viewType else RowViewType.DATA.ordinal
}
override fun editDescriptors(row: RowRepresentable): ArrayList<RowRepresentableEditDescriptor>? {
return when (row) {
is Filter -> row.editingDescriptors(mapOf("defaultValue" to row.name))
else -> super.editDescriptors(row)
}
}
override fun onRowValueChanged(value: Any?, row: RowRepresentable) {
when (row) {
is Filter -> {
@ -91,8 +82,7 @@ open class FiltersListFragment : DataListFragment() {
when (row) {
is Filter -> {
if (fromAction) {
val data = row.editingDescriptors(mapOf("defaultValue" to row.name))
BottomSheetFragment.create(fragmentManager, row, this, data, false, isDeletable = true, valueHasPlaceholder = false)
row.startEditing(null, this)
} else {
val intent = Intent()
intent.putExtra(FiltersActivity.IntentKey.FILTER_ID.keyName, row.id)

@ -23,8 +23,6 @@ import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.fragment.components.RealmFragment
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetFragment
import net.pokeranalytics.android.ui.helpers.DateTimePickerManager
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableDiffCallback
import net.pokeranalytics.android.ui.view.SmoothScrollLinearLayoutManager
@ -82,7 +80,7 @@ class SessionFragment : RealmFragment(), RowRepresentableDelegate {
} else {
throw PAIllegalStateException("Session cannot be null here, session id = $sessionId")
}
} else { // create new session
} else { // buildAndShow new session
realm.executeTransaction { executeRealm ->
currentSession = Session.newInstance(executeRealm, isTournament)
FavoriteSessionFinder.copyParametersFromFavoriteSession(currentSession, null, requireContext())
@ -158,30 +156,7 @@ class SessionFragment : RealmFragment(), RowRepresentableDelegate {
Toast.makeText(requireContext(), "Action for row: $row", Toast.LENGTH_SHORT).show()
return
}
val data = currentSession.editDescriptors(row)
when (row) {
SessionRow.START_DATE -> DateTimePickerManager.create(requireContext(), row, this, currentSession.startDate)
SessionRow.END_DATE -> {
if (this.currentSession.startDate == null) {
Toast.makeText(context, R.string.session_missing_start_date, Toast.LENGTH_SHORT).show()
} else {
DateTimePickerManager.create(
requireContext(),
row,
this,
currentSession.endDate ?: currentSession.startDate ?: Date(),
currentSession.startDate
)
}
}
SessionRow.BANKROLL -> {
BottomSheetFragment.create(fragmentManager, row, this, data, false, currentSession.currency)
}
else -> BottomSheetFragment.create(fragmentManager, row, this, data, currentCurrency = currentSession.currency)
}
row.startEditing(currentSession, this)
}
override fun onRowValueChanged(value: Any?, row: RowRepresentable) {

@ -78,7 +78,7 @@ abstract class DeletableItemFragment : RealmFragment() {
this.dataListAdapter = dataListAdapter
// Save the delete position & create a copy of the object
// Save the delete position & buildAndShow a copy of the object
val itemPosition = items.indexOfFirst { it.id == itemId }
val itemToDelete = items.find { it.id == itemId }

@ -1,50 +0,0 @@
package net.pokeranalytics.android.ui.fragment.components.bottomsheet
import net.pokeranalytics.android.ui.view.RowRepresentable
enum class BottomSheetType {
NONE,
LIST,
LIST_STATIC,
LIST_GAME,
DOUBLE_LIST,
MULTI_SELECTION,
GRID,
EDIT_TEXT,
EDIT_TEXT_MULTI_LINES,
DOUBLE_EDIT_TEXT,
NUMERIC_TEXT,
SUM;
fun newInstance(row: RowRepresentable): BottomSheetFragment {
return when (this) {
NONE -> BottomSheetFragment(row)
LIST -> BottomSheetListFragment(row)
LIST_STATIC -> BottomSheetStaticListFragment(row)
LIST_GAME -> BottomSheetListGameFragment(row)
DOUBLE_LIST -> BottomSheetListGameFragment(row)
MULTI_SELECTION -> BottomSheetMultiSelectionFragment(row)
GRID -> BottomSheetTableSizeGridFragment(row)
EDIT_TEXT -> BottomSheetEditTextFragment(row)
EDIT_TEXT_MULTI_LINES -> BottomSheetEditTextMultiLinesFragment(row)
DOUBLE_EDIT_TEXT -> BottomSheetDoubleEditTextFragment(row)
NUMERIC_TEXT -> BottomSheetNumericTextFragment(row)
SUM -> BottomSheetSumFragment(row)
}
}
val validationRequired: Boolean
get() = when (this) {
LIST, LIST_GAME, LIST_STATIC, GRID, DOUBLE_LIST -> false
else -> true
}
val clearRequired: Boolean
get() = true
val addRequired: Boolean
get() = when (this) {
EDIT_TEXT, NUMERIC_TEXT, DOUBLE_EDIT_TEXT, EDIT_TEXT_MULTI_LINES, GRID, LIST_STATIC, SUM -> false
else -> true
}
}

@ -1,4 +1,4 @@
package net.pokeranalytics.android.ui.fragment.components.bottomsheet
package net.pokeranalytics.android.ui.fragment.components.input
import android.os.Bundle
import android.text.InputType
@ -15,7 +15,7 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.SessionRow
import net.pokeranalytics.android.util.extensions.round
class BottomSheetDoubleEditTextFragment(row: RowRepresentable) : BottomSheetFragment(row) {
class InputDoubleEditTextFragment(row: RowRepresentable) : InputFragment(row) {
private val values = ArrayList<String>()
private var isEditingBlinds: Boolean = false
@ -52,9 +52,9 @@ class BottomSheetDoubleEditTextFragment(row: RowRepresentable) : BottomSheetFrag
* Init UI
*/
private fun initUI() {
val data = getData()?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
val data = getData()?:throw RowRepresentableEditDescriptorException("RowEditableDescriptor not found")
if (data.size != 2) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
throw RowRepresentableEditDescriptorException("RowEditableDescriptor inconsistency")
}
values.add(0, "")

@ -1,4 +1,4 @@
package net.pokeranalytics.android.ui.fragment.components.bottomsheet
package net.pokeranalytics.android.ui.fragment.components.input
import android.os.Bundle
import android.text.InputType
@ -13,7 +13,7 @@ import net.pokeranalytics.android.exceptions.RowRepresentableEditDescriptorExcep
import net.pokeranalytics.android.ui.view.RowRepresentable
class BottomSheetEditTextFragment(row: RowRepresentable) : BottomSheetFragment(row) {
class InputEditTextFragment(row: RowRepresentable) : InputFragment(row) {
private var value: String? = null
@ -51,9 +51,9 @@ class BottomSheetEditTextFragment(row: RowRepresentable) : BottomSheetFragment(r
*/
private fun initUI() {
val data = getData()?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
val data = getData()?:throw RowRepresentableEditDescriptorException("RowEditableDescriptor not found")
if (data.size != 1) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
throw RowRepresentableEditDescriptorException("RowEditableDescriptor inconsistency")
}
LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_edit_text, view?.bottomSheetContainer, true)

@ -1,4 +1,4 @@
package net.pokeranalytics.android.ui.fragment.components.bottomsheet
package net.pokeranalytics.android.ui.fragment.components.input
import android.os.Bundle
import android.text.InputType
@ -11,7 +11,7 @@ import net.pokeranalytics.android.exceptions.RowRepresentableEditDescriptorExcep
import net.pokeranalytics.android.ui.view.RowRepresentable
class BottomSheetEditTextMultiLinesFragment(row: RowRepresentable) : BottomSheetFragment(row) {
class InputEditTextMultiLinesFragment(row: RowRepresentable) : InputFragment(row) {
private var value: String? = null
@ -43,9 +43,9 @@ class BottomSheetEditTextMultiLinesFragment(row: RowRepresentable) : BottomSheet
* Init UI
*/
private fun initUI() {
val data = getData()?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
val data = getData()?:throw RowRepresentableEditDescriptorException("RowEditableDescriptor not found")
if (data.size != 1) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
throw RowRepresentableEditDescriptorException("RowEditableDescriptor inconsistency")
}
LayoutInflater.from(requireContext()).inflate(net.pokeranalytics.android.R.layout.bottom_sheet_edit_text_multi_lines, view?.bottomSheetContainer, true)

@ -1,4 +1,4 @@
package net.pokeranalytics.android.ui.fragment.components.bottomsheet
package net.pokeranalytics.android.ui.fragment.components.input
import android.annotation.SuppressLint
import android.app.Activity.RESULT_OK
@ -10,57 +10,58 @@ import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import androidx.appcompat.view.ContextThemeWrapper
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.Fragment
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import io.realm.RealmModel
import kotlinx.android.synthetic.main.fragment_bottom_sheet.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.exceptions.PokerAnalyticsException
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.adapter.RowEditableDelegate
import net.pokeranalytics.android.ui.helpers.DateTimePickerManager
import net.pokeranalytics.android.ui.view.*
import net.pokeranalytics.android.ui.view.rowrepresentable.SessionRow
import net.pokeranalytics.android.ui.view.rowrepresentable.TransactionRow
import java.util.*
open class BottomSheetFragment(val row: RowRepresentable) : BottomSheetDialogFragment() {
open class InputFragment(val row: RowRepresentable) : BottomSheetDialogFragment() {
// lateinit var row: RowRepresentable
lateinit var delegate: RowRepresentableDelegate
lateinit var delegate: RowEditableDelegate
var currentCurrency: Currency? = null
var valueHasPlaceholder: Boolean = false
private var isClearable: Boolean = true
private var isDeletable: Boolean = false
private var rowRepresentableEditDescriptors: ArrayList<RowRepresentableEditDescriptor>? = null
private var rowEditableDescriptors: ArrayList<RowEditableDescriptor>? = null
companion object {
const val REQUEST_CODE_ADD_NEW_OBJECT = 100
fun create(
fragmentManager: FragmentManager?,
fun buildAndShow(
row: RowRepresentable,
delegate: RowRepresentableDelegate,
rowRepresentableEditDescriptors: ArrayList<RowRepresentableEditDescriptor>?,
isClearable: Boolean? = true,
currentCurrency: Currency? = null,
delegate: RowEditableDelegate,
dataSource: RowEditableDataSource?,
isDeletable: Boolean? = false,
valueHasPlaceholder: Boolean? = null
): BottomSheetFragment {
val bottomSheetFragment = row.bottomSheetType.newInstance(row)
bottomSheetFragment.show(fragmentManager, "bottomSheet")
// bottomSheetFragment.row = row
) {
if (delegate !is Fragment) throw PokerAnalyticsException.InputFragmentException
if (dataSource?.descriptorType == RowEditableDescriptorType.DATE) {
DateTimePickerManager.buildAndShow(row, delegate, dataSource.descriptors.first())
} else {
val bottomSheetFragment = row.inputFragmentType.newInstance(row)
bottomSheetFragment.show(delegate.fragmentManager, "bottomSheet")
bottomSheetFragment.delegate = delegate
bottomSheetFragment.rowRepresentableEditDescriptors = rowRepresentableEditDescriptors
bottomSheetFragment.isClearable = isClearable ?: true
bottomSheetFragment.rowEditableDescriptors = dataSource?.descriptors
bottomSheetFragment.isClearable = row.valueCanBeClearedWhenEditing
bottomSheetFragment.isDeletable = isDeletable ?: true
bottomSheetFragment.valueHasPlaceholder = valueHasPlaceholder ?: true
bottomSheetFragment.currentCurrency = currentCurrency
return bottomSheetFragment
bottomSheetFragment.currentCurrency = dataSource?.currency
}
}
}
@ -108,9 +109,9 @@ open class BottomSheetFragment(val row: RowRepresentable) : BottomSheetDialogFra
bottomSheetToolbar.setOnMenuItemClickListener {
false
}
bottomSheetToolbar.menu.findItem(R.id.actionCheck).isVisible = row.bottomSheetType.validationRequired
bottomSheetToolbar.menu.findItem(R.id.actionClear).isVisible = row.bottomSheetType.clearRequired
bottomSheetToolbar.menu.findItem(R.id.actionAdd).isVisible = row.bottomSheetType.addRequired
bottomSheetToolbar.menu.findItem(R.id.actionCheck).isVisible = row.inputFragmentType.validationRequired
bottomSheetToolbar.menu.findItem(R.id.actionClear).isVisible = row.inputFragmentType.clearRequired
bottomSheetToolbar.menu.findItem(R.id.actionAdd).isVisible = row.inputFragmentType.addRequired
// Menu
bottomSheetToolbar.menu.findItem(R.id.actionClear).setOnMenuItemClickListener {
@ -158,8 +159,8 @@ open class BottomSheetFragment(val row: RowRepresentable) : BottomSheetDialogFra
/**
* Return the data list
*/
fun getData(): ArrayList<RowRepresentableEditDescriptor>? {
return this.rowRepresentableEditDescriptors
fun getData(): ArrayList<RowEditableDescriptor>? {
return this.rowEditableDescriptors
}
open fun getValue(): Any? {

@ -0,0 +1,50 @@
package net.pokeranalytics.android.ui.fragment.components.input
import net.pokeranalytics.android.ui.view.RowRepresentable
enum class InputFragmentType {
NONE,
LIST,
LIST_STATIC,
LIST_GAME,
DOUBLE_LIST,
MULTI_SELECTION,
GRID,
EDIT_TEXT,
EDIT_TEXT_MULTI_LINES,
DOUBLE_EDIT_TEXT,
NUMERIC_TEXT,
SUM;
fun newInstance(row: RowRepresentable): InputFragment {
return when (this) {
NONE -> InputFragment(row)
LIST -> InputListFragment(row)
LIST_STATIC -> InputStaticListFragment(row)
LIST_GAME -> InputListGameFragment(row)
DOUBLE_LIST -> InputListGameFragment(row)
MULTI_SELECTION -> InputMultiSelectionFragment(row)
GRID -> InputTableSizeGridFragment(row)
EDIT_TEXT -> InputEditTextFragment(row)
EDIT_TEXT_MULTI_LINES -> InputEditTextMultiLinesFragment(row)
DOUBLE_EDIT_TEXT -> InputDoubleEditTextFragment(row)
NUMERIC_TEXT -> InputNumericTextFragment(row)
SUM -> InputSumFragment(row)
}
}
val validationRequired: Boolean
get() = when (this) {
LIST, LIST_GAME, LIST_STATIC, GRID, DOUBLE_LIST -> false
else -> true
}
val clearRequired: Boolean
get() = true
val addRequired: Boolean
get() = when (this) {
EDIT_TEXT, NUMERIC_TEXT, DOUBLE_EDIT_TEXT, EDIT_TEXT_MULTI_LINES, GRID, LIST_STATIC, SUM -> false
else -> true
}
}

@ -1,4 +1,4 @@
package net.pokeranalytics.android.ui.fragment.components.bottomsheet
package net.pokeranalytics.android.ui.fragment.components.input
import android.os.Bundle
import android.view.LayoutInflater
@ -13,10 +13,11 @@ import net.pokeranalytics.android.exceptions.RowRepresentableEditDescriptorExcep
import net.pokeranalytics.android.ui.adapter.LiveRowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.view.DataRowEditableDescriptor
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
open class BottomSheetListFragment(row: RowRepresentable) : BottomSheetFragment(row), LiveRowRepresentableDataSource, RowRepresentableDelegate {
open class InputListFragment(row: RowRepresentable) : InputFragment(row), LiveRowRepresentableDataSource, RowRepresentableDelegate {
lateinit var dataAdapter: RowRepresentableAdapter
var realmData: RealmResults<RowRepresentable>? = null
@ -69,14 +70,14 @@ open class BottomSheetListFragment(row: RowRepresentable) : BottomSheetFragment(
* Init data
*/
open fun initData() {
val bottomSheetData = getData()?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
val bottomSheetData = getData()?:throw RowRepresentableEditDescriptorException("RowEditableDescriptor not found")
if (bottomSheetData.size != 1) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
throw RowRepresentableEditDescriptorException("RowEditableDescriptor inconsistency")
}
if (bottomSheetData.first().data == null) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
this.realmData = bottomSheetData.first().data as RealmResults<RowRepresentable>
val dataList = bottomSheetData[0]
if (dataList !is DataRowEditableDescriptor) { throw RowRepresentableEditDescriptorException("RowEditableDescriptor inconsistency") }
if (dataList.data == null) { throw RowRepresentableEditDescriptorException("RowEditableDescriptor inconsistency") }
this.realmData = dataList.data
}
/**

@ -1,4 +1,4 @@
package net.pokeranalytics.android.ui.fragment.components.bottomsheet
package net.pokeranalytics.android.ui.fragment.components.input
import android.os.Bundle
import android.view.LayoutInflater
@ -13,13 +13,14 @@ import net.pokeranalytics.android.exceptions.RowRepresentableEditDescriptorExcep
import net.pokeranalytics.android.model.Limit
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.extensions.px
import net.pokeranalytics.android.ui.view.DataRowEditableDescriptor
import net.pokeranalytics.android.ui.view.RowRepresentable
/**
* Bottom Sheet List Game Fragment
* Display a list of game + chips to choose the game limit
*/
class BottomSheetListGameFragment(row: RowRepresentable) : BottomSheetListFragment(row) {
class InputListGameFragment(row: RowRepresentable) : InputListFragment(row) {
private var limit: Int? = 0
private val values = ArrayList<Any?>()
@ -49,15 +50,15 @@ class BottomSheetListGameFragment(row: RowRepresentable) : BottomSheetListFragme
* Init data
*/
override fun initData() {
val bottomSheetData = getData()?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
val bottomSheetData = getData()?:throw RowRepresentableEditDescriptorException("RowEditableDescriptor not found")
if (bottomSheetData.size != 2) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
if (bottomSheetData[1].data == null) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
throw RowRepresentableEditDescriptorException("RowEditableDescriptor inconsistency")
}
val dataList = bottomSheetData[1]
if (dataList !is DataRowEditableDescriptor) { throw RowRepresentableEditDescriptorException("RowEditableDescriptor inconsistency") }
if (dataList.data == null) { throw RowRepresentableEditDescriptorException("RowEditableDescriptor inconsistency") }
this.realmData = dataList.data
this.limit = bottomSheetData[0].defaultValue as Int?
this.realmData = bottomSheetData[1].data
}
/**

@ -1,4 +1,4 @@
package net.pokeranalytics.android.ui.fragment.components.bottomsheet
package net.pokeranalytics.android.ui.fragment.components.input
import android.app.Activity
import android.content.Intent
@ -14,7 +14,7 @@ import net.pokeranalytics.android.ui.view.RowViewType
/**
* Manage multiple items selection in a bottom sheet list
*/
open class BottomSheetMultiSelectionFragment(row: RowRepresentable) : BottomSheetListFragment(row) {
open class InputMultiSelectionFragment(row: RowRepresentable) : InputListFragment(row) {
private val selectedRows: ArrayList<RowRepresentable> = ArrayList()
@ -54,9 +54,9 @@ open class BottomSheetMultiSelectionFragment(row: RowRepresentable) : BottomShee
override fun initData() {
super.initData()
val bottomSheetData =
getData() ?: throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
getData() ?: throw RowRepresentableEditDescriptorException("RowEditableDescriptor not found")
if (bottomSheetData.size != 1) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
throw RowRepresentableEditDescriptorException("RowEditableDescriptor inconsistency")
}
bottomSheetData.first().defaultValue?.let {
(it as RealmList<*>).forEach { row ->

@ -1,4 +1,4 @@
package net.pokeranalytics.android.ui.fragment.components.bottomsheet
package net.pokeranalytics.android.ui.fragment.components.input
import android.os.Bundle
import android.text.InputType
@ -14,7 +14,7 @@ import net.pokeranalytics.android.ui.view.RowRepresentable
import java.text.NumberFormat
class BottomSheetNumericTextFragment(row: RowRepresentable) : BottomSheetFragment(row) {
class InputNumericTextFragment(row: RowRepresentable) : InputFragment(row) {
private var value: Double? = null
@ -43,9 +43,9 @@ class BottomSheetNumericTextFragment(row: RowRepresentable) : BottomSheetFragmen
* Init UI
*/
private fun initUI() {
val data = getData()?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
val data = getData()?:throw RowRepresentableEditDescriptorException("RowEditableDescriptor not found")
if (data.size != 1) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
throw RowRepresentableEditDescriptorException("RowEditableDescriptor inconsistency")
}
LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_edit_text, view?.bottomSheetContainer, true)

@ -1,4 +1,4 @@
package net.pokeranalytics.android.ui.fragment.components.bottomsheet
package net.pokeranalytics.android.ui.fragment.components.input
import android.os.Bundle
import android.view.LayoutInflater
@ -12,8 +12,9 @@ import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.StaticDataRowEditableDescriptor
class BottomSheetStaticListFragment(row: RowRepresentable) : BottomSheetFragment(row), StaticRowRepresentableDataSource,
class InputStaticListFragment(row: RowRepresentable) : InputFragment(row), StaticRowRepresentableDataSource,
RowRepresentableDelegate {
private var staticRows: List<RowRepresentable> = emptyList()
@ -44,14 +45,14 @@ class BottomSheetStaticListFragment(row: RowRepresentable) : BottomSheetFragment
* Init data
*/
private fun initData() {
val bottomSheetData = getData()?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
val bottomSheetData = getData()?:throw RowRepresentableEditDescriptorException("RowEditableDescriptor not found")
if (bottomSheetData.size != 1) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
throw RowRepresentableEditDescriptorException("RowEditableDescriptor inconsistency")
}
if (bottomSheetData.first().staticData == null) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
this.staticRows = bottomSheetData.first().staticData as List<RowRepresentable>
val dataList = bottomSheetData[0]
if (dataList !is StaticDataRowEditableDescriptor) { throw RowRepresentableEditDescriptorException("RowEditableDescriptor inconsistency") }
if (dataList.staticData == null) { throw RowRepresentableEditDescriptorException("RowEditableDescriptor inconsistency") }
this.staticRows= dataList.staticData as List<RowRepresentable>
}
/**

@ -1,4 +1,4 @@
package net.pokeranalytics.android.ui.fragment.components.bottomsheet
package net.pokeranalytics.android.ui.fragment.components.input
import android.os.Bundle
import android.text.InputType
@ -16,7 +16,7 @@ import net.pokeranalytics.android.util.extensions.toCurrency
import java.text.NumberFormat
class BottomSheetSumFragment(row: RowRepresentable) : BottomSheetFragment(row) {
class InputSumFragment(row: RowRepresentable) : InputFragment(row) {
private var value = 0.0
private var currentDefaultValue = 0.0
@ -50,9 +50,9 @@ class BottomSheetSumFragment(row: RowRepresentable) : BottomSheetFragment(row) {
* Init UI
*/
private fun initUI() {
val data = getData()?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
val data = getData()?:throw RowRepresentableEditDescriptorException("RowEditableDescriptor not found")
if (data.size != 5) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
throw RowRepresentableEditDescriptorException("RowEditableDescriptor inconsistency")
}
LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_sum, view?.bottomSheetContainer, true)

@ -1,4 +1,4 @@
package net.pokeranalytics.android.ui.fragment.components.bottomsheet
package net.pokeranalytics.android.ui.fragment.components.input
import android.os.Bundle
import android.view.LayoutInflater
@ -15,7 +15,7 @@ import net.pokeranalytics.android.ui.extensions.px
import net.pokeranalytics.android.ui.view.GridSpacingItemDecoration
import net.pokeranalytics.android.ui.view.RowRepresentable
class BottomSheetTableSizeGridFragment(row: RowRepresentable) : BottomSheetFragment(row), StaticRowRepresentableDataSource, RowRepresentableDelegate {
class InputTableSizeGridFragment(row: RowRepresentable) : InputFragment(row), StaticRowRepresentableDataSource, RowRepresentableDelegate {
private lateinit var dataAdapter: RowRepresentableAdapter
private var defaultSize: Int? = null
@ -39,9 +39,9 @@ class BottomSheetTableSizeGridFragment(row: RowRepresentable) : BottomSheetFragm
* Init data
*/
private fun initData() {
val bottomSheetData = getData()?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
val bottomSheetData = getData()?:throw RowRepresentableEditDescriptorException("RowEditableDescriptor not found")
if (bottomSheetData.size != 1) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
throw RowRepresentableEditDescriptorException("RowEditableDescriptor inconsistency")
}
defaultSize = bottomSheetData.first().defaultValue as Int?
}

@ -14,11 +14,9 @@ import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.fragment.CurrenciesFragment
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.BankrollRow
import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import net.pokeranalytics.android.util.NULL_TEXT
import net.pokeranalytics.android.util.UserDefaults
import net.pokeranalytics.android.util.extensions.toCurrency
@ -85,7 +83,7 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
override fun stringForRow(row: RowRepresentable): String {
return when (row) {
SimpleRow.NAME -> if (bankroll.name.isNotEmpty()) bankroll.name else NULL_TEXT
BankrollRow.NAME -> if (bankroll.name.isNotEmpty()) bankroll.name else NULL_TEXT
BankrollRow.CURRENCY -> {
bankroll.currency?.code?.let { code ->
Currency.getInstance(code).currencyCode
@ -116,20 +114,6 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
}
}
override fun editDescriptors(row: RowRepresentable): ArrayList<RowRepresentableEditDescriptor>? {
return when (row) {
SimpleRow.NAME -> row.editingDescriptors(mapOf("defaultValue" to this.bankroll.name))
BankrollRow.INITIAL_VALUE -> {
row.editingDescriptors(mapOf("defaultValue" to this.bankroll.initialValue))
}
BankrollRow.RATE -> {
val rate = this.bankroll.currency?.rate
row.editingDescriptors(mapOf("defaultValue" to rate))
}
else -> null
}
}
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
when (row) {
BankrollRow.CURRENCY -> CurrenciesActivity.newInstanceForResult(this@BankrollDataFragment,
@ -174,7 +158,7 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
private fun refreshRows() {
rows.clear()
rows.add(SimpleRow.NAME)
rows.add(BankrollRow.NAME)
rows.add(BankrollRow.LIVE)
rows.add(BankrollRow.INITIAL_VALUE)
rows.add(CustomizableRowRepresentable(customViewType = RowViewType.HEADER_TITLE, resId = R.string.currency))

@ -17,11 +17,8 @@ import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.extensions.ChipGroupExtension
import net.pokeranalytics.android.ui.extensions.px
import net.pokeranalytics.android.ui.extensions.showAlertDialog
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetFragment
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.rowrepresentable.CustomFieldRow
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import net.pokeranalytics.android.util.NULL_TEXT
import java.util.*
@ -122,7 +119,7 @@ class CustomFieldDataFragment : EditableDataFragment(), StaticRowRepresentableDa
override fun stringForRow(row: RowRepresentable): String {
return when (row) {
SimpleRow.NAME -> if (customField.name.isNotEmpty()) customField.name else NULL_TEXT
CustomFieldRow.NAME -> if (customField.name.isNotEmpty()) customField.name else NULL_TEXT
else -> super.stringForRow(row)
}
}
@ -142,20 +139,19 @@ class CustomFieldDataFragment : EditableDataFragment(), StaticRowRepresentableDa
}
}
override fun editDescriptors(row: RowRepresentable): ArrayList<RowRepresentableEditDescriptor>? {
/*
override fun editDescriptors(row: RowRepresentable): ArrayList<RowEditableDescriptor>? {
return when (row) {
SimpleRow.NAME -> row.editingDescriptors(mapOf("defaultValue" to this.customField.name))
is CustomFieldEntry -> row.editingDescriptors(mapOf("defaultValue" to row.value))
else -> null
}
}
*/
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
when (row) {
is CustomFieldEntry -> {
val data = customField.editDescriptors(row)
BottomSheetFragment.create(fragmentManager, row, this, data, isClearable = false, isDeletable = true)
}
is CustomFieldEntry -> row.startEditing(null, this)
else -> super.onRowSelected(position, row, fromAction)
}
}

@ -14,7 +14,6 @@ import net.pokeranalytics.android.model.interfaces.Editable
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetFragment
import net.pokeranalytics.android.ui.view.RowRepresentable
@ -62,7 +61,7 @@ open class EditableDataFragment : DataManagerFragment(), RowRepresentableDelegat
}
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
BottomSheetFragment.create(fragmentManager, row, this, getDataSource().editDescriptors(row))
row.startEditing(this.item, this)
}
override fun onRowValueChanged(value: Any?, row: RowRepresentable) {

@ -8,11 +8,9 @@ import net.pokeranalytics.android.model.realm.Location
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
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.CustomizableRowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.LocationRow
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import net.pokeranalytics.android.util.NULL_TEXT
/**
@ -47,7 +45,7 @@ class LocationDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
} else if (locationActivated) {
// If we create a new location, we try to locate the user by default
// If we buildAndShow a new location, we try to locate the user by default
isLookingForPlaces = true
getSuggestionsPlaces()
@ -66,7 +64,7 @@ class LocationDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
override fun stringForRow(row: RowRepresentable): String {
return when (row) {
SimpleRow.NAME -> if (location.name.isNotEmpty())location.name else NULL_TEXT
LocationRow.NAME -> if (location.name.isNotEmpty())location.name else NULL_TEXT
else -> return super.stringForRow(row)
}
}
@ -78,13 +76,6 @@ class LocationDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
}
}
override fun editDescriptors(row: RowRepresentable): ArrayList<RowRepresentableEditDescriptor>? {
return when (row) {
SimpleRow.NAME -> row.editingDescriptors(mapOf("defaultValue" to this.location.name))
else -> null
}
}
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
// If we click on a location row, save the location (and finish activity)
placesForRows[row]?.place?.let { place ->
@ -128,7 +119,7 @@ class LocationDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
*/
private fun refreshRows() {
rows.clear()
rows.add(SimpleRow.NAME)
rows.add(LocationRow.NAME)
rows.add(LocationRow.LOCATION_PERMISSION_SWITCH)
// Add info row to explain why we need the location permission
rows.add(CustomizableRowRepresentable(customViewType = RowViewType.INFO, resId = R.string.location_when_in_use_usage_description))

@ -7,20 +7,14 @@ import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import net.pokeranalytics.android.calculus.bankroll.BankrollReportManager
import net.pokeranalytics.android.model.realm.Bankroll
import net.pokeranalytics.android.model.realm.Transaction
import net.pokeranalytics.android.model.realm.TransactionType
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.helpers.DateTimePickerManager
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.rowrepresentable.TransactionRow
import net.pokeranalytics.android.util.NULL_TEXT
import net.pokeranalytics.android.util.extensions.round
import net.pokeranalytics.android.util.extensions.shortDate
import net.pokeranalytics.android.util.extensions.sorted
import java.util.*
/**
* Custom EditableDataFragment to manage the Transaction data
@ -57,40 +51,6 @@ class TransactionDataFragment : EditableDataFragment(), StaticRowRepresentableDa
}
}
override fun editDescriptors(row: RowRepresentable): ArrayList<RowRepresentableEditDescriptor>? {
return when (row) {
TransactionRow.BANKROLL -> row.editingDescriptors(
mapOf(
"defaultValue" to this.transaction.bankroll,
"data" to getRealm().sorted<Bankroll>()
)
)
TransactionRow.TYPE -> row.editingDescriptors(
mapOf(
"defaultValue" to this.transaction.type,
"data" to getRealm().sorted<TransactionType>()
)
)
TransactionRow.AMOUNT -> row.editingDescriptors(mapOf("defaultValue" to (if (this.transaction.amount != 0.0) this.transaction.amount.round() else "")))
TransactionRow.COMMENT -> row.editingDescriptors(mapOf("defaultValue" to this.transaction.comment))
else -> super.editDescriptors(row)
}
}
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
when (row) {
TransactionRow.DATE -> DateTimePickerManager.create(
requireContext(),
row,
this,
this.transaction.date,
onlyDate = true,
isClearable = false
)
else -> super.onRowSelected(position, row, fromAction)
}
}
override fun onRowValueChanged(value: Any?, row: RowRepresentable) {
super.onRowValueChanged(value, row)
rowRepresentableAdapter.refreshRow(row)

@ -4,7 +4,6 @@ import net.pokeranalytics.android.model.realm.Transaction
import net.pokeranalytics.android.model.realm.TransactionType
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import net.pokeranalytics.android.ui.view.rowrepresentable.TransactionTypeRow
@ -47,10 +46,6 @@ class TransactionTypeDataFragment : EditableDataFragment(), RowRepresentableData
}
}
override fun editDescriptors(row: RowRepresentable): ArrayList<RowRepresentableEditDescriptor>? {
return row.editingDescriptors(mapOf("defaultValue" to this.transactionType.name))
}
override fun isEnabled(row: RowRepresentable): Boolean {
return when (row) {
TransactionTypeRow.TRANSACTION_ADDITIVE -> {

@ -8,9 +8,11 @@ import android.text.format.DateFormat
import android.widget.DatePicker
import android.widget.TimePicker
import android.widget.Toast
import androidx.fragment.app.Fragment
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.exceptions.PokerAnalyticsException
import net.pokeranalytics.android.ui.adapter.RowEditableDelegate
import net.pokeranalytics.android.ui.view.*
import java.util.*
class DateTimePickerManager : DatePickerDialog.OnDateSetListener,
@ -19,7 +21,7 @@ class DateTimePickerManager : DatePickerDialog.OnDateSetListener,
private var context: Context? = null
private lateinit var row: RowRepresentable
private lateinit var delegate: RowRepresentableDelegate
private lateinit var delegate: RowEditableDelegate
private lateinit var calendar: Calendar
private var minimumDate: Date? = null
private var onlyDate: Boolean = false
@ -27,37 +29,32 @@ class DateTimePickerManager : DatePickerDialog.OnDateSetListener,
private var isClearable: Boolean = true
companion object {
fun create(
context: Context,
fun buildAndShow(
row: RowRepresentable,
delegate: RowRepresentableDelegate,
date: Date?,
minimumDate: Date? = null,
onlyDate: Boolean? = false,
onlyTime: Boolean? = false,
isClearable: Boolean? = true
): DateTimePickerManager {
delegate: RowEditableDelegate,
dataSource: RowEditableDescriptor
) {
if (delegate !is Fragment) throw PokerAnalyticsException.InputFragmentException
if (dataSource !is DateRowEditableDescriptor) throw PokerAnalyticsException.DateTimePickerException
val calendar = Calendar.getInstance()
calendar.time = date ?: Date()
calendar.time = dataSource.date ?: Date()
val dateTimePickerManager = DateTimePickerManager()
dateTimePickerManager.context = context
dateTimePickerManager.context = delegate.context
dateTimePickerManager.row = row
dateTimePickerManager.delegate = delegate
dateTimePickerManager.calendar = calendar
dateTimePickerManager.minimumDate = minimumDate
dateTimePickerManager.onlyDate = onlyDate ?: false
dateTimePickerManager.onlyTime = onlyTime ?: false
dateTimePickerManager.isClearable = isClearable ?: true
dateTimePickerManager.minimumDate = dataSource.minimumDate
dateTimePickerManager.onlyDate = dataSource.onlyDate
dateTimePickerManager.onlyTime = dataSource.onlyTime
dateTimePickerManager.isClearable = row.valueCanBeClearedWhenEditing
if (dateTimePickerManager.onlyTime) {
dateTimePickerManager.showTimePicker()
} else {
dateTimePickerManager.showDatePicker()
}
return dateTimePickerManager
}
}

@ -0,0 +1,93 @@
package net.pokeranalytics.android.ui.view
import io.realm.RealmResults
import net.pokeranalytics.android.exceptions.PokerAnalyticsException
import net.pokeranalytics.android.exceptions.RowRepresentableEditDescriptorException
import net.pokeranalytics.android.util.UserDefaults
import java.util.*
import kotlin.collections.ArrayList
/**
* An container class to describe the way an field of an object will be edited
*/
enum class RowEditableDescriptorType {
DATE,
DATA,
STATIC,
DEFAULT
}
open class RowEditableDescriptor(var defaultValue: Any? = null,
var hint: Int? = null,
var inputType: Int? = null)
class DateRowEditableDescriptor(date: Date? = null,
val minimumDate: Date? = null,
var onlyDate: Boolean = false,
var onlyTime: Boolean = false): RowEditableDescriptor(defaultValue = date) {
val date: Date?
get() {
return defaultValue as Date?
}
}
class DataRowEditableDescriptor(
defaultValue: Any? = null,
hint: Int? = null,
inputType: Int? = null,
data: RealmResults<*>? = null): RowEditableDescriptor(defaultValue, hint, inputType) {
var data: RealmResults<RowRepresentable>? = null
init {
if (data != null && data.count() > 0) {
if (data.first() is RowRepresentable) {
this.data = data as RealmResults<RowRepresentable>?
}
}
}
}
class StaticDataRowEditableDescriptor(
defaultValue: Any? = null,
hint: Int? = null,
inputType: Int? = null,
var staticData: List<RowRepresentable>? = null): RowEditableDescriptor(defaultValue, hint, inputType) {
}
class RowEditableDataSource(customCurrency: Currency? = null) {
var currency: Currency = UserDefaults.currency
init {
customCurrency?.let { currency = it }
}
var descriptors = ArrayList<RowEditableDescriptor>()
fun append(defaultValue: Any? = null, hint: Int? = null, inputType: Int? = null, data: RealmResults<*>? = null, staticData: List<RowRepresentable>? = null) {
when {
data != null -> descriptors.add(DataRowEditableDescriptor(defaultValue, hint, inputType, data))
staticData != null -> descriptors.add(StaticDataRowEditableDescriptor(defaultValue, hint, inputType, staticData))
else -> descriptors.add(RowEditableDescriptor(defaultValue, hint, inputType))
}
}
fun appendDateDescriptor(date:Date?= null,
minimumDate: Date? = null,
onlyDate: Boolean = false,
onlyTime: Boolean = false) {
descriptors.add(DateRowEditableDescriptor(date, minimumDate, onlyDate, onlyTime))
}
val descriptorType: RowEditableDescriptorType
get() {
return when (descriptors.firstOrNull()) {
null -> throw RowRepresentableEditDescriptorException("RowEditableDescriptor inconsistency")
is DateRowEditableDescriptor -> RowEditableDescriptorType.DATE
is DataRowEditableDescriptor -> RowEditableDescriptorType.DATA
is StaticDataRowEditableDescriptor -> RowEditableDescriptorType.STATIC
else -> RowEditableDescriptorType.DEFAULT
}
}
}

@ -1,31 +1,26 @@
package net.pokeranalytics.android.ui.view
import android.content.Context
import androidx.fragment.app.Fragment
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.fragment.components.input.InputFragmentType
import net.pokeranalytics.android.util.NULL_TEXT
/**
* An interface extending Displayable to add a way to represent an object as a String
*/
interface RowRepresentable : Displayable, EditDataSource, ImageDecorator {
interface RowRepresentable : Displayable, RowEditable, ImageDecorator {
fun getDisplayName(context: Context): String {
return NULL_TEXT
}
}
interface EditDataSource {
fun editingDescriptors(map: Map<String, Any?>): ArrayList<RowRepresentableEditDescriptor>? {
return null
}
}
interface RowEditable {
fun startEditing(dataSource:Any?, parent:Fragment?) {}
interface DefaultEditDataSource : EditDataSource, Localizable {
override fun editingDescriptors(map: Map<String, Any?>): ArrayList<RowRepresentableEditDescriptor>? {
val defaultValue: String? by map
return arrayListOf(RowRepresentableEditDescriptor(defaultValue, this.resId))
}
val valueCanBeClearedWhenEditing: Boolean
get() { return true }
}
/**
@ -62,9 +57,9 @@ interface Displayable : Localizable {
return null
}
val bottomSheetType: BottomSheetType
val inputFragmentType: InputFragmentType
get() {
return BottomSheetType.NONE
return InputFragmentType.NONE
}
val selectedChoice: Int

@ -1,14 +0,0 @@
package net.pokeranalytics.android.ui.view
import io.realm.RealmResults
/**
* An container class to describe the way an field of an object will be edited
*/
class RowRepresentableEditDescriptor(
var defaultValue: Any? = null,
var hint: Int? = null,
var inputType: Int? = null,
var data: RealmResults<RowRepresentable>? = null,
var staticData: List<RowRepresentable>? = null
)

@ -1,15 +1,18 @@
package net.pokeranalytics.android.ui.view.rowrepresentable
import android.text.InputType
import androidx.fragment.app.Fragment
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.view.DefaultEditDataSource
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.exceptions.PokerAnalyticsException
import net.pokeranalytics.android.model.realm.Bankroll
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.fragment.components.input.InputFragment
import net.pokeranalytics.android.ui.fragment.components.input.InputFragmentType
import net.pokeranalytics.android.ui.view.*
import java.util.*
enum class BankrollRow : RowRepresentable, DefaultEditDataSource {
enum class BankrollRow : RowRepresentable {
NAME,
LIVE,
INITIAL_VALUE,
CURRENCY,
@ -19,6 +22,7 @@ enum class BankrollRow : RowRepresentable, DefaultEditDataSource {
override val resId: Int?
get() {
return when (this) {
NAME -> R.string.name
LIVE -> R.string.online
INITIAL_VALUE -> R.string.initial_value
CURRENCY -> R.string.currency
@ -30,6 +34,7 @@ enum class BankrollRow : RowRepresentable, DefaultEditDataSource {
override val viewType: Int
get() {
return when (this) {
NAME -> RowViewType.TITLE_VALUE.ordinal
LIVE -> RowViewType.TITLE_SWITCH.ordinal
INITIAL_VALUE -> RowViewType.TITLE_VALUE.ordinal
CURRENCY -> RowViewType.TITLE_VALUE_ARROW.ordinal
@ -38,34 +43,32 @@ enum class BankrollRow : RowRepresentable, DefaultEditDataSource {
}
}
override val bottomSheetType: BottomSheetType
override val inputFragmentType: InputFragmentType
get() {
return when (this) {
LIVE -> BottomSheetType.NONE
INITIAL_VALUE -> BottomSheetType.NUMERIC_TEXT
CURRENCY -> BottomSheetType.NONE
RATE -> BottomSheetType.NUMERIC_TEXT
REFRESH_RATE -> BottomSheetType.NONE
NAME -> InputFragmentType.EDIT_TEXT
LIVE -> InputFragmentType.NONE
INITIAL_VALUE -> InputFragmentType.NUMERIC_TEXT
CURRENCY -> InputFragmentType.NONE
RATE -> InputFragmentType.NUMERIC_TEXT
REFRESH_RATE -> InputFragmentType.NONE
}
}
override fun editingDescriptors(map: Map<String, Any?>): ArrayList<RowRepresentableEditDescriptor>? {
return when (this) {
INITIAL_VALUE -> {
val defaultValue : Any? by map
arrayListOf(
RowRepresentableEditDescriptor(defaultValue, R.string.initial_value, InputType.TYPE_CLASS_NUMBER
or InputType.TYPE_NUMBER_FLAG_DECIMAL)
)
}
RATE -> {
val defaultValue : Any? by map
arrayListOf(
RowRepresentableEditDescriptor(defaultValue, R.string.rate, InputType.TYPE_CLASS_NUMBER
or InputType.TYPE_NUMBER_FLAG_DECIMAL)
)
}
else -> super<RowRepresentable>.editingDescriptors(map)
override fun startEditing(dataSource: Any?, parent: Fragment?) {
if (dataSource == null) return
if (dataSource !is Bankroll) return
if (parent == null) return
if (parent !is RowRepresentableDelegate) return
val bankrollCurrency: Currency? = dataSource.currency?.code?.let { Currency.getInstance(it) }
val data = RowEditableDataSource(bankrollCurrency)
when (this) {
NAME -> data.append(dataSource.name)
INITIAL_VALUE -> data.append(dataSource.initialValue, R.string.initial_value, InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL)
RATE -> data.append(dataSource.currency?.rate, R.string.rate, InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL)
else -> PokerAnalyticsException.InputFragmentException
}
InputFragment.buildAndShow(this, parent, data)
}
}

@ -1,19 +1,25 @@
package net.pokeranalytics.android.ui.view.rowrepresentable
import androidx.fragment.app.Fragment
import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.PokerAnalyticsException
import net.pokeranalytics.android.model.realm.CustomField
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.view.DefaultEditDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.fragment.components.input.InputFragment
import net.pokeranalytics.android.ui.fragment.components.input.InputFragmentType
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowEditableDataSource
import net.pokeranalytics.android.ui.view.RowViewType
enum class CustomFieldRow : RowRepresentable, DefaultEditDataSource {
enum class CustomFieldRow : RowRepresentable {
NAME,
TYPE,
COPY_ON_DUPLICATE;
override val resId: Int?
get() {
return when (this) {
NAME -> R.string.name
COPY_ON_DUPLICATE -> R.string.copy_on_duplicate
else -> null
}
@ -22,16 +28,18 @@ enum class CustomFieldRow : RowRepresentable, DefaultEditDataSource {
override val viewType: Int
get() {
return when (this) {
NAME -> RowViewType.TITLE_VALUE.ordinal
TYPE -> RowViewType.LIST.ordinal
COPY_ON_DUPLICATE -> RowViewType.TITLE_SWITCH.ordinal
}
}
override val bottomSheetType: BottomSheetType
override val inputFragmentType: InputFragmentType
get() {
return when (this) {
TYPE -> BottomSheetType.NONE
COPY_ON_DUPLICATE -> BottomSheetType.NONE
NAME -> InputFragmentType.EDIT_TEXT
TYPE -> InputFragmentType.NONE
COPY_ON_DUPLICATE -> InputFragmentType.NONE
}
}
@ -55,4 +63,41 @@ enum class CustomFieldRow : RowRepresentable, DefaultEditDataSource {
}
return list
}
/*
override fun editingDescriptors(map: Map<String, Any?>): ArrayList<RowEditableDescriptor>? {
return when (type) {
Type.LIST.uniqueIdentifier -> {
val defaultValue: Any? by map
val data: RealmList<CustomFieldEntry>? by map
arrayListOf(
RowEditableDescriptor(defaultValue, staticData = data)
)
}
else -> {
val defaultValue: Double? by map
arrayListOf(
RowEditableDescriptor(
defaultValue, inputType = InputType.TYPE_CLASS_NUMBER
or InputType.TYPE_NUMBER_FLAG_DECIMAL
or InputType.TYPE_NUMBER_FLAG_SIGNED
)
)
}
}
}
*/
override fun startEditing(dataSource: Any?, parent: Fragment?) {
if (dataSource == null) return
if (dataSource !is CustomField) return
if (parent == null) return
if (parent !is RowRepresentableDelegate) return
val data = RowEditableDataSource()
when (this) {
NAME -> data.append(dataSource.name)
else -> PokerAnalyticsException.InputFragmentException
}
InputFragment.buildAndShow(this, parent, data)
}
}

@ -1,27 +1,37 @@
package net.pokeranalytics.android.ui.view.rowrepresentable
import android.text.InputType
import androidx.fragment.app.Fragment
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.fragment.components.input.InputFragment
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowViewType
import java.util.*
import net.pokeranalytics.android.ui.view.RowEditableDataSource
interface FilterElementRow : RowRepresentable {
override fun editingDescriptors(map: Map<String, Any?>): ArrayList<RowRepresentableEditDescriptor>? {
return when (this) {
override fun startEditing(dataSource: Any?, parent: Fragment?) {
if (parent == null) return
if (parent !is RowRepresentableDelegate) return
val data = RowEditableDataSource()
when (this) {
is QueryCondition.DateQuery -> data.appendDateDescriptor(this.singleValue, onlyDate = !this.showTime, onlyTime = this.showTime)
is QueryCondition.Duration -> {
val hours: String? by map
val minutes: String? by map
arrayListOf(
RowRepresentableEditDescriptor(hours, R.string.hour, inputType = InputType.TYPE_CLASS_NUMBER),
RowRepresentableEditDescriptor(minutes, R.string.minute, inputType = InputType.TYPE_CLASS_NUMBER)
)
var hours: String? = null
var minutes: String? = null
this.minutes?.let {
hours = if (it / 60 > 0) (it / 60).toString() else null
minutes = if (it % 60 > 0) (it % 60).toString() else null
}
data.append(hours, R.string.hour, inputType = InputType.TYPE_CLASS_NUMBER)
data.append(minutes, R.string.minute, inputType = InputType.TYPE_CLASS_NUMBER)
}
is QueryCondition.ListOfValues<*> -> {
val valueAsString: String? by map
var valueAsString: String? = null
this.listOfValues.firstOrNull()?.let {
valueAsString = this.listOfValues.firstOrNull()?.toString()
}
val hint = when (this.operator) {
QueryCondition.Operator.MORE, QueryCondition.Operator.LESS -> {
when (this) {
@ -32,13 +42,11 @@ interface FilterElementRow : RowRepresentable {
}
else -> this.resId
}
arrayListOf(
RowRepresentableEditDescriptor(valueAsString, hint, inputType = InputType.TYPE_CLASS_NUMBER)
)
data.append(valueAsString, hint, inputType = InputType.TYPE_CLASS_NUMBER)
}
else -> super.editingDescriptors(map)
}
InputFragment.buildAndShow(this, parent, data)
}
var filterSectionRow: FilterSectionRow

@ -1,17 +1,23 @@
package net.pokeranalytics.android.ui.view.rowrepresentable
import androidx.fragment.app.Fragment
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.view.DefaultEditDataSource
import net.pokeranalytics.android.model.realm.Game
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.fragment.components.input.InputFragment
import net.pokeranalytics.android.ui.fragment.components.input.InputFragmentType
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowEditableDataSource
import net.pokeranalytics.android.ui.view.RowViewType
enum class GameRow : RowRepresentable, DefaultEditDataSource {
enum class GameRow : RowRepresentable {
NAME,
SHORT_NAME;
override val resId: Int?
get() {
return when (this) {
NAME -> R.string.name
SHORT_NAME -> R.string.short_name
}
}
@ -19,15 +25,30 @@ enum class GameRow : RowRepresentable, DefaultEditDataSource {
override val viewType: Int
get() {
return when (this) {
NAME -> RowViewType.TITLE_VALUE.ordinal
SHORT_NAME -> RowViewType.TITLE_VALUE.ordinal
}
}
override val bottomSheetType: BottomSheetType
override val inputFragmentType: InputFragmentType
get() {
return when (this) {
SHORT_NAME -> BottomSheetType.EDIT_TEXT
NAME -> InputFragmentType.EDIT_TEXT
SHORT_NAME -> InputFragmentType.EDIT_TEXT
}
}
override fun startEditing(dataSource: Any?, parent: Fragment?) {
if (dataSource == null) return
if (dataSource !is Game) return
if (parent == null) return
if (parent !is RowRepresentableDelegate) return
val data = RowEditableDataSource()
when (this) {
NAME -> data.append(dataSource.name)
SHORT_NAME -> data.append(dataSource.shortName)
}
InputFragment.buildAndShow(this, parent, data)
}
}

@ -1,19 +1,26 @@
package net.pokeranalytics.android.ui.view.rowrepresentable
import androidx.fragment.app.Fragment
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.view.DefaultEditDataSource
import net.pokeranalytics.android.exceptions.PokerAnalyticsException
import net.pokeranalytics.android.model.realm.Location
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.fragment.components.input.InputFragment
import net.pokeranalytics.android.ui.fragment.components.input.InputFragmentType
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowEditableDataSource
import net.pokeranalytics.android.ui.view.RowViewType
enum class LocationRow : RowRepresentable, DefaultEditDataSource {
enum class LocationRow : RowRepresentable {
NAME,
LOCATION_PERMISSION_SWITCH,
LOCATION_LOADER;
override val resId: Int?
get() {
return when (this) {
NAME -> R.string.name
LOCATION_PERMISSION_SWITCH -> R.string.geo_locate
LOCATION_LOADER -> null
}
@ -22,17 +29,32 @@ enum class LocationRow : RowRepresentable, DefaultEditDataSource {
override val viewType: Int
get() {
return when (this) {
NAME -> RowViewType.TITLE_VALUE.ordinal
LOCATION_PERMISSION_SWITCH -> RowViewType.TITLE_SWITCH.ordinal
LOCATION_LOADER -> RowViewType.LOADER.ordinal
}
}
override val bottomSheetType: BottomSheetType
override val inputFragmentType: InputFragmentType
get() {
return when (this) {
LOCATION_PERMISSION_SWITCH -> BottomSheetType.NONE
LOCATION_LOADER -> BottomSheetType.NONE
NAME -> InputFragmentType.EDIT_TEXT
LOCATION_PERMISSION_SWITCH -> InputFragmentType.NONE
LOCATION_LOADER -> InputFragmentType.NONE
}
}
override fun startEditing(dataSource: Any?, parent: Fragment?) {
if (dataSource == null) return
if (dataSource !is Location) return
if (parent == null) return
if (parent !is RowRepresentableDelegate) return
val data = RowEditableDataSource()
when (this) {
NAME -> data.append(dataSource.name)
else -> PokerAnalyticsException.InputFragmentException
}
InputFragment.buildAndShow(this, parent, data)
}
}

@ -1,17 +1,22 @@
package net.pokeranalytics.android.ui.view.rowrepresentable
import android.text.InputType
import io.realm.RealmResults
import android.widget.Toast
import androidx.fragment.app.Fragment
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.TournamentType
import net.pokeranalytics.android.model.extensions.SessionState
import net.pokeranalytics.android.model.extensions.getState
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.model.realm.*
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.fragment.components.input.InputFragment
import net.pokeranalytics.android.ui.fragment.components.input.InputFragmentType
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowEditableDataSource
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.util.extensions.round
import net.pokeranalytics.android.util.extensions.sorted
import java.util.*
enum class SessionRow : RowRepresentable {
@ -102,7 +107,8 @@ enum class SessionRow : RowRepresentable {
}
fields.add(COMMENT)
fields.add(SeparatorRow())
fields.addAll(listOf(
fields.addAll(
listOf(
GAME,
BLINDS,
LOCATION,
@ -158,158 +164,123 @@ enum class SessionRow : RowRepresentable {
}
}
override val bottomSheetType: BottomSheetType
override val inputFragmentType: InputFragmentType
get() {
return when (this) {
NET_RESULT, CASHED_OUT, INITIAL_BUY_IN, BREAK_TIME, POSITION, PLAYERS, PRIZE -> BottomSheetType.NUMERIC_TEXT
BUY_IN, TIPS -> BottomSheetType.SUM
BLINDS -> BottomSheetType.DOUBLE_EDIT_TEXT
GAME -> BottomSheetType.LIST_GAME
TOURNAMENT_TYPE -> BottomSheetType.LIST_STATIC
LOCATION, BANKROLL, TOURNAMENT_NAME -> BottomSheetType.LIST
TOURNAMENT_FEATURE -> BottomSheetType.MULTI_SELECTION
TABLE_SIZE -> BottomSheetType.GRID
COMMENT -> BottomSheetType.EDIT_TEXT_MULTI_LINES
else -> BottomSheetType.NONE
NET_RESULT, CASHED_OUT, INITIAL_BUY_IN, BREAK_TIME, POSITION, PLAYERS, PRIZE -> InputFragmentType.NUMERIC_TEXT
BUY_IN, TIPS -> InputFragmentType.SUM
BLINDS -> InputFragmentType.DOUBLE_EDIT_TEXT
GAME -> InputFragmentType.LIST_GAME
TOURNAMENT_TYPE -> InputFragmentType.LIST_STATIC
LOCATION, BANKROLL, TOURNAMENT_NAME -> InputFragmentType.LIST
TOURNAMENT_FEATURE -> InputFragmentType.MULTI_SELECTION
TABLE_SIZE -> InputFragmentType.GRID
COMMENT -> InputFragmentType.EDIT_TEXT_MULTI_LINES
else -> InputFragmentType.NONE
}
}
override fun editingDescriptors(map: Map<String, Any?>): ArrayList<RowRepresentableEditDescriptor>? {
return when (this) {
BLINDS -> {
val sb: String? by map
val bb: String? by map
arrayListOf(
RowRepresentableEditDescriptor(
sb, R.string.smallblind, InputType.TYPE_CLASS_NUMBER
or InputType.TYPE_NUMBER_FLAG_DECIMAL
),
RowRepresentableEditDescriptor(
bb, R.string.bigblind, InputType.TYPE_CLASS_NUMBER
or InputType.TYPE_NUMBER_FLAG_DECIMAL
override fun startEditing(dataSource: Any?, parent: Fragment?) {
if (dataSource == null) return
if (dataSource !is Session) return
if (parent == null) return
if (parent !is RowRepresentableDelegate) return
val session: Session = dataSource
val data = RowEditableDataSource(session.currency)
when (this) {
START_DATE -> {
data.appendDateDescriptor(session.startDate)
}
END_DATE -> {
if (session.startDate == null) {
Toast.makeText(parent.context, R.string.session_missing_start_date, Toast.LENGTH_SHORT).show()
return
} else {
data.appendDateDescriptor(session.endDate ?: session.startDate ?: Date(), session.startDate)
}
}
BANKROLL -> data.append(session.bankroll, data = session.realm.sorted<Bankroll>())
CASHED_OUT, PRIZE -> data.append(
session.result?.cashout,
inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL or InputType.TYPE_NUMBER_FLAG_SIGNED
)
NET_RESULT -> data.append(
session.result?.netResult,
inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL or InputType.TYPE_NUMBER_FLAG_SIGNED
)
}
INITIAL_BUY_IN -> data.append(session.tournamentEntryFee?.round(), inputType = InputType.TYPE_CLASS_NUMBER)
BUY_IN -> {
val bb: Double? by map
val fee: Double? by map
val ratedBuyin: Double? by map
val data = arrayListOf<RowRepresentableEditDescriptor>()
val bb: Double? = session.cgBigBlind
val fee: Double? = session.tournamentEntryFee
val ratedBuyin: Double? = session.result?.buyin
if (bb != null) {
data.add(RowRepresentableEditDescriptor(100.0 * (bb ?: 0.0)))
data.add(RowRepresentableEditDescriptor(200.0 * (bb ?: 0.0)))
data.append(100.0 * bb)
data.append(200.0 * bb)
} else if (fee != null) {
data.add(RowRepresentableEditDescriptor((fee ?: 0.0) * 1.0))
data.add(RowRepresentableEditDescriptor((fee ?: 0.0) * 2.0))
data.append(fee)
data.append(fee * 2.0)
} else {
data.add(RowRepresentableEditDescriptor(0))
data.add(RowRepresentableEditDescriptor(0))
data.append(0)
data.append(0)
}
data.add(RowRepresentableEditDescriptor(ratedBuyin))
data.add(
RowRepresentableEditDescriptor(
inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL
)
)
data.add(
RowRepresentableEditDescriptor(
inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL
)
)
data
data.append(ratedBuyin)
data.append(inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL)
data.append(inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL)
}
CASHED_OUT, PRIZE, NET_RESULT -> {
val defaultValue: Double? by map
arrayListOf(
RowRepresentableEditDescriptor(
defaultValue,
POSITION -> data.append(session.result?.tournamentFinalPosition, inputType = InputType.TYPE_CLASS_NUMBER)
PLAYERS -> data.append(
session.tournamentNumberOfPlayers.toString(),
inputType = InputType.TYPE_CLASS_NUMBER
or InputType.TYPE_NUMBER_FLAG_DECIMAL
or InputType.TYPE_NUMBER_FLAG_SIGNED
)
)
}
COMMENT -> {
val defaultValue: String? by map
arrayListOf(RowRepresentableEditDescriptor(defaultValue, R.string.comment))
}
BREAK_TIME -> {
arrayListOf(
RowRepresentableEditDescriptor(
hint = R.string.in_minutes, inputType = InputType.TYPE_CLASS_NUMBER
)
)
TIPS -> {
val sb: String? = session.cgSmallBlind?.round()
val bb: String? = session.cgBigBlind?.round()
val tips: Double? = session.result?.tips
data.append(sb ?: 0.0)
data.append(bb ?: 0.0)
data.append(tips ?: 0.0)
data.append("", inputType = InputType.TYPE_CLASS_NUMBER)
data.append("", inputType = InputType.TYPE_CLASS_NUMBER)
}
GAME -> {
val limit: Int? by map
val defaultValue: Any? by map
val data: RealmResults<RowRepresentable>? by map
arrayListOf(
RowRepresentableEditDescriptor(limit),
RowRepresentableEditDescriptor(defaultValue, data = data)
)
data.append(session.limit)
data.append(session.game, data = session.realm.sorted<Game>())
}
INITIAL_BUY_IN -> {
val defaultValue: Double? by map
arrayListOf(
RowRepresentableEditDescriptor(defaultValue?.round(), inputType = InputType.TYPE_CLASS_NUMBER)
BLINDS -> {
data.append(
session.cgSmallBlind?.round(),
R.string.smallblind,
InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL
)
}
BANKROLL, LOCATION, TOURNAMENT_FEATURE, TOURNAMENT_NAME -> {
val defaultValue: Any? by map
val data: RealmResults<RowRepresentable>? by map
arrayListOf(
RowRepresentableEditDescriptor(defaultValue, data = data)
data.append(
session.cgBigBlind?.round(),
R.string.bigblind,
InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL
)
}
PLAYERS -> {
val defaultValue: Int? by map
arrayListOf(
RowRepresentableEditDescriptor(
defaultValue?.toString(),
inputType = InputType.TYPE_CLASS_NUMBER
)
LOCATION -> data.append(session.location, data = session.realm.sorted<Location>())
TABLE_SIZE -> data.append(session.tableSize)
TOURNAMENT_TYPE -> data.append(session.tournamentType, staticData = TournamentType.values().map { it })
TOURNAMENT_NAME -> data.append(session.tournamentName, data = session.realm.sorted<TournamentName>())
TOURNAMENT_FEATURE -> data.append(
session.tournamentFeatures,
data = session.realm.sorted<TournamentFeature>()
)
BREAK_TIME -> data.append(hint = R.string.in_minutes, inputType = InputType.TYPE_CLASS_NUMBER)
COMMENT -> data.append(session.comment, R.string.comment)
}
POSITION -> {
val defaultValue: Int? by map
arrayListOf(
RowRepresentableEditDescriptor(
defaultValue,
inputType = InputType.TYPE_CLASS_NUMBER
)
)
InputFragment.buildAndShow(this, parent, data)
}
TABLE_SIZE -> {
val defaultValue: Int? by map
arrayListOf(RowRepresentableEditDescriptor(defaultValue))
}
TIPS -> {
val sb: String? by map
val bb: String? by map
val tips: Double? by map
// Disable the buttons with value = 0, add current value & set the 2 edit texts
arrayListOf(
RowRepresentableEditDescriptor(sb ?: 0.0),
RowRepresentableEditDescriptor(bb ?: 0.0),
RowRepresentableEditDescriptor(tips ?: 0.0),
RowRepresentableEditDescriptor("", inputType = InputType.TYPE_CLASS_NUMBER),
RowRepresentableEditDescriptor("", inputType = InputType.TYPE_CLASS_NUMBER)
)
}
TOURNAMENT_TYPE -> {
val defaultValue: Any? by map
arrayListOf(
RowRepresentableEditDescriptor(defaultValue, staticData = TournamentType.values().map {
it
})
)
}
else -> null
override val valueCanBeClearedWhenEditing: Boolean
get() {
return when (this) {
BANKROLL -> false
else -> true
}
}
}

@ -1,16 +1,15 @@
package net.pokeranalytics.android.ui.view.rowrepresentable
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.view.DefaultEditDataSource
import net.pokeranalytics.android.ui.fragment.components.input.InputFragmentType
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
enum class SimpleRow : RowRepresentable, DefaultEditDataSource {
enum class SimpleRow : RowRepresentable {
NAME;
override val resId: Int? = R.string.name
override val viewType: Int = RowViewType.TITLE_VALUE.ordinal
override val bottomSheetType: BottomSheetType = BottomSheetType.EDIT_TEXT
override val inputFragmentType: InputFragmentType = InputFragmentType.EDIT_TEXT
}

@ -1,6 +1,49 @@
package net.pokeranalytics.android.ui.view.rowrepresentable
import net.pokeranalytics.android.ui.view.DefaultEditDataSource
import androidx.fragment.app.Fragment
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.TournamentFeature
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.fragment.components.input.InputFragment
import net.pokeranalytics.android.ui.fragment.components.input.InputFragmentType
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowEditableDataSource
import net.pokeranalytics.android.ui.view.RowViewType
enum class TournamentFeatureRow : RowRepresentable, DefaultEditDataSource
enum class TournamentFeatureRow : RowRepresentable {
NAME;
override val resId: Int?
get() {
return when (this) {
NAME -> R.string.name
}
}
override val viewType: Int
get() {
return when (this) {
NAME -> RowViewType.TITLE_VALUE.ordinal
}
}
override val inputFragmentType: InputFragmentType
get() {
return when (this) {
NAME -> InputFragmentType.EDIT_TEXT
}
}
override fun startEditing(dataSource: Any?, parent: Fragment?) {
if (dataSource == null) return
if (dataSource !is TournamentFeature) return
if (parent == null) return
if (parent !is RowRepresentableDelegate) return
val data = RowEditableDataSource()
when (this) {
NAME -> data.append(dataSource.name)
}
InputFragment.buildAndShow(this, parent, data)
}
}

@ -1,6 +1,49 @@
package net.pokeranalytics.android.ui.view.rowrepresentable
import net.pokeranalytics.android.ui.view.DefaultEditDataSource
import androidx.fragment.app.Fragment
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.TournamentName
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.fragment.components.input.InputFragment
import net.pokeranalytics.android.ui.fragment.components.input.InputFragmentType
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowEditableDataSource
import net.pokeranalytics.android.ui.view.RowViewType
enum class TournamentNameRow : RowRepresentable, DefaultEditDataSource
enum class TournamentNameRow : RowRepresentable {
NAME;
override val resId: Int?
get() {
return when (this) {
NAME -> R.string.name
}
}
override val viewType: Int
get() {
return when (this) {
NAME -> RowViewType.TITLE_VALUE.ordinal
}
}
override val inputFragmentType: InputFragmentType
get() {
return when (this) {
NAME -> InputFragmentType.EDIT_TEXT
}
}
override fun startEditing(dataSource: Any?, parent: Fragment?) {
if (dataSource == null) return
if (dataSource !is TournamentName) return
if (parent == null) return
if (parent !is RowRepresentableDelegate) return
val data = RowEditableDataSource()
when (this) {
NAME -> data.append(dataSource.name)
}
InputFragment.buildAndShow(this, parent, data)
}
}

@ -1,16 +1,21 @@
package net.pokeranalytics.android.ui.view.rowrepresentable
import android.text.InputType
import io.realm.RealmResults
import androidx.fragment.app.Fragment
import io.realm.Realm
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.view.DefaultEditDataSource
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.model.realm.Bankroll
import net.pokeranalytics.android.model.realm.Transaction
import net.pokeranalytics.android.model.realm.TransactionType
import net.pokeranalytics.android.ui.adapter.RowEditableDelegate
import net.pokeranalytics.android.ui.fragment.components.input.InputFragment
import net.pokeranalytics.android.ui.fragment.components.input.InputFragmentType
import net.pokeranalytics.android.ui.view.*
import net.pokeranalytics.android.util.extensions.round
import net.pokeranalytics.android.util.extensions.sorted
enum class TransactionRow : RowRepresentable, DefaultEditDataSource {
enum class TransactionRow : RowRepresentable {
BANKROLL,
TYPE,
AMOUNT,
@ -39,48 +44,50 @@ enum class TransactionRow : RowRepresentable, DefaultEditDataSource {
}
}
override val bottomSheetType: BottomSheetType
override val inputFragmentType: InputFragmentType
get() {
return when (this) {
BANKROLL -> BottomSheetType.LIST
TYPE -> BottomSheetType.LIST
AMOUNT -> BottomSheetType.EDIT_TEXT
COMMENT -> BottomSheetType.EDIT_TEXT_MULTI_LINES
DATE -> BottomSheetType.NONE
BANKROLL -> InputFragmentType.LIST
TYPE -> InputFragmentType.LIST
AMOUNT -> InputFragmentType.EDIT_TEXT
COMMENT -> InputFragmentType.EDIT_TEXT_MULTI_LINES
DATE -> InputFragmentType.NONE
}
}
override fun editingDescriptors(map: Map<String, Any?>): ArrayList<RowRepresentableEditDescriptor>? {
override val valueCanBeClearedWhenEditing: Boolean
get() {
return when (this) {
BANKROLL -> {
val defaultValue : Any? by map
val data : RealmResults<RowRepresentable>? by map
arrayListOf(
RowRepresentableEditDescriptor(defaultValue, data = data)
)
}
TYPE -> {
val defaultValue : Any? by map
val data : RealmResults<RowRepresentable>? by map
arrayListOf(
RowRepresentableEditDescriptor(defaultValue, data = data)
)
DATE -> false
else -> true
}
AMOUNT -> {
val defaultValue: String? by map
arrayListOf(
RowRepresentableEditDescriptor(
defaultValue,
inputType = InputType.TYPE_CLASS_NUMBER
or InputType.TYPE_NUMBER_FLAG_DECIMAL
or InputType.TYPE_NUMBER_FLAG_SIGNED
))
}
COMMENT -> {
val defaultValue : String? by map
arrayListOf(RowRepresentableEditDescriptor(defaultValue, R.string.comment))
override fun startEditing(dataSource: Any?, parent: Fragment?) {
if (dataSource == null) return
if (dataSource !is Transaction) return
if (parent == null) return
if (parent !is RowEditableDelegate) return
val data = RowEditableDataSource()
val realm = dataSource.realm?.let { it } ?: run { Realm.getDefaultInstance() }
when (this) {
DATE -> {
data.appendDateDescriptor(dataSource.date, onlyDate = true)
}
else -> super<RowRepresentable>.editingDescriptors(map)
BANKROLL -> data.append(
dataSource.bankroll,
data = realm.sorted<Bankroll>()
)
TYPE -> data.append(
dataSource.type,
data = realm.sorted<TransactionType>()
)
AMOUNT -> data.append(
(if (dataSource.amount != 0.0) dataSource.amount.round() else ""),
inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL or InputType.TYPE_NUMBER_FLAG_SIGNED
)
COMMENT -> data.append(dataSource.comment, R.string.comment)
}
InputFragment.buildAndShow(this, parent, data)
}
}

@ -1,17 +1,24 @@
package net.pokeranalytics.android.ui.view.rowrepresentable
import androidx.fragment.app.Fragment
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.view.DefaultEditDataSource
import net.pokeranalytics.android.exceptions.PokerAnalyticsException
import net.pokeranalytics.android.model.realm.TransactionType
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.fragment.components.input.InputFragment
import net.pokeranalytics.android.ui.fragment.components.input.InputFragmentType
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowEditableDataSource
import net.pokeranalytics.android.ui.view.RowViewType
enum class TransactionTypeRow : RowRepresentable, DefaultEditDataSource {
enum class TransactionTypeRow : RowRepresentable {
NAME,
TRANSACTION_ADDITIVE;
override val resId: Int?
get() {
return when (this) {
NAME -> R.string.name
TRANSACTION_ADDITIVE -> R.string.additive
}
}
@ -19,17 +26,32 @@ enum class TransactionTypeRow : RowRepresentable, DefaultEditDataSource {
override val viewType: Int
get() {
return when (this) {
NAME -> RowViewType.TITLE_VALUE.ordinal
TRANSACTION_ADDITIVE -> RowViewType.TITLE_SWITCH.ordinal
}
}
override val bottomSheetType: BottomSheetType
override val inputFragmentType: InputFragmentType
get() {
return when (this) {
TRANSACTION_ADDITIVE -> BottomSheetType.NONE
NAME -> InputFragmentType.EDIT_TEXT
TRANSACTION_ADDITIVE -> InputFragmentType.NONE
}
}
override fun startEditing(dataSource: Any?, parent: Fragment?) {
if (dataSource == null) return
if (dataSource !is TransactionType) return
if (parent == null) return
if (parent !is RowRepresentableDelegate) return
val data = RowEditableDataSource()
when (this) {
NAME -> data.append(dataSource.name)
else -> PokerAnalyticsException.InputFragmentException
}
InputFragment.buildAndShow(this, parent, data)
}
}

@ -1,36 +0,0 @@
package net.pokeranalytics.android.util
import android.content.Context
import java.util.*
class LocaleUtils {
companion object {
/**
* Return the current locale
*/
fun getCurrentLocale(context: Context) : Locale {
val defaultLocaleCode = Preferences.getString(Preferences.Keys.LOCALE_CODE, context)
var locale = Locale.getDefault()
if (defaultLocaleCode != null) {
locale = Locale(defaultLocaleCode)
Locale.setDefault(locale)
}
return locale
}
/**
*
*/
fun setCurrentLocale(context: Context, language: String) {
Preferences.setString(Preferences.Keys.LOCALE_CODE, language, context)
}
}
}

@ -38,7 +38,7 @@ class LocationManager(private var context: Context) {
// Use fields to define the data types to return.
val placeFields = Arrays.asList(Place.Field.NAME, Place.Field.ADDRESS, Place.Field.LAT_LNG)
// Use the builder to create a FindCurrentPlaceRequest.
// Use the builder to buildAndShow a FindCurrentPlaceRequest.
val request = FindCurrentPlaceRequest.builder(placeFields).build()
// Call findCurrentPlace and handle the response (first check that the user has granted permission).

Loading…
Cancel
Save