Fixes crash when selecting a filter for a custom report

dev
Laurent 7 years ago
parent 73029794c7
commit 3aa289525d
  1. 2
      app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt
  2. 34
      app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt
  3. 7
      app/src/main/java/net/pokeranalytics/android/ui/fragment/report/AbstractReportFragment.kt
  4. 9
      app/src/main/java/net/pokeranalytics/android/util/extensions/RealmExtensions.kt

@ -61,7 +61,7 @@ class PokerAnalyticsApplication : Application() {
if (BuildConfig.DEBUG) {
Timber.d("UserPreferences.defaultCurrency: ${UserDefaults.currency.symbol}")
// this.createFakeSessions()
this.createFakeSessions()
}

@ -34,13 +34,23 @@ class Calculator {
progressValues: ProgressValues = ProgressValues.NONE,
var stats: List<Stat> = listOf(),
var criterias: List<Criteria> = listOf(),
query: Query = Query(),
var filter: Filter? = null,
var query: Query = Query(),
var filterId: String? = null,
private var aggregationType: AggregationType? = null,
var userGenerated: Boolean = false,
var reportSetupId: String? = null
) {
constructor(display: Display = Display.TABLE,
progressValues: ProgressValues = ProgressValues.NONE,
stats: List<Stat> = listOf(),
criterias: List<Criteria> = listOf(),
filter: Filter? = null,
aggregationType: AggregationType? = null,
userGenerated: Boolean = false,
reportSetupId: String? = null) :
this(display, progressValues, stats, criterias, filter?.query ?: Query(), filter?.id, aggregationType, userGenerated, reportSetupId)
/**
* Specifies whether progress values should be added and their kind
*/
@ -52,32 +62,12 @@ class Calculator {
return field
}
/**
* The query used to filter data
*/
private var _query: Query = query
init {
if (this._query.conditions.isNotEmpty() && this.filter != null) {
throw IllegalStateException("Can't specify a query with conditions AND a filter")
}
this.aggregationType?.let {
this.criterias = it.criterias
}
}
/**
* The query used, either filter query or the provided query
*/
val query: Query
get() {
this.filter?.let {
return it.query
}
return this._query
}
/**
* The way the computed stats are going to be displayed
*/

@ -10,6 +10,7 @@ import net.pokeranalytics.android.calculus.Report
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.realm.ReportSetup
import net.pokeranalytics.android.ui.fragment.data.DataManagerFragment
import net.pokeranalytics.android.util.extensions.findById
abstract class AbstractReportFragment : DataManagerFragment() {
@ -72,6 +73,7 @@ abstract class AbstractReportFragment : DataManagerFragment() {
}
private fun saveReport(name: String) {
getRealm().executeTransaction { realm ->
val rs = this.item as ReportSetup
@ -85,7 +87,10 @@ abstract class AbstractReportFragment : DataManagerFragment() {
options.criterias.forEach {
rs.criteriaIds.add(it.uniqueIdentifier)
}
rs.filter = options.filter
options.filterId?.let { id -> String
rs.filter = realm.findById(id)
}
this.item = rs

@ -6,12 +6,21 @@ import io.realm.RealmResults
import io.realm.Sort
import io.realm.kotlin.where
import net.pokeranalytics.android.model.interfaces.CountableUsage
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.model.realm.TournamentFeature
import net.pokeranalytics.android.model.realm.Transaction
fun <T : Identifiable> Realm.findById(clazz: Class<T>, id: String) : T? {
return this.where(clazz).equalTo("id", id).findFirst()
}
inline fun <reified T: Identifiable> Realm.findById(id: String) : T? {
return this.findById(T::class.java, id)
}
fun <T: NameManageable> Realm.getOrCreate(clazz: Class<T>, name: String) : T {
val instance = this.where(clazz).equalTo("name", name).findFirst()
return if (instance != null) {

Loading…
Cancel
Save