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 65fec8b0..2a7e7101 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 @@ -5,6 +5,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager +import com.google.android.material.tabs.TabLayout import io.realm.Realm import kotlinx.android.synthetic.main.fragment_calendar.* import kotlinx.android.synthetic.main.fragment_stats.recyclerView @@ -18,14 +19,21 @@ import net.pokeranalytics.android.calculus.ComputedResults import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.model.comparison.Comparator import net.pokeranalytics.android.model.comparison.combined +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.view.CalendarTabs +import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.ui.view.RowViewType +import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable +import net.pokeranalytics.android.util.extensions.shortDate import timber.log.Timber import java.util.* import kotlin.coroutines.CoroutineContext -class CalendarFragment : SessionObserverFragment(), CoroutineScope { +class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRepresentableDataSource, RowRepresentableDelegate { companion object { @@ -40,10 +48,13 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope { } } + private lateinit var calendarAdapter: RowRepresentableAdapter + override val coroutineContext: CoroutineContext get() = Dispatchers.Main + private var rows: ArrayList = ArrayList() private var sortedMonthlyReports: SortedMap = HashMap().toSortedMap() private var sortedYearlyReports: SortedMap = HashMap().toSortedMap() @@ -61,6 +72,10 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope { launchStatComputation() } + override fun adapterRows(): List? { + return rows + } + // Business @@ -68,7 +83,6 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope { * Init data */ private fun initData() { - } /** @@ -82,12 +96,35 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope { tabs.addTab(tab) } + tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { + override fun onTabSelected(tab: TabLayout.Tab) { + when(tab.position) { + 0 -> displayData(Stat.NETRESULT) + 1 -> displayData(Stat.HOURLY_RATE) + 2 -> displayData(Stat.NUMBER_OF_GAMES) + 3 -> displayData(Stat.WIN_RATIO) + 4 -> displayData(Stat.STANDARD_DEVIATION_HOURLY) + 5 -> displayData(Stat.AVERAGE) + 6 -> displayData(Stat.AVERAGE_DURATION) + 7 -> displayData(Stat.DURATION) + } + } + + override fun onTabUnselected(tab: TabLayout.Tab) { + } + + override fun onTabReselected(tab: TabLayout.Tab) { + } + + }) val viewManager = LinearLayoutManager(requireContext()) + calendarAdapter = RowRepresentableAdapter(this, this) + recyclerView.apply { setHasFixedSize(true) layoutManager = viewManager - //adapter = statsAdapter + adapter = calendarAdapter } } @@ -134,9 +171,6 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope { } montlyReports[calendar.time] = computedResults - - //val statValue = computedResults.computedStat(Stat.NETRESULT)?.value - //Timber.d("======> statValue: $statValue / Number of stats: ${computedResults.numberOfStats()}") } } } @@ -162,12 +196,6 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope { } yearlyReports[calendar.time] = computedResults - - /* - computedResults.computedStat(Stat.NETRESULT)?.let { computedStat -> - Timber.d("======> statValue: ${computedStat.value}") - } - */ } } } @@ -186,8 +214,8 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope { Timber.d("$it => ${sortedYearlyReports[it]?.computedStat(Stat.NETRESULT)?.value}") } - GlobalScope.launch(coroutineContext) { - displayData() + GlobalScope.launch(Dispatchers.Main) { + displayData(Stat.NETRESULT) } } @@ -197,9 +225,27 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope { /** * Display data */ - private fun displayData() { + private fun displayData(stat: Stat) { + + rows.clear() + + // Create yearly reports + sortedYearlyReports.keys.forEach { + Timber.d("$it => ${sortedYearlyReports[it]?.computedStat(Stat.NETRESULT)?.value}") + sortedYearlyReports[it]?.computedStat(stat)?.let { computedStat -> + rows.add( + CustomizableRowRepresentable( + customViewType = RowViewType.TITLE_VALUE_ARROW, + title = it.shortDate(), + value = computedStat.format(requireContext()).text + ) + ) + } + } + Timber.d("Rows: ${rows.size}") + calendarAdapter.notifyDataSetChanged() }