Fixes crash

perftest
Laurent 3 years ago
parent 621357610b
commit e94a677cbb
  1. 45
      app/src/main/java/net/pokeranalytics/android/model/migrations/Patcher.kt
  2. 12
      app/src/main/java/net/pokeranalytics/android/ui/modules/data/DataManagerFragment.kt
  3. 11
      app/src/main/java/net/pokeranalytics/android/ui/modules/data/TransactionDataFragment.kt

@ -68,10 +68,9 @@ class Patcher {
private fun patchMissingTransactionTypes(context: Context) { private fun patchMissingTransactionTypes(context: Context) {
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
val transactionTypes = TransactionType.Value.values() realm.executeTransactionAsync { asyncRealm ->
val transactionTypes = TransactionType.Value.values()
realm.executeTransactionAsync { Seed.createDefaultTransactionTypes(transactionTypes, context, asyncRealm)
Seed.createDefaultTransactionTypes(transactionTypes, context, it)
} }
realm.close() realm.close()
@ -80,11 +79,12 @@ class Patcher {
private fun patchBreaks() { private fun patchBreaks() {
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
val sets = realm.where(SessionSet::class.java).findAll() realm.executeTransactionAsync { asyncRealm ->
val sessions = Filter.queryOn<Session>(realm, Query(QueryCondition.IsCash))
val results = realm.where(Result::class.java).findAll() val sets = asyncRealm.where(SessionSet::class.java).findAll()
val sessions = Filter.queryOn<Session>(asyncRealm, Query(QueryCondition.IsCash))
val results = asyncRealm.where(Result::class.java).findAll()
realm.executeTransactionAsync {
sets.forEach { sets.forEach {
it.computeStats() it.computeStats()
} }
@ -98,13 +98,12 @@ class Patcher {
} }
realm.close() realm.close()
} }
private fun patchDefaultTransactionTypes(context: Context) { private fun patchDefaultTransactionTypes(context: Context) {
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
realm.executeTransactionAsync { realm.executeTransactionAsync { asyncRealm ->
val tts = realm.where(TransactionType::class.java).findAll() val tts = asyncRealm.where(TransactionType::class.java).findAll()
tts.forEach { tt -> tts.forEach { tt ->
tt.kind?.let { kind -> tt.kind?.let { kind ->
val value = TransactionType.Value.values()[kind] val value = TransactionType.Value.values()[kind]
@ -117,8 +116,8 @@ class Patcher {
private fun patchStakes() { private fun patchStakes() {
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
realm.executeTransactionAsync { realm.executeTransactionAsync { asyncRealm ->
val sessions = realm.where(Session::class.java).findAll() val sessions = asyncRealm.where(Session::class.java).findAll()
sessions.forEach { session -> sessions.forEach { session ->
val blinds = arrayListOf(session.cgOldSmallBlind, session.cgOldBigBlind).filterNotNull() val blinds = arrayListOf(session.cgOldSmallBlind, session.cgOldBigBlind).filterNotNull()
val blindsFormatted = blinds.map { NumberFormat.getInstance().format(it) } val blindsFormatted = blinds.map { NumberFormat.getInstance().format(it) }
@ -128,7 +127,7 @@ class Patcher {
} }
} }
val handHistories = realm.where(HandHistory::class.java).findAll() val handHistories = asyncRealm.where(HandHistory::class.java).findAll()
handHistories.forEach { hh -> handHistories.forEach { hh ->
val blinds = arrayListOf(hh.oldSmallBlind, hh.oldBigBlind).filterNotNull() val blinds = arrayListOf(hh.oldSmallBlind, hh.oldBigBlind).filterNotNull()
val blindsFormatted = blinds.map { NumberFormat.getInstance().format(it) } val blindsFormatted = blinds.map { NumberFormat.getInstance().format(it) }
@ -143,8 +142,8 @@ class Patcher {
private fun patchNegativeLimits() { private fun patchNegativeLimits() {
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
realm.executeTransactionAsync { realm.executeTransactionAsync { asyncRealm ->
val sessions = realm.where(Session::class.java).lessThan("limit", 0).findAll() val sessions = asyncRealm.where(Session::class.java).lessThan("limit", 0).findAll()
sessions.forEach { session -> sessions.forEach { session ->
session.limit = null session.limit = null
} }
@ -154,10 +153,10 @@ class Patcher {
private fun cleanBlindsFilters() { private fun cleanBlindsFilters() {
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
realm.executeTransactionAsync { realm.executeTransactionAsync { asyncRealm ->
val blindFilterConditions = realm.where(FilterCondition::class.java).equalTo("filterName", "AnyBlind").findAll() val blindFilterConditions = asyncRealm.where(FilterCondition::class.java).equalTo("filterName", "AnyBlind").findAll()
val filterIds = blindFilterConditions.mapNotNull { it.filters?.firstOrNull() }.map { it.id } val filterIds = blindFilterConditions.mapNotNull { it.filters?.firstOrNull() }.map { it.id }
val filters = realm.where(Filter::class.java).`in`("id", filterIds.toTypedArray()).findAll() val filters = asyncRealm.where(Filter::class.java).`in`("id", filterIds.toTypedArray()).findAll()
filters.deleteAllFromRealm() filters.deleteAllFromRealm()
} }
realm.close() realm.close()
@ -210,8 +209,8 @@ class Patcher {
private fun patchZeroTable() { private fun patchZeroTable() {
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
val zero = 0 val zero = 0
val sessions = realm.where<Session>().equalTo("numberOfTables", zero).findAll() realm.executeTransactionAsync { asyncRealm ->
realm.executeTransactionAsync { val sessions = asyncRealm.where<Session>().equalTo("numberOfTables", zero).findAll()
sessions.forEach { s -> sessions.forEach { s ->
s.numberOfTables = 1 s.numberOfTables = 1
} }
@ -221,8 +220,8 @@ class Patcher {
private fun patchRatedAmounts() { private fun patchRatedAmounts() {
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
val transactions = realm.where<Transaction>().findAll() realm.executeTransactionAsync { asyncRealm ->
realm.executeTransactionAsync { val transactions = asyncRealm.where<Transaction>().findAll()
transactions.forEach { t -> transactions.forEach { t ->
t.computeRatedAmount() t.computeRatedAmount()
} }

@ -9,6 +9,7 @@ import android.view.MenuItem
import android.view.View import android.view.View
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import io.realm.kotlin.isManaged
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.ConfigurationException import net.pokeranalytics.android.exceptions.ConfigurationException
import net.pokeranalytics.android.model.interfaces.Savable import net.pokeranalytics.android.model.interfaces.Savable
@ -16,6 +17,7 @@ import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.fragment.components.RealmFragment import net.pokeranalytics.android.ui.fragment.components.RealmFragment
import net.pokeranalytics.android.ui.modules.datalist.DataListActivity import net.pokeranalytics.android.ui.modules.datalist.DataListActivity
import net.pokeranalytics.android.ui.viewmodel.DataManagerViewModel import net.pokeranalytics.android.ui.viewmodel.DataManagerViewModel
import timber.log.Timber
open class DataManagerFragment : RealmFragment() { open class DataManagerFragment : RealmFragment() {
@ -25,11 +27,6 @@ open class DataManagerFragment : RealmFragment() {
open val modelClass: Class<out DataManagerViewModel> = DataManagerViewModel::class.java open val modelClass: Class<out DataManagerViewModel> = DataManagerViewModel::class.java
// lateinit var item: Deletable
// protected lateinit var liveDataType: LiveData
// protected var primaryKey: String? = null
// protected var dataType: Int? = null
var deleteButtonShouldAppear = false var deleteButtonShouldAppear = false
set(value) { set(value) {
field = value field = value
@ -96,8 +93,9 @@ open class DataManagerFragment : RealmFragment() {
val status = savable.getSaveValidityStatus(realm = this.getRealm()) val status = savable.getSaveValidityStatus(realm = this.getRealm())
when (status) { when (status) {
SaveValidityStatus.VALID -> { SaveValidityStatus.VALID -> {
this.getRealm().executeTransactionAsync { Timber.d("ismanaged = ${this.model.item.isManaged()}")
val managedItem = it.copyToRealmOrUpdate(this.model.item) this.getRealm().executeTransactionAsync { asyncRealm ->
val managedItem = asyncRealm.copyToRealmOrUpdate(this.model.item)
if (managedItem is Savable) { if (managedItem is Savable) {
val uniqueIdentifier = managedItem.id val uniqueIdentifier = managedItem.id
finishActivityWithResult(uniqueIdentifier) finishActivityWithResult(uniqueIdentifier)

@ -2,10 +2,7 @@ package net.pokeranalytics.android.ui.modules.data
import android.content.Context import android.content.Context
import io.realm.kotlin.where import io.realm.kotlin.where
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.*
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import net.pokeranalytics.android.calculus.bankroll.BankrollReportManager import net.pokeranalytics.android.calculus.bankroll.BankrollReportManager
import net.pokeranalytics.android.model.realm.Bankroll import net.pokeranalytics.android.model.realm.Bankroll
import net.pokeranalytics.android.model.realm.Transaction import net.pokeranalytics.android.model.realm.Transaction
@ -40,7 +37,9 @@ class TransactionDataFragment : EditableDataFragment(), StaticRowRepresentableDa
if (this.transaction.bankroll == null) { if (this.transaction.bankroll == null) {
val bankrolls = getRealm().where<Bankroll>().findAll() val bankrolls = getRealm().where<Bankroll>().findAll()
if (bankrolls.size == 1) { if (bankrolls.size == 1) {
this.transaction.bankroll = bankrolls.first() bankrolls.first()?.let { br ->
this.transaction.bankroll = getRealm().copyFromRealm(br)
}
} }
} }
} }
@ -141,7 +140,7 @@ class TransactionDataFragment : EditableDataFragment(), StaticRowRepresentableDa
when (val next = rows[index + 1]) { when (val next = rows[index + 1]) {
TransactionPropertiesRow.DATE, TransactionPropertiesRow.COMMENT -> {} TransactionPropertiesRow.DATE, TransactionPropertiesRow.COMMENT -> {}
else -> { else -> {
GlobalScope.launch(Dispatchers.Main) { CoroutineScope(Dispatchers.Main).launch {
delay(200) delay(200)
onRowSelected(0, next) onRowSelected(0, next)
} }

Loading…
Cancel
Save