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

feature/top10
Razmig Sarkissian 7 years ago
commit 22d18d0afa
  1. 3
      app/src/main/java/net/pokeranalytics/android/model/filter/Filterable.kt
  2. 2
      app/src/main/java/net/pokeranalytics/android/model/filter/QueryType.kt
  3. 51
      app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt
  4. 15
      app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt
  5. 22
      app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt

@ -3,6 +3,7 @@ package net.pokeranalytics.android.model.filter
import io.realm.RealmModel import io.realm.RealmModel
import net.pokeranalytics.android.model.realm.ComputableResult import net.pokeranalytics.android.model.realm.ComputableResult
import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.model.realm.SessionSet
/** /**
* We want to be able to store filters in the database: * We want to be able to store filters in the database:
@ -58,7 +59,7 @@ class FilterHelper {
Session.fieldNameForQueryType(queryType) Session.fieldNameForQueryType(queryType)
} }
ComputableResult::class.java -> ComputableResult.fieldNameForQueryType(queryType) ComputableResult::class.java -> ComputableResult.fieldNameForQueryType(queryType)
// is SessionSet -> SessionSet.fieldNameForQueryType(queryType) SessionSet::class.java -> SessionSet.fieldNameForQueryType(queryType)
else -> { else -> {
throw UnmanagedFilterField("Filterable type fields are not defined for class ${T::class}") throw UnmanagedFilterField("Filterable type fields are not defined for class ${T::class}")
} }

@ -6,7 +6,6 @@ import net.pokeranalytics.android.exceptions.PokerAnalyticsException
import net.pokeranalytics.android.model.realm.FilterElement import net.pokeranalytics.android.model.realm.FilterElement
import net.pokeranalytics.android.model.realm.FilterElementBlind import net.pokeranalytics.android.model.realm.FilterElementBlind
import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.Session
import timber.log.Timber
import java.util.* import java.util.*
@ -142,7 +141,6 @@ enum class QueryType(var subType:SubType? = null) {
val fieldName = FilterHelper.fieldNameForQueryType<T>(this) val fieldName = FilterHelper.fieldNameForQueryType<T>(this)
fieldName ?: throw PokerAnalyticsException.QueryValueMapUnknown fieldName ?: throw PokerAnalyticsException.QueryValueMapUnknown
Timber.d(">>>> fi = ${fieldName}")
when (subType) { when (subType) {
SubType.LESS -> { SubType.LESS -> {

@ -10,7 +10,6 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategoryRow
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElementRow import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElementRow
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow
import org.jetbrains.annotations.TestOnly import org.jetbrains.annotations.TestOnly
import timber.log.Timber
import java.util.* import java.util.*
/** /**
@ -18,44 +17,13 @@ import java.util.*
* It contains a list of [FilterElement] describing the complete query to launch * It contains a list of [FilterElement] describing the complete query to launch
* The [Filter] is working closely with a [Filterable] interface providing the entity we want the query being launched on * The [Filter] is working closely with a [Filterable] interface providing the entity we want the query being launched on
*/ */
open class Filter(entity: Filterable) : RealmObject() { open class Filter : RealmObject() {
constructor() : this(entity = Session) private var entityType : Int? = Entity.SESSION.ordinal
private var entityType : Int? = FilterableClass.filterableClass(entity = entity).ordinal private enum class Entity {
private val filterableClass : FilterableClass?
get() {
entityType?.let {
return FilterableClass.values()[it]
}
return null
}
private enum class FilterableClass {
SESSION, SESSION,
; ;
companion object {
fun filterableClass(entity: Filterable): FilterableClass {
return when (entity) {
is Session.Companion -> SESSION
else -> throw PokerAnalyticsException.FilterUnhandledEntity
}
}
}
}
companion object {
@TestOnly
inline fun <reified T : Filterable> queryOn(realm: Realm, queries: List<QueryType>): RealmResults<T> {
var realmQuery = realm.where<T>()
queries.forEach {
realmQuery = it.filter<T>(realmQuery)
}
Timber.d(">>>>> query = ${realmQuery.description}")
return realmQuery.findAll()
}
} }
@PrimaryKey @PrimaryKey
@ -71,6 +39,17 @@ open class Filter(entity: Filterable) : RealmObject() {
var filterElements: RealmList<FilterElement> = RealmList() var filterElements: RealmList<FilterElement> = RealmList()
private set private set
companion object {
@TestOnly
inline fun <reified T : Filterable> queryOn(realm: Realm, queries: List<QueryType>): RealmResults<T> {
var realmQuery = realm.where<T>()
queries.forEach {
realmQuery = it.filter<T>(realmQuery)
}
return realmQuery.findAll()
}
}
fun createOrUpdateFilterElements(filterElementRows: ArrayList<FilterElementRow>) { fun createOrUpdateFilterElements(filterElementRows: ArrayList<FilterElementRow>) {
filterElements.clear() filterElements.clear()
filterElementRows filterElementRows
@ -115,7 +94,7 @@ open class Filter(entity: Filterable) : RealmObject() {
} }
inline fun <reified T : Filterable> results(): RealmResults<T> { inline fun <reified T : Filterable> results(): RealmResults<T> {
var realmQuery : RealmQuery<T> = realm.where<T>() var realmQuery = realm.where<T>()
this.filterElements.map { this.filterElements.map {
it.queryType it.queryType
}.forEach { }.forEach {

@ -6,6 +6,7 @@ import io.realm.RealmResults
import io.realm.annotations.Ignore import io.realm.annotations.Ignore
import io.realm.annotations.LinkingObjects import io.realm.annotations.LinkingObjects
import net.pokeranalytics.android.model.filter.Filterable import net.pokeranalytics.android.model.filter.Filterable
import net.pokeranalytics.android.model.filter.QueryType
import net.pokeranalytics.android.model.interfaces.Timed import net.pokeranalytics.android.model.interfaces.Timed
import java.util.* import java.util.*
@ -48,12 +49,16 @@ open class SessionSet : RealmObject(), Timed, Filterable {
*/ */
override var netDuration: Long = 0L override var netDuration: Long = 0L
companion object { companion object : Filterable {
fun newInstance(realm: Realm) : SessionSet { fun newInstance(realm: Realm) : SessionSet {
val sessionSet: SessionSet = realm.createObject(SessionSet::class.java) val sessionSet: SessionSet = realm.createObject(SessionSet::class.java)
return realm.copyToRealm(sessionSet) return realm.copyToRealm(sessionSet)
} }
fun fieldNameForQueryType(queryType: QueryType): String? {
return "sessions." + Session.fieldNameForQueryType(queryType)
}
} }

@ -4,6 +4,7 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Toast
import androidx.core.view.isVisible import androidx.core.view.isVisible
import io.realm.RealmResults import io.realm.RealmResults
import io.realm.Sort import io.realm.Sort
@ -20,6 +21,7 @@ import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.SmoothScrollLinearLayoutManager import net.pokeranalytics.android.ui.view.SmoothScrollLinearLayoutManager
import net.pokeranalytics.android.util.Preferences import net.pokeranalytics.android.util.Preferences
import java.text.SimpleDateFormat
import java.util.* import java.util.*
class HistoryFragment : PokerAnalyticsFragment(), LiveRowRepresentableDataSource, RowRepresentableDelegate { class HistoryFragment : PokerAnalyticsFragment(), LiveRowRepresentableDataSource, RowRepresentableDelegate {
@ -67,12 +69,27 @@ class HistoryFragment : PokerAnalyticsFragment(), LiveRowRepresentableDataSource
disclaimerContainer.isVisible = Preferences.shouldShowDisclaimer(requireContext()) disclaimerContainer.isVisible = Preferences.shouldShowDisclaimer(requireContext())
val sdf = SimpleDateFormat("dd/M/yyyy hh:mm")
val betaLimitDate = sdf.parse("17/7/2019 10:00")
newCashGame.setOnClickListener { newCashGame.setOnClickListener {
if (Date().after(betaLimitDate)) {
this.showEndOfBetaMessage()
return@setOnClickListener
}
SessionActivity.newInstance(requireContext(), false) SessionActivity.newInstance(requireContext(), false)
newSessionCreated = true newSessionCreated = true
} }
newTournament.setOnClickListener { newTournament.setOnClickListener {
if (Date().after(betaLimitDate)) {
this.showEndOfBetaMessage()
return@setOnClickListener
}
SessionActivity.newInstance(requireContext(), true) SessionActivity.newInstance(requireContext(), true)
newSessionCreated = true newSessionCreated = true
} }
@ -84,6 +101,11 @@ class HistoryFragment : PokerAnalyticsFragment(), LiveRowRepresentableDataSource
} }
private fun showEndOfBetaMessage() {
Toast.makeText(context, "Beta has ended. Please update with the Google Play version", Toast.LENGTH_LONG).show()
}
/** /**
* Init data * Init data
*/ */

Loading…
Cancel
Save