From 842d98279e7c238a12cb8f2b7e74575f578e61b4 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Tue, 16 Apr 2019 09:36:50 +0200 Subject: [PATCH 1/8] Add new date extensions --- .../android/util/extensions/DateExtension.kt | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/app/src/main/java/net/pokeranalytics/android/util/extensions/DateExtension.kt b/app/src/main/java/net/pokeranalytics/android/util/extensions/DateExtension.kt index 6a5a6d10..b60ba293 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/extensions/DateExtension.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/extensions/DateExtension.kt @@ -79,6 +79,14 @@ fun Date.getDayNumber() : String { fun Date.getShortDayName() : String { return SimpleDateFormat("EEE", Locale.getDefault()).format(this) } +// Return the month of the date +fun Date.getDateMonth(): String { + return SimpleDateFormat("MMMM", Locale.getDefault()).format(this).capitalize() +} +// Return the year of the date +fun Date.getDateYear(): String { + return SimpleDateFormat("yyyy", Locale.getDefault()).format(this).capitalize() +} // Return the month & year of the date fun Date.getMonthAndYear(): String { return SimpleDateFormat("MMMM yyyy", Locale.getDefault()).format(this).capitalize() @@ -117,4 +125,20 @@ fun Date.endOfDay() : Date { calendar.set(Calendar.SECOND, 59) calendar.set(Calendar.MILLISECOND, 999) return calendar.time +} + +// Return the date of the beginning of the current month +fun Date.startOfMonth() : Date { + val calendar = Calendar.getInstance() + calendar.time = this.startOfDay() + calendar.set(Calendar.DAY_OF_MONTH, 1) + return calendar.time +} + +// Return the date of the beginning of the current year +fun Date.startOfYear() : Date { + val calendar = Calendar.getInstance() + calendar.time = this.startOfMonth() + calendar.set(Calendar.MONTH, 0) + return calendar.time } \ No newline at end of file From de5045585898486cecbf46c8d0036d16b39d4600 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Tue, 16 Apr 2019 09:36:56 +0200 Subject: [PATCH 2/8] Improve Calendar Fragment --- .../android/ui/fragment/CalendarFragment.kt | 109 ++++++++++++------ 1 file changed, 72 insertions(+), 37 deletions(-) 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 2a7e7101..10a10830 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 @@ -27,7 +27,10 @@ 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 net.pokeranalytics.android.util.extensions.getDateMonth +import net.pokeranalytics.android.util.extensions.getDateYear +import net.pokeranalytics.android.util.extensions.startOfMonth +import net.pokeranalytics.android.util.extensions.startOfYear import timber.log.Timber import java.util.* import kotlin.coroutines.CoroutineContext @@ -35,6 +38,10 @@ import kotlin.coroutines.CoroutineContext class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRepresentableDataSource, RowRepresentableDelegate { + enum class TimeFilter { + MONTH, YEAR + } + companion object { /** @@ -57,6 +64,7 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep private var rows: ArrayList = ArrayList() private var sortedMonthlyReports: SortedMap = HashMap().toSortedMap() private var sortedYearlyReports: SortedMap = HashMap().toSortedMap() + private var currentTimeFilter = TimeFilter.YEAR // Life Cycle @@ -98,7 +106,7 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { override fun onTabSelected(tab: TabLayout.Tab) { - when(tab.position) { + when (tab.position) { 0 -> displayData(Stat.NETRESULT) 1 -> displayData(Stat.HOURLY_RATE) 2 -> displayData(Stat.NUMBER_OF_GAMES) @@ -137,29 +145,20 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep GlobalScope.launch { val calendar = Calendar.getInstance() - calendar.set(Calendar.DAY_OF_MONTH, 1) - calendar.set(Calendar.HOUR_OF_DAY, 0) - calendar.set(Calendar.MINUTE, 0) - calendar.set(Calendar.SECOND, 0) - calendar.set(Calendar.MILLISECOND, 0) + calendar.time = Date().startOfMonth() val startDate = Date() val realm = Realm.getDefaultInstance() - val montlyReports: HashMap = HashMap() + val monthlyReports: HashMap = HashMap() val yearlyReports: HashMap = HashMap() - // Compute data per YEAR x MONTH + // Compute data per YEAR and MONTH val conditions = listOf(Comparator.YEAR, Comparator.MONTH_OF_YEAR).combined() - conditions.forEach { - val report = Calculator.computeStatsWithComparators(realm, conditions = it, options = Calculator.Options()) - //Timber.d("======> report results: ${report.results.size}") report.results.forEach { computedResults -> - //Timber.d("======> computedResults empty: ${computedResults.isEmpty}") if (!computedResults.isEmpty) { - // Set date data it.forEach { condition -> condition.valueMap?.get("year")?.let { year -> @@ -170,40 +169,34 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep } } - montlyReports[calendar.time] = computedResults + monthlyReports[calendar.time] = computedResults } } } + calendar.time = Date().startOfYear() + // Compute data per YEAR val yearConditions = Comparator.YEAR.queryConditions - - // compute at index yearConditions.forEach { condition -> - - val report = Calculator.computeStatsWithComparators(realm, conditions = listOf(condition), options = Calculator.Options()) - //Timber.d("======> report results: ${report.results.size}") report.results.forEach { computedResults -> - //Timber.d("======> computedResults empty: ${computedResults.isEmpty}") if (!computedResults.isEmpty) { - - calendar.set(Calendar.MONTH, 0) - // Set date data condition.valueMap?.get("year")?.let { year -> calendar.set(Calendar.YEAR, year as Int) } - yearlyReports[calendar.time] = computedResults } } } + // Logs + Timber.d("Computation: ${System.currentTimeMillis() - startDate.time}ms") Timber.d("========== YEAR x MONTH") - sortedMonthlyReports = montlyReports.toSortedMap(compareByDescending { it }) + sortedMonthlyReports = monthlyReports.toSortedMap(compareByDescending { it }) sortedMonthlyReports.keys.forEach { Timber.d("$it => ${sortedMonthlyReports[it]?.computedStat(Stat.NETRESULT)?.value}") } @@ -227,22 +220,64 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep */ private fun displayData(stat: Stat) { + val startDate = Date() + 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("currentTimeFilter: $currentTimeFilter") + + currentTimeFilter = TimeFilter.MONTH + + when (currentTimeFilter) { + + // Create monthly reports + TimeFilter.MONTH -> { + + val years: ArrayList = ArrayList() + + sortedMonthlyReports.keys.forEach { date -> + if (!years.contains(date.getDateYear())) { + years.add(date.getDateYear()) + rows.add( + CustomizableRowRepresentable( + customViewType = RowViewType.HEADER_TITLE, + title = date.getDateYear() + ) + ) + } + + sortedMonthlyReports[date]?.computedStat(stat)?.let { computedStat -> + rows.add( + CustomizableRowRepresentable( + customViewType = RowViewType.TITLE_VALUE_ARROW, + title = date.getDateMonth(), + computedStat = computedStat + ) + ) + } + } } + + // Create yearly reports + TimeFilter.YEAR -> { + + sortedYearlyReports.keys.forEach { date -> + Timber.d("$date => ${sortedYearlyReports[date]?.computedStat(Stat.NETRESULT)?.value}") + sortedYearlyReports[date]?.computedStat(stat)?.let { computedStat -> + rows.add( + CustomizableRowRepresentable( + customViewType = RowViewType.TITLE_VALUE_ARROW, + title = date.getDateYear(), + computedStat = computedStat + ) + ) + } + } + } + } + Timber.d("Display data: ${System.currentTimeMillis() - startDate.time}ms") Timber.d("Rows: ${rows.size}") calendarAdapter.notifyDataSetChanged() From 2c17e2ebf075fbb42258f7db272e560a7ff831a1 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Tue, 16 Apr 2019 09:49:34 +0200 Subject: [PATCH 3/8] Update Strings --- app/src/main/res/values-es/strings.xml | 2 +- app/src/main/res/values-it/strings.xml | 2 +- app/src/main/res/values-pt/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index fde8c339..72f518ef 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -281,7 +281,7 @@ m Menos Modificar… - mes + Mes Mes del año meses más infos diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index bc2ca2d0..b435206f 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -280,7 +280,7 @@ min Meno Modifica… - mese + Mese Mese dell\'anno mesi altre info diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index de814433..b00b78df 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -280,7 +280,7 @@ mín. Menos Modificar… - mês + Mês Mês do ano meses mais informações diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3e35818b..11fadf0a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -307,7 +307,7 @@ mins Minus Modify… - month + Month Month of the year months more infos From 0d27a20010245920aec05a84ba75730fc897c730 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Tue, 16 Apr 2019 11:20:11 +0200 Subject: [PATCH 4/8] Update Strings --- app/src/main/res/values-fr/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index e1b0c1f1..f4c9a0be 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -302,7 +302,7 @@ mins Moins Modifier… - mois + Mois Mois de l\'année mois plus d\'infos From 1a3f3fe966724004208b5bdee61fdf4c100fff3e Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Tue, 16 Apr 2019 11:20:21 +0200 Subject: [PATCH 5/8] Add filters --- app/src/main/res/layout/fragment_calendar.xml | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/app/src/main/res/layout/fragment_calendar.xml b/app/src/main/res/layout/fragment_calendar.xml index 50adf8b2..42d5029a 100644 --- a/app/src/main/res/layout/fragment_calendar.xml +++ b/app/src/main/res/layout/fragment_calendar.xml @@ -14,6 +14,57 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + + + + + + + + Date: Tue, 16 Apr 2019 11:20:59 +0200 Subject: [PATCH 6/8] Add cash & tournament --- .../net/pokeranalytics/android/model/comparison/Comparator.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/java/net/pokeranalytics/android/model/comparison/Comparator.kt b/app/src/main/java/net/pokeranalytics/android/model/comparison/Comparator.kt index ab2a614c..5b570fd8 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/comparison/Comparator.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/comparison/Comparator.kt @@ -17,6 +17,8 @@ enum class Comparator { MONTH, YEAR, BLIND, + CASH, + TOURNAMENT, ; val queryConditions: List @@ -38,6 +40,8 @@ enum class Comparator { realm.close() years } + CASH -> listOf(QueryCondition.CASH) + TOURNAMENT -> listOf(QueryCondition.TOURNAMENT) else -> throw PokerAnalyticsException.QueryTypeUnhandled } } From 56d73c4974a645b202ae6dabc738e696e51e50ed Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Tue, 16 Apr 2019 11:21:30 +0200 Subject: [PATCH 7/8] Update Calendar UI & data management --- .../android/ui/fragment/CalendarFragment.kt | 134 ++++++++++++++---- 1 file changed, 103 insertions(+), 31 deletions(-) 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 10a10830..c1356ac8 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 @@ -38,7 +38,11 @@ import kotlin.coroutines.CoroutineContext class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRepresentableDataSource, RowRepresentableDelegate { - enum class TimeFilter { + private enum class SessionType { + ALL, CASH, TOURNAMENT + } + + private enum class TimeFilter { MONTH, YEAR } @@ -64,7 +68,10 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep private var rows: ArrayList = ArrayList() private var sortedMonthlyReports: SortedMap = HashMap().toSortedMap() private var sortedYearlyReports: SortedMap = HashMap().toSortedMap() - private var currentTimeFilter = TimeFilter.YEAR + + private var currentSessionType = SessionType.ALL + private var currentTimeFilter = TimeFilter.MONTH + private var currentStat = Stat.NETRESULT // Life Cycle @@ -107,15 +114,16 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep 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) + 0 -> currentStat = Stat.NETRESULT + 1 -> currentStat = Stat.HOURLY_RATE + 2 -> currentStat = Stat.NUMBER_OF_GAMES + 3 -> currentStat = Stat.WIN_RATIO + 4 -> currentStat = Stat.STANDARD_DEVIATION_HOURLY + 5 -> currentStat = Stat.AVERAGE + 6 -> currentStat = Stat.AVERAGE_DURATION + 7 -> currentStat = Stat.DURATION } + displayData() } override fun onTabUnselected(tab: TabLayout.Tab) { @@ -123,8 +131,61 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep override fun onTabReselected(tab: TabLayout.Tab) { } - }) + + // Manage session type filter + filterSessionAll.setOnCheckedChangeListener { buttonView, isChecked -> + if (isChecked) { + currentSessionType = SessionType.ALL + filterSessionCash.isChecked = false + filterSessionTournament.isChecked = false + launchStatComputation() + } else if (currentSessionType == SessionType.ALL) { + filterSessionAll.isChecked = true + } + } + filterSessionCash.setOnCheckedChangeListener { buttonView, isChecked -> + if (isChecked) { + currentSessionType = SessionType.CASH + filterSessionAll.isChecked = false + filterSessionTournament.isChecked = false + launchStatComputation() + } else if (currentSessionType == SessionType.CASH) { + filterSessionCash.isChecked = true + } + } + filterSessionTournament.setOnCheckedChangeListener { buttonView, isChecked -> + if (isChecked) { + currentSessionType = SessionType.TOURNAMENT + filterSessionAll.isChecked = false + filterSessionCash.isChecked = false + launchStatComputation() + } else if (currentSessionType == SessionType.TOURNAMENT) { + filterSessionTournament.isChecked = true + } + } + + // Manage time filter + filterTimeMonth.setOnCheckedChangeListener { buttonView, isChecked -> + if (isChecked) { + currentTimeFilter = TimeFilter.MONTH + filterTimeYear.isChecked = false + displayData() + } else if (currentTimeFilter == TimeFilter.MONTH) { + filterTimeMonth.isChecked = true + } + + } + filterTimeYear.setOnCheckedChangeListener { buttonView, isChecked -> + if (isChecked) { + currentTimeFilter = TimeFilter.YEAR + filterTimeMonth.isChecked = false + displayData() + } else if (currentTimeFilter == TimeFilter.YEAR) { + filterTimeYear.isChecked = true + } + } + val viewManager = LinearLayoutManager(requireContext()) calendarAdapter = RowRepresentableAdapter(this, this) @@ -154,13 +215,19 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep val yearlyReports: HashMap = HashMap() // Compute data per YEAR and MONTH - val conditions = listOf(Comparator.YEAR, Comparator.MONTH_OF_YEAR).combined() - conditions.forEach { - val report = Calculator.computeStatsWithComparators(realm, conditions = it, options = Calculator.Options()) + + val monthConditions = when(currentSessionType) { + SessionType.ALL -> listOf(Comparator.YEAR, Comparator.MONTH_OF_YEAR).combined() + SessionType.CASH -> listOf(Comparator.YEAR, Comparator.MONTH_OF_YEAR, Comparator.CASH).combined() + SessionType.TOURNAMENT -> listOf(Comparator.YEAR, Comparator.MONTH_OF_YEAR, Comparator.TOURNAMENT).combined() + } + + monthConditions.forEach {conditions -> + val report = Calculator.computeStatsWithComparators(realm, conditions = conditions, options = Calculator.Options()) report.results.forEach { computedResults -> if (!computedResults.isEmpty) { // Set date data - it.forEach { condition -> + conditions.forEach { condition -> condition.valueMap?.get("year")?.let { year -> calendar.set(Calendar.YEAR, year as Int) } @@ -177,38 +244,47 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep calendar.time = Date().startOfYear() // Compute data per YEAR - val yearConditions = Comparator.YEAR.queryConditions - yearConditions.forEach { condition -> - val report = Calculator.computeStatsWithComparators(realm, conditions = listOf(condition), options = Calculator.Options()) + val yearConditions = when(currentSessionType) { + SessionType.ALL -> listOf(Comparator.YEAR).combined() + SessionType.CASH -> listOf(Comparator.YEAR, Comparator.CASH).combined() + SessionType.TOURNAMENT -> listOf(Comparator.YEAR, Comparator.TOURNAMENT).combined() + } + + yearConditions.forEach { conditions -> + val report = Calculator.computeStatsWithComparators(realm, conditions = conditions, options = Calculator.Options()) report.results.forEach { computedResults -> if (!computedResults.isEmpty) { // Set date data - condition.valueMap?.get("year")?.let { year -> - calendar.set(Calendar.YEAR, year as Int) + conditions.forEach { condition -> + condition.valueMap?.get("year")?.let { year -> + calendar.set(Calendar.YEAR, year as Int) + } } yearlyReports[calendar.time] = computedResults } } } - // Logs + sortedMonthlyReports = monthlyReports.toSortedMap(compareByDescending { it }) + sortedYearlyReports = yearlyReports.toSortedMap(compareByDescending { it }) + // Logs + /* Timber.d("Computation: ${System.currentTimeMillis() - startDate.time}ms") Timber.d("========== YEAR x MONTH") - sortedMonthlyReports = monthlyReports.toSortedMap(compareByDescending { it }) sortedMonthlyReports.keys.forEach { Timber.d("$it => ${sortedMonthlyReports[it]?.computedStat(Stat.NETRESULT)?.value}") } Timber.d("========== YEARLY") - sortedYearlyReports = yearlyReports.toSortedMap(compareByDescending { it }) sortedYearlyReports.keys.forEach { Timber.d("$it => ${sortedYearlyReports[it]?.computedStat(Stat.NETRESULT)?.value}") } + */ GlobalScope.launch(Dispatchers.Main) { - displayData(Stat.NETRESULT) + displayData() } } @@ -218,16 +294,12 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep /** * Display data */ - private fun displayData(stat: Stat) { + private fun displayData() { val startDate = Date() rows.clear() - Timber.d("currentTimeFilter: $currentTimeFilter") - - currentTimeFilter = TimeFilter.MONTH - when (currentTimeFilter) { // Create monthly reports @@ -246,7 +318,7 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep ) } - sortedMonthlyReports[date]?.computedStat(stat)?.let { computedStat -> + sortedMonthlyReports[date]?.computedStat(currentStat)?.let { computedStat -> rows.add( CustomizableRowRepresentable( customViewType = RowViewType.TITLE_VALUE_ARROW, @@ -263,7 +335,7 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep sortedYearlyReports.keys.forEach { date -> Timber.d("$date => ${sortedYearlyReports[date]?.computedStat(Stat.NETRESULT)?.value}") - sortedYearlyReports[date]?.computedStat(stat)?.let { computedStat -> + sortedYearlyReports[date]?.computedStat(currentStat)?.let { computedStat -> rows.add( CustomizableRowRepresentable( customViewType = RowViewType.TITLE_VALUE_ARROW, From 405ac674d40bcc74ceb683dae7f307f7fe01e4a8 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Tue, 16 Apr 2019 11:28:21 +0200 Subject: [PATCH 8/8] Add selectable --- .../android/ui/fragment/CalendarFragment.kt | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) 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 c1356ac8..40056063 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 @@ -91,6 +91,10 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep return rows } + override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { + //toast("Open $row") + } + // Business @@ -268,10 +272,10 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep sortedMonthlyReports = monthlyReports.toSortedMap(compareByDescending { it }) sortedYearlyReports = yearlyReports.toSortedMap(compareByDescending { it }) - // Logs - /* Timber.d("Computation: ${System.currentTimeMillis() - startDate.time}ms") + // Logs + /* Timber.d("========== YEAR x MONTH") sortedMonthlyReports.keys.forEach { Timber.d("$it => ${sortedMonthlyReports[it]?.computedStat(Stat.NETRESULT)?.value}") @@ -286,9 +290,7 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep GlobalScope.launch(Dispatchers.Main) { displayData() } - } - } /** @@ -304,9 +306,7 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep // Create monthly reports TimeFilter.MONTH -> { - val years: ArrayList = ArrayList() - sortedMonthlyReports.keys.forEach { date -> if (!years.contains(date.getDateYear())) { years.add(date.getDateYear()) @@ -323,7 +323,8 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep CustomizableRowRepresentable( customViewType = RowViewType.TITLE_VALUE_ARROW, title = date.getDateMonth(), - computedStat = computedStat + computedStat = computedStat, + isSelectable = true ) ) } @@ -332,21 +333,19 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep // Create yearly reports TimeFilter.YEAR -> { - sortedYearlyReports.keys.forEach { date -> - Timber.d("$date => ${sortedYearlyReports[date]?.computedStat(Stat.NETRESULT)?.value}") sortedYearlyReports[date]?.computedStat(currentStat)?.let { computedStat -> rows.add( CustomizableRowRepresentable( customViewType = RowViewType.TITLE_VALUE_ARROW, title = date.getDateYear(), - computedStat = computedStat + computedStat = computedStat, + isSelectable = true ) ) } } } - } Timber.d("Display data: ${System.currentTimeMillis() - startDate.time}ms")