From fb9241874c6f94471a8b085053d3ead6d262ac55 Mon Sep 17 00:00:00 2001 From: Laurent Date: Thu, 19 Oct 2023 12:17:40 +0200 Subject: [PATCH] More fixes, notably the fact that the currency update was always called when updating sessions, could be huge! --- .../android/PokerAnalyticsApplication.kt | 4 +- .../DataManager.kt} | 139 ++++++++++-------- .../android/calculus/ReportWhistleBlower.kt | 100 ++++++------- .../android/model/filter/QueryCondition.kt | 4 +- .../android/model/migrations/Patcher.kt | 6 +- .../android/model/realm/Currency.kt | 13 +- .../android/model/realm/Session.kt | 8 +- .../android/ui/activity/HomeActivity.kt | 34 +---- .../android/ui/fragment/ImportFragment.kt | 7 +- .../android/ui/fragment/ReportsFragment.kt | 8 +- .../android/ui/fragment/StatisticsFragment.kt | 1 + 11 files changed, 155 insertions(+), 169 deletions(-) rename app/src/main/java/net/pokeranalytics/android/{model/utils/SessionManager.kt => calculus/DataManager.kt} (69%) diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt index cbd36805..887e2fd6 100644 --- a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt +++ b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt @@ -15,7 +15,7 @@ import net.pokeranalytics.android.model.migrations.PokerAnalyticsMigration import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.UserConfigObserver import net.pokeranalytics.android.model.utils.Seed -import net.pokeranalytics.android.model.utils.SessionManager +import net.pokeranalytics.android.calculus.DataManager import net.pokeranalytics.android.util.* import net.pokeranalytics.android.util.billing.AppGuard import timber.log.Timber @@ -79,7 +79,7 @@ class PokerAnalyticsApplication : Application() { Patcher.patchAll(this) // Processors - SessionManager.configure(this.applicationContext) + DataManager.configure(this.applicationContext) UserConfigObserver.create() // this.reportWhistleBlower = ReportWhistleBlower(this.applicationContext) diff --git a/app/src/main/java/net/pokeranalytics/android/model/utils/SessionManager.kt b/app/src/main/java/net/pokeranalytics/android/calculus/DataManager.kt similarity index 69% rename from app/src/main/java/net/pokeranalytics/android/model/utils/SessionManager.kt rename to app/src/main/java/net/pokeranalytics/android/calculus/DataManager.kt index d7d37c61..d75cb40f 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/utils/SessionManager.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/DataManager.kt @@ -1,12 +1,13 @@ -package net.pokeranalytics.android.model.utils +package net.pokeranalytics.android.calculus import android.content.Context import io.realm.Realm import io.realm.RealmQuery import io.realm.RealmResults -import net.pokeranalytics.android.calculus.ReportWhistleBlower +import io.realm.kotlin.where import net.pokeranalytics.android.exceptions.ModelException import net.pokeranalytics.android.exceptions.PAIllegalStateException +import net.pokeranalytics.android.model.realm.Currency import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.SessionSet import net.pokeranalytics.android.util.extensions.findById @@ -20,17 +21,14 @@ 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. */ -object SessionManager { +object DataManager { private var sessions: RealmResults? = null -// private var results: RealmResults? = null + private var currencies: RealmResults? = null private var dateModifiedSessionIds: MutableSet = mutableSetOf() -// private var netModifiedSessionIds: MutableSet = mutableSetOf() private var statsToComputeSessionIds: MutableSet = mutableSetOf() - - var context: Context? = null - private set + private var changedCurrencies: MutableSet = mutableSetOf() var reportWhistleBlower: ReportWhistleBlower? = null @@ -38,67 +36,79 @@ object SessionManager { val realm = Realm.getDefaultInstance() - this.sessions = realm.where(Session::class.java).findAllAsync() - this.sessions?.addChangeListener { results -> - - if (this.statsToComputeSessionIds.isNotEmpty()) { - results.realm.writeAsync { asyncRealm -> - for (sessionId in statsToComputeSessionIds) { - Timber.d("Session Manager > compute stats") - asyncRealm.findById(sessionId)?.let { session -> - session.computeStats() - session.sessionSet?.computeStats() - } - } - this.statsToComputeSessionIds.clear() - } + sessions = realm.where(Session::class.java).findAllAsync() + sessions?.addChangeListener { results -> + results.realm.writeAsync { asyncRealm -> + computeStatsIfNecessary(asyncRealm) + computeDatesIfNecessary(asyncRealm) + reportWhistleBlower?.requestReportLaunch() } + } - if (this.dateModifiedSessionIds.isNotEmpty()) { - results.realm.writeAsync { asyncRealm -> - for (sessionId in dateModifiedSessionIds) { - Timber.d("Session Manager > manage dates") - asyncRealm.findById(sessionId)?.let { session -> - if (session.endDate != null) { - this.updateTimeline(session) - } else if (session.sessionSet != null) { - this.removeFromTimeline(session) - } + this.currencies = realm.where(Currency::class.java).findAll() + this.currencies?.addChangeListener { _, _ -> + if (changedCurrencies.isNotEmpty()) { + realm.writeAsync { asyncRealm -> + for (currencyId in this.changedCurrencies) { + asyncRealm.findById(currencyId)?.let { currency -> + Timber.d("Compute currency ${currency.code} ") + currency.refreshRelatedRatedValues() } } - this.dateModifiedSessionIds.clear() + changedCurrencies.clear() } } - - this.reportWhistleBlower?.requestReportLaunch() - -// if (this.netModifiedSessionIds.isNotEmpty()) { -// results.realm.writeAsync { asyncRealm -> -// for (sessionId in netModifiedSessionIds) { -// asyncRealm.findById(sessionId)?.computeNet(false) -// } -// this.dateModifiedSessionIds.clear() -// } -// } - } realm.close() } fun configure(context: Context) { - this.context = context - this.reportWhistleBlower = ReportWhistleBlower(context) + reportWhistleBlower = ReportWhistleBlower(context) + } + + fun sessionToCompute(session: Session) { + Timber.d("sessionToCompute") + statsToComputeSessionIds.add(session.id) } fun sessionDateChanged(session: Session) { - this.dateModifiedSessionIds.add(session.id) + Timber.d("sessionDateChanged") + dateModifiedSessionIds.add(session.id) } -// fun sessionNetChanged(session: Session) { -// this.netModifiedSessionIds.add(session.id) -// } - fun sessionToCompute(session: Session) { - this.statsToComputeSessionIds.add(session.id) + + fun currencyToCompute(currency: Currency) { + Timber.d("sessionToCompute") + changedCurrencies.add(currency.id) + } + + private fun computeStatsIfNecessary(realm: Realm) { + if (statsToComputeSessionIds.isNotEmpty()) { + for (sessionId in statsToComputeSessionIds) { + Timber.d("Session Manager > compute stats") + realm.findById(sessionId)?.let { session -> + session.computeStats() + session.sessionSet?.computeStats() + } + } + statsToComputeSessionIds.clear() + } + } + + private fun computeDatesIfNecessary(realm: Realm) { + if (dateModifiedSessionIds.isNotEmpty()) { + for (sessionId in dateModifiedSessionIds) { + Timber.d("Session Manager > manage dates") + realm.findById(sessionId)?.let { session -> + if (session.endDate != null) { + updateTimeline(session) + } else if (session.sessionSet != null) { + removeFromTimeline(session) + } + } + } + dateModifiedSessionIds.clear() + } } /** @@ -119,7 +129,7 @@ object SessionManager { throw ModelException("End date should never be null here") } - val sessionSets = this.matchingSets(session) + val sessionSets = matchingSets(session) cleanupSessionSets(session, sessionSets) } @@ -164,11 +174,9 @@ object SessionManager { allImpactedSessions.forEach { impactedSession -> val sets = matchingSets(impactedSession) - this.updateTimeFrames(sets, impactedSession) + updateTimeFrames(sets, impactedSession) } -// Timber.d("netDuration 3 = : ${set.timeFrame?.netDuration}") - } /** @@ -178,8 +186,8 @@ object SessionManager { Timber.d("updateTimeFrames...") when (sessionSets.size) { - 0 -> this.createOrUpdateSessionSet(session) - else -> this.mergeSessionGroups(session, sessionSets) + 0 -> createOrUpdateSessionSet(session) + else -> mergeSessionGroups(session, sessionSets) } } @@ -195,7 +203,7 @@ object SessionManager { set.startDate = session.startDate!! // tested above set.endDate = session.endDate!! } else { - this.createSessionSet(session) + createSessionSet(session) } } @@ -206,12 +214,20 @@ object SessionManager { private fun createSessionSet(session: Session) { Timber.d("createSessionSet...") - val set: SessionSet = SessionSet.newInstance(session.realm) + val realm = session.realm + val set = SessionSet.newInstance(realm) set.startDate = session.startDate!! set.endDate = session.endDate!! set.breakDuration = session.breakDuration session.sessionSet = set set.computeStats() + + Timber.d("SET SESSION count = ${set.sessions?.size}") + + val t = 0 + val f = realm.where().equalTo("sessions.type", t).findAll() + Timber.d("CASH SET COUNT = ${f.size}") + } /** @@ -288,6 +304,7 @@ object SessionManager { sessionSet.sessions?.asIterable()?.let { sessions.addAll(it) } sessions.remove(session) + Timber.d(">>> sessionSet.deleteFromRealm") sessionSet.deleteFromRealm() sessions.forEach { diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/ReportWhistleBlower.kt b/app/src/main/java/net/pokeranalytics/android/calculus/ReportWhistleBlower.kt index 81be7b75..c2c5fb09 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/ReportWhistleBlower.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/ReportWhistleBlower.kt @@ -1,12 +1,8 @@ package net.pokeranalytics.android.calculus import android.content.Context -import android.os.CountDownTimer import io.realm.Realm import io.realm.RealmQuery -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch import net.pokeranalytics.android.calculus.optimalduration.CashGameOptimalDurationCalculator import net.pokeranalytics.android.model.LiveOnline import net.pokeranalytics.android.model.realm.CustomField @@ -15,8 +11,6 @@ import net.pokeranalytics.android.model.realm.PerformanceKey import net.pokeranalytics.android.ui.view.rows.StaticReport import net.pokeranalytics.android.util.extensions.findById import net.pokeranalytics.android.util.extensions.formattedHourlyDuration -import net.pokeranalytics.android.util.extensions.writeAsync -import kotlin.coroutines.CoroutineContext interface NewPerformanceListener { @@ -36,7 +30,7 @@ class ReportWhistleBlower(var context: Context) { private var paused: Boolean = false - private var timer: CountDownTimer? = null +// private var timer: CountDownTimer? = null init { @@ -70,18 +64,20 @@ class ReportWhistleBlower(var context: Context) { return } - this.timer?.cancel() + launchReportTask() - val launchStart = 100L - val timer = object : CountDownTimer(launchStart, launchStart) { - override fun onTick(p0: Long) {} - - override fun onFinish() { - launchReportTask() - } - } - this.timer = timer - timer.start() +// this.timer?.cancel() +// +// val launchStart = 100L +// val timer = object : CountDownTimer(launchStart, launchStart) { +// override fun onTick(p0: Long) {} +// +// override fun onFinish() { +// launchReportTask() +// } +// } +// this.timer = timer +// timer.start() } @@ -133,8 +129,8 @@ class ReportTask(private var whistleBlower: ReportWhistleBlower, var context: Co private var cancelled = false - private val coroutineContext: CoroutineContext - get() = Dispatchers.Default +// private val coroutineContext: CoroutineContext +// get() = Dispatchers.Default fun start() { launchReports() @@ -145,29 +141,29 @@ class ReportTask(private var whistleBlower: ReportWhistleBlower, var context: Co } private fun launchReports() { - CoroutineScope(coroutineContext).launch { +// CoroutineScope(coroutineContext).launch { - val realm = Realm.getDefaultInstance() + val realm = Realm.getDefaultInstance() - // Basic - for (basicReport in StaticReport.basicReports) { - if (cancelled) { - break - } - launchReport(realm, basicReport) + // Basic + for (basicReport in StaticReport.basicReports) { + if (cancelled) { + break } + launchReport(realm, basicReport) + } - // CustomField - val customFields = realm.where(CustomField::class.java) - .equalTo("type", CustomField.Type.LIST.uniqueIdentifier).findAll() - for (customField in customFields) { - if (cancelled) { - break - } - launchReport(realm, StaticReport.CustomFieldList(customField)) + // CustomField + val customFields = realm.where(CustomField::class.java) + .equalTo("type", CustomField.Type.LIST.uniqueIdentifier).findAll() + for (customField in customFields) { + if (cancelled) { + break } - realm.close() + launchReport(realm, StaticReport.CustomFieldList(customField)) } + realm.close() +// } } @@ -249,10 +245,8 @@ class ReportTask(private var whistleBlower: ReportWhistleBlower, var context: Co currentPerf.name = performanceName currentPerf.objectId = performanceQuery.objectId currentPerf.customFieldId = customField?.id - realm.writeAsync { asyncRealm -> - asyncRealm.copyToRealm(currentPerf) - this.whistleBlower.notify(currentPerf) - } +// realm.copyToRealm(currentPerf) + this.whistleBlower.notify(currentPerf) } } @@ -266,21 +260,17 @@ class ReportTask(private var whistleBlower: ReportWhistleBlower, var context: Co customField?.id, null ) - realm.writeAsync { asyncRealm -> - asyncRealm.copyToRealm(performance) - this.whistleBlower.notify(performance) - } + realm.copyToRealm(performance) + this.whistleBlower.notify(performance) } } ?: run { // if there is no max but a now irrelevant Performance, we delete it // Timber.d("NO best computed value, current perf = $currentPerf ") currentPerf?.let { perf -> - realm.writeAsync { asyncRealm -> // Timber.d("Delete perf: stat = ${perf.stat}, report = ${perf.reportId}") - asyncRealm.findById(perf.id)?.deleteFromRealm() + realm.findById(perf.id)?.deleteFromRealm() // perf.deleteFromRealm() - } } } @@ -312,26 +302,20 @@ class ReportTask(private var whistleBlower: ReportWhistleBlower, var context: Co if (storePerf) { perf.name = formattedDuration perf.value = duration - realm.writeAsync { asyncRealm -> - asyncRealm.copyToRealm(perf) - } +// realm.copyToRealm(perf) } } if (storePerf) { val perf = Performance(staticReport, key, name = formattedDuration, value = duration) - realm.writeAsync { asyncRealm -> - asyncRealm.copyToRealm(perf) - this.whistleBlower.notify(perf) - } + realm.copyToRealm(perf) + this.whistleBlower.notify(perf) } } ?: run { // no duration performance?.let { perf -> - realm.writeAsync { asyncRealm -> - asyncRealm.findById(perf.id)?.deleteFromRealm() - } + realm.findById(perf.id)?.deleteFromRealm() } } diff --git a/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt b/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt index e1d4b1b8..46cdd2a7 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt @@ -96,7 +96,9 @@ sealed class QueryCondition : RowRepresentable { inline fun > distinct(): RealmResults? { FilterHelper.fieldNameForQueryType(S::class.java)?.let { val realm = Realm.getDefaultInstance() - realm.refresh() + if (!realm.isInTransaction) { + realm.refresh() + } val distincts = when (T::class) { String::class, Int::class -> realm.where().distinct(it).findAll().sort(it, Sort.ASCENDING) diff --git a/app/src/main/java/net/pokeranalytics/android/model/migrations/Patcher.kt b/app/src/main/java/net/pokeranalytics/android/model/migrations/Patcher.kt index 382f8024..5f59d3d9 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/migrations/Patcher.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/migrations/Patcher.kt @@ -9,7 +9,7 @@ import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.model.realm.handhistory.HandHistory import net.pokeranalytics.android.model.utils.Seed -import net.pokeranalytics.android.model.utils.SessionManager +import net.pokeranalytics.android.calculus.DataManager import net.pokeranalytics.android.util.BLIND_SEPARATOR import net.pokeranalytics.android.util.Preferences import net.pokeranalytics.android.util.extensions.writeAsync @@ -174,7 +174,7 @@ class Patcher { val sessions = asyncRealm.where(Session::class.java) .isNotNull("startDate").isNotNull("endDate").findAll() sessions.forEach { session -> - SessionManager.updateTimeline(session) + DataManager.updateTimeline(session) } } realm.close() @@ -202,7 +202,7 @@ class Patcher { val performanceCount = realm.where().findAll().size if (sessionCount > 1 && performanceCount == 0) { - SessionManager.reportWhistleBlower?.requestReportLaunch() + DataManager.reportWhistleBlower?.requestReportLaunch() } realm.close() } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt index 17682bf9..f40d2503 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt @@ -3,11 +3,13 @@ package net.pokeranalytics.android.model.realm import io.realm.RealmObject import io.realm.annotations.Ignore import io.realm.annotations.PrimaryKey +import net.pokeranalytics.android.calculus.DataManager import net.pokeranalytics.android.exceptions.PAIllegalStateException +import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.util.UserDefaults import java.util.* -open class Currency : RealmObject() { +open class Currency : RealmObject(), Identifiable { companion object { @@ -17,7 +19,10 @@ open class Currency : RealmObject() { } @PrimaryKey - var id = UUID.randomUUID().toString() + override var id = UUID.randomUUID().toString() + + @Ignore + override val realmObjectClass: Class = Currency::class.java /** * The currency code of the currency, i.e. USD, EUR... @@ -39,6 +44,10 @@ open class Currency : RealmObject() { * The rate of the currency with the main currency */ var rate: Double? = DEFAULT_RATE + set(value) { + field = value + DataManager.currencyToCompute(this) + } fun refreshRelatedRatedValues() { diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt index d4ebfbcd..7157c31e 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt @@ -11,6 +11,7 @@ import io.realm.annotations.LinkingObjects import io.realm.annotations.PrimaryKey import io.realm.kotlin.where import net.pokeranalytics.android.R +import net.pokeranalytics.android.calculus.DataManager import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.calculus.StatFormattingException import net.pokeranalytics.android.exceptions.PAIllegalStateException @@ -26,7 +27,6 @@ import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.filter.QueryCondition.* import net.pokeranalytics.android.model.interfaces.* import net.pokeranalytics.android.model.realm.handhistory.HandHistory -import net.pokeranalytics.android.model.utils.SessionManager import net.pokeranalytics.android.ui.adapter.UnmanagedRowRepresentableException import net.pokeranalytics.android.ui.graph.Graph import net.pokeranalytics.android.ui.view.* @@ -505,7 +505,7 @@ open class Session : RealmObject(), Savable, RowRepresentable, Timed, */ private fun dateChanged() { - SessionManager.sessionDateChanged(this) + DataManager.sessionDateChanged(this) // if (this.endDate != null) { // SessionSetManager.updateTimeline(this) @@ -592,7 +592,7 @@ open class Session : RealmObject(), Savable, RowRepresentable, Timed, * Pre-compute various statIds */ private fun addToComputeQueue() { - SessionManager.sessionToCompute(this) + DataManager.sessionToCompute(this) } /** @@ -817,7 +817,7 @@ open class Session : RealmObject(), Savable, RowRepresentable, Timed, // Updates the timeline this.sessionSet?.let { - SessionManager.removeFromTimeline(this) + DataManager.removeFromTimeline(this) } // cleanup unnecessary related objects // this.deleteFromRealm() diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt index 5439bd1d..b5385736 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt @@ -6,23 +6,20 @@ import android.content.Intent import android.os.Build import android.os.Bundle import com.google.android.material.bottomnavigation.BottomNavigationView -import io.realm.RealmResults import net.pokeranalytics.android.BuildConfig import net.pokeranalytics.android.R import net.pokeranalytics.android.calculus.NewPerformanceListener +import net.pokeranalytics.android.calculus.DataManager import net.pokeranalytics.android.databinding.ActivityHomeBinding import net.pokeranalytics.android.model.filter.Query import net.pokeranalytics.android.model.filter.QueryCondition -import net.pokeranalytics.android.model.realm.Currency import net.pokeranalytics.android.model.realm.Session -import net.pokeranalytics.android.model.utils.SessionManager import net.pokeranalytics.android.ui.activity.components.BaseActivity import net.pokeranalytics.android.ui.adapter.HomePagerAdapter import net.pokeranalytics.android.util.Preferences import net.pokeranalytics.android.util.billing.AppGuard import net.pokeranalytics.android.util.extensions.findAll import net.pokeranalytics.android.util.extensions.isSameMonth -import net.pokeranalytics.android.util.extensions.writeAsync import java.util.* enum class Tab(var identifier: Int) { @@ -43,13 +40,12 @@ class HomeActivity : BaseActivity(), NewPerformanceListener { } } - private lateinit var currencies: RealmResults private var homePagerAdapter: HomePagerAdapter? = null private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item -> if (binding.viewPager.currentItem == Tab.REPORTS.identifier) { - SessionManager.reportWhistleBlower?.clearNotifications() + DataManager.reportWhistleBlower?.clearNotifications() } when (item.itemId) { @@ -97,36 +93,16 @@ class HomeActivity : BaseActivity(), NewPerformanceListener { } } - observeRealmObjects() initUI() checkFirstLaunch() - SessionManager.reportWhistleBlower?.addListener(this) + DataManager.reportWhistleBlower?.addListener(this) } override fun onDestroy() { super.onDestroy() - SessionManager.reportWhistleBlower?.removeListener(this) - } - - private fun observeRealmObjects() { - - val realm = getRealm() - - // observe currency changes - this.currencies = realm.where(Currency::class.java).findAll() - this.currencies.addChangeListener { _, _ -> - - realm.writeAsync { asyncRealm -> - - val currencies = asyncRealm.where(Currency::class.java).findAll() - currencies.forEach { currency -> - currency.refreshRelatedRatedValues() - } - - } - } + DataManager.reportWhistleBlower?.removeListener(this) } /** @@ -169,12 +145,10 @@ class HomeActivity : BaseActivity(), NewPerformanceListener { } override fun newBestPerformanceHandler() { - if (Preferences.showInAppBadges(this)) { binding.navigation.getOrCreateBadge(R.id.navigation_reports).isVisible = true binding.navigation.getOrCreateBadge(R.id.navigation_reports).number = 1 } - } private fun lookForCalendarBadge() { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ImportFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ImportFragment.kt index f8755b2b..582ae8d8 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ImportFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ImportFragment.kt @@ -12,8 +12,8 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.async import kotlinx.coroutines.launch import net.pokeranalytics.android.R +import net.pokeranalytics.android.calculus.DataManager import net.pokeranalytics.android.databinding.FragmentImportBinding -import net.pokeranalytics.android.model.utils.SessionManager import net.pokeranalytics.android.ui.fragment.components.RealmFragment import net.pokeranalytics.android.util.csv.CSVImporter import net.pokeranalytics.android.util.csv.ImportDelegate @@ -64,7 +64,6 @@ class ImportFragment : RealmFragment(), ImportDelegate { super.onViewCreated(view, savedInstanceState) this.initUI() - this.startImport() } @@ -92,7 +91,7 @@ class ImportFragment : RealmFragment(), ImportDelegate { private fun startImport() { - SessionManager.reportWhistleBlower?.pause() + DataManager.reportWhistleBlower?.pause() this.importer = CSVImporter(uri, requireContext()) this.importer.delegate = this @@ -143,7 +142,7 @@ class ImportFragment : RealmFragment(), ImportDelegate { } private fun end() { - SessionManager.reportWhistleBlower?.resume() + DataManager.reportWhistleBlower?.resume() activity?.finish() } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt index ebe27953..48e0e8ca 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt @@ -26,7 +26,7 @@ import net.pokeranalytics.android.model.combined import net.pokeranalytics.android.model.interfaces.Deletable import net.pokeranalytics.android.model.realm.Performance import net.pokeranalytics.android.model.realm.ReportSetup -import net.pokeranalytics.android.model.utils.SessionManager +import net.pokeranalytics.android.calculus.DataManager import net.pokeranalytics.android.ui.activity.ReportCreationActivity import net.pokeranalytics.android.ui.activity.components.ReportActivity import net.pokeranalytics.android.ui.activity.components.RequestCode @@ -187,13 +187,13 @@ class ReportsFragment : DeletableItemFragment(), StaticRowRepresentableDataSourc ReportCreationActivity.newInstanceForResult(this, requireContext()) } - SessionManager.reportWhistleBlower?.addListener(this) + DataManager.reportWhistleBlower?.addListener(this) } override fun onDestroy() { super.onDestroy() - SessionManager.reportWhistleBlower?.removeListener(this) + DataManager.reportWhistleBlower?.removeListener(this) } // Rows @@ -266,7 +266,7 @@ class ReportsFragment : DeletableItemFragment(), StaticRowRepresentableDataSourc override fun boolForRow(row: RowRepresentable): Boolean { val reportRow = row as PerformanceRow return Preferences.showInAppBadges(requireContext()) - && (SessionManager.reportWhistleBlower?.has(reportRow.performance.id) ?: false) + && (DataManager.reportWhistleBlower?.has(reportRow.performance.id) ?: false) } override fun onRowSelected(position: Int, row: RowRepresentable, tag: Int) { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt index 2fef2b88..8b23ccaa 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt @@ -74,6 +74,7 @@ class StatisticsFragment : FilterableFragment(), RealmAsyncListener { addRealmChangeListener(this, UserConfig::class.java) addRealmChangeListener(this, ComputableResult::class.java) + addRealmChangeListener(this, SessionSet::class.java) addRealmChangeListener(this, Transaction::class.java) }