merge conflict fix

feature/top10
Razmig Sarkissian 7 years ago
commit f9c1c2cb8a
  1. 47
      .gitlab-ci.yml
  2. 3
      app/src/androidTest/java/net/pokeranalytics/android/RealmInstrumentedUnitTest.kt
  3. 18
      app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt
  4. 4
      app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollCalculator.kt
  5. 11
      app/src/main/java/net/pokeranalytics/android/model/realm/ComputableResult.kt
  6. 2
      app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt
  7. 22
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  8. 2
      app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt
  9. 6
      app/src/main/java/net/pokeranalytics/android/model/utils/SessionSetManager.kt
  10. 2
      app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt
  11. 4
      app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt
  12. 25
      app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt
  13. 7
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt
  14. 15
      app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt
  15. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/SessionObserverFragment.kt
  16. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt
  17. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt
  18. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetSumFragment.kt
  19. 21
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterRow.kt
  20. 3
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSection.kt

@ -1,44 +1,21 @@
image: openjdk:8-jdk image: jangrewe/gitlab-ci-android
variables: stages:
ANDROID_COMPILE_SDK: "28" - build
ANDROID_BUILD_TOOLS: "28.0.3"
ANDROID_SDK_TOOLS: "4333796"
before_script: before_script:
- apt-get --quiet update --yes - export GRADLE_USER_HOME=$(pwd)/.gradle
- apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1 - chmod +x ./gradlew
- wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/sdk-tools-linux-${ANDROID_SDK_TOOLS}.zip
- unzip -d android-sdk-linux android-sdk.zip
- echo y | android-sdk-linux/tools/bin/sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}" >/dev/null
- echo y | android-sdk-linux/tools/bin/sdkmanager "platform-tools" >/dev/null
- echo y | android-sdk-linux/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}" >/dev/null
- export ANDROID_HOME=$PWD/android-sdk-linux
- export PATH=$PATH:$PWD/android-sdk-linux/platform-tools/
- chmod +x ./gradlew
# temporarily disable checking for EPIPE error and use yes to accept all licenses
- set +o pipefail
- yes | android-sdk-linux/tools/bin/sdkmanager --licenses
- set -o pipefail
stages: cache:
- build key: ${CI_PROJECT_ID}
- test paths:
- .gradle/
lintDebug: build:
stage: build stage: build
script: script:
- ./gradlew -Pci --console=plain :app:lintDebug -PbuildDir=lint - ./gradlew assembleDebug
assembleDebug:
stage: build
script:
- ./gradlew assembleDebug
artifacts: artifacts:
paths: paths:
- app/build/outputs/ - app/build/outputs/apk/app-debug.apk
unitTests:
stage: test
script:
- ./gradlew -Pci --console=plain :app:testDebug

@ -18,7 +18,8 @@ open class RealmInstrumentedUnitTest {
fun newSessionInstance(realm: Realm) : Session { fun newSessionInstance(realm: Realm) : Session {
val session = realm.createObject(Session::class.java, UUID.randomUUID().toString()) val session = realm.createObject(Session::class.java, UUID.randomUUID().toString())
session.computableResult = realm.createObject(ComputableResult::class.java) val computableResult = realm.createObject(ComputableResult::class.java)
computableResult.session = session
session.result = realm.createObject(Result::class.java) session.result = realm.createObject(Result::class.java)
return session return session
} }

@ -58,10 +58,10 @@ class Calculator {
companion object { companion object {
fun computePreAggregation(sets: List<SessionSet>, options: Options): List<ComputedResults> { // fun computePreAggregation(sets: List<SessionSet>, options: Options): List<ComputedResults> {
Timber.d("sets = ${sets.size}") // Timber.d("sets = ${sets.size}")
return listOf() // return listOf()
} // }
/** /**
* Computes all stats for list of Session sessionGroup * Computes all stats for list of Session sessionGroup
@ -168,6 +168,9 @@ class Calculator {
} }
} }
else -> {
// nothing
}
} }
val sessionSets = computableGroup.sets val sessionSets = computableGroup.sets
@ -190,8 +193,8 @@ class Calculator {
var tSum = 0.0 var tSum = 0.0
var tTotalHands = 0.0 var tTotalHands = 0.0
var tBBSum = 0.0 var tBBSum = 0.0
var tHourlyRate = 0.0 var tHourlyRate: Double = 0.0
var tHourlyRateBB = 0.0 var tHourlyRateBB: Double = 0.0
sessionSets.forEach { sessionSet -> sessionSets.forEach { sessionSet ->
tIndex++ tIndex++
@ -219,6 +222,9 @@ class Calculator {
} }
} }
} }
else -> {
// nothing
}
} }
var average = 0.0 var average = 0.0

@ -18,14 +18,14 @@ class BankrollCalculator {
if (setup.bankroll != null) { if (setup.bankroll != null) {
sessionQuery.equalTo("bankroll.id", setup.bankroll.id) sessionQuery.equalTo("bankroll.id", setup.bankroll.id)
} }
val sessions = sessionQuery.findAll() // val sessions = sessionQuery.findAll()
val transactionQuery = realm.where(Transaction::class.java) val transactionQuery = realm.where(Transaction::class.java)
if (setup.bankroll != null) { if (setup.bankroll != null) {
transactionQuery.equalTo("bankroll.id", setup.bankroll.id).findAll() transactionQuery.equalTo("bankroll.id", setup.bankroll.id).findAll()
} }
val transactions = transactionQuery.findAll() val transactions = transactionQuery.findAll()
val sessionsNet = sessions.sum("result.net") // val sessionsNet = sessions.sum("result.net")
val transactionsNet = transactions.sum("value") val transactionsNet = transactions.sum("value")
transactions.forEach { transactions.forEach {

@ -1,9 +1,6 @@
package net.pokeranalytics.android.model.realm package net.pokeranalytics.android.model.realm
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.RealmResults
import io.realm.annotations.Ignore
import io.realm.annotations.LinkingObjects
import net.pokeranalytics.android.calculus.interfaces.Computable import net.pokeranalytics.android.calculus.interfaces.Computable
open class ComputableResult : RealmObject(), Computable { open class ComputableResult : RealmObject(), Computable {
@ -24,11 +21,11 @@ open class ComputableResult : RealmObject(), Computable {
override var sessionSet: SessionSet? = null override var sessionSet: SessionSet? = null
@LinkingObjects("computableResult") // @LinkingObjects("computableResult")
private val sessions: RealmResults<Session>? = null // private val sessions: RealmResults<Session>? = null
@Ignore // @Ignore
val session: Session? = this.sessions?.firstOrNull() var session: Session? = null
fun updateWith(session: Session) { fun updateWith(session: Session) {

@ -27,7 +27,7 @@ open class Currency : RealmObject() {
// could be async // could be async
val query = this.realm.where(ComputableResult::class.java) val query = this.realm.where(ComputableResult::class.java)
query.`in`("sessions.bankroll.currency.id", arrayOf(this.id)) query.`in`("session.bankroll.currency.id", arrayOf(this.id))
val cResults = query.findAll() val cResults = query.findAll()
cResults.forEach { computable -> cResults.forEach { computable ->

@ -4,8 +4,10 @@ import android.content.Context
import io.realm.Realm import io.realm.Realm
import io.realm.RealmList import io.realm.RealmList
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.RealmResults
import io.realm.annotations.Ignore import io.realm.annotations.Ignore
import io.realm.annotations.Index import io.realm.annotations.Index
import io.realm.annotations.LinkingObjects
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import io.realm.kotlin.where import io.realm.kotlin.where
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
@ -61,7 +63,10 @@ open class Session : RealmObject(), Manageable, StaticRowRepresentableDataSource
fun newInstance(realm: Realm, isTournament: Boolean, bankroll: Bankroll? = null): Session { fun newInstance(realm: Realm, isTournament: Boolean, bankroll: Bankroll? = null): Session {
val session = Session() val session = Session()
session.result = Result() session.result = Result()
session.computableResult = ComputableResult()
val computableResult = ComputableResult()
computableResult.session = session
if (bankroll != null) { if (bankroll != null) {
session.bankroll = bankroll session.bankroll = bankroll
} else { } else {
@ -78,6 +83,7 @@ open class Session : RealmObject(), Manageable, StaticRowRepresentableDataSource
/** /**
* Indicates the type of session, cash game or tournament * Indicates the type of session, cash game or tournament
*/ */
@Index
var type: Int = Type.CASH_GAME.ordinal var type: Int = Type.CASH_GAME.ordinal
// The result of the main user // The result of the main user
@ -86,7 +92,13 @@ open class Session : RealmObject(), Manageable, StaticRowRepresentableDataSource
/** /**
* Optimized result for faster stats * Optimized result for faster stats
*/ */
var computableResult: ComputableResult? = null // var computableResult: ComputableResult? = null
@LinkingObjects("session")
private val computableResults: RealmResults<ComputableResult>? = null
@Ignore
val computableResult: ComputableResult? = this.computableResults?.firstOrNull()
// Timed interface // Timed interface
@ -293,10 +305,11 @@ open class Session : RealmObject(), Manageable, StaticRowRepresentableDataSource
} }
fun updateComputableResult() { fun updateComputableResult() {
this.computableResult?.let {
this.computableResults?.forEach {
it.updateWith(this) it.updateWith(this)
} ?: run { } ?: run {
throw IllegalStateException("Session should always have a Light Result") throw IllegalStateException("Session should always have a computable results")
} }
} }
@ -497,6 +510,7 @@ open class Session : RealmObject(), Manageable, StaticRowRepresentableDataSource
// cleanup unnecessary related objects // cleanup unnecessary related objects
set.deleteFromRealm() set.deleteFromRealm()
this.result?.deleteFromRealm() this.result?.deleteFromRealm()
this.computableResults?.deleteAllFromRealm()
// Updates the timeline // Updates the timeline
SessionSetManager.removeFromTimeline(this) SessionSetManager.removeFromTimeline(this)

@ -57,7 +57,7 @@ open class SessionSet : RealmObject(), Timed {
} }
fun computeStats() { fun computeStats() {
this.ratedNet = this.sessions?.sumByDouble { it.computableResult!!.ratedNet } ?: 0.0 this.ratedNet = this.sessions?.sumByDouble { it.computableResult?.ratedNet ?: 0.0 } ?: 0.0
this.estimatedHands = this.sessions?.sumByDouble { it.estimatedHands } ?: 0.0 this.estimatedHands = this.sessions?.sumByDouble { it.estimatedHands } ?: 0.0
this.bbNetResult = this.sessions?.sumByDouble { it.bbNetResult } ?: 0.0 this.bbNetResult = this.sessions?.sumByDouble { it.bbNetResult } ?: 0.0
} }

@ -125,9 +125,9 @@ class SessionSetManager {
session.sessionSet = set session.sessionSet = set
// Add all orphan endedSessions // Add all orphan endedSessions
sessions.forEach { session -> sessions.forEach { s ->
session.sessionSet = set s.sessionSet = set
set.breakDuration = max(set.breakDuration, session.breakDuration) set.breakDuration = max(set.breakDuration, s.breakDuration)
} }
set.computeStats() set.computeStats()

@ -152,7 +152,7 @@ class HomeActivity : PokerAnalyticsActivity() {
} }
} }
.setNegativeButton(R.string.cancel) {dialog, which -> .setNegativeButton(R.string.cancel) { _, which ->
Timber.d("Click on cancel") Timber.d("Click on cancel")
} }

@ -111,7 +111,7 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
when (row) { when (row) {
BankrollRow.CURRENCY -> CurrenciesActivity.newInstanceForResult(this@BankrollDataFragment, BankrollDataFragment.REQUEST_CODE_CURRENCY) BankrollRow.CURRENCY -> CurrenciesActivity.newInstanceForResult(this@BankrollDataFragment, REQUEST_CODE_CURRENCY)
BankrollRow.REFRESH_RATE -> refreshRate() BankrollRow.REFRESH_RATE -> refreshRate()
else -> super.onRowSelected(position, row, fromAction) else -> super.onRowSelected(position, row, fromAction)
} }
@ -197,7 +197,7 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
override fun onResponse(call: Call<Map<String, CurrencyConverterValue>>, response: Response<Map<String, CurrencyConverterValue>>) { override fun onResponse(call: Call<Map<String, CurrencyConverterValue>>, response: Response<Map<String, CurrencyConverterValue>>) {
response.body()?.let { response.body()?.let {
it[currenciesConverterValue]?.value?.let {rate -> it[currenciesConverterValue]?.value?.let { rate ->
onRowValueChanged(rate.toString(), BankrollRow.RATE) onRowValueChanged(rate.toString(), BankrollRow.RATE)
} }
} }

@ -15,12 +15,15 @@ import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
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.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategory import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategory
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElement import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElement
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSection import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSection
import timber.log.Timber import timber.log.Timber
import java.util.*
open class FilterDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate { open class FilterDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate {
@ -77,6 +80,22 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresenta
selectedRows.add(row) selectedRows.add(row)
} }
} }
/*
Timber.d("Row: $row")
when (row) {
FilterRow.FROM -> DateTimePickerManager.create(requireContext(), row, this, Date(), onlyDate = true)
FilterRow.TO -> DateTimePickerManager.create(requireContext(), row, this, Date(), onlyDate = true)
FilterRow.PAST_DAYS -> {
val data = row.editingDescriptors(mapOf("defaultValue" to ""))
BottomSheetFragment.create(fragmentManager, row, this, data, null)
}
else -> {
selectedRows.add(row)
}
}
}
*/
rowRepresentableAdapter.refreshRow(row) rowRepresentableAdapter.refreshRow(row)
} }
@ -84,6 +103,12 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresenta
return selectedRows.contains(row) return selectedRows.contains(row)
} }
override fun onRowValueChanged(value: Any?, row: RowRepresentable) {
super.onRowValueChanged(value, row)
selectedRows.add(row as FilterElement)
rowRepresentableAdapter.refreshRow(row)
}
override fun adapterRows(): List<RowRepresentable>? { override fun adapterRows(): List<RowRepresentable>? {
return rows return rows
} }

@ -86,12 +86,7 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate {
val data = currentSession.editDescriptors(row) val data = currentSession.editDescriptors(row)
when (row) { when (row) {
SessionRow.START_DATE -> DateTimePickerManager.create( SessionRow.START_DATE -> DateTimePickerManager.create(requireContext(),row,this,currentSession.startDate)
requireContext(),
row,
this,
currentSession.startDate
)
SessionRow.END_DATE -> DateTimePickerManager.create( SessionRow.END_DATE -> DateTimePickerManager.create(
requireContext(), requireContext(),
row, row,

@ -166,25 +166,16 @@ class StatsFragment : SessionObserverFragment(), StaticRowRepresentableDataSourc
val s = Date() val s = Date()
val allSessions = realm.where(ComputableResult::class.java).isNotNull("sessions.endDate").findAll() val allSessions = realm.where(ComputableResult::class.java).isNotNull("session.endDate").findAll()
val allSessionSets = realm.where(SessionSet::class.java).findAll() val allSessionSets = realm.where(SessionSet::class.java).findAll()
Timber.d(">>>>> number of computables to compute = ${allSessions.size}") Timber.d(">>>>> number of computables to compute = ${allSessions.size}")
val cgSessions = allSessions.where().equalTo("sessions.type", Session.Type.CASH_GAME.ordinal).findAll() val cgSessions = allSessions.where().equalTo("session.type", Session.Type.CASH_GAME.ordinal).findAll()
val cgSessionSets = realm.where(SessionSet::class.java).equalTo("sessions.type", Session.Type.CASH_GAME.ordinal).findAll() val cgSessionSets = realm.where(SessionSet::class.java).equalTo("sessions.type", Session.Type.CASH_GAME.ordinal).findAll()
val tSessions = allSessions.where().equalTo("sessions.type", Session.Type.TOURNAMENT.ordinal).findAll() val tSessions = allSessions.where().equalTo("session.type", Session.Type.TOURNAMENT.ordinal).findAll()
val tSessionSets = realm.where(SessionSet::class.java).equalTo("sessions.type", Session.Type.TOURNAMENT.ordinal).findAll() val tSessionSets = realm.where(SessionSet::class.java).equalTo("sessions.type", Session.Type.TOURNAMENT.ordinal).findAll()
// val computableList = realm.copyFromRealm(allSessions)
// computableList.forEach { session ->
// if (true) { // @todo
// cgSessions.add(session)
// } else {
// tSessions.add(session)
// }
// }
val e = Date() val e = Date()
val duration = (e.time - s.time) / 1000.0 val duration = (e.time - s.time) / 1000.0
Timber.d(">>> filtering in ${duration} seconds") Timber.d(">>> filtering in ${duration} seconds")

@ -10,7 +10,7 @@ open class SessionObserverFragment : PokerAnalyticsFragment() {
init { init {
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
this.endedSessions = realm.where(ComputableResult::class.java).isNotNull("sessions.endDate").findAll() this.endedSessions = realm.where(ComputableResult::class.java).isNotNull("session.endDate").findAll()
this.endedSessions.addChangeListener { _, _ -> this.endedSessions.addChangeListener { _, _ ->
this.sessionsChanged() this.sessionsChanged()
} }

@ -88,7 +88,7 @@ class BottomSheetDoubleEditTextFragment : BottomSheetFragment() {
} }
editText2.setOnEditorActionListener { v, actionId, _ -> editText2.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) { if (actionId == EditorInfo.IME_ACTION_DONE) {
this.delegate.onRowValueChanged(values, row) this.delegate.onRowValueChanged(values, row)
dismiss() dismiss()

@ -53,7 +53,7 @@ class BottomSheetEditTextFragment : BottomSheetFragment() {
editText1.addTextChangedListener { value = it?.toString() ?: "" } editText1.addTextChangedListener { value = it?.toString() ?: "" }
editText1.setText((data[0].defaultValue ?: "").toString()) editText1.setText((data[0].defaultValue ?: "").toString())
editText1.setOnEditorActionListener { v, actionId, _ -> editText1.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) { if (actionId == EditorInfo.IME_ACTION_DONE) {
delegate.onRowValueChanged(getValue(), row) delegate.onRowValueChanged(getValue(), row)
dismiss() dismiss()

@ -117,7 +117,7 @@ class BottomSheetSumFragment : BottomSheetFragment() {
} }
} }
editText2.setOnEditorActionListener { v, actionId, _ -> editText2.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) { if (actionId == EditorInfo.IME_ACTION_DONE) {
this.delegate.onRowValueChanged(value, row) this.delegate.onRowValueChanged(value, row)
dismiss() dismiss()

@ -1,9 +1,11 @@
package net.pokeranalytics.android.ui.view.rowrepresentable package net.pokeranalytics.android.ui.view.rowrepresentable
import io.realm.Realm import io.realm.Realm
import android.text.InputType
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.LiveData
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.RowViewType import net.pokeranalytics.android.ui.view.RowViewType
import java.lang.Exception import java.lang.Exception
import java.util.* import java.util.*
@ -93,4 +95,23 @@ sealed class FilterElement : RowRepresentable {
return null return null
} }
/*
override fun editingDescriptors(map: Map<String, Any?>): ArrayList<RowRepresentableEditDescriptor>? {
when (this) {
PAST_DAYS -> {
val defaultValue: String? by map
val data = arrayListOf<RowRepresentableEditDescriptor>()
data.add(
RowRepresentableEditDescriptor(
defaultValue,
inputType = InputType.TYPE_CLASS_NUMBER
)
)
}
}
return super.editingDescriptors(map)
}
*/
} }

@ -294,8 +294,7 @@ enum class FilterSection : RowRepresentable {
) )
) )
FIXED_DATE -> { FIXED_DATE -> {
rows.add(CustomizableRowRepresentable(customViewType = RowViewType.TITLE_VALUE_CHECK, resId = FilterRow.FROM.resId, isSelectable = true, value = "20/03/2019")) rows.addAll(arrayListOf(FilterRow.FROM, FilterRow.TO))
rows.add(CustomizableRowRepresentable(customViewType = RowViewType.TITLE_VALUE_CHECK, resId = FilterRow.TO.resId, isSelectable = true, value = "20/03/2019"))
} }
DURATION -> rows.addAll(arrayListOf(FilterRow.PAST_DAYS)) DURATION -> rows.addAll(arrayListOf(FilterRow.PAST_DAYS))
YEAR -> { YEAR -> {

Loading…
Cancel
Save