From c935df892fc73d2933bc7603e408497024e6f203 Mon Sep 17 00:00:00 2001 From: Laurent Date: Thu, 16 May 2019 16:17:34 +0200 Subject: [PATCH] Factorize and cleanup code --- .../android/calculus/Calculator.kt | 23 +++++++++++-- .../ui/activity/ComparisonReportActivity.kt | 32 +++++-------------- .../ui/activity/ProgressReportActivity.kt | 26 ++++++--------- .../ui/activity/TableReportActivity.kt | 11 +++++-- .../ui/activity/components/ReportActivity.kt | 23 ++++++------- .../ui/fragment/CalendarDetailsFragment.kt | 2 +- .../android/ui/fragment/ReportsFragment.kt | 24 ++------------ .../report/ComposableTableReportFragment.kt | 7 ++-- .../fragment/report/ProgressReportFragment.kt | 2 +- 9 files changed, 69 insertions(+), 81 deletions(-) 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 0d1960d9..4801aed6 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt @@ -12,6 +12,9 @@ import net.pokeranalytics.android.model.filter.filter import net.pokeranalytics.android.model.realm.ComputableResult import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.model.realm.SessionSet +import net.pokeranalytics.android.ui.activity.ComparisonReportActivity +import net.pokeranalytics.android.ui.activity.ProgressReportActivity +import net.pokeranalytics.android.ui.activity.TableReportActivity import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.util.extensions.startOfDay import java.util.* @@ -84,6 +87,19 @@ class Calculator { } } + val activityClass: Class<*> + get() { + return when (this) { + TABLE -> TableReportActivity::class.java + PROGRESS -> ProgressReportActivity::class.java + COMPARISON -> ComparisonReportActivity::class.java + else -> throw IllegalStateException("undefined activity for report display") +// MAP -> R.string.map +// POLYNOMIAL -> null + + } + } + } /** @@ -172,8 +188,11 @@ class Calculator { stats: List? = null ): Report { - val options = Options(evolutionValues = Options.EvolutionValues.STANDARD, aggregationType = aggregationType) - options.stats = listOf(stat) + val options = Options(display = Options.Display.PROGRESS, + evolutionValues = Options.EvolutionValues.STANDARD, + stats = listOf(stat), + aggregationType = aggregationType) + if (aggregationType == AggregationType.DURATION) { options.evolutionValues = Options.EvolutionValues.TIMED } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/ComparisonReportActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/ComparisonReportActivity.kt index d99ec3b4..8dda891b 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/ComparisonReportActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/ComparisonReportActivity.kt @@ -6,28 +6,8 @@ import net.pokeranalytics.android.ui.activity.components.ReportActivity import net.pokeranalytics.android.ui.fragment.report.ComparisonReportFragment - class ComparisonReportActivity : ReportActivity() { -// 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) { -// //parameters = GraphParameters(stat, group, report) -// this.report = report -// this.reportTitle = reportTitle -// val intent = Intent(context, ComparisonReportActivity::class.java) -// context.startActivity(intent) -// } -// -// } - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_report_details) @@ -39,14 +19,18 @@ class ComparisonReportActivity : ReportActivity() { */ private fun initUI() { - report?.let { + parameters?.let { + + val report = it.report + val title = it.title + val fragmentTransaction = supportFragmentManager.beginTransaction() - val reportDetailsFragment = ComparisonReportFragment.newInstance(it, reportTitle) + val reportDetailsFragment = ComparisonReportFragment.newInstance(report, title) fragmentTransaction.add(R.id.reportDetailsContainer, reportDetailsFragment) fragmentTransaction.commit() - - report = null } + parameters = null + } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/ProgressReportActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/ProgressReportActivity.kt index a1896f2d..d11984a4 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/ProgressReportActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/ProgressReportActivity.kt @@ -7,36 +7,29 @@ import androidx.fragment.app.Fragment import net.pokeranalytics.android.R 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.activity.components.ReportActivity +import net.pokeranalytics.android.ui.activity.components.ReportParameters import net.pokeranalytics.android.ui.fragment.report.ProgressReportFragment - -class StatisticsDetailsParameters(var stat: Stat, var report: Report, var title: String) - -class ProgressReportActivity : PokerAnalyticsActivity() { +class ProgressReportActivity : ReportActivity() { companion object { // Unparcel fails when setting a custom Parcelable object on Entry so we use a static reference to passe objects - private var parameters: StatisticsDetailsParameters? = null - private var displayAggregationChoices: Boolean = true /** * Default constructor */ - fun newInstance(context: Context, stat: Stat, report: Report, displayAggregationChoices: Boolean = true, title: String) { - this.parameters = StatisticsDetailsParameters(stat, report, title) - this.displayAggregationChoices = displayAggregationChoices + fun newInstance(context: Context, report: Report, title: String, stat: Stat? = null, displayAggregationChoices: Boolean = true) { + parameters = ReportParameters(report, title, stat, showAggregationChoices = displayAggregationChoices) val intent = Intent(context, ProgressReportActivity::class.java) context.startActivity(intent) } - fun newInstanceForResult(fragment: Fragment, stat: Stat, report: Report, displayAggregationChoices: Boolean = true, title: String) { - this.parameters = StatisticsDetailsParameters(stat, report, title) - this.displayAggregationChoices = displayAggregationChoices + fun newInstanceForResult(fragment: Fragment, report: Report, title: String, stat: Stat? = null, displayAggregationChoices: Boolean = true) { + parameters = ReportParameters(report, title, stat, showAggregationChoices = displayAggregationChoices) val intent = Intent(fragment.context, ProgressReportActivity::class.java) - fragment.startActivityForResult(intent, ReportActivity.DEFAULT_REQUEST_CODE) + fragment.startActivityForResult(intent, DEFAULT_REQUEST_CODE) } } @@ -58,8 +51,9 @@ class ProgressReportActivity : PokerAnalyticsActivity() { fragmentTransaction.commit() parameters?.let { - - statisticDetailsFragment.setData(it.stat, it.report, displayAggregationChoices, it.title) + val report = it.report + val stat = it.stat ?: report.options.stats.first() + statisticDetailsFragment.setData(report, stat, it.showAggregationChoices, it.title) parameters = null } 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 index 56351782..96bc4ddd 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/TableReportActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/TableReportActivity.kt @@ -18,13 +18,18 @@ class TableReportActivity : ReportActivity() { */ private fun initUI() { - report?.let { + parameters?.let { + + val report = it.report + val title = it.title + val fragmentTransaction = supportFragmentManager.beginTransaction() - val fragment = TableReportFragment.newInstance(it, reportTitle) + val fragment = TableReportFragment.newInstance(report, title) fragmentTransaction.add(R.id.reportDetailsContainer, fragment) fragmentTransaction.commit() } - report = null + parameters = null + } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/components/ReportActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/components/ReportActivity.kt index c2f30e16..6d2ea1be 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/components/ReportActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/components/ReportActivity.kt @@ -4,6 +4,9 @@ import android.content.Context import android.content.Intent import androidx.fragment.app.Fragment import net.pokeranalytics.android.calculus.Report +import net.pokeranalytics.android.calculus.Stat + +class ReportParameters(var report: Report, var title: String, var stat: Stat? = null, var showAggregationChoices: Boolean = true) abstract class ReportActivity : PokerAnalyticsActivity() { @@ -12,24 +15,22 @@ abstract class ReportActivity : PokerAnalyticsActivity() { const val DEFAULT_REQUEST_CODE = 999 // Unparcel fails when setting a custom Parcelable object on Entry so we use a static reference to passe objects - var report: Report? = null - var reportTitle: String = "" + var parameters: ReportParameters? = null /** * Default constructor */ - fun newInstance(context: Context, report: Report, reportTitle: String) { - this.report = report - this.reportTitle = reportTitle - val intent = Intent(context, this::class.java) + fun newInstance(context: Context, report: Report, reportTitle: String, stat: Stat? = null) { + val options = report.options + this.parameters = ReportParameters(report, reportTitle, stat) + val intent = Intent(context, options.display.activityClass) context.startActivity(intent) } - fun newInstanceForResult(fragment: Fragment, clazz: Class<*>, report: Report, reportTitle: String) { - this.report = report - this.reportTitle = reportTitle - - val intent = Intent(fragment.requireContext(), clazz) + fun newInstanceForResult(fragment: Fragment, report: Report, reportTitle: String, stat: Stat? = null) { + val options = report.options + this.parameters = ReportParameters(report, reportTitle, stat) + val intent = Intent(fragment.requireContext(), options.display.activityClass) fragment.startActivityForResult(intent, DEFAULT_REQUEST_CODE) } 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 525f9a7f..f7cd4acc 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 @@ -155,7 +155,7 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable if (report != null && stat != null) { val title = row.title ?: stat.localizedTitle(requireContext()) - ProgressReportActivity.newInstance(requireContext(), stat, report, false, title) + ProgressReportActivity.newInstance(requireContext(), report, title, stat, false) } } } 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 88f39c7f..dca332b3 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 @@ -22,7 +22,8 @@ import net.pokeranalytics.android.model.Criteria import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.combined import net.pokeranalytics.android.model.realm.ReportSetup -import net.pokeranalytics.android.ui.activity.* +import net.pokeranalytics.android.ui.activity.DataListActivity +import net.pokeranalytics.android.ui.activity.ReportCreationActivity import net.pokeranalytics.android.ui.activity.components.ReportActivity import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate @@ -193,26 +194,7 @@ class ReportsFragment : DeletableItemFragment(), StaticRowRepresentableDataSourc launch(Dispatchers.Main) { if (!isDetached) { hideLoader() - - when (options.display) { - Calculator.Options.Display.TABLE -> { - ReportActivity.newInstanceForResult(this@ReportsFragment, TableReportActivity::class.java, report, reportName) -// TableReportActivity.newInstanceForResult(this@ReportsFragment, report, reportName) -// TableReportActivity.newInstance(requireContext(), report, reportName) - } - Calculator.Options.Display.PROGRESS -> { - val stat = options.stats.first() - val title = stat.localizedTitle(requireContext()) - ProgressReportActivity.newInstanceForResult(this@ReportsFragment, stat, report, title = title) - } - Calculator.Options.Display.COMPARISON -> { -// ComparisonReportActivity.newInstance(requireContext(), report, reportName) - ReportActivity.newInstanceForResult(this@ReportsFragment, ComparisonReportActivity::class.java, report, reportName) - } - else -> { - Timber.d("Report type not handled at the moment") - } - } + ReportActivity.newInstanceForResult(this@ReportsFragment, report, reportName) } } realm.close() diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComposableTableReportFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComposableTableReportFragment.kt index 46f121f0..734ed4b2 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComposableTableReportFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComposableTableReportFragment.kt @@ -12,7 +12,7 @@ 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.ProgressReportActivity +import net.pokeranalytics.android.ui.activity.components.ReportActivity import net.pokeranalytics.android.ui.adapter.DisplayDescriptor import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate @@ -213,7 +213,10 @@ open class ComposableTableReportFragment : RealmFragment(), StaticRowRepresentab hideLoader() report?.let { val title = stat.localizedTitle(requireContext()) - ProgressReportActivity.newInstance(requireContext(), stat, it, title = title) + + ReportActivity.newInstance(requireContext(), it, title, stat) + +// ProgressReportActivity.newInstance(requireContext(), stat, it, title = title) } } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ProgressReportFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ProgressReportFragment.kt index 419a9262..b797d56a 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ProgressReportFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ProgressReportFragment.kt @@ -64,7 +64,7 @@ class ProgressReportFragment : AbstractReportFragment() { /** * Set data */ - fun setData(stat: Stat, report: Report, displayAggregationChoices: Boolean, title: String) { + fun setData(report: Report, stat: Stat, displayAggregationChoices: Boolean, title: String) { this.stat = stat this.setReport(report) this.displayAggregationChoices = displayAggregationChoices