Removed ResultsObserverFragment and added the notification system inside RealmFragment

dev
Laurent 7 years ago
parent 7bc1616451
commit af897caa8a
  1. 11
      app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt
  2. 25
      app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt
  3. 24
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/RealmFragment.kt
  4. 37
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/ResultsObserverFragment.kt
  5. 6
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/DataManagerFragment.kt
  6. 4
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/EditableDataFragment.kt

@ -7,6 +7,7 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayout
import io.realm.Realm import io.realm.Realm
import io.realm.RealmModel
import kotlinx.android.synthetic.main.fragment_calendar.* import kotlinx.android.synthetic.main.fragment_calendar.*
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@ -18,13 +19,15 @@ import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.Criteria import net.pokeranalytics.android.model.Criteria
import net.pokeranalytics.android.model.combined import net.pokeranalytics.android.model.combined
import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.realm.ComputableResult
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.ui.activity.CalendarDetailsActivity import net.pokeranalytics.android.ui.activity.CalendarDetailsActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.extensions.hideWithAnimation import net.pokeranalytics.android.ui.extensions.hideWithAnimation
import net.pokeranalytics.android.ui.extensions.showWithAnimation import net.pokeranalytics.android.ui.extensions.showWithAnimation
import net.pokeranalytics.android.ui.fragment.components.ResultsObserverFragment import net.pokeranalytics.android.ui.fragment.components.RealmFragment
import net.pokeranalytics.android.ui.view.CalendarTabs import net.pokeranalytics.android.ui.view.CalendarTabs
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.RowViewType
@ -35,7 +38,7 @@ import java.util.*
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext
class CalendarFragment : ResultsObserverFragment(), CoroutineScope, StaticRowRepresentableDataSource, class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentableDataSource,
RowRepresentableDelegate { RowRepresentableDelegate {
enum class TimeFilter { enum class TimeFilter {
@ -112,7 +115,9 @@ class CalendarFragment : ResultsObserverFragment(), CoroutineScope, StaticRowRep
} }
} }
override fun sessionsChanged() { override val observedEntities: List<Class<out RealmModel>> = listOf(ComputableResult::class.java)
override fun entitiesChanged() {
launchStatComputation() launchStatComputation()
} }

@ -7,6 +7,7 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import io.realm.Realm import io.realm.Realm
import io.realm.RealmModel
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.async import kotlinx.coroutines.async
@ -18,9 +19,10 @@ import net.pokeranalytics.android.calculus.Report
import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.filter.Query import net.pokeranalytics.android.model.filter.Query
import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.realm.ComputableResult
import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.ui.activity.FiltersActivity import net.pokeranalytics.android.ui.activity.FiltersActivity
import net.pokeranalytics.android.ui.fragment.components.ResultsObserverFragment import net.pokeranalytics.android.ui.fragment.components.RealmFragment
import net.pokeranalytics.android.ui.fragment.report.ComposableTableReportFragment import net.pokeranalytics.android.ui.fragment.report.ComposableTableReportFragment
import net.pokeranalytics.android.ui.interfaces.FilterActivityRequestCode import net.pokeranalytics.android.ui.interfaces.FilterActivityRequestCode
import net.pokeranalytics.android.ui.interfaces.FilterHandler import net.pokeranalytics.android.ui.interfaces.FilterHandler
@ -29,7 +31,7 @@ import timber.log.Timber
import java.util.* import java.util.*
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext
class StatisticsFragment : ResultsObserverFragment(), FilterHandler { class StatisticsFragment : RealmFragment(), FilterHandler {
val coroutineContext: CoroutineContext val coroutineContext: CoroutineContext
get() = Dispatchers.Main get() = Dispatchers.Main
@ -71,7 +73,9 @@ class StatisticsFragment : ResultsObserverFragment(), FilterHandler {
this.tableReportFragment = fragment this.tableReportFragment = fragment
} }
override fun sessionsChanged() { override val observedEntities: List<Class<out RealmModel>> = listOf(ComputableResult::class.java)
override fun entitiesChanged() {
this.launchStatComputation() this.launchStatComputation()
} }
@ -101,11 +105,11 @@ class StatisticsFragment : ResultsObserverFragment(), FilterHandler {
} }
override fun applyFilter() { override fun applyFilter() {
this.sessionsChanged() this.entitiesChanged()
} }
override fun removeFilter() { override fun removeFilter() {
this.sessionsChanged() this.entitiesChanged()
} }
override var currentFilterable: FilterableType = FilterableType.SESSION override var currentFilterable: FilterableType = FilterableType.SESSION
@ -148,7 +152,7 @@ class StatisticsFragment : ResultsObserverFragment(), FilterHandler {
*/ */
private fun createSessionGroupsAndStartCompute(realm: Realm): Report { private fun createSessionGroupsAndStartCompute(realm: Realm): Report {
val filter : Filter? = this.currentFilter(this.requireContext(), realm) val filter: Filter? = this.currentFilter(this.requireContext(), realm)
val allStats: List<Stat> = listOf( val allStats: List<Stat> = listOf(
Stat.NET_RESULT, Stat.NET_RESULT,
@ -175,7 +179,14 @@ class StatisticsFragment : ResultsObserverFragment(), FilterHandler {
) )
val cgSessionGroup = ComputableGroup(Query(QueryCondition.IsCash).merge(query), cgStats) val cgSessionGroup = ComputableGroup(Query(QueryCondition.IsCash).merge(query), cgStats)
val tStats: List<Stat> = val tStats: List<Stat> =
listOf(Stat.NET_RESULT, Stat.HOURLY_RATE, Stat.ROI, Stat.WIN_RATIO, Stat.NUMBER_OF_GAMES, Stat.AVERAGE_BUYIN) listOf(
Stat.NET_RESULT,
Stat.HOURLY_RATE,
Stat.ROI,
Stat.WIN_RATIO,
Stat.NUMBER_OF_GAMES,
Stat.AVERAGE_BUYIN
)
val tSessionGroup = ComputableGroup(Query(QueryCondition.IsTournament).merge(query), tStats) val tSessionGroup = ComputableGroup(Query(QueryCondition.IsTournament).merge(query), tStats)
Timber.d(">>>>> Start computations...") Timber.d(">>>>> Start computations...")

@ -5,18 +5,38 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import io.realm.Realm import io.realm.Realm
import io.realm.RealmModel
import io.realm.RealmResults
open class RealmFragment : PokerAnalyticsFragment() { open class RealmFragment : PokerAnalyticsFragment() {
private lateinit var realm: Realm private lateinit var realm: Realm
private var realmResultLists: MutableMap<Class<out RealmModel>, RealmResults<*>> = mutableMapOf()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
realm = Realm.getDefaultInstance() realm = Realm.getDefaultInstance()
this.observedEntities.forEach {
val realmResults = realm.where(it).findAll()
realmResults.addChangeListener { _,_ ->
this.entitiesChanged()
}
this.realmResultLists[it] = realmResults
}
return super.onCreateView(inflater, container, savedInstanceState) return super.onCreateView(inflater, container, savedInstanceState)
} }
override fun onDestroyView() { override fun onDestroyView() {
super.onDestroyView() super.onDestroyView()
this.realmResultLists.values.forEach {
it.removeAllChangeListeners()
}
this.realm.close() this.realm.close()
} }
@ -27,4 +47,8 @@ open class RealmFragment : PokerAnalyticsFragment() {
return this.realm return this.realm
} }
open val observedEntities: List<Class<out RealmModel>> = listOf()
open fun entitiesChanged() {}
} }

@ -1,37 +0,0 @@
package net.pokeranalytics.android.ui.fragment.components
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import io.realm.RealmResults
import net.pokeranalytics.android.model.realm.ComputableResult
open class ResultsObserverFragment : RealmFragment() {
private lateinit var computableResults: RealmResults<ComputableResult>
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = super.onCreateView(inflater, container, savedInstanceState)
// ComputableResult are existing only if sessions are ended
this.computableResults = getRealm().where(ComputableResult::class.java).findAll()
this.computableResults.addChangeListener { _, _ ->
this.sessionsChanged()
}
return view
}
override fun onDestroyView() {
super.onDestroyView()
computableResults.removeAllChangeListeners()
}
open fun sessionsChanged() {
// to override
}
}

@ -44,7 +44,7 @@ open class DataManagerFragment : RealmFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
initData() loadItem()
} }
override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) { override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
@ -74,10 +74,10 @@ open class DataManagerFragment : RealmFragment() {
/** /**
* Init data * Init data
*/ */
protected open fun initData() { private fun loadItem() {
this.deleteButtonShouldAppear = this.primaryKey != null
this.item = this.liveDataType.updateOrCreate(this.getRealm(), primaryKey) this.item = this.liveDataType.updateOrCreate(this.getRealm(), primaryKey)
this.deleteButtonShouldAppear = this.primaryKey != null
} }

@ -11,7 +11,6 @@ import kotlinx.android.synthetic.main.fragment_editable_data.view.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.interfaces.Editable import net.pokeranalytics.android.model.interfaces.Editable
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
@ -87,8 +86,7 @@ open class EditableDataFragment : DataManagerFragment(), RowRepresentableDelegat
return this.item as RowRepresentableDataSource return this.item as RowRepresentableDataSource
} }
override fun initData() { open fun initData() {
super.initData()
val dataSource = getDataSource() val dataSource = getDataSource()
this.rowRepresentableAdapter = RowRepresentableAdapter(getDataSource(), this) this.rowRepresentableAdapter = RowRepresentableAdapter(getDataSource(), this)

Loading…
Cancel
Save