From 591ead03c7e597e2116ac99c2dde24289f09f642 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Wed, 24 Apr 2019 17:33:26 +0200 Subject: [PATCH 01/10] update realm migration for FilterCondition --- .../model/migrations/PokerAnalyticsMigration.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt index 4a1b109b..608792bb 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt @@ -59,9 +59,13 @@ class PokerAnalyticsMigration : RealmMigration { schema.get("FilterCondition")?.let { it.removeField("blindValues") - it.addField("operator", Int::class.java).setNullable("operator", true) - it.addField("intValue", Int::class.java).setNullable("intValue", true) - it.addField("doubleValue", Double::class.java).setNullable("intValue", true) + it.removeField("numericValues") + + it.addField("operator", Integer::class.java).setNullable("operator", true) + it.addField("intValue", Integer::class.java).setNullable("intValue", true) + it.addRealmListField("intValues", Integer::class.java).setNullable("intValues", true) + it.addField("doubleValue", Double::class.java).setNullable("doubleValue", true) + it.addRealmListField("doubleValues", Double::class.java).setNullable("doubleValues", true) it.addField("stringValue", String::class.java).setNullable("stringValue", true) } From f4096864cf38629a98e66559caf54fcf0172cc90 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Wed, 24 Apr 2019 17:45:10 +0200 Subject: [PATCH 02/10] update realm migration for FilterCondition --- .../model/migrations/PokerAnalyticsMigration.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt index 608792bb..819d357f 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt @@ -61,12 +61,12 @@ class PokerAnalyticsMigration : RealmMigration { it.removeField("blindValues") it.removeField("numericValues") - it.addField("operator", Integer::class.java).setNullable("operator", true) - it.addField("intValue", Integer::class.java).setNullable("intValue", true) - it.addRealmListField("intValues", Integer::class.java).setNullable("intValues", true) - it.addField("doubleValue", Double::class.java).setNullable("doubleValue", true) - it.addRealmListField("doubleValues", Double::class.java).setNullable("doubleValues", true) - it.addField("stringValue", String::class.java).setNullable("stringValue", true) + it.addField("operator", Integer::class.java) + it.addField("intValue", Integer::class.java) + it.addRealmListField("intValues", Integer::class.java) + it.addField("doubleValue", Double::class.java) + it.addRealmListField("doubleValues", Double::class.java) + it.addField("stringValue", String::class.java) } schema.get("ComputableResult")?.let { From 30df252912bac1e51471547665e7b20f70fbef98 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Wed, 24 Apr 2019 17:56:12 +0200 Subject: [PATCH 03/10] update realm migration for FilterCondition --- .../android/model/migrations/PokerAnalyticsMigration.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt index 819d357f..7c3cfeec 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt @@ -64,8 +64,8 @@ class PokerAnalyticsMigration : RealmMigration { it.addField("operator", Integer::class.java) it.addField("intValue", Integer::class.java) it.addRealmListField("intValues", Integer::class.java) - it.addField("doubleValue", Double::class.java) - it.addRealmListField("doubleValues", Double::class.java) + it.addField("doubleValue", Double::class.java).setNullable("doubleValue", true) + it.addRealmListField("doubleValues", Double::class.java).setNullable("doubleValue", true) it.addField("stringValue", String::class.java) } @@ -74,7 +74,7 @@ class PokerAnalyticsMigration : RealmMigration { } schema.get("Bankroll")?.let { - it.addField("initialValue", Double::class.java).setRequired("initialValue", true) + it.addField("initialValue", Double::class.java) } currentVersion++ From f75d5311d9c7743e9bca18bb456f8eb9ace73527 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Wed, 24 Apr 2019 18:08:40 +0200 Subject: [PATCH 04/10] update realm migration for FilterCondition --- .../android/model/migrations/PokerAnalyticsMigration.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt index 7c3cfeec..32d9436e 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt @@ -65,7 +65,7 @@ class PokerAnalyticsMigration : RealmMigration { it.addField("intValue", Integer::class.java) it.addRealmListField("intValues", Integer::class.java) it.addField("doubleValue", Double::class.java).setNullable("doubleValue", true) - it.addRealmListField("doubleValues", Double::class.java).setNullable("doubleValue", true) + it.addRealmListField("doubleValues", Double::class.java) it.addField("stringValue", String::class.java) } From 26d755eff0cf44c4311c7c70ace7538547ed7b3a Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Wed, 24 Apr 2019 18:19:54 +0200 Subject: [PATCH 05/10] update realm migration for FilterCondition --- .../model/migrations/PokerAnalyticsMigration.kt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt index 32d9436e..81fb9afe 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt @@ -4,6 +4,9 @@ import io.realm.DynamicRealm import io.realm.RealmMigration import timber.log.Timber import java.util.* +import io.realm.RealmObjectSchema + + class PokerAnalyticsMigration : RealmMigration { @@ -39,7 +42,6 @@ class PokerAnalyticsMigration : RealmMigration { schema.rename("FilterElement", "FilterCondition") schema.get("Filter")?.let { it.renameField("filterElements", "filterConditions") - it.removeField("entityType") } schema.get("SessionSet")?.let { it.addField("id", String::class.java).setRequired("id", true) @@ -53,6 +55,10 @@ class PokerAnalyticsMigration : RealmMigration { Timber.d("*** Running migration ${currentVersion + 1}") schema.rename("Report", "ReportSetup") + schema.get("Filter")?.let { + it.removeField("entityType") + } + schema.get("Session")?.let { it.addField("blinds", String::class.java) } @@ -66,6 +72,9 @@ class PokerAnalyticsMigration : RealmMigration { it.addRealmListField("intValues", Integer::class.java) it.addField("doubleValue", Double::class.java).setNullable("doubleValue", true) it.addRealmListField("doubleValues", Double::class.java) + if(it.isRequired("doubleValues")) { + it.setRequired("doubleValues", false) + } it.addField("stringValue", String::class.java) } From 9b68ab3b6629fdf93edab587aa8759c595da6df7 Mon Sep 17 00:00:00 2001 From: Laurent Date: Wed, 24 Apr 2019 19:02:27 +0200 Subject: [PATCH 06/10] Fixes various bugs --- .../pokeranalytics/android/calculus/Calculator.kt | 8 ++------ .../net/pokeranalytics/android/calculus/Stat.kt | 13 ++++++++++++- .../android/ui/fragment/GraphFragment.kt | 7 +++++-- .../android/ui/fragment/ReportsFragment.kt | 2 +- .../android/ui/fragment/StatisticDetailsFragment.kt | 12 ++++++++++++ .../android/ui/fragment/StatisticsFragment.kt | 9 ++++++++- .../android/ui/view/SessionRowView.kt | 6 ++++-- app/src/main/res/values/strings.xml | 2 +- 8 files changed, 45 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt b/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt index 1347d7f4..9bcf98fc 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt @@ -120,12 +120,8 @@ class Calculator { return when (aggregationType) { AggregationType.SESSION, AggregationType.DURATION -> this.computeGroups(realm, listOf(group), options) - AggregationType.MONTH -> { - val criteria: List = listOf(Criteria.Years, Criteria.MonthsOfYear) - this.computeStatsWithComparators(realm, criteria, group.conditions, options) - } - AggregationType.YEAR -> { - val criteria: List = listOf(Criteria.Years) + AggregationType.MONTH, AggregationType.YEAR -> { + val criteria: List = aggregationType.criterias this.computeStatsWithComparators(realm, criteria, group.conditions, options) } } diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt b/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt index e8fc3c68..491aa7d7 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt @@ -3,6 +3,7 @@ package net.pokeranalytics.android.calculus import android.content.Context import net.pokeranalytics.android.R import net.pokeranalytics.android.exceptions.FormattingException +import net.pokeranalytics.android.model.Criteria import net.pokeranalytics.android.model.interfaces.Timed import net.pokeranalytics.android.ui.graph.AxisFormatting import net.pokeranalytics.android.ui.view.RowRepresentable @@ -46,6 +47,15 @@ enum class AggregationType { } } + val criterias: List + get() { + return when (this) { + MONTH -> listOf(Criteria.Years, Criteria.MonthsOfYear) + YEAR -> listOf(Criteria.Years) + else -> listOf() + } + } + } /** @@ -233,7 +243,8 @@ enum class Stat : RowRepresentable { val hasEvolutionGraph: Boolean get() { return when (this) { - HOURLY_DURATION, AVERAGE_HOURLY_DURATION -> false + HOURLY_DURATION, AVERAGE_HOURLY_DURATION, + STANDARD_DEVIATION, STANDARD_DEVIATION_HOURLY, STANDARD_DEVIATION_BB_PER_100_HANDS -> false else -> true } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt index 0ae4886d..783da46a 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt @@ -132,9 +132,12 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener { this.chartView = lineChart dataSets.firstOrNull()?.let { + this.legendView.prepareWithStat(this.stat, it.entryCount, this.style) - lastEntry = it.getEntryForIndex(it.entryCount - 1) - groupName = it.label + if (it.entryCount > 0) { + lastEntry = it.getEntryForIndex(it.entryCount - 1) + groupName = it.label + } } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt index 8e35f4b4..488c76ec 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt @@ -108,7 +108,7 @@ class ReportsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSour private fun launchComputation(criteria: List, reportName: String) { if (criteria.combined().size < 2) { - Toast.makeText(context, R.string.less_then_2_values_for_comparison, Toast.LENGTH_LONG).show() + Toast.makeText(context, R.string.less_then_2_values_for_display, Toast.LENGTH_LONG).show() return } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt index 3ed90ebe..c3602d3d 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Toast import androidx.core.view.isVisible import com.github.mikephil.charting.data.BarDataSet import com.github.mikephil.charting.data.LineDataSet @@ -16,6 +17,7 @@ import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import net.pokeranalytics.android.R import net.pokeranalytics.android.calculus.* +import net.pokeranalytics.android.model.combined import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.extensions.ChipGroupExtension import net.pokeranalytics.android.ui.extensions.hideWithAnimation @@ -107,6 +109,16 @@ class StatisticDetailsFragment : PokerAnalyticsFragment() { super.onCheckedChanged(group, checkedId) val aggregationType = aggregationTypes[checkedId] + when (aggregationType) { + AggregationType.MONTH, AggregationType.YEAR -> { + val queryConditions = aggregationType.criterias.combined() + if (queryConditions.size < 2) { + Toast.makeText(context, R.string.less_then_2_values_for_display, Toast.LENGTH_LONG).show() + return + } + } + } + reports[aggregationType]?.let { report -> setGraphData(report, aggregationType) } ?: run { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt index 5fedf62d..fd147bb0 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt @@ -139,7 +139,14 @@ class StatisticsFragment : TableReportFragment() { Timber.d(">>>>> Start computations...") - return Calculator.computeGroups(realm, listOf(allSessionGroup, cgSessionGroup, tSessionGroup), Calculator.Options()) + val options = Calculator.Options() + var computedStats = mutableListOf() + computedStats.addAll(allStats) + computedStats.addAll(cgStats) + computedStats.addAll(tStats) + options.displayedStats = computedStats + + return Calculator.computeGroups(realm, listOf(allSessionGroup, cgSessionGroup, tSessionGroup), options) } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt index 9920cbee..fc9b1c39 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt @@ -58,9 +58,11 @@ class SessionRowView : FrameLayout { */ fun setData(session: Session) { + val date = session.startDate ?: session.creationDate + // Date - rowHistorySession.dateDay.text = session.creationDate.getShortDayName() - rowHistorySession.dateNumber.text = session.creationDate.getDayNumber() + rowHistorySession.dateDay.text = date.getShortDayName() + rowHistorySession.dateNumber.text = date.getDayNumber() // Title / Game type diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 286f075c..7eaa63c9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -9,7 +9,7 @@ Variant Line Initial Value - There is less than two values to compare! Please change your habits :) + Can\'t show because there is less than two values to display! From 9d26bc7e8a4f7cd43bb20d0771ad84c4d1aa1c48 Mon Sep 17 00:00:00 2001 From: Laurent Date: Thu, 25 Apr 2019 09:56:21 +0200 Subject: [PATCH 07/10] stop creating fake sessions --- .../net/pokeranalytics/android/PokerAnalyticsApplication.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt index 75c03014..7a16edef 100644 --- a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt +++ b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt @@ -52,7 +52,7 @@ class PokerAnalyticsApplication : Application() { if (BuildConfig.DEBUG) { Timber.d("UserPreferences.defaultCurrency: ${UserDefaults.currency.symbol}") - this.createFakeSessions() +// this.createFakeSessions() } Patcher.patchBreaks() From 9e3707d2d300c59991d21a7e0ca3697ffe61b2f2 Mon Sep 17 00:00:00 2001 From: Laurent Date: Thu, 25 Apr 2019 09:58:07 +0200 Subject: [PATCH 08/10] change fake session limit to 1, not 10 --- .../net/pokeranalytics/android/PokerAnalyticsApplication.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt index 7a16edef..a16c0963 100644 --- a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt +++ b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt @@ -67,7 +67,7 @@ class PokerAnalyticsApplication : Application() { val sessionsCount = realm.where().findAll().size realm.close() - if (sessionsCount < 10) { + if (sessionsCount < 1) { GlobalScope.launch { FakeDataManager.createFakeSessions(2000) } From ebb1ecad715aa150c704ac9b504e8ba7962eaab6 Mon Sep 17 00:00:00 2001 From: Laurent Date: Thu, 25 Apr 2019 10:41:36 +0200 Subject: [PATCH 09/10] Wake screen on run for debug --- .../android/ui/activity/HomeActivity.kt | 66 +++++++++++-------- 1 file changed, 39 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt index 610a948c..23b9d5bd 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt @@ -1,7 +1,9 @@ package net.pokeranalytics.android.ui.activity +import android.app.KeyguardManager import android.content.Context import android.content.Intent +import android.os.Build import android.os.Bundle import android.view.Menu import android.view.MenuItem @@ -9,7 +11,7 @@ import androidx.appcompat.app.AlertDialog import com.google.android.material.bottomnavigation.BottomNavigationView import io.realm.RealmResults import kotlinx.android.synthetic.main.activity_home.* -import net.pokeranalytics.android.R +import net.pokeranalytics.android.BuildConfig import net.pokeranalytics.android.model.realm.Currency import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.adapter.HomePagerAdapter @@ -44,19 +46,19 @@ class HomeActivity : PokerAnalyticsActivity() { displayFragment(2) } */ - R.id.navigation_history -> { + net.pokeranalytics.android.R.id.navigation_history -> { displayFragment(0) } - R.id.navigation_stats -> { + net.pokeranalytics.android.R.id.navigation_stats -> { displayFragment(1) } - R.id.navigation_calendar -> { + net.pokeranalytics.android.R.id.navigation_calendar -> { displayFragment(2) } - R.id.navigation_reports -> { + net.pokeranalytics.android.R.id.navigation_reports -> { displayFragment(3) } - R.id.navigation_more -> { + net.pokeranalytics.android.R.id.navigation_more -> { displayFragment(4) } } @@ -65,7 +67,17 @@ class HomeActivity : PokerAnalyticsActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_home) + + if (BuildConfig.DEBUG) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { + setShowWhenLocked(true) + setTurnScreenOn(true) + val keyguardManager = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager + keyguardManager.requestDismissKeyguard(this, null) + } + } + + setContentView(net.pokeranalytics.android.R.layout.activity_home) observeRealmObjects() initUI() @@ -74,16 +86,16 @@ class HomeActivity : PokerAnalyticsActivity() { override fun onCreateOptionsMenu(menu: Menu?): Boolean { menu?.clear() - menuInflater.inflate(R.menu.toolbar_home, menu) + menuInflater.inflate(net.pokeranalytics.android.R.menu.toolbar_home, menu) this.homeMenu = menu //TODO: Change queryWith button visibility - homeMenu?.findItem(R.id.filter)?.isVisible = true + homeMenu?.findItem(net.pokeranalytics.android.R.id.filter)?.isVisible = true return super.onCreateOptionsMenu(menu) } override fun onOptionsItemSelected(item: MenuItem?): Boolean { when (item?.itemId) { - R.id.filter -> manageFilters() + net.pokeranalytics.android.R.id.filter -> manageFilters() } return super.onOptionsItemSelected(item) } @@ -113,7 +125,7 @@ class HomeActivity : PokerAnalyticsActivity() { setSupportActionBar(toolbar) navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener) - navigation.selectedItemId = R.id.navigation_history + navigation.selectedItemId = net.pokeranalytics.android.R.id.navigation_history val homePagerAdapter = HomePagerAdapter(supportFragmentManager) viewPager.offscreenPageLimit = 5 @@ -167,24 +179,24 @@ class HomeActivity : PokerAnalyticsActivity() { */ 0 -> { - toolbar.title = getString(R.string.feed) - homeMenu?.findItem(R.id.filter)?.isVisible = true + toolbar.title = getString(net.pokeranalytics.android.R.string.feed) + homeMenu?.findItem(net.pokeranalytics.android.R.id.filter)?.isVisible = true } 1 -> { - toolbar.title = getString(R.string.stats) - homeMenu?.findItem(R.id.filter)?.isVisible = true + toolbar.title = getString(net.pokeranalytics.android.R.string.stats) + homeMenu?.findItem(net.pokeranalytics.android.R.id.filter)?.isVisible = true } 2 -> { - toolbar.title = getString(R.string.calendar) - homeMenu?.findItem(R.id.filter)?.isVisible = false + toolbar.title = getString(net.pokeranalytics.android.R.string.calendar) + homeMenu?.findItem(net.pokeranalytics.android.R.id.filter)?.isVisible = false } 3 -> { - toolbar.title = getString(R.string.reports) - homeMenu?.findItem(R.id.filter)?.isVisible = false + toolbar.title = getString(net.pokeranalytics.android.R.string.reports) + homeMenu?.findItem(net.pokeranalytics.android.R.id.filter)?.isVisible = false } 4 -> { - toolbar.title = getString(R.string.more) - homeMenu?.findItem(R.id.filter)?.isVisible = false + toolbar.title = getString(net.pokeranalytics.android.R.string.more) + homeMenu?.findItem(net.pokeranalytics.android.R.id.filter)?.isVisible = false } } } @@ -197,16 +209,16 @@ class HomeActivity : PokerAnalyticsActivity() { val filterSelected = false val choices = ArrayList() - choices.add(getString(R.string.new_str)) + choices.add(getString(net.pokeranalytics.android.R.string.new_str)) if (filterSelected) { - choices.add(getString(R.string.modify_current_filter)) - choices.add(getString(R.string.load_from_db)) - choices.add(getString(R.string.remove_filter)) + choices.add(getString(net.pokeranalytics.android.R.string.modify_current_filter)) + choices.add(getString(net.pokeranalytics.android.R.string.load_from_db)) + choices.add(getString(net.pokeranalytics.android.R.string.remove_filter)) } val builder = AlertDialog.Builder(this) - builder.setTitle(R.string.filter_selection) + builder.setTitle(net.pokeranalytics.android.R.string.filter_selection) .setCancelable(true) .setItems(choices.toTypedArray()) { _, which -> Timber.d("Click on $which") @@ -214,7 +226,7 @@ class HomeActivity : PokerAnalyticsActivity() { 0 -> FiltersActivity.newInstance(this@HomeActivity) } } - .setNegativeButton(R.string.cancel) { _, _ -> + .setNegativeButton(net.pokeranalytics.android.R.string.cancel) { _, _ -> Timber.d("Click on cancel") } From 20f5c2d4e3a7e8c105e3d30d7176d6715b4ed63c Mon Sep 17 00:00:00 2001 From: Laurent Date: Thu, 25 Apr 2019 10:58:22 +0200 Subject: [PATCH 10/10] various fixes --- .../android/model/realm/Session.kt | 11 ++- .../ui/activity/StatisticDetailsActivity.kt | 8 +- .../ui/adapter/RowRepresentableDataSource.kt | 1 + .../ui/fragment/CalendarDetailsFragment.kt | 77 ++++++++++--------- .../ui/fragment/StatisticDetailsFragment.kt | 34 ++++---- .../android/ui/graph/GraphUnderlyingEntry.kt | 2 +- .../ui/view/rowrepresentable/GraphRow.kt | 2 +- 7 files changed, 72 insertions(+), 63 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt index 825af61d..839ab4e5 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt @@ -142,6 +142,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat field = value this.computeNetDuration() this.dateChanged() + this.defineDefaultTournamentBuyinIfNecessary() this.computeStats() } @@ -407,9 +408,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat when (getState()) { SessionState.PENDING, SessionState.PLANNED -> { this.startDate = Date() - if (this.tournamentEntryFee != null) { - this.result?.buyin = this.tournamentEntryFee - } + this.defineDefaultTournamentBuyinIfNecessary() } SessionState.PAUSED -> { val pauseDate = this.pauseDate @@ -427,6 +426,12 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat } } + private fun defineDefaultTournamentBuyinIfNecessary() { + if (this.tournamentEntryFee != null && this.result?.buyin == null) { + this.result?.buyin = this.tournamentEntryFee + } + } + /** * Pause a session */ diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/StatisticDetailsActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/StatisticDetailsActivity.kt index a5b12c9d..ec737828 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/StatisticDetailsActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/StatisticDetailsActivity.kt @@ -11,7 +11,7 @@ import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.fragment.StatisticDetailsFragment -class StatisticsDetailsParameters(var stat: Stat, var computableGroup: ComputableGroup, var report: Report) +class StatisticsDetailsParameters(var stat: Stat, var computableGroup: ComputableGroup, var report: Report, var title: String? = null) class StatisticDetailsActivity : PokerAnalyticsActivity() { @@ -24,8 +24,8 @@ class StatisticDetailsActivity : PokerAnalyticsActivity() { /** * Default constructor */ - fun newInstance(context: Context, stat: Stat, group: ComputableGroup, report: Report, displayAggregationChoices: Boolean = true) { - parameters = StatisticsDetailsParameters(stat, group, report) + fun newInstance(context: Context, stat: Stat, group: ComputableGroup, report: Report, displayAggregationChoices: Boolean = true, title: String? = null) { + parameters = StatisticsDetailsParameters(stat, group, report, title) this.displayAggregationChoices = displayAggregationChoices val intent = Intent(context, StatisticDetailsActivity::class.java) context.startActivity(intent) @@ -50,7 +50,7 @@ class StatisticDetailsActivity : PokerAnalyticsActivity() { fragmentTransaction.commit() parameters?.let { - statisticDetailsFragment.setData(it.stat, it.computableGroup, it.report, displayAggregationChoices) + statisticDetailsFragment.setData(it.stat, it.computableGroup, it.report, displayAggregationChoices, it.title) parameters = null } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableDataSource.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableDataSource.kt index c43f02d4..63dab8ef 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableDataSource.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableDataSource.kt @@ -39,6 +39,7 @@ interface RowRepresentableDataSource: EditableDataSource, DisplayableDataSource, * To do that, this interface overrides and provides a default implementation to specific methods of [RowRepresentableDataSource] */ interface StaticRowRepresentableDataSource: RowRepresentableDataSource { + override fun rowRepresentableForPosition(position:Int): RowRepresentable? { this.adapterRows()?.let { return it[position] diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarDetailsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarDetailsFragment.kt index f1f89ee5..e9a272aa 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarDetailsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarDetailsFragment.kt @@ -52,8 +52,19 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable private var sessionTypeCondition: QueryCondition? = null private var rowRepresentables: ArrayList = ArrayList() - //private var stat: Stat = Stat.NET_RESULT - //private var entries: List = ArrayList() + /** + * Set data + */ + fun setData(computedResults: ComputedResults?, sessionTypeCondition: QueryCondition?, title: String?) { + + this.computedResults = computedResults + this.sessionTypeCondition = sessionTypeCondition + this.title = title + + displayData() + launchStatComputation() + + } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_calendar_details, container, false) @@ -64,21 +75,6 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable initUI() } - override fun adapterRows(): List? { - return rowRepresentables - } - - override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { - when (row) { - is GraphRow -> { - //TODO: Open graph details - row.report.results.firstOrNull()?.group?.let { computableGroup -> - StatisticDetailsActivity.newInstance(requireContext(), row.stat, computableGroup, row.report, false) - } - } - } - } - /** * Init UI */ @@ -93,6 +89,16 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable parentActivity.supportActionBar?.setDisplayHomeAsUpEnabled(true) setHasOptionsMenu(true) + var tabIndexToSelect = 0 + sessionTypeCondition?.let { + tabIndexToSelect = when (it) { + QueryCondition.IsCash -> 1 + QueryCondition.IsTournament -> 2 + else -> 0 + } + } + + tabs.getTabAt(tabIndexToSelect)?.select() tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { override fun onTabSelected(tab: TabLayout.Tab) { @@ -121,6 +127,7 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable adapter = statsAdapter } + } /** @@ -132,16 +139,24 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable toolbar.title = it } - sessionTypeCondition?.let { - when (it) { - QueryCondition.IsCash -> tabs.getTabAt(1)?.select() - QueryCondition.IsTournament -> tabs.getTabAt(2)?.select() - else -> tabs.getTabAt(0)?.select() + } + + // StaticRowRepresentableDataSource + + override fun adapterRows(): List? { + return rowRepresentables + } + + override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { + when (row) { + is GraphRow -> { + row.report.results.firstOrNull()?.group?.let { computableGroup -> + StatisticDetailsActivity.newInstance(requireContext(), row.stat, computableGroup, row.report, false, row.title) + } } } } - /** * Launch stat computation */ @@ -187,7 +202,7 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable rowRepresentables.add(StatDoubleRow(it.computedStat(Stat.NET_RESULT), it.computedStat(Stat.HOURLY_RATE))) rowRepresentables.add(StatDoubleRow(it.computedStat(Stat.LOCATIONS_PLAYED), it.computedStat(Stat.LONGEST_STREAKS))) rowRepresentables.add(CustomizableRowRepresentable(RowViewType.HEADER_TITLE, resId = R.string.distribution)) - rowRepresentables.add(GraphRow(report, Stat.STANDARD_DEVIATION)) + rowRepresentables.add(GraphRow(report, Stat.STANDARD_DEVIATION, requireContext().getString(R.string.distribution))) rowRepresentables.add(StatDoubleRow(it.computedStat(Stat.WIN_RATIO), it.computedStat(Stat.MAXIMUM_NETRESULT))) rowRepresentables.add(CustomizableRowRepresentable(RowViewType.HEADER_TITLE, resId = R.string.volume)) rowRepresentables.add(GraphRow(report, Stat.HOURLY_DURATION)) @@ -207,18 +222,4 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable } } - /** - * Set data - */ - fun setData(computedResults: ComputedResults?, sessionTypeCondition: QueryCondition?, title: String?) { - - this.computedResults = computedResults - this.sessionTypeCondition = sessionTypeCondition - this.title = title - - displayData() - launchStatComputation() - - } - } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt index c3602d3d..d580caa2 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt @@ -48,6 +48,7 @@ class StatisticDetailsFragment : PokerAnalyticsFragment() { private lateinit var graphFragment: GraphFragment private lateinit var selectedReport: Report + private var title: String? = null private var reports: MutableMap = hashMapOf() private var stat: Stat = Stat.NET_RESULT private var displayAggregationChoices: Boolean = true @@ -61,6 +62,21 @@ class StatisticDetailsFragment : PokerAnalyticsFragment() { initUI() } + /** + * Set data + */ + fun setData(stat: Stat, computableGroup: ComputableGroup, report: Report, displayAggregationChoices: Boolean, title: String? = null) { + this.stat = stat + this.computableGroup = computableGroup + this.selectedReport = report + this.displayAggregationChoices = displayAggregationChoices + this.title = title + + stat.aggregationTypes.firstOrNull()?.let { + reports[it] = report + } + } + /** * Init UI */ @@ -89,7 +105,7 @@ class StatisticDetailsFragment : PokerAnalyticsFragment() { } } - toolbar.title = stat.localizedTitle(requireContext()) + toolbar.title = this.title ?: stat.localizedTitle(requireContext()) val aggregationTypes = stat.aggregationTypes aggregationTypes.forEachIndexed { index, type -> @@ -117,6 +133,7 @@ class StatisticDetailsFragment : PokerAnalyticsFragment() { return } } + else -> {} } reports[aggregationType]?.let { report -> @@ -191,19 +208,4 @@ class StatisticDetailsFragment : PokerAnalyticsFragment() { } - - /** - * Set data - */ - fun setData(stat: Stat, computableGroup: ComputableGroup, report: Report, displayAggregationChoices: Boolean) { - this.stat = stat - this.computableGroup = computableGroup - this.selectedReport = report - this.displayAggregationChoices = displayAggregationChoices - - stat.aggregationTypes.firstOrNull()?.let { - reports[it] = report - } - } - } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/graph/GraphUnderlyingEntry.kt b/app/src/main/java/net/pokeranalytics/android/ui/graph/GraphUnderlyingEntry.kt index 432d713b..addddf61 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/graph/GraphUnderlyingEntry.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/graph/GraphUnderlyingEntry.kt @@ -22,7 +22,7 @@ interface GraphUnderlyingEntry { ): LegendContent { return when (stat) { - Stat.NUMBER_OF_SETS, Stat.NUMBER_OF_GAMES, Stat.WIN_RATIO -> { + Stat.NUMBER_OF_SETS, Stat.NUMBER_OF_GAMES, Stat.WIN_RATIO, Stat.HOURLY_DURATION, Stat.AVERAGE_HOURLY_DURATION -> { val totalStatValue = stat.format(entry.y.toDouble(), currency = null) DefaultLegendValues(this.entryTitle, totalStatValue) } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/GraphRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/GraphRow.kt index 5803cc84..b877e42e 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/GraphRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/GraphRow.kt @@ -6,7 +6,7 @@ import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType -class GraphRow(var report: Report, var stat: Stat) : RowRepresentable { +class GraphRow(var report: Report, var stat: Stat, var title: String? = null) : RowRepresentable { override val viewType: Int get() = RowViewType.GRAPH.ordinal