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. 99
      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. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/BankrollDataFragment.kt
  6. 6
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/DataManagerFragment.kt
  7. 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 com.google.android.material.tabs.TabLayout
import io.realm.Realm
import io.realm.RealmModel
import kotlinx.android.synthetic.main.fragment_calendar.*
import kotlinx.coroutines.CoroutineScope
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.combined
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.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.extensions.hideWithAnimation
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.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
@ -35,7 +38,7 @@ import java.util.*
import kotlin.coroutines.CoroutineContext
class CalendarFragment : ResultsObserverFragment(), CoroutineScope, StaticRowRepresentableDataSource,
class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentableDataSource,
RowRepresentableDelegate {
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()
}

@ -7,6 +7,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import io.realm.Realm
import io.realm.RealmModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.async
@ -18,9 +19,10 @@ import net.pokeranalytics.android.calculus.Report
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.filter.Query
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.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.interfaces.FilterActivityRequestCode
import net.pokeranalytics.android.ui.interfaces.FilterHandler
@ -29,39 +31,39 @@ import timber.log.Timber
import java.util.*
import kotlin.coroutines.CoroutineContext
class StatisticsFragment : ResultsObserverFragment(), FilterHandler {
class StatisticsFragment : RealmFragment(), FilterHandler {
val coroutineContext: CoroutineContext
get() = Dispatchers.Main
private lateinit var tableReportFragment: ComposableTableReportFragment
companion object {
companion object {
/**
* Create new instance
*/
fun newInstance(): StatisticsFragment {
val fragment = StatisticsFragment()
val bundle = Bundle()
fragment.arguments = bundle
return fragment
}
}
/**
* Create new instance
*/
fun newInstance(): StatisticsFragment {
val fragment = StatisticsFragment()
val bundle = Bundle()
fragment.arguments = bundle
return fragment
}
}
// Life Cycle
// Life Cycle
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_stats, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setFilterable(true)
initUI()
launchStatComputation()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setFilterable(true)
initUI()
launchStatComputation()
}
private fun initUI() {
val fragmentTransaction = requireFragmentManager().beginTransaction()
@ -71,7 +73,9 @@ class StatisticsFragment : ResultsObserverFragment(), FilterHandler {
this.tableReportFragment = fragment
}
override fun sessionsChanged() {
override val observedEntities: List<Class<out RealmModel>> = listOf(ComputableResult::class.java)
override fun entitiesChanged() {
this.launchStatComputation()
}
@ -86,31 +90,31 @@ class StatisticsFragment : ResultsObserverFragment(), FilterHandler {
// return rows
// }
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == FilterActivityRequestCode.SELECT_FILTER.ordinal && resultCode == Activity.RESULT_OK) {
data?.let {
this.saveFilter(this.requireContext(), it.getStringExtra(FiltersActivity.IntentKey.FILTER_ID.keyName))
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == FilterActivityRequestCode.SELECT_FILTER.ordinal && resultCode == Activity.RESULT_OK) {
data?.let {
this.saveFilter(this.requireContext(), it.getStringExtra(FiltersActivity.IntentKey.FILTER_ID.keyName))
}
}
}
// Filter Handler
override fun createFilter() {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
// Filter Handler
override fun createFilter() {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun applyFilter() {
this.sessionsChanged()
}
override fun applyFilter() {
this.entitiesChanged()
}
override fun removeFilter() {
this.sessionsChanged()
}
override fun removeFilter() {
this.entitiesChanged()
}
override var currentFilterable: FilterableType = FilterableType.SESSION
override var currentFilterable: FilterableType = FilterableType.SESSION
// Business
// Business
/**
* Launch stat computation
@ -148,7 +152,7 @@ class StatisticsFragment : ResultsObserverFragment(), FilterHandler {
*/
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(
Stat.NET_RESULT,
@ -159,7 +163,7 @@ class StatisticsFragment : ResultsObserverFragment(), FilterHandler {
Stat.HOURLY_DURATION
)
val query = filter?.query ?: Query()
val query = filter?.query ?: Query()
val allSessionGroup = ComputableGroup(query, allStats)
val cgStats: List<Stat> = listOf(
@ -175,7 +179,14 @@ class StatisticsFragment : ResultsObserverFragment(), FilterHandler {
)
val cgSessionGroup = ComputableGroup(Query(QueryCondition.IsCash).merge(query), cgStats)
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)
Timber.d(">>>>> Start computations...")

@ -5,18 +5,38 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import io.realm.Realm
import io.realm.RealmModel
import io.realm.RealmResults
open class RealmFragment : PokerAnalyticsFragment() {
private lateinit var realm: Realm
private var realmResultLists: MutableMap<Class<out RealmModel>, RealmResults<*>> = mutableMapOf()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
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)
}
override fun onDestroyView() {
super.onDestroyView()
this.realmResultLists.values.forEach {
it.removeAllChangeListeners()
}
this.realm.close()
}
@ -27,4 +47,8 @@ open class RealmFragment : PokerAnalyticsFragment() {
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
}
}

@ -157,7 +157,7 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
/**
* Init data
*/
override fun initData() {
override fun initData() {
super.initData()
defaultCurrency = UserDefaults.currency

@ -44,7 +44,7 @@ open class DataManagerFragment : RealmFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initData()
loadItem()
}
override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
@ -74,10 +74,10 @@ open class DataManagerFragment : RealmFragment() {
/**
* Init data
*/
protected open fun initData() {
private fun loadItem() {
this.deleteButtonShouldAppear = this.primaryKey != null
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.model.LiveData
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.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
@ -87,8 +86,7 @@ open class EditableDataFragment : DataManagerFragment(), RowRepresentableDelegat
return this.item as RowRepresentableDataSource
}
override fun initData() {
super.initData()
open fun initData() {
val dataSource = getDataSource()
this.rowRepresentableAdapter = RowRepresentableAdapter(getDataSource(), this)

Loading…
Cancel
Save