Merge branch 'dev' of gitlab.com:stax-river/poker-analytics into dev

feature/top10
Aurelien Hubert 7 years ago
commit 4137d0d60a
  1. 18
      app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/BlindFilterInstrumentedTest.kt
  2. 6
      app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/DateFilterInstrumentedUnitTest.kt
  3. 11
      app/src/main/java/net/pokeranalytics/android/calculus/Report.kt
  4. 22
      app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt
  5. 3
      app/src/main/java/net/pokeranalytics/android/model/Criteria.kt
  6. 50
      app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt
  7. 5
      app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt
  8. 7
      app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt
  9. 7
      app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt
  10. 32
      app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt
  11. 33
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  12. 3
      app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt
  13. 10
      app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt
  14. 0
      app/src/main/java/net/pokeranalytics/android/ui/graph/AxisFormatter.kt
  15. 18
      app/src/main/java/net/pokeranalytics/android/ui/view/LegendView.kt
  16. 9
      app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt
  17. 15
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt

@ -44,8 +44,7 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() {
val filter = QueryCondition.BLIND() val filter = QueryCondition.BLIND()
val blind = QueryCondition.BLIND().apply { val blind = QueryCondition.BLIND().apply {
blind = s1.blinds!! stringValues = arrayListOf(s1.blinds!!)
hasDefaultCurrency = false
} }
blind.filterSectionRow = FilterSectionRow.BLIND blind.filterSectionRow = FilterSectionRow.BLIND
@ -92,12 +91,10 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() {
val filter = QueryCondition.BLIND() val filter = QueryCondition.BLIND()
val blind1 = QueryCondition.BLIND().apply { val blind1 = QueryCondition.BLIND().apply {
blind = s1.blinds!! stringValues = arrayListOf(s1.blinds!!)
hasDefaultCurrency = true
} }
val blind2 = QueryCondition.BLIND().apply { val blind2 = QueryCondition.BLIND().apply {
blind = s2.blinds!! stringValues = arrayListOf(s2.blinds!!)
hasDefaultCurrency = true
} }
blind1.filterSectionRow = FilterSectionRow.BLIND blind1.filterSectionRow = FilterSectionRow.BLIND
@ -146,8 +143,7 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() {
val filter = QueryCondition.BLIND() val filter = QueryCondition.BLIND()
val blind = QueryCondition.BLIND().apply { val blind = QueryCondition.BLIND().apply {
blind = s3.blinds!! stringValues = arrayListOf(s3.blinds!!)
hasDefaultCurrency = false
} }
blind.filterSectionRow = FilterSectionRow.BLIND blind.filterSectionRow = FilterSectionRow.BLIND
@ -195,12 +191,10 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() {
val filter = QueryCondition.BLIND() val filter = QueryCondition.BLIND()
val blind1 = QueryCondition.BLIND().apply { val blind1 = QueryCondition.BLIND().apply {
blind = s1.blinds!! stringValues = arrayListOf(s1.blinds!!)
hasDefaultCurrency = false
} }
val blind2 = QueryCondition.BLIND().apply { val blind2 = QueryCondition.BLIND().apply {
blind = s2.blinds!! stringValues = arrayListOf(s2.blinds!!)
hasDefaultCurrency = false
} }
blind1.filterSectionRow = FilterSectionRow.BLIND blind1.filterSectionRow = FilterSectionRow.BLIND

@ -33,7 +33,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
val filter = QueryCondition.DAY_OF_WEEK() val filter = QueryCondition.DAY_OF_WEEK()
cal.time = s1.startDate cal.time = s1.startDate
val filterElementRow = QueryCondition.DAY_OF_WEEK().apply { intValue = cal.get(Calendar.DAY_OF_WEEK) } val filterElementRow = QueryCondition.DAY_OF_WEEK().apply { intValues = arrayListOf(cal.get(Calendar.DAY_OF_WEEK)) }
filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE
val filterElement = FilterCondition(arrayListOf(filterElementRow)) val filterElement = FilterCondition(arrayListOf(filterElementRow))
filter.updateValueMap(filterElement) filter.updateValueMap(filterElement)
@ -61,7 +61,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
val filter = QueryCondition.MONTH() val filter = QueryCondition.MONTH()
cal.time = s1.startDate cal.time = s1.startDate
val filterElementRow = QueryCondition.MONTH().apply { intValue = cal.get(Calendar.MONTH) } val filterElementRow = QueryCondition.MONTH().apply { intValues = arrayListOf(cal.get(Calendar.MONTH)) }
filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE
val filterElement = FilterCondition(arrayListOf(filterElementRow)) val filterElement = FilterCondition(arrayListOf(filterElementRow))
filter.updateValueMap(filterElement) filter.updateValueMap(filterElement)
@ -89,7 +89,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
val filter = QueryCondition.YEAR() val filter = QueryCondition.YEAR()
cal.time = s1.startDate cal.time = s1.startDate
val filterElementRow = QueryCondition.YEAR().apply { intValue = cal.get(Calendar.YEAR) } val filterElementRow = QueryCondition.YEAR().apply { intValues = arrayListOf(cal.get(Calendar.YEAR)) }
filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE
val filterElement = FilterCondition(arrayListOf(filterElementRow)) val filterElement = FilterCondition(arrayListOf(filterElementRow))
filter.updateValueMap(filterElement) filter.updateValueMap(filterElement)

@ -69,17 +69,16 @@ class Report(var options: Calculator.Options) {
return BarDataSet(entries, statToUse?.name) return BarDataSet(entries, statToUse?.name)
} }
fun multiLineEntries(context: Context): List<List<Entry>> { fun multiLineEntries(context: Context): List<LineDataSet> {
val entries = mutableListOf<List<Entry>>() val dataSets = mutableListOf<LineDataSet>()
options.displayedStats.forEach { stat -> options.displayedStats.forEach { stat ->
this._results.forEach { result -> this._results.forEach { result ->
val dataSet = result.singleLineEntries(stat, context) dataSets.add(result.singleLineEntries(stat, context))
// entries.add(entryList)
} }
} }
return entries return dataSets
} }
} }
@ -424,7 +423,7 @@ class ComputedResults(group: ComputableGroup, shouldManageMultiGroupProgressValu
override val entryTitle: String = this.group.name override val entryTitle: String = this.group.name
override fun formattedValue(stat: Stat, context: Context): TextFormat { override fun formattedValue(stat: Stat): TextFormat {
this.computedStat(stat)?.let { this.computedStat(stat)?.let {
return it.format() return it.format()
} ?: run { } ?: run {

@ -1,10 +1,12 @@
package net.pokeranalytics.android.calculus package net.pokeranalytics.android.calculus
import android.content.Context import android.content.Context
import com.github.mikephil.charting.data.Entry
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.FormattingException import net.pokeranalytics.android.exceptions.FormattingException
import net.pokeranalytics.android.model.interfaces.Timed import net.pokeranalytics.android.model.interfaces.Timed
import net.pokeranalytics.android.ui.graph.AxisFormatting import net.pokeranalytics.android.ui.graph.AxisFormatting
import net.pokeranalytics.android.ui.view.LegendView
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.util.NULL_TEXT import net.pokeranalytics.android.util.NULL_TEXT
@ -25,7 +27,23 @@ class ObjectIdentifier(var id: String, var clazz: Class<out Timed>) {
interface StatEntry { interface StatEntry {
val entryTitle: String val entryTitle: String
fun formattedValue(stat: Stat, context: Context): TextFormat fun formattedValue(stat: Stat): TextFormat
fun legendValues(stat: Stat, entry: Entry) : LegendView.Values {
return when (stat) {
Stat.NUMBER_OF_SETS, Stat.NUMBER_OF_GAMES -> {
val totalStatValue = stat.format(entry.y.toDouble(), currency = null)
LegendView.Values(this.entryTitle, totalStatValue)
}
else -> {
val entryValue = this.formattedValue(stat)
val totalStatValue = stat.format(entry.y.toDouble(), currency = null)
LegendView.Values(this.entryTitle, entryValue, totalStatValue)
}
}
}
} }
@ -239,7 +257,7 @@ enum class Stat : RowRepresentable {
val significantIndividualValue: Boolean val significantIndividualValue: Boolean
get() { get() {
return when (this) { return when (this) {
WIN_RATIO, NUMBER_OF_SETS, NUMBER_OF_GAMES -> false WIN_RATIO, NUMBER_OF_SETS, NUMBER_OF_GAMES, STANDARD_DEVIATION -> false
else -> true else -> true
} }
} }

@ -93,8 +93,7 @@ sealed class Criteria {
query.map { query.map {
it.blinds?.let { stake -> it.blinds?.let { stake ->
blinds.add(QueryCondition.BLIND().apply { blinds.add(QueryCondition.BLIND().apply {
blind = stake stringValues = arrayListOf(stake)
hasDefaultCurrency = it.hasDefaultCurrency
}) })
} }
} }

@ -86,7 +86,6 @@ sealed class QueryCondition : FilterElementRow {
} }
interface asListOfDouble { var doubleValues : ArrayList<Double> } interface asListOfDouble { var doubleValues : ArrayList<Double> }
interface asListOfBoolean { var booleanValues : ArrayList<Boolean> }
interface asListOfString { var stringValues : ArrayList<String> } interface asListOfString { var stringValues : ArrayList<String> }
interface asDateValue { interface asDateValue {
var dateValue: Date var dateValue: Date
@ -147,7 +146,7 @@ sealed class QueryCondition : FilterElementRow {
return when (this) { return when (this) {
is StaticDataQueryCondition -> label() is StaticDataQueryCondition -> label()
is QueryDataCondition<*> -> label() is QueryDataCondition<*> -> label()
is BLIND -> this.blind!! is BLIND -> label()
else -> baseId else -> baseId
} }
} }
@ -248,11 +247,19 @@ sealed class QueryCondition : FilterElementRow {
} }
} }
class BLIND: QueryCondition(), asListOfString, asListOfBoolean { class BLIND: QueryCondition(), asListOfString {
var blind: String? = null
var hasDefaultCurrency: Boolean = false
override var booleanValues = ArrayList<Boolean>()
override var stringValues = ArrayList<String>() override var stringValues = ArrayList<String>()
fun label(): String {
val completeLabel = when (stringValues.size) {
0 -> return NULL_TEXT
1,2 -> {
return stringValues.map { it }.joinToString(", ")
}
else -> "${stringValues.size} $baseId"
}
return completeLabel
}
} }
class LAST_GAMES: SingleValueQueryCondition() class LAST_GAMES: SingleValueQueryCondition()
@ -355,31 +362,9 @@ sealed class QueryCondition : FilterElementRow {
} }
realmQuery realmQuery
} }
is BLIND -> { is BLIND -> realmQuery.`in`(fieldName, stringValues.toTypedArray())
val blinds: Array<String> = stringValues.toTypedArray()
val hasDefaultCurrency: Array<Boolean> = booleanValues.toTypedArray()
//realmQuery.`in`(fieldName, blinds)
blinds.forEachIndexed { index, s ->
val isUsingDefaultCurrency = hasDefaultCurrency[index]
realmQuery.beginGroup()
if (isUsingDefaultCurrency) {
realmQuery.endsWith(fieldName, s)
.and()
.isNull("bankroll.currency.code")
} else {
realmQuery.equalTo(fieldName, s)
}
.endGroup()
if (index < blinds.size - 1) {
realmQuery.or()
}
}
realmQuery
}
is QueryDataCondition<*> -> realmQuery.`in`(fieldName, stringValues.toTypedArray()) is QueryDataCondition<*> -> realmQuery.`in`(fieldName, stringValues.toTypedArray())
is StaticDataQueryCondition -> { is StaticDataQueryCondition -> realmQuery.`in`(fieldName, intValues.toTypedArray())
realmQuery.`in`(fieldName, intValues.toTypedArray())
}
is DateQuery -> { is DateQuery -> {
if (this is Less) { if (this is Less) {
realmQuery.lessThanOrEqualTo(fieldName, dateValue) realmQuery.lessThanOrEqualTo(fieldName, dateValue)
@ -444,10 +429,7 @@ sealed class QueryCondition : FilterElementRow {
is asListOfDouble -> filterCondition.doubleValues.map { doubleValues.add(it) } is asListOfDouble -> filterCondition.doubleValues.map { doubleValues.add(it) }
is QueryDataCondition<*> -> filterCondition.ids.map { stringValues.add(it) } is QueryDataCondition<*> -> filterCondition.ids.map { stringValues.add(it) }
is DateQuery -> dateValue = filterCondition.date is DateQuery -> dateValue = filterCondition.date
is BLIND -> { is BLIND -> filterCondition.blinds.map { stringValues.add(it) }
filterCondition.blinds.map { stringValues.add(it) }
filterCondition.hasDefaultCurrency.map { booleanValues.add(it) }
}
} }
} }

@ -38,6 +38,7 @@ class PokerAnalyticsMigration : RealmMigration {
schema.rename("FilterElement", "FilterCondition") schema.rename("FilterElement", "FilterCondition")
schema.get("Filter")?.let { schema.get("Filter")?.let {
it.renameField("filterElements", "filterConditions") it.renameField("filterElements", "filterConditions")
it.removeField("entityType")
} }
schema.get("SessionSet")?.let { schema.get("SessionSet")?.let {
it.addField("id", String::class.java).setRequired("id", true) it.addField("id", String::class.java).setRequired("id", true)
@ -55,10 +56,6 @@ class PokerAnalyticsMigration : RealmMigration {
it.addField("blinds", String::class.java) it.addField("blinds", String::class.java)
} }
schema.get("FilterCondition")?.let {
it.addRealmListField("booleanValues", Boolean::class.java).setNullable("booleanValues", true)
}
schema.get("FilterCondition")?.let { schema.get("FilterCondition")?.let {
it.removeField("blindValues") it.removeField("blindValues")
} }

@ -3,6 +3,7 @@ package net.pokeranalytics.android.model.realm
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.annotations.Ignore import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.util.UserDefaults
import java.util.* import java.util.*
open class Currency : RealmObject() { open class Currency : RealmObject() {
@ -42,4 +43,10 @@ open class Currency : RealmObject() {
} }
} }
fun hasMainCurrencyCode() : Boolean {
this.code?.let { return it == UserDefaults.currency.currencyCode }
return false
}
} }

@ -20,13 +20,6 @@ import java.util.*
*/ */
open class Filter : RealmObject() { open class Filter : RealmObject() {
private var entityType: Int? = Entity.SESSION.ordinal
private enum class Entity {
SESSION,
;
}
companion object { companion object {
// Create a new instance // Create a new instance

@ -21,20 +21,6 @@ open class FilterCondition() : RealmObject() {
is QueryCondition.asDateValue -> { is QueryCondition.asDateValue -> {
this.dateValue = row.dateValue this.dateValue = row.dateValue
} }
is QueryCondition.BLIND -> {
//TODO refactor raz
this.stringValues = RealmList<String>().apply {
this.addAll(filterElementRows.map {
(it as QueryCondition.BLIND).blind
})
}
this.booleanValues = RealmList<Boolean>().apply {
this.addAll(filterElementRows.map {
(it as QueryCondition.BLIND).hasDefaultCurrency
})
}
}
is QueryCondition.asListOfString -> { is QueryCondition.asListOfString -> {
this.stringValues = RealmList<String>().apply { this.stringValues = RealmList<String>().apply {
this.addAll(filterElementRows.map { this.addAll(filterElementRows.map {
@ -64,7 +50,6 @@ open class FilterCondition() : RealmObject() {
private var numericValues: RealmList<Double>? = null private var numericValues: RealmList<Double>? = null
private var dateValue: Date? = null private var dateValue: Date? = null
private var stringValues: RealmList<String>? = null private var stringValues: RealmList<String>? = null
private var booleanValues: RealmList<Boolean>? = null
val ids: Array<String> val ids: Array<String>
get() = stringValues?.toTypedArray() ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing get() = stringValues?.toTypedArray() ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing
@ -72,26 +57,9 @@ open class FilterCondition() : RealmObject() {
val blinds: Array<String> val blinds: Array<String>
get() = stringValues?.toTypedArray() ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing get() = stringValues?.toTypedArray() ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing
val hasDefaultCurrency: Array<Boolean>
get() = booleanValues?.toTypedArray() ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing
val date: Date val date: Date
get() = dateValue ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing get() = dateValue ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing
val intValues: Array<Int>
get() = numericValues?.map {
println("test double: $it")
it.toInt()
}?.toTypedArray() ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing
val doubleValue: Double
get() = numericValues?.first() ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing
val intValue: Int
get() = numericValues?.first()?.toInt() ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing
val doubleValues: Array<Double> val doubleValues: Array<Double>
get() = numericValues?.toTypedArray() ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing get() = numericValues?.toTypedArray() ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing
} }

@ -1,6 +1,7 @@
package net.pokeranalytics.android.model.realm package net.pokeranalytics.android.model.realm
import android.content.Context import android.content.Context
import com.github.mikephil.charting.data.Entry
import io.realm.Realm import io.realm.Realm
import io.realm.RealmList import io.realm.RealmList
import io.realm.RealmObject import io.realm.RealmObject
@ -26,6 +27,7 @@ import net.pokeranalytics.android.model.interfaces.*
import net.pokeranalytics.android.model.utils.SessionSetManager import net.pokeranalytics.android.model.utils.SessionSetManager
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.UnmanagedRowRepresentableException import net.pokeranalytics.android.ui.adapter.UnmanagedRowRepresentableException
import net.pokeranalytics.android.ui.view.LegendView
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.RowViewType
@ -489,11 +491,6 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
return NULL_TEXT return NULL_TEXT
} }
val hasDefaultCurrency: Boolean
get() {
return bankroll?.currency?.code == null
}
val currency: Currency val currency: Currency
get() { get() {
return bankroll?.currency?.code?.let { return bankroll?.currency?.code?.let {
@ -921,7 +918,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
return DateFormat.getDateInstance(DateFormat.SHORT).format(this.startDate) return DateFormat.getDateInstance(DateFormat.SHORT).format(this.startDate)
} }
override fun formattedValue(stat: Stat, context: Context): TextFormat { override fun formattedValue(stat: Stat): TextFormat {
this.result?.let { result -> this.result?.let { result ->
@ -961,6 +958,30 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
} }
override fun legendValues(stat: Stat, entry: Entry) : LegendView.Values {
return when (stat) {
Stat.STANDARD_DEVIATION -> {
val left = this.formattedValue(Stat.NET_RESULT)
val hasMainCurrencyCode = this.bankroll?.currency?.hasMainCurrencyCode() ?: false
var right: TextFormat? = null
if (!hasMainCurrencyCode) {
this.computableResult?.ratedNet?.let { ratedNet ->
right = Stat.NET_RESULT.format(ratedNet)
}
}
return LegendView.Values(this.entryTitle, left, right)
} else -> {
return super.legendValues(stat, entry)
}
}
}
// Timed // Timed
override val objectIdentifier: ObjectIdentifier override val objectIdentifier: ObjectIdentifier

@ -1,6 +1,5 @@
package net.pokeranalytics.android.model.realm package net.pokeranalytics.android.model.realm
import android.content.Context
import io.realm.Realm import io.realm.Realm
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.RealmResults import io.realm.RealmResults
@ -118,7 +117,7 @@ open class SessionSet() : RealmObject(), Timed, Filterable {
return DateFormat.getDateInstance(DateFormat.SHORT).format(this.startDate) return DateFormat.getDateInstance(DateFormat.SHORT).format(this.startDate)
} }
override fun formattedValue(stat: Stat, context: Context) : TextFormat { override fun formattedValue(stat: Stat) : TextFormat {
return when (stat) { return when (stat) {
Stat.NET_RESULT, Stat.AVERAGE -> stat.format(this.ratedNet, currency = null) Stat.NET_RESULT, Stat.AVERAGE -> stat.format(this.ratedNet, currency = null)
Stat.DURATION, Stat.AVERAGE_DURATION -> stat.format(this.netDuration.toDouble(), currency = null) Stat.DURATION, Stat.AVERAGE_DURATION -> stat.format(this.netDuration.toDouble(), currency = null)

@ -153,11 +153,13 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener {
} }
statEntry?.let { statEntry?.let {
val formattedDate = it.entryTitle this.legendView.setItemData(it.legendValues(stat, entry))
val entryValue = it.formattedValue(this.stat, requireContext())
val totalStatValue = this.stat.format(entry.y.toDouble(), currency = null)
this.legendView.setItemData(this.stat, formattedDate, entryValue, totalStatValue) // val formattedDate = it.entryTitle
// val entryValue = it.formattedValue(this.stat, requireContext())
// val totalStatValue = this.stat.format(entry.y.toDouble(), currency = null)
//
// this.legendView.setItemData(this.stat, formattedDate, entryValue, totalStatValue)
} }
} }

@ -17,6 +17,8 @@ import net.pokeranalytics.android.ui.extensions.setTextFormat
*/ */
class LegendView : FrameLayout { class LegendView : FrameLayout {
class Values(var title: String, var leftFormat: TextFormat, var rightFormat: TextFormat? = null)
private lateinit var legendLayout: ConstraintLayout private lateinit var legendLayout: ConstraintLayout
/** /**
@ -66,17 +68,19 @@ class LegendView : FrameLayout {
/** /**
* *
*/ */
fun setItemData(stat: Stat, title: String, statFormat1: TextFormat, statFormat2: TextFormat) { fun setItemData(values: Values) {
this.title.text = title this.title.text = values.title
if (stat.significantIndividualValue) { this.stat1Value.setTextFormat(values.leftFormat, context)
this.stat1Value.setTextFormat(statFormat1, context) values.rightFormat?.let {
this.stat2Value.setTextFormat(statFormat2, context) this.stat2Value.setTextFormat(it, context)
} else {
this.stat1Value.setTextFormat(statFormat2, context)
} }
val showRightStat = values.rightFormat != null
this.stat2Name.isVisible = showRightStat
this.stat2Value.isVisible = showRightStat
} }
} }

@ -89,9 +89,9 @@ enum class RowViewType(private var layoutRes: Int) {
return when (this) { return when (this) {
// Row View Holder // Row View Holder
HEADER_TITLE, HEADER_TITLE_VALUE, HEADER_TITLE_AMOUNT, HEADER_TITLE_AMOUNT_BIG, HEADER_TITLE, HEADER_TITLE_VALUE, HEADER_TITLE_AMOUNT, HEADER_TITLE_AMOUNT_BIG, LOCATION_TITLE,
LOCATION_TITLE, INFO, INFO, TITLE, TITLE_ARROW, TITLE_ICON_ARROW, TITLE_VALUE, TITLE_VALUE_ARROW, TITLE_GRID,
TITLE, TITLE_ARROW, TITLE_ICON_ARROW, TITLE_VALUE, TITLE_VALUE_ARROW, TITLE_GRID, TITLE_SWITCH, TITLE_CHECK, TITLE_VALUE_CHECK, TITLE_SWITCH, TITLE_CHECK, TITLE_VALUE_CHECK,
DATA, BOTTOM_SHEET_DATA, LOADER -> RowViewHolder(layout) DATA, BOTTOM_SHEET_DATA, LOADER -> RowViewHolder(layout)
// Row Session // Row Session
@ -297,8 +297,6 @@ enum class RowViewType(private var layoutRes: Int) {
} }
} }
// Listener // Listener
val listener = View.OnClickListener { val listener = View.OnClickListener {
adapter.delegate?.onRowSelected(position, row) adapter.delegate?.onRowSelected(position, row)
@ -307,7 +305,6 @@ enum class RowViewType(private var layoutRes: Int) {
} }
} }
/** /**
* Display a stat * Display a stat
*/ */

@ -1,30 +1,15 @@
package net.pokeranalytics.android.ui.view.rowrepresentable package net.pokeranalytics.android.ui.view.rowrepresentable
import android.content.Context
import android.text.InputType import android.text.InputType
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.realm.FilterCondition
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.RowViewType
import java.text.DateFormatSymbols
import java.util.* import java.util.*
interface FilterElementRow : RowRepresentable { interface FilterElementRow : RowRepresentable {
fun contains(filterConditions: List<FilterCondition>): Boolean {
return when (this) {
is QueryCondition.StaticDataQueryCondition -> filterConditions.any {
it.intValues.contains(this.intValues.first())
}
is QueryCondition.QueryDataCondition<*>-> filterConditions.any {
it.ids.contains(this.dataObject?.id)
}
else -> true
}
}
override val resId: Int? override val resId: Int?
get() { get() {
return when (this) { return when (this) {

Loading…
Cancel
Save