Use ViewModel for CalendarDetails + fixes tab selection bug

od
Laurent 6 years ago
parent 3f75898cc7
commit 1802dea89f
  1. 19
      app/src/main/java/net/pokeranalytics/android/ui/activity/CalendarDetailsActivity.kt
  2. 53
      app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarDetailsFragment.kt
  3. 24
      app/src/main/java/net/pokeranalytics/android/ui/viewmodel/CalendarDetailsViewModel.kt

@ -3,16 +3,20 @@ package net.pokeranalytics.android.ui.activity
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import kotlinx.android.synthetic.main.activity_calendar_details.* import androidx.lifecycle.ViewModelProviders
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.ComputedResults import net.pokeranalytics.android.calculus.ComputedResults
import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.fragment.CalendarDetailsFragment import net.pokeranalytics.android.ui.viewmodel.CalendarDetailsViewModel
class CalendarDetailsActivity : PokerAnalyticsActivity() { class CalendarDetailsActivity : PokerAnalyticsActivity() {
val viewModel: CalendarDetailsViewModel by lazy {
ViewModelProviders.of(this).get(CalendarDetailsViewModel::class.java)
}
companion object { companion object {
var computedResults: ComputedResults? = null var computedResults: ComputedResults? = null
@ -34,17 +38,18 @@ class CalendarDetailsActivity : PokerAnalyticsActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
initData()
setContentView(R.layout.activity_calendar_details) setContentView(R.layout.activity_calendar_details)
initUI()
} }
/** /**
* Init UI * Init Data
*/ */
private fun initUI() { private fun initData() {
val calendarDetailsFragment = calendarDetailsFragment as CalendarDetailsFragment this.viewModel.computedResults = computedResults
calendarDetailsFragment.setData(computedResults, sessionTypeCondition, detailsTitle) this.viewModel.sessionTypeCondition = sessionTypeCondition
this.viewModel.detailsTitle = detailsTitle
} }

@ -7,6 +7,7 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.github.mikephil.charting.data.BarDataSet import com.github.mikephil.charting.data.BarDataSet
import com.github.mikephil.charting.data.LineDataSet import com.github.mikephil.charting.data.LineDataSet
@ -18,7 +19,6 @@ import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.Calculator import net.pokeranalytics.android.calculus.Calculator
import net.pokeranalytics.android.calculus.ComputedResults
import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.filter.Query import net.pokeranalytics.android.model.filter.Query
import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.filter.QueryCondition
@ -32,12 +32,17 @@ import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.GraphRow import net.pokeranalytics.android.ui.view.rowrepresentable.GraphRow
import net.pokeranalytics.android.ui.view.rowrepresentable.StatDoubleRow import net.pokeranalytics.android.ui.view.rowrepresentable.StatDoubleRow
import net.pokeranalytics.android.ui.viewmodel.CalendarDetailsViewModel
import timber.log.Timber import timber.log.Timber
import java.util.* import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate { class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate {
val viewModel: CalendarDetailsViewModel by lazy {
ViewModelProviders.of(requireActivity()).get(CalendarDetailsViewModel::class.java)
}
companion object { companion object {
fun newInstance(context: Context) { fun newInstance(context: Context) {
val intent = Intent(context, CalendarDetailsFragment::class.java) val intent = Intent(context, CalendarDetailsFragment::class.java)
@ -47,24 +52,21 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable
private lateinit var statsAdapter: RowRepresentableAdapter private lateinit var statsAdapter: RowRepresentableAdapter
private var title: String? = ""
private var computedResults: ComputedResults? = null
private var sessionTypeCondition: QueryCondition? = null
private var rowRepresentables: ArrayList<RowRepresentable> = ArrayList() private var rowRepresentables: ArrayList<RowRepresentable> = ArrayList()
/** /**
* Set data * Set data
*/ */
fun setData(computedResults: ComputedResults?, sessionTypeCondition: QueryCondition?, title: String?) { // fun setData(computedResults: ComputedResults?, sessionTypeCondition: QueryCondition?, title: String?) {
//
this.computedResults = computedResults // this.computedResults = computedResults
this.sessionTypeCondition = sessionTypeCondition // this.sessionTypeCondition = sessionTypeCondition
this.title = title // this.title = title
//
displayData() // displayData()
launchStatComputation() // launchStatComputation()
//
} // }
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_calendar_details, container, false) return inflater.inflate(R.layout.fragment_calendar_details, container, false)
@ -73,6 +75,7 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
initUI() initUI()
launchStatComputation()
} }
/** /**
@ -80,10 +83,12 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable
*/ */
private fun initUI() { private fun initUI() {
setToolbarTitle(this.viewModel.detailsTitle)
setDisplayHomeAsUpEnabled(true) setDisplayHomeAsUpEnabled(true)
var tabIndexToSelect = 0 var tabIndexToSelect = 0
sessionTypeCondition?.let { this.viewModel.sessionTypeCondition?.let {
tabIndexToSelect = when (it) { tabIndexToSelect = when (it) {
QueryCondition.IsCash -> 1 QueryCondition.IsCash -> 1
QueryCondition.IsTournament -> 2 QueryCondition.IsTournament -> 2
@ -96,9 +101,9 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable
tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) { override fun onTabSelected(tab: TabLayout.Tab) {
when (tab.position) { when (tab.position) {
0 -> sessionTypeCondition = null 0 -> viewModel.sessionTypeCondition = null
1 -> sessionTypeCondition = QueryCondition.IsCash 1 -> viewModel.sessionTypeCondition = QueryCondition.IsCash
2 -> sessionTypeCondition = QueryCondition.IsTournament 2 -> viewModel.sessionTypeCondition = QueryCondition.IsTournament
} }
launchStatComputation() launchStatComputation()
} }
@ -123,13 +128,6 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable
} }
/**
* Display data
*/
private fun displayData() {
setToolbarTitle(title)
}
// StaticRowRepresentableDataSource // StaticRowRepresentableDataSource
override fun adapterRows(): List<RowRepresentable>? { override fun adapterRows(): List<RowRepresentable>? {
@ -168,7 +166,7 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable
progressBar.animate().alpha(1f).start() progressBar.animate().alpha(1f).start()
recyclerView.animate().alpha(0f).start() recyclerView.animate().alpha(0f).start()
computedResults?.let { computedResults -> this.viewModel.computedResults?.let { computedResults ->
GlobalScope.launch { GlobalScope.launch {
@ -179,7 +177,7 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable
val query = Query().merge(computedResults.group.query) val query = Query().merge(computedResults.group.query)
query.remove(QueryCondition.IsCash) query.remove(QueryCondition.IsCash)
query.remove(QueryCondition.IsTournament) query.remove(QueryCondition.IsTournament)
when (sessionTypeCondition) { when (viewModel.sessionTypeCondition) {
QueryCondition.IsCash -> query.add(QueryCondition.IsCash) QueryCondition.IsCash -> query.add(QueryCondition.IsCash)
QueryCondition.IsTournament -> query.add(QueryCondition.IsTournament) QueryCondition.IsTournament -> query.add(QueryCondition.IsTournament)
} }
@ -222,7 +220,6 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable
rowRepresentables.add(StatDoubleRow(it.computedStat(Stat.DAYS_PLAYED), it.computedStat(Stat.MAXIMUM_DURATION))) rowRepresentables.add(StatDoubleRow(it.computedStat(Stat.DAYS_PLAYED), it.computedStat(Stat.MAXIMUM_DURATION)))
} }
launch(Dispatchers.Main) { launch(Dispatchers.Main) {
statsAdapter.notifyDataSetChanged() statsAdapter.notifyDataSetChanged()
progressBar.animate().cancel() progressBar.animate().cancel()

@ -0,0 +1,24 @@
package net.pokeranalytics.android.ui.viewmodel
import androidx.lifecycle.ViewModel
import net.pokeranalytics.android.calculus.ComputedResults
import net.pokeranalytics.android.model.filter.QueryCondition
class CalendarDetailsViewModel : ViewModel() {
/***
* The computed results to display
*/
var computedResults: ComputedResults? = null
/***
* The session type selection: All, CG or Tournament
*/
var sessionTypeCondition: QueryCondition? = null
/***
* The title
*/
var detailsTitle: String? = null
}
Loading…
Cancel
Save