Custom reports launch + refactoring

dev
Laurent 7 years ago
parent c6833d2911
commit 3c26986a41
  1. 9
      app/src/main/AndroidManifest.xml
  2. 33
      app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt
  3. 2
      app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt
  4. 8
      app/src/main/java/net/pokeranalytics/android/ui/activity/ComparisonReportActivity.kt
  5. 17
      app/src/main/java/net/pokeranalytics/android/ui/activity/ProgressReportActivity.kt
  6. 20
      app/src/main/java/net/pokeranalytics/android/ui/activity/ReportCreationActivity.kt
  7. 51
      app/src/main/java/net/pokeranalytics/android/ui/activity/TableReportActivity.kt
  8. 2
      app/src/main/java/net/pokeranalytics/android/ui/adapter/ReportPagerAdapter.kt
  9. 6
      app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarDetailsFragment.kt
  10. 4
      app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt
  11. 20
      app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportCreationFragment.kt
  12. 60
      app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt
  13. 9
      app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt
  14. 12
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/ResultsObserverFragment.kt
  15. 52
      app/src/main/java/net/pokeranalytics/android/ui/fragment/report/AbstractReportFragment.kt
  16. 11
      app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComparisonReportFragment.kt
  17. 28
      app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ProgressReportFragment.kt
  18. 10
      app/src/main/java/net/pokeranalytics/android/ui/fragment/report/TableReportFragment.kt
  19. 9
      app/src/main/res/drawable/ic_baseline_save.xml
  20. 7
      app/src/main/res/layout/activity_table_report.xml
  21. 12
      app/src/main/res/menu/toolbar_report.xml
  22. 1
      app/src/main/res/values/strings.xml

@ -64,12 +64,12 @@
android:screenOrientation="portrait" />
<activity
android:name="net.pokeranalytics.android.ui.activity.StatisticDetailsActivity"
android:name="net.pokeranalytics.android.ui.activity.ProgressReportActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity
android:name="net.pokeranalytics.android.ui.activity.ReportDetailsActivity"
android:name="net.pokeranalytics.android.ui.activity.ComparisonReportActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
@ -123,6 +123,11 @@
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity
android:name="net.pokeranalytics.android.ui.activity.TableReportActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<meta-data
android:name="preloaded_fonts"
android:resource="@array/preloaded_fonts" />

@ -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<Stat> = listOf(),
var criterias: List<Criteria> = 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 {

@ -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)
}

@ -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()

@ -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
}

@ -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)
}
}

@ -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
}
}
}

@ -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

@ -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)
}
}
}

@ -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 {

@ -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
}
}

@ -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<RowRepresentable>? {
@ -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<Stat> = 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<Stat> = 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()
}
}
}

@ -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

@ -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<ComputableResult>
private lateinit var computableResults: RealmResults<ComputableResult>
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() {

@ -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)
}
}
}

@ -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<AggregationType, Report> = 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)
}

@ -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<AggregationType, Report> = 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()

@ -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)
}
}
}

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="M17,3L5,3c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,7l-4,-4zM12,19c-1.66,0 -3,-1.34 -3,-3s1.34,-3 3,-3 3,1.34 3,3 -1.34,3 -3,3zM15,9L5,9L5,5h10v4z"/>
</vector>

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/reportDetailsContainer">
</FrameLayout>

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/save"
android:icon="@drawable/ic_baseline_save"
android:title="@string/save"
android:iconTint="@color/white"
app:showAsAction="ifRoom" />
</menu>

@ -29,6 +29,7 @@
<string name="new_report_step_comparator">Select one or more comparison criteria</string>
<string name="new_report_step_filter">Select a filter or launch report</string>
<string name="launch_report">Launch Report</string>
<string name="progress">Progress</string>
<string name="address">Address</string>
<string name="suggestions">Naming suggestions</string>

Loading…
Cancel
Save