diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 37e6961f..8ef69191 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -49,6 +49,11 @@
android:launchMode="singleTop"
android:screenOrientation="portrait" />
+
+
>()
+
+ override fun getItem(position: Int): PokerAnalyticsFragment {
+ return when (position) {
+ 0 -> GraphFragment.newInstance(report)
+ 1 -> GraphFragment.newInstance(report)
+ 2 -> GraphFragment.newInstance(report)
+ else -> GraphFragment.newInstance()
+ }
+ }
+
+ override fun getCount(): Int {
+ return 3
+ }
+
+ override fun getPageTitle(position: Int): CharSequence? {
+ return when(position) {
+ 0 -> context.getString(R.string.bar)
+ 1 -> context.getString(R.string.line)
+ 2 -> context.getString(R.string.table)
+ else -> ""
+ }
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
+ super.destroyItem(container, position, `object`)
+ weakReferences.remove(position)
+ }
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val fragment = super.instantiateItem(container, position) as PokerAnalyticsFragment
+ weakReferences.put(position, WeakReference(fragment))
+ return fragment
+ }
+
+ override fun getItemPosition(obj: Any): Int {
+ return PagerAdapter.POSITION_UNCHANGED
+ }
+
+ /**
+ * Return the fragment at the position key
+ */
+ fun getFragment(key: Int): PokerAnalyticsFragment? {
+ if (weakReferences.get(key) != null) {
+ return weakReferences.get(key).get()
+ }
+ return null
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt
index 7cd9184d..69fe9938 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt
@@ -24,9 +24,6 @@ import timber.log.Timber
import kotlin.coroutines.CoroutineContext
-class GraphParameters(var stat: Stat, var computableGroup: ComputableGroup, var report: Report) {
-}
-
class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, CoroutineScope {
companion object {
@@ -34,8 +31,13 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co
/**
* Create new instance
*/
- fun newInstance(): GraphFragment {
+ fun newInstance(report: Report? = null): GraphFragment {
val fragment = GraphFragment()
+
+ report?.let {
+ fragment.selectedReport = it
+ }
+
val bundle = Bundle()
fragment.arguments = bundle
return fragment
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportDetailsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportDetailsFragment.kt
new file mode 100644
index 00000000..06ba58f6
--- /dev/null
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportDetailsFragment.kt
@@ -0,0 +1,140 @@
+package net.pokeranalytics.android.ui.fragment
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import com.google.android.material.tabs.TabLayout
+import kotlinx.android.synthetic.main.fragment_report_details.*
+import kotlinx.android.synthetic.main.fragment_statistic_details.toolbar
+import net.pokeranalytics.android.R
+import net.pokeranalytics.android.calculus.AggregationType
+import net.pokeranalytics.android.calculus.Report
+import net.pokeranalytics.android.calculus.Stat
+import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
+import net.pokeranalytics.android.ui.adapter.ReportPagerAdapter
+import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
+
+class ReportDetailsFragment : PokerAnalyticsFragment() {
+
+ companion object {
+ fun newInstance(report: Report?, reportTitle: String): ReportDetailsFragment {
+ val fragment = ReportDetailsFragment()
+ fragment.reportTitle = reportTitle
+ report?.let {
+ fragment.selectedReport = it
+ }
+ val bundle = Bundle()
+ fragment.arguments = bundle
+ return fragment
+
+ }
+ }
+
+ private lateinit var parentActivity: PokerAnalyticsActivity
+ //private lateinit var computableGroup: ComputableGroup
+ //private lateinit var graphFragment: GraphFragment
+ private lateinit var selectedReport: Report
+
+ private var reports: MutableMap = hashMapOf()
+ private var stat: Stat = Stat.NET_RESULT
+ private var displayAggregationChoices: Boolean = true
+ private var reportTitle: String = ""
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+ return inflater.inflate(R.layout.fragment_report_details, container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ initUI()
+ }
+
+ /**
+ * Init UI
+ */
+ private fun initUI() {
+
+ parentActivity = activity as PokerAnalyticsActivity
+
+ // Avoid a bug during setting the title
+ toolbar.title = ""
+
+ parentActivity.setSupportActionBar(toolbar)
+ parentActivity.supportActionBar?.setDisplayHomeAsUpEnabled(true)
+ setHasOptionsMenu(true)
+
+ toolbar.title = reportTitle
+
+ val reportPagerAdapter = ReportPagerAdapter(requireContext(), parentActivity.supportFragmentManager, selectedReport)
+ viewPager.adapter = reportPagerAdapter
+ viewPager.offscreenPageLimit = 3
+
+ tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
+ override fun onTabSelected(tab: TabLayout.Tab) {
+ viewPager.setCurrentItem(tab.position, false)
+ }
+
+ override fun onTabUnselected(tab: TabLayout.Tab) {
+ }
+
+ override fun onTabReselected(tab: TabLayout.Tab) {
+ }
+ })
+
+ /*
+ stat.aggregationTypes.firstOrNull()?.let { aggregationType ->
+ reports[aggregationType]?.let { report ->
+ graphFragment.setData(report, aggregationType)
+ }
+ }
+
+ */
+
+
+ /*
+ val aggregationTypes = stat.aggregationTypes
+
+ aggregationTypes.forEachIndexed { index, type ->
+ val chip = Chip(requireContext())
+ chip.id = index
+ chip.text = requireContext().getString(type.resId)
+ chip.chipStartPadding = 8f.px
+ chip.chipEndPadding = 8f.px
+ this.chipGroup.addView(chip)
+ }
+
+ this.chipGroup.isVisible = displayAggregationChoices
+ this.chipGroup.check(0)
+
+ this.chipGroup.setOnCheckedChangeListener(object : ChipGroupExtension.SingleSelectionOnCheckedListener() {
+ override fun onCheckedChanged(group: ChipGroup, checkedId: Int) {
+ super.onCheckedChanged(group, checkedId)
+ val aggregationType = aggregationTypes[checkedId]
+
+ reports[aggregationType]?.let { report ->
+ graphFragment.setData(report, aggregationType)
+ } ?: run {
+ launchStatComputation(aggregationType)
+ }
+
+ }
+ })
+ */
+ }
+
+
+ /**
+ * Set data
+ */
+ fun setData(report: Report) {
+ this.selectedReport = report
+
+ /*
+ stat.aggregationTypes.firstOrNull()?.let {
+ reports[it] = report
+ }
+ */
+ }
+
+}
\ No newline at end of file
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 b8a8a4cd..ec862ad2 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
@@ -7,12 +7,14 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import io.realm.Realm
import kotlinx.android.synthetic.main.fragment_stats.*
+import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.Calculator
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.comparison.Comparator
+import net.pokeranalytics.android.ui.activity.ReportDetailsActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
@@ -67,13 +69,9 @@ class ReportsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSour
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
super.onRowSelected(position, row, fromAction)
- Timber.d("row: $row")
- when (row) {
-
- ReportRow.DAY_OF_WEEKS -> {
- //TODO: Open ComparisonChartActivity with correct data
- //TODO: Calcul report before or after
- }
+ if (row is ReportRow) {
+ val reportName = row.localizedTitle(requireContext())
+ launchComputation(row.comparators, reportName)
}
}
@@ -102,27 +100,28 @@ class ReportsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSour
}
}
- private fun launchComputation(comparators: List) {
-
+ /**
+ * Launch computation
+ */
+ private fun launchComputation(comparators: List, reportName: String) {
GlobalScope.launch {
val startDate = Date()
-
val realm = Realm.getDefaultInstance()
val requiredStats: List = listOf(Stat.NET_RESULT)
val options = Calculator.Options(evolutionValues = Calculator.Options.EvolutionValues.STANDARD, stats = requiredStats)
val report = Calculator.computeStatsWithComparators(realm, comparators = comparators, options = options)
+ Timber.d("launchComputation: ${System.currentTimeMillis() - startDate.time}ms")
-
-
-
-
+ launch(Dispatchers.Main) {
+ if (!isDetached) {
+ ReportDetailsActivity.newInstance(requireContext(), report, reportName)
+ }
+ }
}
-
-
}
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt
index 3da8e638..37ac6e25 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt
@@ -25,6 +25,7 @@ import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
import timber.log.Timber
import java.util.*
+
class StatisticDetailsFragment : PokerAnalyticsFragment() {
companion object {
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/HomeViewPager.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/NoPagingViewPager.kt
similarity index 81%
rename from app/src/main/java/net/pokeranalytics/android/ui/view/HomeViewPager.kt
rename to app/src/main/java/net/pokeranalytics/android/ui/view/NoPagingViewPager.kt
index 2802f2fb..bb7eac22 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/view/HomeViewPager.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/view/NoPagingViewPager.kt
@@ -6,9 +6,9 @@ import android.view.MotionEvent
import androidx.viewpager.widget.ViewPager
/**
- * Poker Analytics ViewPager
+ * ViewPager with paging disabled
*/
-class HomeViewPager(context: Context, attrs: AttributeSet) : ViewPager(context, attrs) {
+class NoPagingViewPager(context: Context, attrs: AttributeSet) : ViewPager(context, attrs) {
var enablePaging: Boolean = false
diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml
index d5788e1c..4f76f96f 100644
--- a/app/src/main/res/layout/activity_home.xml
+++ b/app/src/main/res/layout/activity_home.xml
@@ -15,7 +15,7 @@
app:layout_constraintTop_toTopOf="parent"
app:title="@string/app_name" />
-
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_report_details.xml b/app/src/main/res/layout/fragment_report_details.xml
new file mode 100644
index 00000000..73ad6108
--- /dev/null
+++ b/app/src/main/res/layout/fragment_report_details.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+