changes and improvements

perftest
Laurent 3 years ago
parent 887dea91da
commit d9638ce516
  1. 36
      app/src/main/java/net/pokeranalytics/android/calculus/ReportWhistleBlower.kt
  2. 8
      app/src/main/java/net/pokeranalytics/android/model/realm/ComputableResult.kt
  3. 9
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  4. 20
      app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt
  5. 60
      app/src/main/java/net/pokeranalytics/android/model/utils/SessionSetManager.kt
  6. 13
      app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt
  7. 27
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/RealmFragment.kt
  8. 3
      app/src/main/java/net/pokeranalytics/android/ui/fragment/report/AbstractReportFragment.kt
  9. 19
      app/src/main/java/net/pokeranalytics/android/ui/modules/calendar/CalendarFragment.kt
  10. 2
      app/src/main/java/net/pokeranalytics/android/ui/modules/data/DataManagerFragment.kt
  11. 2
      app/src/main/java/net/pokeranalytics/android/ui/modules/data/EditableDataFragment.kt
  12. 29
      app/src/main/java/net/pokeranalytics/android/ui/modules/feed/FeedFragment.kt
  13. 2
      app/src/main/java/net/pokeranalytics/android/ui/modules/feed/FeedHandHistoryRowRepresentableAdapter.kt
  14. 8
      app/src/main/java/net/pokeranalytics/android/ui/modules/feed/FeedSessionRowRepresentableAdapter.kt
  15. 2
      app/src/main/java/net/pokeranalytics/android/ui/modules/feed/FeedTransactionRowRepresentableAdapter.kt
  16. 7
      app/src/main/java/net/pokeranalytics/android/ui/modules/feed/NewDataMenuActivity.kt
  17. 4
      app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FiltersFragment.kt
  18. 2
      app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FiltersListFragment.kt
  19. 2
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/EditorViewModel.kt
  20. 2
      app/src/main/java/net/pokeranalytics/android/ui/modules/session/SessionFragment.kt
  21. 2
      app/src/main/java/net/pokeranalytics/android/ui/modules/settings/DealtHandsPerHourFragment.kt
  22. 2
      app/src/main/java/net/pokeranalytics/android/ui/modules/settings/TransactionFilterFragment.kt
  23. 6
      app/src/main/java/net/pokeranalytics/android/util/Global.kt
  24. 1
      app/src/main/java/net/pokeranalytics/android/util/csv/PACSVDescriptor.kt

@ -13,7 +13,9 @@ import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.LiveOnline
import net.pokeranalytics.android.model.realm.*
import net.pokeranalytics.android.ui.view.rows.StaticReport
import net.pokeranalytics.android.util.Global
import net.pokeranalytics.android.util.extensions.formattedHourlyDuration
import timber.log.Timber
interface NewPerformanceListener {
fun newBestPerformanceHandler()
@ -39,20 +41,20 @@ class ReportWhistleBlower(var context: Context) {
val realm = Realm.getDefaultInstance()
this.sessions = realm.where(Session::class.java).findAll()
this.sessions?.addChangeListener { _ ->
requestReportLaunch()
}
this.results = realm.where(Result::class.java).findAll()
this.results?.addChangeListener { _ ->
requestReportLaunch()
}
this.sessionSets = realm.where(SessionSet::class.java).findAll()
this.sessionSets?.addChangeListener { _ ->
requestReportLaunch()
}
// this.sessions = realm.where(Session::class.java).findAll()
// this.sessions?.addChangeListener { _ ->
// requestReportLaunch()
// }
//
// this.results = realm.where(Result::class.java).findAll()
// this.results?.addChangeListener { _ ->
// requestReportLaunch()
// }
//
// this.sessionSets = realm.where(SessionSet::class.java).findAll()
// this.sessionSets?.addChangeListener { _ ->
// requestReportLaunch()
// }
realm.close()
}
@ -140,11 +142,14 @@ class ReportTask(private var whistleBlower: ReportWhistleBlower, var context: Co
}
fun cancel() {
Timber.d("Reportwhistleblower task CANCEL")
this.cancelled = true
}
private fun launchReports() {
Timber.d("====== Report whistleblower launch batch...")
CoroutineScope(Dispatchers.Default).launch {
val realm = Realm.getDefaultInstance()
@ -159,7 +164,8 @@ class ReportTask(private var whistleBlower: ReportWhistleBlower, var context: Co
// CustomField
val customFields = realm.where(CustomField::class.java)
.equalTo("type", CustomField.Type.LIST.uniqueIdentifier).findAll()
.equalTo("type", CustomField.Type.LIST.uniqueIdentifier)
.findAll()
for (customField in customFields) {
if (cancelled) {
break

@ -38,8 +38,12 @@ open class ComputableResult : RealmObject(), Filterable {
this.bbNet = session.bbNet
this.hasBigBlind = if (session.cgBiggestBet != null) 1 else 0
this.estimatedHands = session.estimatedHands
this.bbPer100Hands =
session.bbNet / (session.numberOfHandsPerHour * session.hourlyDuration) * 100
this.bbPer100Hands = if (this.estimatedHands > 0.0) {
session.bbNet / this.estimatedHands * 100
} else {
0.0
}
}

@ -381,7 +381,7 @@ open class Session : RealmObject(), Savable, RowUpdatable, RowRepresentable, Tim
}
private fun dateChanged() {
SessionSetManager.dateChange = true
SessionSetManager.sessionDateChanged(this)
}
// /**
@ -435,7 +435,7 @@ open class Session : RealmObject(), Savable, RowUpdatable, RowRepresentable, Tim
get() {
val bb = this.cgBiggestBet
val result = this.result
return if (bb != null && result != null) {
return if (bb != null && bb > 0.0 && result != null) {
result.net / bb
} else {
0.0
@ -472,7 +472,6 @@ open class Session : RealmObject(), Savable, RowUpdatable, RowRepresentable, Tim
fun preCompute() {
this.computeStats()
this.sessionSet?.computeStats()
this.result?.computeNumberOfRebuy()
}
@ -504,7 +503,7 @@ open class Session : RealmObject(), Savable, RowUpdatable, RowRepresentable, Tim
/**
* Approximates the number of hands played per hour at the table
*/
val numberOfHandsPerHour: Double
private val numberOfHandsPerHour: Double
get() {
val tableSize = this.tableSize ?: 9 // 9 is the default table size if null
@ -513,8 +512,6 @@ open class Session : RealmObject(), Savable, RowUpdatable, RowRepresentable, Tim
playerHandsPerHour = if (this.isLive) config.liveDealtHandsPerHour else config.onlineDealtHandsPerHour
}
// val config = UserConfig.getConfiguration(this.realm)
// val playerHandsPerHour = if (this.isLive) config.liveDealtHandsPerHour else config.onlineDealtHandsPerHour
return this.numberOfTables * playerHandsPerHour / tableSize.toDouble()
}

@ -15,8 +15,10 @@ import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.Timed
import net.pokeranalytics.android.util.NULL_TEXT
import net.pokeranalytics.android.util.TextFormat
import kotlin.math.min
import java.text.DateFormat
import java.util.*
import kotlin.math.max
open class SessionSet : RealmObject(), Timed, Filterable {
@ -63,7 +65,7 @@ open class SessionSet : RealmObject(), Timed, Filterable {
this.ratedNet = this.sessions?.sumOf { it.computableResult?.ratedNet ?: 0.0 } ?: 0.0
this.estimatedHands = this.sessions?.sumOf { it.estimatedHands } ?: 0.0
this.bbNet = this.sessions?.sumOf { it.bbNet } ?: 0.0
this.breakDuration = this.sessions?.max("breakDuration")?.toLong() ?: 0L
updateBreakDuration()
}
/**
@ -141,5 +143,21 @@ open class SessionSet : RealmObject(), Timed, Filterable {
@Ignore
override val realmObjectClass: Class<out Identifiable> = SessionSet::class.java
private fun updateBreakDuration() {
var longestNetDuration = 0L
var maxBreakDuration = 0L
this.sessions?.let { sessions ->
for (session in sessions) {
longestNetDuration = max(longestNetDuration, session.netDuration)
maxBreakDuration = max(session.breakDuration, maxBreakDuration)
}
}
val maxSetBreak = endDate.time - startDate.time - longestNetDuration
this.breakDuration = min(maxBreakDuration, maxSetBreak)
}
}

@ -8,58 +8,48 @@ import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.model.realm.SessionSet
import net.pokeranalytics.android.util.extensions.findById
import timber.log.Timber
import kotlin.math.max
class CorruptSessionSetException(message: String) : Exception(message)
/**
* The manager is in charge of updating the abstract concept of timeline,
* representing the sequenced time frames where the user plays.
* The manager is in charge of updating the concept of timeline,
* representing the time frames where the user plays.
*/
object SessionSetManager {
var sessions: RealmResults<Session>
private val sessionsToProcess = mutableSetOf<Session>()
var dateChange = false
private val sessionIdsToProcess = mutableSetOf<String>()
fun configure() {} // launch init
fun sessionDateChanged(session: Session) {
this.sessionIdsToProcess.add(session.id)
}
init {
val realm = Realm.getDefaultInstance()
this.sessions = realm.where(Session::class.java).findAllAsync()
this.sessions.addChangeListener { sessions, changeSet ->
if (this.dateChange) {
this.dateChange = false
changeSet.insertions.forEach { index ->
sessions[index]?.let { this.sessionsToProcess.add(it) }
}
changeSet.changes.forEach { index ->
sessions[index]?.let { this.sessionsToProcess.add(it) }
}
val sessionIds = this.sessionsToProcess.map { it.id }
realm.executeTransactionAsync { asyncRealm ->
processSessions(asyncRealm, sessionIds)
}
}
}
// this.sessions.addChangeListener { _, _ ->
//// if (Global.LAUNCH_ASYNC_LISTENERS) {
// if (this.sessionIdsToProcess.isNotEmpty()) {
// realm.executeTransactionAsync { asyncRealm ->
// processSessions(asyncRealm)
// }
// }
//// }
// }
realm.close()
}
// fun updatedSession(session: Session) {
// this.sessionsToProcess.add(session)
// }
private fun processSessions(realm: Realm) {
private fun processSessions(realm: Realm, sessionIds: List<String>) {
Timber.d("***** processSessions, process count = ${sessionIdsToProcess.size}")
for (sessionId in sessionIds) {
for (sessionId in this.sessionIdsToProcess) {
realm.findById<Session>(sessionId)?.let { session ->
if (session.startDate != null && session.endDate != null) {
updateTimeline(session)
@ -69,14 +59,7 @@ object SessionSetManager {
}
}
// for (session in this.sessionsToProcess) {
// if (session.startDate != null && session.endDate != null) {
// this.updateTimeline(realm, session)
// } else if (session.sessionSet != null) {
// removeFromTimeline(realm, session)
// }
// }
this.sessionsToProcess.clear()
this.sessionIdsToProcess.clear()
}
/**
@ -84,8 +67,6 @@ object SessionSetManager {
*/
fun updateTimeline(session: Session) {
Timber.d("updateTimeline")
// if (!session.realm.isInTransaction) {
// throw PAIllegalStateException("realm should be in transaction at this point")
// }
@ -239,7 +220,6 @@ object SessionSetManager {
// Add all orphan endedSessions
sessions.forEach { s ->
s.sessionSet = set
set.breakDuration = max(set.breakDuration, s.breakDuration)
}
set.computeStats()

@ -8,6 +8,7 @@ import android.os.Bundle
import android.view.*
import androidx.appcompat.widget.Toolbar
import io.realm.Realm
import io.realm.RealmModel
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
@ -72,10 +73,10 @@ class StatisticsFragment : FilterableFragment(), RealmAsyncListener {
this.currentFilterable = FilterableType.SESSION
applyFilter()
addRealmChangeListener(this, UserConfig::class.java)
addRealmChangeListener(this, ComputableResult::class.java)
addRealmChangeListener(this, Transaction::class.java)
addRealmChangeListener(this, SessionSet::class.java)
// addRealmChangeListener(this, UserConfig::class.java)
// addRealmChangeListener(this, ComputableResult::class.java)
// addRealmChangeListener(this, Transaction::class.java)
// addRealmChangeListener(this, SessionSet::class.java)
}
private fun initUI() {
@ -147,11 +148,13 @@ class StatisticsFragment : FilterableFragment(), RealmAsyncListener {
// Business
override fun asyncListenedEntityChange(realm: Realm) {
override fun asyncListenedEntityChange(realm: Realm, clazz: Class<out RealmModel>) {
if (isAdded) { // Fixes: java.lang.IllegalStateException Fragment StatisticsFragment{9d3e5ec} not attached to a context.
launchStatComputation()
setTransactionFilterItemColor()
}
}
/**

@ -8,9 +8,10 @@ import io.realm.Realm
import io.realm.RealmModel
import io.realm.RealmResults
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.util.Global
interface RealmAsyncListener {
fun asyncListenedEntityChange(realm: Realm)
fun asyncListenedEntityChange(realm: Realm, clazz: Class<out RealmModel>)
}
open class RealmFragment : BaseFragment() {
@ -35,14 +36,14 @@ open class RealmFragment : BaseFragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
realm = Realm.getDefaultInstance()
this.observedEntities.forEach {
val realmResults = realm.where(it).findAllAsync()
realmResults.addChangeListener { t, _ ->
this.entitiesChanged(it, t)
}
this.observedRealmResults.add(realmResults)
}
// this.observedEntities.forEach {
// val realmResults = realm.where(it).findAllAsync()
// realmResults.addChangeListener { t, _ ->
// this.entitiesChanged(it, t)
// }
//
// this.observedRealmResults.add(realmResults)
// }
return super.onCreateView(inflater, container, savedInstanceState)
}
@ -64,7 +65,9 @@ open class RealmFragment : BaseFragment() {
val results = this.realm.where(clazz).findAllAsync()
results.addChangeListener { t, _ ->
// Timber.d("Realm changes: ${realmResults?.size}, $this")
this.changeListener?.asyncListenedEntityChange(t.realm)
if (Global.LAUNCH_ASYNC_LISTENERS) {
this.changeListener?.asyncListenedEntityChange(t.realm, clazz)
}
}
this.observedRealmResults.add(results)
}
@ -83,11 +86,11 @@ open class RealmFragment : BaseFragment() {
/**
* A list of RealmModel classes to observe
*/
open val observedEntities: List<Class<out RealmModel>> = listOf()
// open val observedEntities: List<Class<out RealmModel>> = listOf()
/**
* The method called when a change happened in any RealmResults
*/
open fun entitiesChanged(clazz: Class<out RealmModel>, results: RealmResults<out RealmModel>) {}
// open fun entitiesChanged(clazz: Class<out RealmModel>, results: RealmResults<out RealmModel>) {}
}

@ -144,7 +144,8 @@ abstract class AbstractReportFragment : DataManagerFragment() {
options.filterId?.let { id ->
rs.filter = realm.findById(id)
}
realm.copyToRealmOrUpdate(rs)
realm.insertOrUpdate(rs)
// realm.copyToRealmOrUpdate(rs)
} else {
realm.findById<ReportSetup>(setupId)?.let { reportSetup ->
reportSetup.name = name

@ -100,10 +100,10 @@ class CalendarFragment : RealmFragment(), StaticRowRepresentableDataSource,
initData()
initUI()
addRealmChangeListener(this, UserConfig::class.java)
addRealmChangeListener(this, ComputableResult::class.java)
addRealmChangeListener(this, Transaction::class.java)
addRealmChangeListener(this, SessionSet::class.java)
// addRealmChangeListener(this, UserConfig::class.java)
// addRealmChangeListener(this, ComputableResult::class.java)
// addRealmChangeListener(this, Transaction::class.java)
// addRealmChangeListener(this, SessionSet::class.java)
}
private var transactionFilterMenuItem: MenuItem? = null
@ -208,9 +208,6 @@ class CalendarFragment : RealmFragment(), StaticRowRepresentableDataSource,
}
}
override val observedEntities: List<Class<out RealmModel>> = listOf(ComputableResult::class.java)
// Business
/**
@ -365,7 +362,7 @@ class CalendarFragment : RealmFragment(), StaticRowRepresentableDataSource,
val calendar = Calendar.getInstance()
calendar.time = Date().startOfMonth()
val startDate = Date()
// val startDate = Date()
val requiredStats: List<Stat> =
listOf(
@ -504,7 +501,7 @@ class CalendarFragment : RealmFragment(), StaticRowRepresentableDataSource,
if (context == null) { return } // required because of launchAsyncStatComputation
val startDate = Date()
// val startDate = Date()
datesForRows.clear()
rows.clear()
@ -606,11 +603,13 @@ class CalendarFragment : RealmFragment(), StaticRowRepresentableDataSource,
}
override fun asyncListenedEntityChange(realm: Realm) {
override fun asyncListenedEntityChange(realm: Realm, clazz: Class<out RealmModel>) {
if (isAdded) { // Fixes: java.lang.IllegalStateException Fragment StatisticsFragment{9d3e5ec} not attached to a context.
launchAsyncStatComputation()
setTransactionFilterItemColor()
}
}
private fun showGridCalendar() {

@ -109,7 +109,7 @@ open class DataManagerFragment : RealmFragment() {
SaveValidityStatus.VALID -> {
this.getRealm().executeTransactionAsync { asyncRealm ->
asyncRealm.copyToRealmOrUpdate(savable)
asyncRealm.insertOrUpdate(savable)
}
onDataSaved()

@ -71,7 +71,7 @@ open class EditableDataFragment : DataManagerFragment(), RowRepresentableDelegat
if (this.model.primaryKey != null) {
getRealm().executeTransactionAsync { asyncRealm ->
try {
asyncRealm.copyToRealmOrUpdate(this.model.item)
asyncRealm.insertOrUpdate(this.model.item)
} catch (e: Exception) {
CrashLogging.log("Exception caught: row = $row, value=$value, class=${this.javaClass}")
throw e

@ -12,6 +12,7 @@ import com.android.billingclient.api.Purchase
import com.google.android.material.badge.BadgeDrawable
import com.google.android.material.badge.BadgeUtils
import com.google.android.material.tabs.TabLayout
import io.realm.Realm
import io.realm.RealmModel
import io.realm.RealmResults
import io.realm.Sort
@ -30,6 +31,7 @@ import net.pokeranalytics.android.ui.activity.components.RequestCode
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.extensions.openUrl
import net.pokeranalytics.android.ui.fragment.components.FilterableFragment
import net.pokeranalytics.android.ui.fragment.components.RealmAsyncListener
import net.pokeranalytics.android.ui.modules.data.EditableDataActivity
import net.pokeranalytics.android.ui.modules.datalist.DataListActivity
import net.pokeranalytics.android.ui.modules.filter.FilterActivityRequestCode
@ -47,7 +49,7 @@ import net.pokeranalytics.android.util.extensions.count
import net.pokeranalytics.android.util.extensions.findById
import java.util.*
class FeedFragment : FilterableFragment(), RowRepresentableDelegate, PurchaseListener {
class FeedFragment : FilterableFragment(), RowRepresentableDelegate, PurchaseListener, RealmAsyncListener {
private enum class Tab {
SESSIONS,
@ -84,14 +86,7 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate, PurchaseLis
private var badgeDrawable: BadgeDrawable? = null
override val observedEntities: List<Class<out RealmModel>> =
listOf(Session::class.java, Transaction::class.java, HandHistory::class.java)
override fun entitiesChanged(
clazz: Class<out RealmModel>,
results: RealmResults<out RealmModel>
) {
super.entitiesChanged(clazz, results)
override fun asyncListenedEntityChange(realm: Realm, clazz: Class<out RealmModel>) {
when (clazz.kotlin) {
Session::class -> {
@ -107,7 +102,6 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate, PurchaseLis
this.handHistoryAdapter.notifyDataSetChanged()
}
}
}
private var _binding: FragmentFeedBinding? = null
@ -142,11 +136,7 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate, PurchaseLis
when (item.itemId) {
R.id.duplicate -> {
val session = this.sessionAdapter.sessionForPosition(menuPosition)
if (session != null) {
createNewSession(true, sessionId = session.id, duplicate = true)
} else {
throw PAIllegalStateException("Session not found for duplicate at position: $menuPosition")
}
createNewSession(true, sessionId = session.id, duplicate = true)
}
}
@ -158,6 +148,10 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate, PurchaseLis
AppGuard.registerListener(this)
addRealmChangeListener(this, Session::class.java)
addRealmChangeListener(this, Transaction::class.java)
addRealmChangeListener(this, HandHistory::class.java)
initUI()
initData()
}
@ -482,9 +476,8 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate, PurchaseLis
// gets the first session of the adapter - the last created - to preconfigure the HH
if (this.sessionAdapter.itemCount > 0) {
this.sessionAdapter.sessionForPosition(0)?.let { session ->
HandHistoryActivity.newInstance(this, session, false)
} ?: throw PAIllegalStateException("Cannot happen")
val session = this.sessionAdapter.sessionForPosition(0)
HandHistoryActivity.newInstance(this, session, false)
} else {
HandHistoryActivity.newInstance(this)
}

@ -137,8 +137,6 @@ class FeedHandHistoryRowRepresentableAdapter(
this.sortedHeaders = this.headersPositions.toSortedMap()
// Timber.d("]]] this.sortedHeaders = ${this.sortedHeaders}")
}
/**

@ -100,7 +100,7 @@ class FeedSessionRowRepresentableAdapter(
BindableHolder {
fun bind(title: String) {
// Title
itemView.findViewById<AppCompatTextView>(net.pokeranalytics.android.R.id.title)?.let {
itemView.findViewById<AppCompatTextView>(R.id.title)?.let {
it.text = title
}
}
@ -144,7 +144,7 @@ class FeedSessionRowRepresentableAdapter(
// If the header has no date, it's a pending session
return if (sortedHeaders[position] == null) {
context.getString(net.pokeranalytics.android.R.string.pending)
context.getString(R.string.pending)
} else {
// Else, return the formatted date
sortedHeaders[position]?.getMonthAndYear() ?: throw PAIllegalStateException("Null date should not happen there")
@ -153,14 +153,14 @@ class FeedSessionRowRepresentableAdapter(
throw PAIllegalStateException("Any position should always have a header, position = $position")
}
fun sessionForPosition(position: Int): Session? {
fun sessionForPosition(position: Int): Session {
return this.getSessionForPosition(position)
}
/**
* Get real index
*/
private fun getSessionForPosition(position: Int): Session? {
private fun getSessionForPosition(position: Int): Session {
// Row position
var headersBefore = 0

@ -160,8 +160,6 @@ class FeedTransactionRowRepresentableAdapter(
*/
private fun checkHeaderCondition(currentCalendar: Calendar, previousYear: Int, previousMonth: Int): Boolean {
return currentCalendar.get(Calendar.YEAR) == previousYear && currentCalendar.get(Calendar.MONTH) < previousMonth || (currentCalendar.get(Calendar.YEAR) < previousYear)
}
}

@ -9,10 +9,7 @@ import android.os.Build
import android.os.Bundle
import android.view.View
import android.view.ViewAnimationUtils
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.*
import net.pokeranalytics.android.databinding.ActivityNewDataBinding
import net.pokeranalytics.android.ui.activity.components.BaseActivity
import net.pokeranalytics.android.ui.extensions.px
@ -105,7 +102,7 @@ class NewDataMenuActivity : BaseActivity() {
val intent = Intent()
intent.putExtra(IntentKey.CHOICE.keyName, choice)
setResult(RESULT_OK, intent)
GlobalScope.launch(Dispatchers.Main) {
CoroutineScope(Dispatchers.Main).launch {
delay(200)
hideMenu()
}

@ -219,7 +219,7 @@ open class FiltersFragment : RealmFragment(), RowRepresentableDelegate {
getRealm().executeTransactionAsync { asyncRealm ->
filter.name = filter.query.getName(requireContext())
asyncRealm.copyToRealmOrUpdate(filter)
asyncRealm.insertOrUpdate(filter)
}
finishActivityWithResult(filter.id)
@ -235,7 +235,7 @@ open class FiltersFragment : RealmFragment(), RowRepresentableDelegate {
val filterId = filterCopy?.id ?: ""
getRealm().executeTransactionAsync { realm ->
filterCopy?.let {
realm.copyToRealmOrUpdate(it)
realm.insertOrUpdate(it)
}
}
finishActivityWithResult(filterId)

@ -18,7 +18,7 @@ open class FiltersListFragment : DataListFragment() {
row.updateValue(value, row)
getRealm().executeTransactionAsync { asyncRealm ->
asyncRealm.copyToRealmOrUpdate(row)
asyncRealm.insertOrUpdate(row)
}
val index = this.model.items.indexOf(row)
this.dataListAdapter.notifyItemChanged(index)

@ -639,7 +639,7 @@ class EditorViewModel : ViewModel(), RowRepresentableDataSource, CardCentralizer
realm.executeTransactionAsync { asyncRealm ->
this.handHistory.defineWinnerPositions()
asyncRealm.copyToRealmOrUpdate(this.handHistory)
asyncRealm.insertOrUpdate(this.handHistory)
}
}

@ -316,7 +316,7 @@ class SessionFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRepr
session.preCompute()
for (customField in this.model.customFields) {
realm.copyToRealmOrUpdate(customField)
realm.insertOrUpdate(customField)
}
}
}

@ -67,7 +67,7 @@ class DealtHandsPerHourFragment : RealmFragment() {
this.onlineValue.text.toString().toIntOrNull()?.let { onlineDealtHandsPerHour ->
userConfig.onlineDealtHandsPerHour = onlineDealtHandsPerHour
}
realm.copyToRealmOrUpdate(userConfig)
realm.insertOrUpdate(userConfig)
}
// val userConfig = UserConfig.getConfiguration(realm)

@ -100,7 +100,7 @@ class TransactionFilterFragment : RealmFragment(), StaticRowRepresentableDataSou
getRealm().executeTransactionAsync { asyncRealm ->
UserConfig.getConfiguration(asyncRealm) { userConfig ->
userConfig.setTransactionTypeIds(this.model.selectedTransactionTypes)
asyncRealm.copyToRealmOrUpdate(userConfig)
asyncRealm.insertOrUpdate(userConfig)
}
}
this.activity?.finish()

@ -5,3 +5,9 @@ const val RANDOM_PLAYER: String = "☺"
const val FFMPEG_DESCRIPTOR_FILE = "descriptor.txt"
const val BLIND_SEPARATOR: String = "/"
const val UUID_SEPARATOR: String = ","
class Global {
companion object {
const val LAUNCH_ASYNC_LISTENERS = true
}
}

@ -1,7 +1,6 @@
package net.pokeranalytics.android.util.csv
import io.realm.Realm
import io.realm.kotlin.where
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.Limit
import net.pokeranalytics.android.model.TableSize

Loading…
Cancel
Save