Merge remote-tracking branch 'origin/dev' into dev

feature/top10
Razmig Sarkissian 7 years ago
commit 540de8245f
  1. 24
      app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt
  2. 95
      app/src/main/res/layout-sw320dp/fragment_calendar.xml
  3. 99
      app/src/main/res/layout-sw400dp/fragment_calendar.xml
  4. 43
      app/src/main/res/layout/fragment_calendar.xml

@ -13,7 +13,6 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
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.ComputedResults
import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.calculus.Stat
@ -36,6 +35,8 @@ import java.util.*
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext
class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRepresentableDataSource, RowRepresentableDelegate { class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRepresentableDataSource, RowRepresentableDelegate {
private enum class SessionType { private enum class SessionType {
@ -76,7 +77,7 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep
// Life Cycle // Life Cycle
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, container, false) return inflater.inflate(net.pokeranalytics.android.R.layout.fragment_calendar, container, false)
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -95,6 +96,9 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep
//toast("Open $row") //toast("Open $row")
} }
override fun sessionsChanged() {
launchStatComputation()
}
// Business // Business
@ -138,7 +142,7 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep
}) })
// Manage session type filter // Manage session type filter
filterSessionAll.setOnCheckedChangeListener { buttonView, isChecked -> filterSessionAll.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) { if (isChecked) {
currentSessionType = SessionType.ALL currentSessionType = SessionType.ALL
filterSessionCash.isChecked = false filterSessionCash.isChecked = false
@ -148,7 +152,7 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep
filterSessionAll.isChecked = true filterSessionAll.isChecked = true
} }
} }
filterSessionCash.setOnCheckedChangeListener { buttonView, isChecked -> filterSessionCash.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) { if (isChecked) {
currentSessionType = SessionType.CASH currentSessionType = SessionType.CASH
filterSessionAll.isChecked = false filterSessionAll.isChecked = false
@ -158,7 +162,7 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep
filterSessionCash.isChecked = true filterSessionCash.isChecked = true
} }
} }
filterSessionTournament.setOnCheckedChangeListener { buttonView, isChecked -> filterSessionTournament.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) { if (isChecked) {
currentSessionType = SessionType.TOURNAMENT currentSessionType = SessionType.TOURNAMENT
filterSessionAll.isChecked = false filterSessionAll.isChecked = false
@ -170,7 +174,7 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep
} }
// Manage time filter // Manage time filter
filterTimeMonth.setOnCheckedChangeListener { buttonView, isChecked -> filterTimeMonth.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) { if (isChecked) {
currentTimeFilter = TimeFilter.MONTH currentTimeFilter = TimeFilter.MONTH
filterTimeYear.isChecked = false filterTimeYear.isChecked = false
@ -180,7 +184,7 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep
} }
} }
filterTimeYear.setOnCheckedChangeListener { buttonView, isChecked -> filterTimeYear.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) { if (isChecked) {
currentTimeFilter = TimeFilter.YEAR currentTimeFilter = TimeFilter.YEAR
filterTimeMonth.isChecked = false filterTimeMonth.isChecked = false
@ -220,13 +224,13 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep
// Compute data per YEAR and MONTH // Compute data per YEAR and MONTH
val monthConditions = when(currentSessionType) { val monthConditions = when (currentSessionType) {
SessionType.ALL -> listOf(Comparator.YEAR, Comparator.MONTH_OF_YEAR).combined() SessionType.ALL -> listOf(Comparator.YEAR, Comparator.MONTH_OF_YEAR).combined()
SessionType.CASH -> listOf(Comparator.YEAR, Comparator.MONTH_OF_YEAR, Comparator.CASH).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() SessionType.TOURNAMENT -> listOf(Comparator.YEAR, Comparator.MONTH_OF_YEAR, Comparator.TOURNAMENT).combined()
} }
monthConditions.forEach {conditions -> monthConditions.forEach { conditions ->
val report = Calculator.computeStatsWithComparators(realm, conditions = conditions, options = Calculator.Options()) val report = Calculator.computeStatsWithComparators(realm, conditions = conditions, options = Calculator.Options())
report.results.forEach { computedResults -> report.results.forEach { computedResults ->
if (!computedResults.isEmpty) { if (!computedResults.isEmpty) {
@ -248,7 +252,7 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep
calendar.time = Date().startOfYear() calendar.time = Date().startOfYear()
// Compute data per YEAR // Compute data per YEAR
val yearConditions = when(currentSessionType) { val yearConditions = when (currentSessionType) {
SessionType.ALL -> listOf(Comparator.YEAR).combined() SessionType.ALL -> listOf(Comparator.YEAR).combined()
SessionType.CASH -> listOf(Comparator.YEAR, Comparator.CASH).combined() SessionType.CASH -> listOf(Comparator.YEAR, Comparator.CASH).combined()
SessionType.TOURNAMENT -> listOf(Comparator.YEAR, Comparator.TOURNAMENT).combined() SessionType.TOURNAMENT -> listOf(Comparator.YEAR, Comparator.TOURNAMENT).combined()

@ -0,0 +1,95 @@
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:theme="@style/PokerAnalyticsTheme.Toolbar.Session"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_margin="8dp"
android:orientation="vertical">
<com.google.android.material.chip.ChipGroup
android:id="@+id/filtersTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:singleSelection="false"
app:chipSpacing="6dp">
<com.google.android.material.chip.Chip
android:id="@+id/filterTimeMonth"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="@string/month"/>
<com.google.android.material.chip.Chip
android:id="@+id/filterTimeYear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/year"/>
</com.google.android.material.chip.ChipGroup>
<com.google.android.material.chip.ChipGroup
android:id="@+id/filtersSession"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
app:singleSelection="false"
app:chipSpacing="6dp">
<com.google.android.material.chip.Chip
android:id="@+id/filterSessionAll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="@string/all"/>
<com.google.android.material.chip.Chip
android:id="@+id/filterSessionCash"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cash_game"/>
<com.google.android.material.chip.Chip
android:id="@+id/filterSessionTournament"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/tournament"/>
</com.google.android.material.chip.ChipGroup>
</LinearLayout>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="scrollable">
</com.google.android.material.tabs.TabLayout>
</com.google.android.material.appbar.AppBarLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/appBar" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -0,0 +1,99 @@
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:theme="@style/PokerAnalyticsTheme.Toolbar.Session"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="8dp"
android:orientation="horizontal">
<com.google.android.material.chip.ChipGroup
android:id="@+id/filtersTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:singleSelection="false"
app:chipSpacing="8dp">
<com.google.android.material.chip.Chip
android:id="@+id/filterTimeMonth"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="@string/month"/>
<com.google.android.material.chip.Chip
android:id="@+id/filterTimeYear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/year"/>
</com.google.android.material.chip.ChipGroup>
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" />
<com.google.android.material.chip.ChipGroup
android:id="@+id/filtersSession"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:singleSelection="false"
app:chipSpacing="6dp">
<com.google.android.material.chip.Chip
android:id="@+id/filterSessionAll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="@string/all"/>
<com.google.android.material.chip.Chip
android:id="@+id/filterSessionCash"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cash_game"/>
<com.google.android.material.chip.Chip
android:id="@+id/filterSessionTournament"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/tournament"/>
</com.google.android.material.chip.ChipGroup>
</LinearLayout>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="scrollable">
</com.google.android.material.tabs.TabLayout>
</com.google.android.material.appbar.AppBarLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/appBar" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -18,48 +18,61 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center" android:gravity="center"
android:padding="8dp"
android:orientation="horizontal"> android:orientation="horizontal">
<com.google.android.material.chip.ChipGroup <com.google.android.material.chip.ChipGroup
android:id="@+id/filters" android:id="@+id/filtersTime"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="8dp"
app:singleSelection="false" app:singleSelection="false"
app:chipSpacing="6dp"> app:chipSpacing="8dp">
<com.google.android.material.chip.Chip <com.google.android.material.chip.Chip
android:id="@+id/filterSessionAll" android:id="@+id/filterTimeMonth"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:checked="true" android:checked="true"
android:text="@string/all"/> android:text="@string/month"/>
<com.google.android.material.chip.Chip <com.google.android.material.chip.Chip
android:id="@+id/filterSessionCash" android:id="@+id/filterTimeYear"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/cash_game"/> android:text="@string/year"/>
</com.google.android.material.chip.ChipGroup>
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" />
<com.google.android.material.chip.ChipGroup
android:id="@+id/filtersSession"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:singleSelection="false"
app:chipSpacing="6dp">
<com.google.android.material.chip.Chip <com.google.android.material.chip.Chip
android:id="@+id/filterSessionTournament" android:id="@+id/filterSessionAll"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/tournament"/> android:checked="true"
android:text="@string/all"/>
<com.google.android.material.chip.Chip <com.google.android.material.chip.Chip
android:id="@+id/filterTimeMonth" android:id="@+id/filterSessionCash"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="8dp" android:text="@string/cash_game"/>
android:checked="true"
android:text="@string/month"/>
<com.google.android.material.chip.Chip <com.google.android.material.chip.Chip
android:id="@+id/filterTimeYear" android:id="@+id/filterSessionTournament"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/year"/> android:text="@string/tournament"/>
</com.google.android.material.chip.ChipGroup> </com.google.android.material.chip.ChipGroup>

Loading…
Cancel
Save