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) { if (BuildConfig.DEBUG) {
Timber.d("UserPreferences.defaultCurrency: ${UserDefaults.currency.symbol}") Timber.d("UserPreferences.defaultCurrency: ${UserDefaults.currency.symbol}")
// this.createFakeSessions() this.createFakeSessions()
} }

@ -34,13 +34,23 @@ class Calculator {
progressValues: ProgressValues = ProgressValues.NONE, progressValues: ProgressValues = ProgressValues.NONE,
var stats: List<Stat> = listOf(), var stats: List<Stat> = listOf(),
var criterias: List<Criteria> = listOf(), var criterias: List<Criteria> = listOf(),
query: Query = Query(), var query: Query = Query(),
var filter: Filter? = null, var filterId: String? = null,
private var aggregationType: AggregationType? = null, private var aggregationType: AggregationType? = null,
var userGenerated: Boolean = false, var userGenerated: Boolean = false,
var reportSetupId: String? = null 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 * Specifies whether progress values should be added and their kind
*/ */
@ -52,32 +62,12 @@ class Calculator {
return field return field
} }
/**
* The query used to filter data
*/
private var _query: Query = query
init { 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.aggregationType?.let {
this.criterias = it.criterias 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 * 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.LiveData
import net.pokeranalytics.android.model.realm.ReportSetup import net.pokeranalytics.android.model.realm.ReportSetup
import net.pokeranalytics.android.ui.fragment.data.DataManagerFragment import net.pokeranalytics.android.ui.fragment.data.DataManagerFragment
import net.pokeranalytics.android.util.extensions.findById
abstract class AbstractReportFragment : DataManagerFragment() { abstract class AbstractReportFragment : DataManagerFragment() {
@ -72,6 +73,7 @@ abstract class AbstractReportFragment : DataManagerFragment() {
} }
private fun saveReport(name: String) { private fun saveReport(name: String) {
getRealm().executeTransaction { realm -> getRealm().executeTransaction { realm ->
val rs = this.item as ReportSetup val rs = this.item as ReportSetup
@ -85,7 +87,10 @@ abstract class AbstractReportFragment : DataManagerFragment() {
options.criterias.forEach { options.criterias.forEach {
rs.criteriaIds.add(it.uniqueIdentifier) rs.criteriaIds.add(it.uniqueIdentifier)
} }
rs.filter = options.filter
options.filterId?.let { id -> String
rs.filter = realm.findById(id)
}
this.item = rs this.item = rs

@ -6,12 +6,21 @@ import io.realm.RealmResults
import io.realm.Sort import io.realm.Sort
import io.realm.kotlin.where import io.realm.kotlin.where
import net.pokeranalytics.android.model.interfaces.CountableUsage 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.interfaces.NameManageable
import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.model.realm.TournamentFeature import net.pokeranalytics.android.model.realm.TournamentFeature
import net.pokeranalytics.android.model.realm.Transaction 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 { fun <T: NameManageable> Realm.getOrCreate(clazz: Class<T>, name: String) : T {
val instance = this.where(clazz).equalTo("name", name).findFirst() val instance = this.where(clazz).equalTo("name", name).findFirst()
return if (instance != null) { return if (instance != null) {

Loading…
Cancel
Save