@ -2,11 +2,13 @@ package net.pokeranalytics.android.ui.fragment
import android.app.Activity
import android.app.Activity
import android.content.Intent
import android.content.Intent
import android.content.res.ColorStateList
import android.os.Build
import android.os.Bundle
import android.os.Bundle
import android.view.LayoutInflater
import android.view.*
import android.view.View
import androidx.appcompat.widget.Toolbar
import android.view.ViewGroup
import io.realm.Realm
import io.realm.Realm
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.async
import kotlinx.coroutines.async
import kotlinx.coroutines.launch
import kotlinx.coroutines.launch
@ -19,16 +21,14 @@ import net.pokeranalytics.android.databinding.FragmentStatsBinding
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.exceptions.PAIllegalStateException
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.*
import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.model.realm.Result
import net.pokeranalytics.android.model.realm.UserConfig
import net.pokeranalytics.android.ui.fragment.components.FilterableFragment
import net.pokeranalytics.android.ui.fragment.components.FilterableFragment
import net.pokeranalytics.android.ui.fragment.components.RealmAsyncListener
import net.pokeranalytics.android.ui.fragment.components.RealmAsyncListener
import net.pokeranalytics.android.ui.fragment.report.ComposableTableReportFragment
import net.pokeranalytics.android.ui.fragment.report.ComposableTableReportFragment
import net.pokeranalytics.android.ui.modules.filter.FilterActivityRequestCode
import net.pokeranalytics.android.ui.modules.filter.FilterActivityRequestCode
import net.pokeranalytics.android.ui.modules.filter.FilterableType
import net.pokeranalytics.android.ui.modules.filter.FilterableType
import net.pokeranalytics.android.ui.modules.filter.FiltersActivity
import net.pokeranalytics.android.ui.modules.filter.FiltersActivity
import net.pokeranalytics.android.ui.modules.settings.TransactionFilterActivity
import timber.log.Timber
import timber.log.Timber
import java.util.*
import java.util.*
@ -36,6 +36,8 @@ class StatisticsFragment : FilterableFragment(), RealmAsyncListener {
private lateinit var tableReportFragment : ComposableTableReportFragment
private lateinit var tableReportFragment : ComposableTableReportFragment
private var transactionFilterMenuItem : MenuItem ? = null
companion object {
companion object {
/ * *
/ * *
@ -73,6 +75,7 @@ class StatisticsFragment : FilterableFragment(), RealmAsyncListener {
addRealmChangeListener ( this , UserConfig :: class . java )
addRealmChangeListener ( this , UserConfig :: class . java )
addRealmChangeListener ( this , ComputableResult :: class . java )
addRealmChangeListener ( this , ComputableResult :: class . java )
addRealmChangeListener ( this , Transaction :: class . java )
}
}
private fun initUI ( ) {
private fun initUI ( ) {
@ -83,27 +86,41 @@ class StatisticsFragment : FilterableFragment(), RealmAsyncListener {
this . tableReportFragment = fragment
this . tableReportFragment = fragment
}
}
// override val observedEntities: List<Class<out RealmModel>> = listOf(ComputableResult::class.java)
override fun onCreateOptionsMenu ( menu : Menu , inflater : MenuInflater ) {
super . onCreateOptionsMenu ( menu , inflater )
// override fun entitiesChanged(clazz: Class<out RealmModel>, results: RealmResults<out RealmModel>) {
view ?. findViewById < Toolbar > ( R . id . toolbar ) ?. let { toolbar ->
// Timber.d("Entities changes, launch stats computation, size = ${results.size}")
toolbar . menu . removeItem ( R . id . menu _item _transaction _filter )
// val cr = results as RealmResults<ComputableResult>
transactionFilterMenuItem = toolbar . menu ?. add ( 0 , R . id . menu _item _transaction _filter , 1 , R . string . filter )
// cr.forEach {
transactionFilterMenuItem ?. setIcon ( R . drawable . baseline _payment _24 )
// Timber.d("### buyin = ${it.ratedBuyin} ### net result = ${it.ratedNet}")
transactionFilterMenuItem ?. setShowAsActionFlags ( MenuItem . SHOW _AS _ACTION _IF _ROOM )
// }
setTransactionFilterItemColor ( )
// this.launchStatComputation()
}
// }
}
// override fun convertReportIntoRepresentables(report: Report): ArrayList<RowRepresentable> {
private fun setTransactionFilterItemColor ( ) {
// val rows: ArrayList<RowRepresentable> = ArrayList()
context ?. let {
// report.results.forEach { result ->
val userConfig = UserConfig . getConfiguration ( getRealm ( ) )
// rows.add(CustomizableRowRepresentable(title = result.group.name))
val color = if ( userConfig . transactionTypeIds . isNotEmpty ( ) ) R . color . red else R . color . white
// result.group.stats?.forEach { stat ->
if ( Build . VERSION . SDK _INT >= Build . VERSION _CODES . O ) {
// rows.add(StatRow(stat, result.computedStat(stat), result.group.name))
this . transactionFilterMenuItem ?. iconTintList = ColorStateList . valueOf ( it . getColor ( color ) )
// }
}
// }
}
// return rows
}
// }
override fun onOptionsItemSelected ( item : MenuItem ) : Boolean {
when ( item . itemId ) {
R . id . menu _item _transaction _filter -> {
showTransactionFilter ( )
}
}
return super . onOptionsItemSelected ( item )
}
private fun showTransactionFilter ( ) {
context ?. let {
TransactionFilterActivity . newInstance ( it )
}
}
override fun onActivityResult ( requestCode : Int , resultCode : Int , data : Intent ? ) {
override fun onActivityResult ( requestCode : Int , resultCode : Int , data : Intent ? ) {
super . onActivityResult ( requestCode , resultCode , data )
super . onActivityResult ( requestCode , resultCode , data )
@ -130,18 +147,11 @@ class StatisticsFragment : FilterableFragment(), RealmAsyncListener {
// Business
// Business
override fun asyncListenedEntityChange ( realm : Realm ) {
override fun asyncListenedEntityChange ( realm : Realm ) {
if ( isAdded ) { // Fixes: java.lang.IllegalStateException Fragment StatisticsFragment{9d3e5ec} not attached to a context.
if ( isAdded ) { // Fixes: java.lang.IllegalStateException Fragment StatisticsFragment{9d3e5ec} not attached to a context.
launchStatComputation ( )
launchStatComputation ( )
}
}
// val report = createSessionGroupsAndStartCompute(realm)
setTransactionFilterItemColor ( )
// tableReportFragment.report = report
//
// GlobalScope.launch(Dispatchers.Main) {
// tableReportFragment.showResults()
// }
}
}
/ * *
/ * *
@ -149,7 +159,7 @@ class StatisticsFragment : FilterableFragment(), RealmAsyncListener {
* /
* /
private fun launchStatComputation ( ) {
private fun launchStatComputation ( ) {
GlobalScope . launch ( coroutineContext ) {
CoroutineScope ( coroutineContext ) . launch {
val async = GlobalScope . async {
val async = GlobalScope . async {
val s = Date ( )
val s = Date ( )
@ -238,6 +248,8 @@ class StatisticsFragment : FilterableFragment(), RealmAsyncListener {
computedStats . addAll ( tStats )
computedStats . addAll ( tStats )
options . stats = computedStats
options . stats = computedStats
options . includedTransactions = UserConfig . getConfiguration ( realm ) . transactionTypes ( realm )
return Calculator . computeGroups ( realm , listOf ( allSessionGroup , cgSessionGroup , tSessionGroup ) , options )
return Calculator . computeGroups ( realm , listOf ( allSessionGroup , cgSessionGroup , tSessionGroup ) , options )
}
}