diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 42daa73c..5268059e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -64,12 +64,12 @@
android:screenOrientation="portrait" />
@@ -123,6 +123,11 @@
android:launchMode="singleTop"
android:screenOrientation="portrait" />
+
+
diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt b/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt
index c5ec9284..1f6612cf 100644
--- a/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt
+++ b/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt
@@ -29,7 +29,7 @@ class Calculator {
*/
class Options(
var display: Display = Display.TABLE,
- var evolutionValues: EvolutionValues = EvolutionValues.NONE,
+ evolutionValues: EvolutionValues = EvolutionValues.NONE,
var stats: List = listOf(),
var criterias: List = listOf(),
query: Query = Query(),
@@ -38,6 +38,14 @@ class Calculator {
var userGenerated: Boolean = false
) {
+ var evolutionValues: EvolutionValues = evolutionValues
+ get() {
+ if (field == EvolutionValues.NONE && this.display == Display.PROGRESS) {
+ return EvolutionValues.STANDARD
+ }
+ return field
+ }
+
private var _query: Query = query
private var _filter: Filter? = filter
@@ -60,7 +68,7 @@ class Calculator {
*/
enum class Display : RowRepresentable {
TABLE,
- EVOLUTION,
+ PROGRESS,
COMPARISON,
MAP,
POLYNOMIAL;
@@ -69,7 +77,7 @@ class Calculator {
get() {
return when (this) {
TABLE -> R.string.table
- EVOLUTION -> R.string.curve
+ PROGRESS -> R.string.progress
COMPARISON -> R.string.comparison
MAP -> R.string.map
POLYNOMIAL -> null
@@ -101,9 +109,9 @@ class Calculator {
}
val computeLongestStreak: Boolean
- get() {
- return this.stats.contains(LONGEST_STREAKS)
- }
+ get() {
+ return this.stats.contains(LONGEST_STREAKS)
+ }
val shouldSortValues: Boolean
get() {
return this.evolutionValues != EvolutionValues.NONE || this.computeLongestStreak
@@ -126,7 +134,7 @@ class Calculator {
}
}
- fun reportSetup(name: String) : ReportSetup {
+ fun reportSetup(name: String): ReportSetup {
val rs = ReportSetup()
rs.name = name
@@ -136,6 +144,17 @@ class Calculator {
return rs
}
+ /**
+ * Returns some default generated name
+ */
+ val defaultName: String
+ get() {
+ val statName = this.stats.firstOrNull()?.let {
+ it.getDisplayName()
+ }
+ return statName ?: this.query.name
+ }
+
}
companion object {
diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt b/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt
index 6875e9ad..431db5cf 100644
--- a/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt
+++ b/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt
@@ -146,7 +146,7 @@ enum class Stat : RowRepresentable {
return TextFormat(value.toCurrency(currency), color)
}
// Red/green numericValues
- HOURLY_RATE_BB, AVERAGE_NET_BB, NET_BB_PER_100_HANDS -> {
+ HOURLY_RATE_BB, AVERAGE_NET_BB, NET_BB_PER_100_HANDS, BB_NET_RESULT -> {
val color = if (value >= this.threshold) R.color.green else R.color.red
return TextFormat(value.formatted(), color)
}
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/ReportDetailsActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/ComparisonReportActivity.kt
similarity index 80%
rename from app/src/main/java/net/pokeranalytics/android/ui/activity/ReportDetailsActivity.kt
rename to app/src/main/java/net/pokeranalytics/android/ui/activity/ComparisonReportActivity.kt
index be1b5dd1..8d776327 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/activity/ReportDetailsActivity.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/ComparisonReportActivity.kt
@@ -6,11 +6,11 @@ import android.os.Bundle
import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.Report
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
-import net.pokeranalytics.android.ui.fragment.ReportDetailsFragment
+import net.pokeranalytics.android.ui.fragment.report.ComparisonReportFragment
-class ReportDetailsActivity : PokerAnalyticsActivity() {
+class ComparisonReportActivity : PokerAnalyticsActivity() {
companion object {
@@ -25,7 +25,7 @@ class ReportDetailsActivity : PokerAnalyticsActivity() {
//parameters = GraphParameters(stat, group, report)
this.report = report
this.reportTitle = reportTitle
- val intent = Intent(context, ReportDetailsActivity::class.java)
+ val intent = Intent(context, ComparisonReportActivity::class.java)
context.startActivity(intent)
}
@@ -44,7 +44,7 @@ class ReportDetailsActivity : PokerAnalyticsActivity() {
report?.let {
val fragmentTransaction = supportFragmentManager.beginTransaction()
- val reportDetailsFragment = ReportDetailsFragment.newInstance(it, reportTitle)
+ val reportDetailsFragment = ComparisonReportFragment.newInstance(it, reportTitle)
fragmentTransaction.add(R.id.reportDetailsContainer, reportDetailsFragment)
fragmentTransaction.commit()
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/StatisticDetailsActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/ProgressReportActivity.kt
similarity index 59%
rename from app/src/main/java/net/pokeranalytics/android/ui/activity/StatisticDetailsActivity.kt
rename to app/src/main/java/net/pokeranalytics/android/ui/activity/ProgressReportActivity.kt
index ec737828..83c34102 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/activity/StatisticDetailsActivity.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/ProgressReportActivity.kt
@@ -4,16 +4,15 @@ import android.content.Context
import android.content.Intent
import android.os.Bundle
import net.pokeranalytics.android.R
-import net.pokeranalytics.android.calculus.ComputableGroup
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.fragment.StatisticDetailsFragment
+import net.pokeranalytics.android.ui.fragment.report.ProgressReportFragment
-class StatisticsDetailsParameters(var stat: Stat, var computableGroup: ComputableGroup, var report: Report, var title: String? = null)
+class StatisticsDetailsParameters(var stat: Stat, var report: Report, var title: String? = null)
-class StatisticDetailsActivity : PokerAnalyticsActivity() {
+class ProgressReportActivity : PokerAnalyticsActivity() {
companion object {
@@ -24,10 +23,10 @@ class StatisticDetailsActivity : PokerAnalyticsActivity() {
/**
* Default constructor
*/
- fun newInstance(context: Context, stat: Stat, group: ComputableGroup, report: Report, displayAggregationChoices: Boolean = true, title: String? = null) {
- parameters = StatisticsDetailsParameters(stat, group, report, title)
+ fun newInstance(context: Context, stat: Stat, report: Report, displayAggregationChoices: Boolean = true, title: String? = null) {
+ parameters = StatisticsDetailsParameters(stat, report, title)
this.displayAggregationChoices = displayAggregationChoices
- val intent = Intent(context, StatisticDetailsActivity::class.java)
+ val intent = Intent(context, ProgressReportActivity::class.java)
context.startActivity(intent)
}
@@ -45,12 +44,12 @@ class StatisticDetailsActivity : PokerAnalyticsActivity() {
private fun initUI() {
val fragmentTransaction = supportFragmentManager.beginTransaction()
- val statisticDetailsFragment = StatisticDetailsFragment()
+ val statisticDetailsFragment = ProgressReportFragment()
fragmentTransaction.add(R.id.statisticDetailsContainer, statisticDetailsFragment)
fragmentTransaction.commit()
parameters?.let {
- statisticDetailsFragment.setData(it.stat, it.computableGroup, it.report, displayAggregationChoices, it.title)
+ statisticDetailsFragment.setData(it.stat, it.report, displayAggregationChoices, it.title)
parameters = null
}
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/ReportCreationActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/ReportCreationActivity.kt
index cde22ea1..f8f24c51 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/activity/ReportCreationActivity.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/ReportCreationActivity.kt
@@ -3,15 +3,29 @@ package net.pokeranalytics.android.ui.activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
+import androidx.fragment.app.Fragment
import net.pokeranalytics.android.R
+import net.pokeranalytics.android.calculus.Calculator
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
class ReportCreationActivity : PokerAnalyticsActivity() {
- companion object {
- fun newInstance(context: Context) {
+ enum class RequestCode {
+ NEW_REPORT
+ }
+
+ companion object {
+
+ var options: Calculator.Options? = null
+
+// fun newInstance(context: Context) {
+// val intent = Intent(context, ReportCreationActivity::class.java)
+// context.startActivity(intent)
+// }
+
+ fun newInstanceForResult(fragment: Fragment, context: Context) {
val intent = Intent(context, ReportCreationActivity::class.java)
- context.startActivity(intent)
+ fragment.startActivityForResult(intent, RequestCode.NEW_REPORT.ordinal)
}
}
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/TableReportActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/TableReportActivity.kt
new file mode 100644
index 00000000..bdb070f5
--- /dev/null
+++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/TableReportActivity.kt
@@ -0,0 +1,51 @@
+package net.pokeranalytics.android.ui.activity
+
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import net.pokeranalytics.android.R
+import net.pokeranalytics.android.calculus.Report
+import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
+import net.pokeranalytics.android.ui.fragment.report.TableReportFragment
+
+class TableReportActivity : PokerAnalyticsActivity() {
+
+ companion object {
+
+ // Unparcel fails when setting a custom Parcelable object on Entry so we use a static reference to passe objects
+ private var report: Report? = null
+ private var reportTitle: String = ""
+
+ /**
+ * Default constructor
+ */
+ fun newInstance(context: Context, report: Report, reportTitle: String) {
+ this.report = report
+ this.reportTitle = reportTitle
+ val intent = Intent(context, TableReportActivity::class.java)
+ context.startActivity(intent)
+ }
+
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_table_report)
+ initUI()
+ }
+
+ /**
+ * Init UI
+ */
+ private fun initUI() {
+
+ report?.let {
+ val fragmentTransaction = supportFragmentManager.beginTransaction()
+ val fragment = TableReportFragment.newInstance(it)
+ fragmentTransaction.add(R.id.reportDetailsContainer, fragment)
+ fragmentTransaction.commit()
+ report = null
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/ReportPagerAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/ReportPagerAdapter.kt
index 9b17e9bc..76bd436b 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/ReportPagerAdapter.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/ReportPagerAdapter.kt
@@ -9,7 +9,7 @@ import androidx.viewpager.widget.PagerAdapter
import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.Report
import net.pokeranalytics.android.ui.fragment.GraphFragment
-import net.pokeranalytics.android.ui.fragment.TableReportFragment
+import net.pokeranalytics.android.ui.fragment.report.TableReportFragment
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
import java.lang.ref.WeakReference
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarDetailsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarDetailsFragment.kt
index e4e52d9d..62b9ff3f 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarDetailsFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarDetailsFragment.kt
@@ -20,7 +20,7 @@ import net.pokeranalytics.android.calculus.ComputedResults
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.filter.Query
import net.pokeranalytics.android.model.filter.QueryCondition
-import net.pokeranalytics.android.ui.activity.StatisticDetailsActivity
+import net.pokeranalytics.android.ui.activity.ProgressReportActivity
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
@@ -152,9 +152,7 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable
is GraphRow -> {
row.report?.let { report ->
row.stat?.let { stat ->
- report.results.firstOrNull()?.group?.let { computableGroup ->
- StatisticDetailsActivity.newInstance(requireContext(), stat, computableGroup, report, false, row.title)
- }
+ ProgressReportActivity.newInstance(requireContext(), stat, report, false, row.title)
}
}
}
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt
index 383aa8d5..da922db1 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt
@@ -25,7 +25,7 @@ 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.SessionObserverFragment
+import net.pokeranalytics.android.ui.fragment.components.ResultsObserverFragment
import net.pokeranalytics.android.ui.view.CalendarTabs
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
@@ -36,7 +36,7 @@ import java.util.*
import kotlin.coroutines.CoroutineContext
-class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRepresentableDataSource,
+class CalendarFragment : ResultsObserverFragment(), CoroutineScope, StaticRowRepresentableDataSource,
RowRepresentableDelegate {
enum class TimeFilter {
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportCreationFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportCreationFragment.kt
index 50c6d8d9..5ddd5587 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportCreationFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportCreationFragment.kt
@@ -1,5 +1,7 @@
package net.pokeranalytics.android.ui.fragment
+import android.app.Activity
+import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
@@ -12,6 +14,7 @@ import net.pokeranalytics.android.calculus.Calculator
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.Criteria
import net.pokeranalytics.android.model.realm.Filter
+import net.pokeranalytics.android.ui.activity.ReportCreationActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
@@ -53,8 +56,7 @@ class ReportCreationFragment : RealmFragment(), RowRepresentableDataSource, RowR
if (this.assistant.step == Assistant.Step.FINALIZE) {
// launch report
- val options = this.assistant.options
-
+ this.finishActivityWithOptions(this.assistant.options)
} else {
this.updateUIWithCurrentStep()
@@ -63,7 +65,15 @@ class ReportCreationFragment : RealmFragment(), RowRepresentableDataSource, RowR
}
}
+ }
+
+ private fun finishActivityWithOptions(options: Calculator.Options) {
+ ReportCreationActivity.options = options // temp object
+
+ val intent = Intent()
+ activity?.setResult(Activity.RESULT_OK, intent)
+ activity?.finish()
}
private fun updateUIWithCurrentStep() {
@@ -214,6 +224,8 @@ class Assistant {
Step.STAT
} else if (this.display == Calculator.Options.Display.COMPARISON && this.comparators.isEmpty()) {
Step.COMPARATOR
+ } else if (this.step == Step.FILTER) {
+ Step.FINALIZE
} else if (this.useFilter == null) {
Step.FILTER
} else {
@@ -238,12 +250,12 @@ class Assistant {
return when (this.step) {
Step.TYPE -> listOf(
Calculator.Options.Display.TABLE,
- Calculator.Options.Display.EVOLUTION,
+ Calculator.Options.Display.PROGRESS,
Calculator.Options.Display.COMPARISON
)
Step.STAT -> {
when (this.display) {
- Calculator.Options.Display.EVOLUTION -> Stat.evolutionValuesList
+ Calculator.Options.Display.PROGRESS -> Stat.evolutionValuesList
else -> Stat.userSelectableList
}
}
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 17a39180..e9ae0cc6 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
@@ -1,5 +1,7 @@
package net.pokeranalytics.android.ui.fragment
+import android.app.Activity
+import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
@@ -17,8 +19,10 @@ import net.pokeranalytics.android.calculus.Calculator
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.Criteria
import net.pokeranalytics.android.model.combined
+import net.pokeranalytics.android.ui.activity.ComparisonReportActivity
import net.pokeranalytics.android.ui.activity.ReportCreationActivity
-import net.pokeranalytics.android.ui.activity.ReportDetailsActivity
+import net.pokeranalytics.android.ui.activity.ProgressReportActivity
+import net.pokeranalytics.android.ui.activity.TableReportActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
@@ -65,6 +69,17 @@ class ReportsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSour
initUI()
}
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ super.onActivityResult(requestCode, resultCode, data)
+
+ if (requestCode == ReportCreationActivity.RequestCode.NEW_REPORT.ordinal && resultCode == Activity.RESULT_OK) {
+ ReportCreationActivity.options?.let { options ->
+ this.launchReportWithOptions(options, options.defaultName)
+ }
+ ReportCreationActivity.options = null
+ }
+ }
+
// Rows
override fun adapterRows(): List? {
@@ -79,7 +94,6 @@ class ReportsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSour
}
}
-
// Business
/**
@@ -104,7 +118,7 @@ class ReportsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSour
}
this.addButton.setOnClickListener {
- ReportCreationActivity.newInstance(requireContext())
+ ReportCreationActivity.newInstanceForResult(this, requireContext())
}
}
@@ -119,6 +133,20 @@ class ReportsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSour
return
}
+ val requiredStats: List = listOf(Stat.NET_RESULT)
+ val options = Calculator.Options(
+ display = Calculator.Options.Display.COMPARISON,
+ evolutionValues = Calculator.Options.EvolutionValues.STANDARD,
+ stats = requiredStats,
+ criterias = criteriaList
+ )
+
+ this.launchReportWithOptions(options, reportName)
+
+ }
+
+ private fun launchReportWithOptions(options: Calculator.Options, reportName: String) {
+
showLoader()
GlobalScope.launch {
@@ -126,13 +154,6 @@ class ReportsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSour
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,
- criterias = criteriaList
- )
-
val report = Calculator.computeStats(realm, options = options)
Timber.d("launchComputation: ${System.currentTimeMillis() - startDate.time}ms")
@@ -140,12 +161,27 @@ class ReportsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSour
launch(Dispatchers.Main) {
if (!isDetached) {
hideLoader()
- ReportDetailsActivity.newInstance(requireContext(), report, reportName)
+
+ when (options.display) {
+ Calculator.Options.Display.TABLE -> {
+ TableReportActivity.newInstance(requireContext(), report, reportName)
+ }
+ Calculator.Options.Display.PROGRESS -> {
+ ProgressReportActivity.newInstance(requireContext(), options.stats.first(), report)
+ }
+ Calculator.Options.Display.COMPARISON -> {
+ ComparisonReportActivity.newInstance(requireContext(), report, reportName)
+ }
+ else -> {
+ Timber.d("Report type not handled at the moment")
+ }
+ }
+
+
}
}
realm.close()
}
}
-
}
\ No newline at end of file
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt
index 20d820bd..6077d2fd 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt
@@ -3,18 +3,12 @@ package net.pokeranalytics.android.ui.fragment
import android.app.Activity
import android.content.Intent
import android.os.Bundle
-import android.view.Menu
-import android.view.MenuInflater
-import android.view.MenuItem
import android.view.View
import io.realm.Realm
-import io.realm.kotlin.where
-import kotlinx.android.synthetic.main.activity_new_data.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.async
import kotlinx.coroutines.launch
-import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.Calculator
import net.pokeranalytics.android.calculus.ComputableGroup
import net.pokeranalytics.android.calculus.Report
@@ -23,14 +17,13 @@ import net.pokeranalytics.android.model.filter.Query
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.ui.activity.FiltersActivity
+import net.pokeranalytics.android.ui.fragment.report.TableReportFragment
import net.pokeranalytics.android.ui.interfaces.FilterActivityRequestCode
import net.pokeranalytics.android.ui.interfaces.FilterHandler
import net.pokeranalytics.android.ui.interfaces.FilterableType
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.StatRow
-import net.pokeranalytics.android.util.Preferences
-import net.pokeranalytics.android.util.UserDefaults
import timber.log.Timber
import java.util.*
import kotlin.coroutines.CoroutineContext
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/SessionObserverFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/ResultsObserverFragment.kt
similarity index 62%
rename from app/src/main/java/net/pokeranalytics/android/ui/fragment/components/SessionObserverFragment.kt
rename to app/src/main/java/net/pokeranalytics/android/ui/fragment/components/ResultsObserverFragment.kt
index 8f07818a..8578ce3d 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/SessionObserverFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/ResultsObserverFragment.kt
@@ -7,16 +7,18 @@ import android.view.ViewGroup
import io.realm.RealmResults
import net.pokeranalytics.android.model.realm.ComputableResult
-open class SessionObserverFragment : RealmFragment() {
+open class ResultsObserverFragment : RealmFragment() {
- private lateinit var endedSessions: RealmResults
+ private lateinit var computableResults: RealmResults
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = super.onCreateView(inflater, container, savedInstanceState)
- this.endedSessions = getRealm().where(ComputableResult::class.java).findAll() // ComputableResult are existing only if sessions are ended
- this.endedSessions.addChangeListener { _, _ ->
+ // ComputableResult are existing only if sessions are ended
+ this.computableResults = getRealm().where(ComputableResult::class.java).findAll()
+
+ this.computableResults.addChangeListener { _, _ ->
this.sessionsChanged()
}
@@ -25,7 +27,7 @@ open class SessionObserverFragment : RealmFragment() {
override fun onDestroyView() {
super.onDestroyView()
- endedSessions.removeAllChangeListeners()
+ computableResults.removeAllChangeListeners()
}
open fun sessionsChanged() {
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/AbstractReportFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/AbstractReportFragment.kt
new file mode 100644
index 00000000..d772aa46
--- /dev/null
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/AbstractReportFragment.kt
@@ -0,0 +1,52 @@
+package net.pokeranalytics.android.ui.fragment.report
+
+import android.view.Menu
+import android.view.MenuInflater
+import android.view.MenuItem
+import net.pokeranalytics.android.R
+import net.pokeranalytics.android.calculus.Report
+import net.pokeranalytics.android.ui.fragment.components.RealmFragment
+
+abstract class AbstractReportFragment : RealmFragment() {
+
+ protected lateinit var selectedReport: Report
+
+ private var editableMenu: Menu? = null
+
+ override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
+ menu?.clear()
+ inflater?.inflate(R.menu.toolbar_report, menu)
+ this.editableMenu = menu
+ updateMenuUI()
+ super.onCreateOptionsMenu(menu, inflater)
+ }
+
+ override fun onOptionsItemSelected(item: MenuItem?): Boolean {
+ when (item!!.itemId) {
+ R.id.save -> this.saveReportRequest()
+ }
+ return true
+ }
+
+ /**
+ * Update menu UI
+ */
+ private fun updateMenuUI() {
+ editableMenu?.findItem(R.id.save)?.let {
+ it.isVisible = this.selectedReport.options.userGenerated
+ it.icon.setTint(requireContext().getColor(R.color.white))
+ }
+ }
+
+ private fun saveReportRequest() {
+
+ }
+
+ private fun saveReport(name: String) {
+ getRealm().executeTransaction {
+ val report = this.selectedReport.options.reportSetup(name)
+ it.insert(report)
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportDetailsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComparisonReportFragment.kt
similarity index 87%
rename from app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportDetailsFragment.kt
rename to app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComparisonReportFragment.kt
index 0d09654f..372d3570 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportDetailsFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComparisonReportFragment.kt
@@ -1,4 +1,4 @@
-package net.pokeranalytics.android.ui.fragment
+package net.pokeranalytics.android.ui.fragment.report
import android.os.Bundle
import android.view.LayoutInflater
@@ -13,13 +13,12 @@ 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() {
+class ComparisonReportFragment : AbstractReportFragment() {
companion object {
- fun newInstance(report: Report?, reportTitle: String): ReportDetailsFragment {
- val fragment = ReportDetailsFragment()
+ fun newInstance(report: Report?, reportTitle: String): ComparisonReportFragment {
+ val fragment = ComparisonReportFragment()
fragment.reportTitle = reportTitle
report?.let {
fragment.selectedReport = it
@@ -32,7 +31,6 @@ class ReportDetailsFragment : PokerAnalyticsFragment() {
}
private lateinit var parentActivity: PokerAnalyticsActivity
- private lateinit var selectedReport: Report
private var reports: MutableMap = hashMapOf()
private var stat: Stat = Stat.NET_RESULT
@@ -40,6 +38,7 @@ class ReportDetailsFragment : PokerAnalyticsFragment() {
private var reportTitle: String = ""
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+ super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_report_details, container, false)
}
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ProgressReportFragment.kt
similarity index 88%
rename from app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt
rename to app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ProgressReportFragment.kt
index dd374778..bf978c72 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ProgressReportFragment.kt
@@ -1,4 +1,4 @@
-package net.pokeranalytics.android.ui.fragment
+package net.pokeranalytics.android.ui.fragment.report
import android.os.Bundle
import android.view.LayoutInflater
@@ -16,27 +16,30 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import net.pokeranalytics.android.R
-import net.pokeranalytics.android.calculus.*
+import net.pokeranalytics.android.calculus.AggregationType
+import net.pokeranalytics.android.calculus.Calculator
+import net.pokeranalytics.android.calculus.Report
+import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.combined
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.extensions.ChipGroupExtension
import net.pokeranalytics.android.ui.extensions.hideWithAnimation
import net.pokeranalytics.android.ui.extensions.px
import net.pokeranalytics.android.ui.extensions.showWithAnimation
-import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
+import net.pokeranalytics.android.ui.fragment.GraphFragment
import timber.log.Timber
import java.util.*
-class StatisticDetailsFragment : PokerAnalyticsFragment() {
+class ProgressReportFragment : AbstractReportFragment() {
companion object {
/**
- * Create new instance
+ * Creates new instance
*/
- fun newInstance(): StatisticDetailsFragment {
- val fragment = StatisticDetailsFragment()
+ fun newInstance(): ProgressReportFragment {
+ val fragment = ProgressReportFragment()
val bundle = Bundle()
fragment.arguments = bundle
return fragment
@@ -44,9 +47,7 @@ class StatisticDetailsFragment : PokerAnalyticsFragment() {
}
private lateinit var parentActivity: PokerAnalyticsActivity
- private lateinit var computableGroup: ComputableGroup
private lateinit var graphFragment: GraphFragment
- private lateinit var selectedReport: Report
private var title: String? = null
private var reports: MutableMap = hashMapOf()
@@ -54,6 +55,7 @@ class StatisticDetailsFragment : PokerAnalyticsFragment() {
private var displayAggregationChoices: Boolean = true
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+ super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_statistic_details, container, false)
}
@@ -65,9 +67,8 @@ class StatisticDetailsFragment : PokerAnalyticsFragment() {
/**
* Set data
*/
- fun setData(stat: Stat, computableGroup: ComputableGroup, report: Report, displayAggregationChoices: Boolean, title: String? = null) {
+ fun setData(stat: Stat, report: Report, displayAggregationChoices: Boolean, title: String? = null) {
this.stat = stat
- this.computableGroup = computableGroup
this.selectedReport = report
this.displayAggregationChoices = displayAggregationChoices
this.title = title
@@ -91,7 +92,6 @@ class StatisticDetailsFragment : PokerAnalyticsFragment() {
parentActivity.supportActionBar?.setDisplayHomeAsUpEnabled(true)
setHasOptionsMenu(true)
-
val fragmentManager = parentActivity.supportFragmentManager
val fragmentTransaction = fragmentManager.beginTransaction()
graphFragment = GraphFragment()
@@ -168,7 +168,9 @@ class StatisticDetailsFragment : PokerAnalyticsFragment() {
val realm = Realm.getDefaultInstance()
- val report = Calculator.computeStatsWithEvolutionByAggregationType(realm, stat, computableGroup, aggregationType)
+ val group = selectedReport.results.first().group
+
+ val report = Calculator.computeStatsWithEvolutionByAggregationType(realm, stat, group, aggregationType)
reports[aggregationType] = report
realm.close()
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/TableReportFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/TableReportFragment.kt
similarity index 94%
rename from app/src/main/java/net/pokeranalytics/android/ui/fragment/TableReportFragment.kt
rename to app/src/main/java/net/pokeranalytics/android/ui/fragment/report/TableReportFragment.kt
index 4719d2b1..69f065a7 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/TableReportFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/TableReportFragment.kt
@@ -1,4 +1,4 @@
-package net.pokeranalytics.android.ui.fragment
+package net.pokeranalytics.android.ui.fragment.report
import android.os.Bundle
import android.view.LayoutInflater
@@ -12,12 +12,12 @@ import kotlinx.coroutines.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.*
import net.pokeranalytics.android.model.realm.ComputableResult
-import net.pokeranalytics.android.ui.activity.StatisticDetailsActivity
+import net.pokeranalytics.android.ui.activity.ProgressReportActivity
import net.pokeranalytics.android.ui.adapter.DisplayDescriptor
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.fragment.components.SessionObserverFragment
+import net.pokeranalytics.android.ui.fragment.components.ResultsObserverFragment
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.StatRow
@@ -26,7 +26,7 @@ import timber.log.Timber
import java.util.*
import kotlin.coroutines.CoroutineContext
-open class TableReportFragment : SessionObserverFragment(), StaticRowRepresentableDataSource, CoroutineScope,
+open class TableReportFragment : ResultsObserverFragment(), StaticRowRepresentableDataSource, CoroutineScope,
RowRepresentableDelegate {
override val coroutineContext: CoroutineContext
@@ -199,7 +199,7 @@ open class TableReportFragment : SessionObserverFragment(), StaticRowRepresentab
if (!isDetached) {
hideLoader()
report?.let {
- StatisticDetailsActivity.newInstance(requireContext(), stat, computableGroup, it)
+ ProgressReportActivity.newInstance(requireContext(), stat, it)
}
}
}
diff --git a/app/src/main/res/drawable/ic_baseline_save.xml b/app/src/main/res/drawable/ic_baseline_save.xml
new file mode 100644
index 00000000..1a3cbf91
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_save.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_table_report.xml b/app/src/main/res/layout/activity_table_report.xml
new file mode 100644
index 00000000..918c64c0
--- /dev/null
+++ b/app/src/main/res/layout/activity_table_report.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/toolbar_report.xml b/app/src/main/res/menu/toolbar_report.xml
new file mode 100644
index 00000000..07c1fabc
--- /dev/null
+++ b/app/src/main/res/menu/toolbar_report.xml
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 1f1cd23d..a66bc65f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -29,6 +29,7 @@
Select one or more comparison criteria
Select a filter or launch report
Launch Report
+ Progress
Address
Naming suggestions