From e9e262c3c026fda40138286c87b8ee26cc4e7d21 Mon Sep 17 00:00:00 2001 From: Laurent Date: Wed, 17 Feb 2021 12:12:52 +0100 Subject: [PATCH] Fixes calendar sliding row tapping + adds new class for grid calendar --- .../ui/modules/calendar/CalendarFragment.kt | 146 +++++++++++------- .../modules/calendar/GridCalendarActivity.kt | 26 ++++ .../modules/calendar/GridCalendarFragment.kt | 34 ++++ .../settings/DealtHandsPerHourFragment.kt | 1 - app/src/main/res/drawable/ic_grid.xml | 9 ++ .../layout/activity_dealt_hands_config.xml | 4 +- .../res/layout/activity_grid_calendar.xml | 15 ++ app/src/main/res/layout/fragment_calendar.xml | 1 - .../res/layout/fragment_grid_calendar.xml | 6 + app/src/main/res/menu/toolbar_calendar.xml | 11 ++ 10 files changed, 197 insertions(+), 56 deletions(-) create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/modules/calendar/GridCalendarActivity.kt create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/modules/calendar/GridCalendarFragment.kt create mode 100644 app/src/main/res/drawable/ic_grid.xml create mode 100644 app/src/main/res/layout/activity_grid_calendar.xml create mode 100644 app/src/main/res/layout/fragment_grid_calendar.xml create mode 100644 app/src/main/res/menu/toolbar_calendar.xml diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/calendar/CalendarFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/calendar/CalendarFragment.kt index 85c03329..fa113526 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/calendar/CalendarFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/calendar/CalendarFragment.kt @@ -1,9 +1,7 @@ package net.pokeranalytics.android.ui.modules.calendar import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup +import android.view.* import androidx.recyclerview.widget.LinearLayoutManager import com.google.android.material.tabs.TabLayout import io.realm.Realm @@ -85,8 +83,13 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable // Life Cycle - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { super.onCreateView(inflater, container, savedInstanceState) + setHasOptionsMenu(true) _binding = FragmentCalendarBinding.inflate(inflater, container, false) return binding.root } @@ -100,6 +103,19 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable addRealmChangeListener(this, ComputableResult::class.java) } + override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + menu.clear() + inflater.inflate(R.menu.toolbar_calendar, menu) + super.onCreateOptionsMenu(menu, inflater) + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + when (item.itemId) { + R.id.grid -> showGridCalendar() + } + return true + } + override fun onDestroyView() { super.onDestroyView() _binding = null @@ -111,31 +127,53 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable return rows } + private fun showDetails(computedResults: ComputedResults, title: String?) { + CalendarDetailsActivity.newInstance( + requireContext(), + computedResults, + sessionTypeCondition, + title + ) + } + override fun onRowSelected(position: Int, row: RowRepresentable, tag: Int) { - when (currentTimeFilter) { + when (this.currentTimeFilter) { TimeFilter.MONTH -> { - val date = datesForRows[row] - sortedMonthlyReports[datesForRows[row]]?.let { - CalendarDetailsActivity.newInstance( - requireContext(), - it, - sessionTypeCondition, - date?.getMonthAndYear() - ) + when (position) { + 0 -> { + this.slidingMonthResults?.let { + showDetails(it, slidingMonthQuery.getName(requireContext())) + } + } + else -> { + val date = this.datesForRows[row] + this.sortedMonthlyReports[datesForRows[row]]?.let { + showDetails(it, date?.getMonthAndYear()) + } + } } } TimeFilter.YEAR -> { - val date = datesForRows[row] - sortedYearlyReports[datesForRows[row]]?.let { - CalendarDetailsActivity.newInstance(requireContext(), it, sessionTypeCondition, date?.getDateYear()) + when (position) { + 0 -> { + this.slidingYearResults?.let { + showDetails(it, slidingYearQuery.getName(requireContext())) + } + } + else -> { + val date = datesForRows[row] + sortedYearlyReports[datesForRows[row]]?.let { + showDetails(it, date?.getDateYear()) + } + } } } TimeFilter.ALL -> { this.allComputedResults?.let { - CalendarDetailsActivity.newInstance(requireContext(), it, sessionTypeCondition, getString( - R.string.all)) - } ?: throw PAIllegalStateException("all results required to display details but null") + showDetails(it, getString(R.string.all)) + } + ?: throw PAIllegalStateException("all results required to display details but null") } } } @@ -227,26 +265,9 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable // Manage time queryWith binding.filterTimeMonth.setOnCheckedChangeListener { _, isChecked -> selectTimeFilter(TimeFilter.MONTH, isChecked) -// if (isChecked) { -// currentTimeFilter = -// TimeFilter.MONTH -// binding.filterTimeYear.isChecked = false -// displayData() -// } else if (currentTimeFilter == TimeFilter.MONTH) { -// binding.filterTimeMonth.isChecked = true -// } - } binding.filterTimeYear.setOnCheckedChangeListener { _, isChecked -> selectTimeFilter(TimeFilter.YEAR, isChecked) -// if (isChecked) { -// currentTimeFilter = -// TimeFilter.YEAR -// binding.filterTimeMonth.isChecked = false -// displayData() -// } else if (currentTimeFilter == TimeFilter.YEAR) { -// binding.filterTimeYear.isChecked = true -// } } val viewManager = LinearLayoutManager(requireContext()) @@ -314,7 +335,12 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable val startDate = Date() val requiredStats: List = - listOf(Stat.LOCATIONS_PLAYED, Stat.LONGEST_STREAKS, Stat.DAYS_PLAYED, Stat.STANDARD_DEVIATION_HOURLY) + listOf( + Stat.LOCATIONS_PLAYED, + Stat.LONGEST_STREAKS, + Stat.DAYS_PLAYED, + Stat.STANDARD_DEVIATION_HOURLY + ) // All val allOptions = Calculator.Options( @@ -328,7 +354,8 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable val smOptions = Calculator.Options( progressValues = Calculator.Options.ProgressValues.STANDARD, stats = requiredStats, - query = this.slidingMonthQuery) + query = this.slidingMonthQuery + ) val smReport = Calculator.computeStats(realm, options = smOptions) this.slidingMonthResults = smReport.results.first() @@ -338,7 +365,10 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable val monthlyQueries = when (sessionTypeCondition) { QueryCondition.IsCash -> listOf(Criteria.AllMonthsUpToNow, Criteria.Cash).combined() - QueryCondition.IsTournament -> listOf(Criteria.AllMonthsUpToNow, Criteria.Tournament).combined() + QueryCondition.IsTournament -> listOf( + Criteria.AllMonthsUpToNow, + Criteria.Tournament + ).combined() else -> listOf(Criteria.Years, Criteria.MonthsOfYear).combined() } @@ -354,7 +384,10 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable // Set date data query.conditions.forEach { condition -> when (condition) { - is QueryCondition.AnyYear -> calendar.set(Calendar.YEAR, condition.listOfValues.first()) + is QueryCondition.AnyYear -> calendar.set( + Calendar.YEAR, + condition.listOfValues.first() + ) is QueryCondition.AnyMonthOfYear -> calendar.set( Calendar.MONTH, condition.listOfValues.first() @@ -371,7 +404,8 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable val syOptions = Calculator.Options( progressValues = Calculator.Options.ProgressValues.STANDARD, stats = requiredStats, - query = this.slidingYearQuery) + query = this.slidingYearQuery + ) val syReport = Calculator.computeStats(realm, options = syOptions) this.slidingYearResults = syReport.results.first() @@ -399,7 +433,10 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable // Set date data query.conditions.forEach { condition -> when (condition) { - is QueryCondition.AnyYear -> calendar.set(Calendar.YEAR, condition.listOfValues.first()) + is QueryCondition.AnyYear -> calendar.set( + Calendar.YEAR, + condition.listOfValues.first() + ) } } yearlyReports[calendar.time] = computedResults @@ -508,17 +545,18 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable } this.sortedYearlyReports.keys.forEach { date -> - this.sortedYearlyReports[date]?.computedStat(this.currentStat)?.let { computedStat -> - val row = CustomizableRowRepresentable( - customViewType = RowViewType.TITLE_VALUE_ARROW, - title = date.getDateYear(), - valueTextFormat = computedStat.textFormat, - isSelectable = true - ) + this.sortedYearlyReports[date]?.computedStat(this.currentStat) + ?.let { computedStat -> + val row = CustomizableRowRepresentable( + customViewType = RowViewType.TITLE_VALUE_ARROW, + title = date.getDateYear(), + valueTextFormat = computedStat.textFormat, + isSelectable = true + ) - this.rows.add(row) - this.datesForRows[row] = date - } + this.rows.add(row) + this.datesForRows[row] = date + } } } } @@ -537,5 +575,9 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable launchAsyncStatComputation() } + private fun showGridCalendar() { + GridCalendarActivity.newInstance(requireContext()) + } + } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/calendar/GridCalendarActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/calendar/GridCalendarActivity.kt new file mode 100644 index 00000000..75cb0dc6 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/calendar/GridCalendarActivity.kt @@ -0,0 +1,26 @@ +package net.pokeranalytics.android.ui.modules.calendar + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import net.pokeranalytics.android.R +import net.pokeranalytics.android.ui.activity.components.BaseActivity + +class GridCalendarActivity : BaseActivity() { + + companion object { + + fun newInstance(context: Context) { + val intent = Intent(context, GridCalendarActivity::class.java) + context.startActivity(intent) + + } + + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_grid_calendar) + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/calendar/GridCalendarFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/calendar/GridCalendarFragment.kt new file mode 100644 index 00000000..9981b5fa --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/calendar/GridCalendarFragment.kt @@ -0,0 +1,34 @@ +package net.pokeranalytics.android.ui.modules.calendar + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import net.pokeranalytics.android.databinding.FragmentDealtHandsConfigBinding +import net.pokeranalytics.android.ui.fragment.components.BaseFragment + +class GridCalendarFragment : BaseFragment() { + + private var _binding: FragmentDealtHandsConfigBinding? = null + private val binding get() = _binding!! + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + super.onCreateView(inflater, container, savedInstanceState) + _binding = FragmentDealtHandsConfigBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initUI() + } + + private fun initUI() { + + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/settings/DealtHandsPerHourFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/settings/DealtHandsPerHourFragment.kt index e313b01f..2a874ad9 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/settings/DealtHandsPerHourFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/settings/DealtHandsPerHourFragment.kt @@ -8,7 +8,6 @@ import kotlinx.android.synthetic.main.fragment_dealt_hands_config.* import net.pokeranalytics.android.R import net.pokeranalytics.android.databinding.FragmentDealtHandsConfigBinding import net.pokeranalytics.android.model.realm.ComputableResult -import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.UserConfig import net.pokeranalytics.android.ui.fragment.components.RealmFragment diff --git a/app/src/main/res/drawable/ic_grid.xml b/app/src/main/res/drawable/ic_grid.xml new file mode 100644 index 00000000..21ca9705 --- /dev/null +++ b/app/src/main/res/drawable/ic_grid.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_dealt_hands_config.xml b/app/src/main/res/layout/activity_dealt_hands_config.xml index 056fb6e0..aa6277fa 100644 --- a/app/src/main/res/layout/activity_dealt_hands_config.xml +++ b/app/src/main/res/layout/activity_dealt_hands_config.xml @@ -6,10 +6,10 @@ android:orientation="vertical"> + tools:layout="@layout/fragment_dealt_hands_config" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_grid_calendar.xml b/app/src/main/res/layout/activity_grid_calendar.xml new file mode 100644 index 00000000..d4c76fd8 --- /dev/null +++ b/app/src/main/res/layout/activity_grid_calendar.xml @@ -0,0 +1,15 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_calendar.xml b/app/src/main/res/layout/fragment_calendar.xml index 8c0a9521..a7bbd39b 100644 --- a/app/src/main/res/layout/fragment_calendar.xml +++ b/app/src/main/res/layout/fragment_calendar.xml @@ -1,7 +1,6 @@ diff --git a/app/src/main/res/layout/fragment_grid_calendar.xml b/app/src/main/res/layout/fragment_grid_calendar.xml new file mode 100644 index 00000000..61a4490a --- /dev/null +++ b/app/src/main/res/layout/fragment_grid_calendar.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/toolbar_calendar.xml b/app/src/main/res/menu/toolbar_calendar.xml new file mode 100644 index 00000000..48ff646d --- /dev/null +++ b/app/src/main/res/menu/toolbar_calendar.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file