Fixes calendar sliding row tapping + adds new class for grid calendar

blinds
Laurent 5 years ago
parent 6aab1c3a3b
commit e9e262c3c0
  1. 146
      app/src/main/java/net/pokeranalytics/android/ui/modules/calendar/CalendarFragment.kt
  2. 26
      app/src/main/java/net/pokeranalytics/android/ui/modules/calendar/GridCalendarActivity.kt
  3. 34
      app/src/main/java/net/pokeranalytics/android/ui/modules/calendar/GridCalendarFragment.kt
  4. 1
      app/src/main/java/net/pokeranalytics/android/ui/modules/settings/DealtHandsPerHourFragment.kt
  5. 9
      app/src/main/res/drawable/ic_grid.xml
  6. 4
      app/src/main/res/layout/activity_dealt_hands_config.xml
  7. 15
      app/src/main/res/layout/activity_grid_calendar.xml
  8. 1
      app/src/main/res/layout/fragment_calendar.xml
  9. 6
      app/src/main/res/layout/fragment_grid_calendar.xml
  10. 11
      app/src/main/res/menu/toolbar_calendar.xml

@ -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<Stat> =
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())
}
}

@ -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)
}
}

@ -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() {
}
}

@ -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

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M4,8h4L8,4L4,4v4zM10,20h4v-4h-4v4zM4,20h4v-4L4,16v4zM4,14h4v-4L4,10v4zM10,14h4v-4h-4v4zM16,4v4h4L20,4h-4zM10,8h4L14,4h-4v4zM16,14h4v-4h-4v4zM16,20h4v-4h-4v4z"
android:fillColor="#ffffff"/>
</vector>

@ -6,10 +6,10 @@
android:orientation="vertical">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/currenciesFragment"
android:id="@+id/fragment"
android:name="net.pokeranalytics.android.ui.modules.settings.DealtHandsPerHourFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout="@layout/fragment_currencies" />
tools:layout="@layout/fragment_dealt_hands_config" />
</LinearLayout>

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/currenciesFragment"
android:name="net.pokeranalytics.android.ui.modules.calendar.GridCalendarFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout="@layout/fragment_grid_calendar" />
</LinearLayout>

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.constraintlayout.widget.ConstraintLayout>

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/grid"
android:title="@string/calendar"
android:icon="@drawable/ic_grid"
app:showAsAction="always" />
</menu>
Loading…
Cancel
Save