|
|
|
|
@ -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,27 +31,27 @@ 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 { |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Create new instance |
|
|
|
|
*/ |
|
|
|
|
fun newInstance(): StatisticsFragment { |
|
|
|
|
val fragment = StatisticsFragment() |
|
|
|
|
val bundle = Bundle() |
|
|
|
|
fragment.arguments = bundle |
|
|
|
|
return fragment |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
companion object { |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 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) |
|
|
|
|
@ -70,7 +72,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() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -85,31 +89,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 |
|
|
|
|
@ -147,7 +151,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, |
|
|
|
|
@ -158,7 +162,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( |
|
|
|
|
@ -174,7 +178,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...") |
|
|
|
|
|