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 f1f0577a..70ab7fec 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 @@ -20,7 +20,7 @@ class ComparisonReportActivity : ReportActivity() { private fun initUI() { val fragmentTransaction = supportFragmentManager.beginTransaction() - val reportDetailsFragment = ComparisonReportFragment.newInstance() + val reportDetailsFragment = ComparisonReportFragment.newInstance(this.viewModelFactory) fragmentTransaction.add(R.id.reportDetailsContainer, reportDetailsFragment) fragmentTransaction.commit() 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 1dd47196..c1892652 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 @@ -46,7 +46,7 @@ class ProgressReportActivity : ReportActivity() { */ private fun initUI() { - val progressFragment = ProgressReportFragment() + val progressFragment = ProgressReportFragment.newInstance(this.viewModelFactory) val fragmentTransaction = supportFragmentManager.beginTransaction() fragmentTransaction.add(R.id.statisticDetailsContainer, progressFragment) fragmentTransaction.commit() 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 27b9d08d..41ec525b 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,16 +18,8 @@ class TableReportActivity : ReportActivity() { */ private fun initUI() { -// parameters?.let { -// -// val report = it.report -// val title = it.title -// -// } -// parameters = null - val fragmentTransaction = supportFragmentManager.beginTransaction() - val fragment = TableReportFragment.newInstance() + val fragment = TableReportFragment.newInstance(this.viewModelFactory) fragmentTransaction.add(R.id.reportDetailsContainer, fragment) fragmentTransaction.commit() } 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 83eabf2f..5d988f95 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 @@ -5,17 +5,27 @@ import android.content.Intent import android.os.Bundle import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProviders -import com.crashlytics.android.Crashlytics import net.pokeranalytics.android.calculus.Report import net.pokeranalytics.android.calculus.Stat +import net.pokeranalytics.android.exceptions.PAIllegalStateException import net.pokeranalytics.android.ui.viewmodel.ReportViewModel +import net.pokeranalytics.android.ui.viewmodel.ReportViewModelFactory class ReportParameters(var report: Report, var title: String, var stat: Stat? = null, var showAggregationChoices: Boolean = true) abstract class ReportActivity : PokerAnalyticsActivity() { + protected val viewModelFactory: ReportViewModelFactory by lazy { + ReportViewModel.parameters?.let { + val stat = it.stat ?: it.report.options.stats.first() + ReportViewModelFactory(it.report, stat, it.title, it.showAggregationChoices) + } ?: run { + throw PAIllegalStateException("null report parameters") + } + } + protected val viewModel: ReportViewModel by lazy { - ViewModelProviders.of(this).get(ReportViewModel::class.java) + ViewModelProviders.of(this, viewModelFactory).get(ReportViewModel::class.java) } companion object { @@ -43,19 +53,24 @@ abstract class ReportActivity : PokerAnalyticsActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - this.initViewModelWithParameters() +// this.initViewModelWithParameters() + } + + override fun onStart() { + super.onStart() + ReportViewModel.resetParameters() } private fun initViewModelWithParameters() { ReportViewModel.parameters?.let { - this.viewModel.report = it.report - this.viewModel.title = it.title - val stat = it.stat ?: it.report.options.stats.first() - this.viewModel.stat = stat - this.viewModel.showAggregationChoices = it.showAggregationChoices +// this.viewModel.report = it.report +// this.viewModel.title = it.title +// val stat = it.stat ?: it.report.options.stats.first() +// this.viewModel.stat = stat +// this.viewModel.showAggregationChoices = it.showAggregationChoices - Crashlytics.log("initViewModelWithParameters, stat = ${stat.uniqueIdentifier}") +// Crashlytics.log("initViewModelWithParameters, stat = ${stat.uniqueIdentifier}") ReportViewModel.resetParameters() } 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 index 378e628b..e20baed9 100644 --- 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 @@ -16,23 +16,28 @@ import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.realm.ReportSetup import net.pokeranalytics.android.ui.fragment.data.DataManagerFragment import net.pokeranalytics.android.ui.viewmodel.ReportViewModel +import net.pokeranalytics.android.ui.viewmodel.ReportViewModelFactory import net.pokeranalytics.android.util.extensions.findById abstract class AbstractReportFragment : DataManagerFragment() { + protected var viewModelFactory: ReportViewModelFactory? = null + protected val viewModel: ReportViewModel by lazy { - ViewModelProviders.of(requireActivity()).get(ReportViewModel::class.java) + this.viewModelFactory?.let { + ViewModelProviders.of(requireActivity(), it).get(ReportViewModel::class.java) + } ?: throw PAIllegalStateException("no factory") } val selectedReport: Report get() { - return this.viewModel.report!! + return this.viewModel.report } val stat: Stat get() { - return this.viewModel.stat!! + return this.viewModel.stat } override fun onCreate(savedInstanceState: Bundle?) { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComparisonReportFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComparisonReportFragment.kt index 0f77140c..666278ad 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComparisonReportFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComparisonReportFragment.kt @@ -8,13 +8,15 @@ import com.google.android.material.tabs.TabLayout import kotlinx.android.synthetic.main.fragment_report_details.* import net.pokeranalytics.android.R import net.pokeranalytics.android.ui.adapter.ReportPagerAdapter +import net.pokeranalytics.android.ui.viewmodel.ReportViewModelFactory class ComparisonReportFragment : AbstractReportFragment() { companion object { - fun newInstance(): ComparisonReportFragment { + fun newInstance(viewModelFactory: ReportViewModelFactory): ComparisonReportFragment { val fragment = ComparisonReportFragment() + fragment.viewModelFactory = viewModelFactory val bundle = Bundle() fragment.arguments = bundle return fragment 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 c0dc6bea..d8ce4eba 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 @@ -26,6 +26,7 @@ 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.GraphFragment +import net.pokeranalytics.android.ui.viewmodel.ReportViewModelFactory import timber.log.Timber import java.util.* @@ -37,8 +38,9 @@ class ProgressReportFragment : AbstractReportFragment() { /** * Creates new instance */ - fun newInstance(): ProgressReportFragment { + fun newInstance(viewModelFactory: ReportViewModelFactory): ProgressReportFragment { val fragment = ProgressReportFragment() + fragment.viewModelFactory = viewModelFactory val bundle = Bundle() fragment.arguments = bundle return fragment diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/TableReportFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/TableReportFragment.kt index 5e042055..9f097603 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/TableReportFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/TableReportFragment.kt @@ -5,6 +5,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import net.pokeranalytics.android.R +import net.pokeranalytics.android.ui.viewmodel.ReportViewModelFactory class TableReportFragment : AbstractReportFragment() { @@ -12,8 +13,9 @@ class TableReportFragment : AbstractReportFragment() { companion object { - fun newInstance(): TableReportFragment { + fun newInstance(viewModelFactory: ReportViewModelFactory): TableReportFragment { val fragment = TableReportFragment() + fragment.viewModelFactory = viewModelFactory // fragment.reportTitle = title // fragment.setReport(report) val bundle = Bundle() diff --git a/app/src/main/java/net/pokeranalytics/android/ui/viewmodel/ReportViewModel.kt b/app/src/main/java/net/pokeranalytics/android/ui/viewmodel/ReportViewModel.kt index aeb71c03..9b9a067c 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/viewmodel/ReportViewModel.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/viewmodel/ReportViewModel.kt @@ -1,11 +1,30 @@ package net.pokeranalytics.android.ui.viewmodel import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider import net.pokeranalytics.android.calculus.Report import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.ui.activity.components.ReportParameters -class ReportViewModel : ViewModel() { +class ReportViewModelFactory(val report: Report, + val stat: Stat, + val title: String, + val showAggregationChoices: Boolean = true) : ViewModelProvider.Factory { + override fun create(modelClass: Class): T { + return ReportViewModel(report, stat, title, showAggregationChoices) as T + } +} + +class ReportViewModel( + var report: Report, + var stat: Stat, + var title: String, + var showAggregationChoices: Boolean = true) : ViewModel() { + +// var report: Report? = null +// var title: String = "" +// var stat: Stat? = null +// var showAggregationChoices: Boolean = true companion object { @@ -27,9 +46,5 @@ class ReportViewModel : ViewModel() { } - var report: Report? = null - var title: String = "" - var stat: Stat? = null - var showAggregationChoices: Boolean = true } \ No newline at end of file