From f91710f9f95610220da95f35bbb988fffb5c3052 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Fri, 19 Apr 2019 14:34:54 +0200 Subject: [PATCH 1/6] Delete unsued resources --- .../drawable-v24/ic_launcher_foreground.xml | 34 --------- .../res/drawable/ic_launcher_background.xml | 74 ------------------- 2 files changed, 108 deletions(-) delete mode 100644 app/src/main/res/drawable-v24/ic_launcher_foreground.xml delete mode 100644 app/src/main/res/drawable/ic_launcher_background.xml diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml deleted file mode 100644 index 6348baae..00000000 --- a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index a0ad202f..00000000 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From d8b59f6d3958cea76e43c12abb4f286e618e9df4 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Fri, 19 Apr 2019 14:35:00 +0200 Subject: [PATCH 2/6] Add loader fragment --- .../android/ui/fragment/ReportsFragment.kt | 4 +-- .../components/LoaderDialogFragment.kt | 27 ++++++++++++++++++- .../components/PokerAnalyticsFragment.kt | 19 +++++++++++++ .../res/drawable/rectangle_rounded_dark.xml | 16 +++++++++++ app/src/main/res/layout/fragment_loader.xml | 21 ++++++++++----- 5 files changed, 78 insertions(+), 9 deletions(-) create mode 100644 app/src/main/res/drawable/rectangle_rounded_dark.xml 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 aee99f2c..de07535b 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 @@ -105,8 +105,7 @@ class ReportsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSour */ private fun launchComputation(comparators: List, reportName: String) { - //val loader = LoaderDialogFragment.newInstance() - //loader.show(activity?.supportFragmentManager, "loader") + showLoader() GlobalScope.launch { @@ -121,6 +120,7 @@ class ReportsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSour launch(Dispatchers.Main) { if (!isDetached) { + hideLoader() ReportDetailsActivity.newInstance(requireContext(), report, reportName) } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/LoaderDialogFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/LoaderDialogFragment.kt index 59f45ca7..82de63d6 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/LoaderDialogFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/LoaderDialogFragment.kt @@ -5,24 +5,49 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.DialogFragment +import kotlinx.android.synthetic.main.fragment_loader.* import net.pokeranalytics.android.R + class LoaderDialogFragment: DialogFragment() { companion object { + + const val ARGUMENT_MESSAGE_RES_ID = "ARGUMENT_MESSAGE_RES_ID" + /** * Create new instance */ - fun newInstance(): LoaderDialogFragment { + fun newInstance(resId: Int? = null, isCancelable: Boolean = false): LoaderDialogFragment { val fragment = LoaderDialogFragment() + fragment.isCancelable = isCancelable val bundle = Bundle() + resId?.let { + bundle.putInt(ARGUMENT_MESSAGE_RES_ID, resId) + } fragment.arguments = bundle return fragment } + } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_loader, container, false) } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + arguments?.let {bundle -> + if (bundle.containsKey(ARGUMENT_MESSAGE_RES_ID)) { + loadingMessage.text = getString(bundle.getInt(ARGUMENT_MESSAGE_RES_ID)) + } + } + } + + override fun onStart() { + super.onStart() + val window = dialog.window + window?.setBackgroundDrawableResource(android.R.color.transparent) + } + } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/PokerAnalyticsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/PokerAnalyticsFragment.kt index e69ce9f6..11ebca17 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/PokerAnalyticsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/PokerAnalyticsFragment.kt @@ -7,6 +7,7 @@ import io.realm.Realm open class PokerAnalyticsFragment: Fragment() { private var realm: Realm? = null + private var loaderDialogFragment: LoaderDialogFragment? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -36,4 +37,22 @@ open class PokerAnalyticsFragment: Fragment() { */ open fun onBackPressed(){} + /** + * Show the loader + */ + fun showLoader(resId: Int? = null, cancelable: Boolean? = false) { + loaderDialogFragment = LoaderDialogFragment.newInstance(resId, false) + activity?.let { + loaderDialogFragment?.show(it.supportFragmentManager, "loader") + } + } + + /** + * Hide the loader + */ + fun hideLoader() { + loaderDialogFragment?.dismiss() + loaderDialogFragment = null + } + } \ No newline at end of file diff --git a/app/src/main/res/drawable/rectangle_rounded_dark.xml b/app/src/main/res/drawable/rectangle_rounded_dark.xml new file mode 100644 index 00000000..7812ee4b --- /dev/null +++ b/app/src/main/res/drawable/rectangle_rounded_dark.xml @@ -0,0 +1,16 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_loader.xml b/app/src/main/res/layout/fragment_loader.xml index c2371f04..f4249f8b 100644 --- a/app/src/main/res/layout/fragment_loader.xml +++ b/app/src/main/res/layout/fragment_loader.xml @@ -2,10 +2,20 @@ + android:background="@android:color/transparent" + android:elevation="4dp"> + + From 9caa12b162d56d3af1f38a48c06991df6b7336f8 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Fri, 19 Apr 2019 14:35:33 +0200 Subject: [PATCH 3/6] fix issues with query condition names --- .../pokeranalytics/android/model/Criteria.kt | 13 +- .../android/model/comparison/Comparator.kt | 19 +-- .../android/model/filter/QueryCondition.kt | 123 +++++++++++------- .../android/ui/fragment/CalendarFragment.kt | 6 +- .../rowrepresentable/FilterCategoryRow.kt | 3 +- .../view/rowrepresentable/FilterElementRow.kt | 19 +-- .../view/rowrepresentable/FilterSectionRow.kt | 35 +---- 7 files changed, 95 insertions(+), 123 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt b/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt index 2fdbdd6b..48c6b3e7 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt @@ -6,13 +6,14 @@ import io.realm.kotlin.where import net.pokeranalytics.android.exceptions.PokerAnalyticsException import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.interfaces.Identifiable +import net.pokeranalytics.android.model.interfaces.NameManageable import net.pokeranalytics.android.model.realm.* import java.util.* sealed class Criteria { abstract class RealmCriteria : Criteria() { - inline fun comparison(): List { - return compare < QueryCondition.QueryDataCondition, T >() + inline fun comparison(): List { + return compare < QueryCondition.QueryDataCondition, T >() } } @@ -48,8 +49,8 @@ sealed class Criteria { object Limits: StaticCriteria() object TableSizes: StaticCriteria() object TournamentTypes: StaticCriteria() - object monthOfYear: SimpleCriteria(List(12) { index -> QueryCondition.MONTH().apply { intValue = index } }) - object dayOfWeek: SimpleCriteria(List(7) { index -> QueryCondition.DAY_OF_WEEK().apply { intValue = index } }) + object monthOfYear: SimpleCriteria(List(12) { index -> QueryCondition.MONTH().apply { intValues = arrayListOf(index)} }) + object dayOfWeek: SimpleCriteria(List(7) { index -> QueryCondition.DAY_OF_WEEK().apply { intValues = arrayListOf(index + 1) } }) object SessionType: SimpleCriteria(listOf(QueryCondition.CASH, QueryCondition.TOURNAMENT)) object BankrollType: SimpleCriteria(listOf(QueryCondition.LIVE, QueryCondition.ONLINE)) object dayPeriod: SimpleCriteria(listOf(QueryCondition.WEEK_DAY, QueryCondition.WEEK_END)) @@ -78,7 +79,7 @@ sealed class Criteria { realm.where().sort("year", Sort.ASCENDING).findFirst()?.year?.let { for (index in 0..(yearNow - it)) { years.add(QueryCondition.YEAR().apply { - intValue = yearNow - index + intValues = arrayListOf(yearNow - index) }) } } @@ -104,7 +105,7 @@ sealed class Criteria { } companion object { - inline fun < reified S : QueryCondition.QueryDataCondition, reified T : Identifiable > compare(): List { + inline fun < reified S : QueryCondition.QueryDataCondition, reified T : NameManageable > compare(): List { val objects = arrayListOf() val realm = Realm.getDefaultInstance() realm.where().findAll().forEach { 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 1d03b614..0b3d4b17 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 @@ -47,22 +47,9 @@ enum class Comparator { realm.close() fees } - MONTH_OF_YEAR -> List(12) { index -> QueryCondition.MONTH().apply { intValue = index } } - DAY_OF_WEEK -> List(7) { index -> QueryCondition.DAY_OF_WEEK().apply { intValue = index } } - YEAR -> { - val years = arrayListOf() - val calendar = Calendar.getInstance() - calendar.time = Date() - val yearNow = calendar.get(Calendar.YEAR) - val realm = Realm.getDefaultInstance() - realm.where().sort("year", Sort.ASCENDING).findFirst()?.year?.let { - for (index in 0..(yearNow - it)) { - years.add(QueryCondition.YEAR().apply { intValue = yearNow - index }) - } - } - realm.close() - years - } + MONTH_OF_YEAR -> Criteria.monthOfYear.queryConditions + DAY_OF_WEEK -> Criteria.dayOfWeek.queryConditions + YEAR -> Criteria.Year.queryConditions DAY_PERIOD -> listOf(QueryCondition.WEEK_DAY, QueryCondition.WEEK_END) CASH -> listOf(QueryCondition.CASH) TOURNAMENT -> listOf(QueryCondition.TOURNAMENT) diff --git a/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt b/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt index f4a0d7e3..6191dcda 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt @@ -5,16 +5,20 @@ import io.realm.* import io.realm.kotlin.where import io.realm.RealmQuery import io.realm.internal.Table +import net.pokeranalytics.android.R +import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.exceptions.PokerAnalyticsException import net.pokeranalytics.android.model.Limit import net.pokeranalytics.android.model.TableSize import net.pokeranalytics.android.model.TournamentType import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.model.interfaces.Manageable +import net.pokeranalytics.android.model.interfaces.NameManageable import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElementRow +import net.pokeranalytics.android.util.NULL_TEXT import net.pokeranalytics.android.util.extensions.endOfDay import net.pokeranalytics.android.util.extensions.startOfDay import java.text.DateFormatSymbols @@ -22,7 +26,7 @@ import java.util.* import kotlin.collections.ArrayList fun List.name() : String { - return this.map { it.label() }.joinToString(" / ") + return this.map { it.getDisplayName() }.joinToString(" / ") } //inline fun List.query(realm: Realm): RealmQuery { @@ -44,11 +48,7 @@ inline fun List.queryWith(query: RealmQ * A new type should also set the expected numericValues required in the [filterValuesExpectedKeys] */ -interface Labelable { - fun label() : String -} - -sealed class QueryCondition : FilterElementRow, Labelable { +sealed class QueryCondition : FilterElementRow { interface Valuable > { var values: ArrayList? @@ -112,10 +112,11 @@ sealed class QueryCondition : FilterElementRow, Labelable { } } - override fun label(): String { + override fun getDisplayName(): String { return when (this) { - is YEAR -> "$intValue" - is MONTH -> DateFormatSymbols.getInstance(Locale.getDefault()).months[intValue] + is StaticDataQueryCondition -> label() + is QueryDataCondition<*> -> label() + is BLIND -> this.blind!! else -> baseId } } @@ -130,23 +131,34 @@ sealed class QueryCondition : FilterElementRow, Labelable { override var doubleValues = ArrayList() } - abstract class QueryDataCondition < T: Identifiable> : QueryCondition(), asListOfString { + abstract class QueryDataCondition < T: NameManageable > : QueryCondition(), asListOfString { fun setObject(dataObject: T) { this.dataObject = dataObject this.stringValues.add(dataObject.id) } - var dataObject: Identifiable? = null + + var dataObject: NameManageable? = null override var stringValues = ArrayList() - val name: String - get() { - if (stringValues.size > 1) { - return "multiple" - } else { - return (dataObject as RowRepresentable).getDisplayName() + abstract val entity : Class + + fun label(): String { + val realm = Realm.getDefaultInstance() + val completeLabel = when (stringValues.size) { + 0 -> return NULL_TEXT + 1,2 -> { + return stringValues.map { labelForValue(realm, it) }.joinToString(", ") } - return "todo" + else -> "${stringValues.size} $baseId" } + realm.close() + return completeLabel + } + + fun labelForValue(realm:Realm, value:String): String { + val query = realm.where(entity) + return query.equalTo("id", value).findFirst()?.name ?: NULL_TEXT + } } companion object { @@ -189,51 +201,52 @@ sealed class QueryCondition : FilterElementRow, Labelable { abstract class StaticDataQueryCondition : QueryCondition(), asListOfInt { var data : RowRepresentable? = null override var doubleValues = ArrayList() + abstract fun labelForValue(value:Int): String? + + fun label(): String { + return when (intValues.size) { + 0 -> return NULL_TEXT + 1,2 -> intValues.map { labelForValue(it) }.joinToString(", ") + else -> "${intValues.size} $baseId" + } + } } object LIVE : QueryCondition() object CASH : QueryCondition() object ONLINE : QueryCondition() object TOURNAMENT: QueryCondition() - class BANKROLL: QueryDataCondition() - class GAME: QueryDataCondition() - class TOURNAMENT_NAME: QueryDataCondition() - class ANY_TOURNAMENT_FEATURES: QueryDataCondition() - class ALL_TOURNAMENT_FEATURES: QueryDataCondition() - class LOCATION: QueryDataCondition() + class BANKROLL: QueryDataCondition() { override val entity: Class = Bankroll::class.java } + class GAME: QueryDataCondition() { override val entity: Class = Game::class.java } + class TOURNAMENT_NAME: QueryDataCondition() { override val entity: Class = TournamentName::class.java } + class ANY_TOURNAMENT_FEATURES: QueryDataCondition() { override val entity: Class = TournamentFeature::class.java } + class ALL_TOURNAMENT_FEATURES: QueryDataCondition() { override val entity: Class = TournamentFeature::class.java } + class LOCATION: QueryDataCondition() { override val entity: Class = Location::class.java } class LIMIT: StaticDataQueryCondition() { - val limit : Limit get() { return Limit.values()[intValues.first()] } - val name: String - get() { - if (intValues.size > 1) { - return "multiple" - } else if (intValues.size > 0) { - return Limit.values()[intValues.first()].longName - } - return "todo" - } + override fun labelForValue(value: Int): String? { + return Limit.values()[value].longName + } } class TABLE_SIZE: StaticDataQueryCondition() { - val tableSize: TableSize get() { return TableSize.all[intValues.first()] } + val tableSize: TableSize get() { return TableSize(intValues.first()) } + //TODO dynamize this + override val resId: Int? = R.string.max override fun localizedTitle(context: Context): String { return this.tableSize.localizedTitle(context) } + override fun labelForValue(value: Int): String? { + return null + } } class TOURNAMENT_TYPE: StaticDataQueryCondition() { - val name: String - get() { - if (intValues.size > 1) { - return "multiple" - } else { - return TournamentType.values()[intValues.first()].getDisplayName() - } - return "todo" - } + override fun labelForValue(value: Int): String { + return TournamentType.values()[value].getDisplayName() + } } class BLIND: QueryCondition(), asListOfString, asListOfBoolean { @@ -291,9 +304,25 @@ sealed class QueryCondition : FilterElementRow, Labelable { class STARTED_TO_DATE: DateQuery(), Less class ENDED_FROM_DATE: DateQuery() class ENDED_TO_DATE: DateQuery(), Less - class DAY_OF_WEEK: SingleValueQueryCondition() - class MONTH: SingleValueQueryCondition() - class YEAR: SingleValueQueryCondition() + + class DAY_OF_WEEK: StaticDataQueryCondition() { + override fun labelForValue(value: Int): String { + return DateFormatSymbols.getInstance(Locale.getDefault()).weekdays[value] + } + } + + class MONTH: StaticDataQueryCondition() { + override fun labelForValue(value: Int): String { + return DateFormatSymbols.getInstance(Locale.getDefault()).months[value] + } + } + + class YEAR: StaticDataQueryCondition() { + override fun labelForValue(value: Int): String { + return "$value" + } + } + object WEEK_DAY: QueryCondition() object WEEK_END: QueryCondition() object TODAY: QueryCondition() 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 a88f35d6..209a136f 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 @@ -256,8 +256,8 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep // Set date data conditions.forEach { condition -> when (condition) { - is QueryCondition.YEAR -> calendar.set(Calendar.YEAR, condition.intValue) - is QueryCondition.MONTH -> calendar.set(Calendar.MONTH, condition.intValue) + is QueryCondition.YEAR -> calendar.set(Calendar.YEAR, condition.intValues.first()) + is QueryCondition.MONTH -> calendar.set(Calendar.MONTH, condition.intValues.first()) } } @@ -282,7 +282,7 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep // Set date data conditions.forEach { condition -> when (condition) { - is QueryCondition.YEAR -> calendar.set(Calendar.YEAR, condition.intValue) + is QueryCondition.YEAR -> calendar.set(Calendar.YEAR, condition.intValues.first()) } } yearlyReports[calendar.time] = computedResults diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterCategoryRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterCategoryRow.kt index d22bd4d0..3a4cf3a0 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterCategoryRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterCategoryRow.kt @@ -33,7 +33,8 @@ enum class FilterCategoryRow(override val resId: Int?, override val viewType: In GENERAL -> arrayListOf( CASH_TOURNAMENT, LIVE_ONLINE, - GAME, LIMIT_TYPE, + GAME, + LIMIT_TYPE, TABLE_SIZE ) DATE -> arrayListOf( diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt index 6ba208a4..7fefbff4 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt @@ -49,7 +49,7 @@ interface FilterElementRow : RowRepresentable { is QueryCondition.MAX_RE_BUY -> R.string.maximum is QueryCondition.More -> R.string.more_than is QueryCondition.Less -> R.string.less_than - else -> null + else -> super.resId } } @@ -98,23 +98,6 @@ interface FilterElementRow : RowRepresentable { } } - override fun getDisplayName(): String { - return when (this) { - is QueryCondition.SingleValueQueryCondition -> { - when (this) { - is QueryCondition.DAY_OF_WEEK -> DateFormatSymbols.getInstance(Locale.getDefault()).weekdays[this.intValue] - is QueryCondition.MONTH -> DateFormatSymbols.getInstance(Locale.getDefault()).months[this.intValue] - else -> "${this.intValue}" - } - } - is QueryCondition.QueryDataCondition<*> -> this.name - is QueryCondition.LIMIT -> this.name - is QueryCondition.TOURNAMENT_TYPE -> this.name - is QueryCondition.BLIND -> this.blind!! - else -> super.getDisplayName() - } - } - var filterSectionRow: FilterSectionRow val sectionToExclude: List? diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSectionRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSectionRow.kt index deba6d92..68faf364 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSectionRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSectionRow.kt @@ -85,38 +85,9 @@ enum class FilterSectionRow(override val resId: Int?) : RowRepresentable { FIXED_DATE -> arrayListOf(QueryCondition.STARTED_FROM_DATE(), QueryCondition.ENDED_TO_DATE()) DURATION -> arrayListOf(QueryCondition.PAST_DAYS()) WEEKDAYS_OR_WEEKEND -> arrayListOf(QueryCondition.WEEK_DAY, QueryCondition.WEEK_END) - /* - YEAR -> { - val years = arrayListOf() - val realm = Realm.getDefaultInstance() - val distinctYears = - realm.where().distinct("year").findAll().sort("year", Sort.DESCENDING) - distinctYears.forEach { session -> - session.year?.let { year -> - years.add(Year(year)) - } - } - realm.close() - years - } - DAY_OF_WEEK -> { - val daysOfWeek = arrayListOf() - DateFormatSymbols.getInstance(Locale.getDefault()).weekdays.forEachIndexed { index, day -> - if (day.isNotEmpty()) { - daysOfWeek.add(Day(index)) - } - } - daysOfWeek - } - MONTH_OF_YEAR -> { - val months = arrayListOf() - DateFormatSymbols.getInstance(Locale.getDefault()).months.forEachIndexed { index, month -> - if (month.isNotEmpty()) { - months.add(Month(index)) - } - } - months - }*/ + YEAR -> Criteria.Year.queryConditions + DAY_OF_WEEK -> Criteria.dayOfWeek.queryConditions + MONTH_OF_YEAR -> Criteria.monthOfYear.queryConditions // Duration SESSION_DURATION -> arrayListOf(QueryCondition.MORE_THAN_DURATION(), QueryCondition.LESS_THAN_DURATION() as QueryCondition) From 4bab8f96d1f72320735209f5090969a99bb79685 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Fri, 19 Apr 2019 15:03:41 +0200 Subject: [PATCH 4/6] fix issues with blinds --- .../net/pokeranalytics/android/model/Criteria.kt | 3 ++- .../android/model/comparison/Comparator.kt | 13 +------------ .../ui/view/rowrepresentable/FilterCategoryRow.kt | 7 ++----- .../ui/view/rowrepresentable/FilterSectionRow.kt | 13 +------------ 4 files changed, 6 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt b/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt index 48c6b3e7..0ac16179 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt @@ -89,7 +89,8 @@ sealed class Criteria { is Blinds -> { val blinds = arrayListOf() val realm = Realm.getDefaultInstance() - realm.where().distinct("blinds", "bankroll.currency.code").findAll().sort("cgSmallBlind", Sort.ASCENDING).map { + val query = realm.where().distinct("blinds").findAll().sort("cgSmallBlind", Sort.ASCENDING) + query.map { it.blinds?.let { stake -> blinds.add(QueryCondition.BLIND().apply { blind = stake 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 0b3d4b17..6a89abe0 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 @@ -55,18 +55,7 @@ enum class Comparator { TOURNAMENT -> listOf(QueryCondition.TOURNAMENT) LIVE -> listOf(QueryCondition.LIVE) ONLINE -> listOf(QueryCondition.ONLINE) - BLIND -> { - val blinds = arrayListOf() - val realm = Realm.getDefaultInstance() - realm.where().distinct("blinds", "bankroll.currency.code").findAll().sort("cgSmallBlind", Sort.ASCENDING).map { - it.blinds?.let { stake -> - blinds.add(QueryCondition.BLIND().apply { blind = stake - hasDefaultCurrency = it.hasDefaultCurrency }) - } - } - realm.close() - blinds - } + BLIND -> Criteria.Blinds.queryConditions BANKROLL -> Criteria.Bankrolls.queryConditions GAME -> Criteria.Games.queryConditions TOURNAMENT_NAME-> Criteria.TournamentNames.queryConditions diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterCategoryRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterCategoryRow.kt index 3a4cf3a0..3bdaf4e4 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterCategoryRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterCategoryRow.kt @@ -60,11 +60,8 @@ enum class FilterCategoryRow(override val resId: Int?, override val viewType: In ) TOURNAMENT -> arrayListOf( TOURNAMENT_TYPE, - COMPLETION_PERCENTAGE, - PLACE, - PLAYERS_COUNT, - TOURNAMENT_RE_BUY_COUNT, - BUY_IN + TOURNAMENT_NAME, + TOURNAMENT_FEATURE ) ONLINE -> arrayListOf( MULTI_TABLING diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSectionRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSectionRow.kt index 68faf364..ea802476 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSectionRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSectionRow.kt @@ -104,18 +104,7 @@ enum class FilterSectionRow(override val resId: Int?) : RowRepresentable { SESSIONS -> arrayListOf(QueryCondition.LAST_GAMES(), QueryCondition.LAST_SESSIONS()) // Cash - /* - BLIND -> { - val blinds = arrayListOf() - val realm = Realm.getDefaultInstance() - realm.where().distinct("blind", "bankroll.currency.code").findAll().sort("cgSmallBlind", Sort.ASCENDING).map { - it.blinds?.let { stake -> - blinds.add(Blind(stake, it.hasDefaultCurrency)) - } - } - realm.close() - blinds - }*/ + BLIND -> Criteria.Blinds.queryConditions CASH_RE_BUY_COUNT -> arrayListOf( QueryCondition.MAX_RE_BUY(), QueryCondition.MIN_RE_BUY() From d1a446107375449771e23c8f86b744cfa89ab87b Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Fri, 19 Apr 2019 15:26:46 +0200 Subject: [PATCH 5/6] add day period comparator --- .../net/pokeranalytics/android/model/comparison/Comparator.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 6a89abe0..6e0d8010 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 @@ -50,7 +50,7 @@ enum class Comparator { MONTH_OF_YEAR -> Criteria.monthOfYear.queryConditions DAY_OF_WEEK -> Criteria.dayOfWeek.queryConditions YEAR -> Criteria.Year.queryConditions - DAY_PERIOD -> listOf(QueryCondition.WEEK_DAY, QueryCondition.WEEK_END) + DAY_PERIOD -> Criteria.dayPeriod.queryConditions CASH -> listOf(QueryCondition.CASH) TOURNAMENT -> listOf(QueryCondition.TOURNAMENT) LIVE -> listOf(QueryCondition.LIVE) From f67429b678374f3c9a24555d461f7cd003c4eba8 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Fri, 19 Apr 2019 15:54:21 +0200 Subject: [PATCH 6/6] some clean up --- .../pokeranalytics/android/model/TableSize.kt | 8 ++ .../android/model/filter/QueryCondition.kt | 121 ++++++++---------- .../view/rowrepresentable/FilterElementRow.kt | 2 +- .../view/rowrepresentable/FilterSectionRow.kt | 2 +- 4 files changed, 65 insertions(+), 68 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/TableSize.kt b/app/src/main/java/net/pokeranalytics/android/model/TableSize.kt index 165ed238..c1bba39f 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/TableSize.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/TableSize.kt @@ -14,6 +14,14 @@ class TableSize(var numberOfPlayer: Int, var rowViewType: Int = RowViewType.TITL } } + override fun getDisplayName(): String { + return if (this.numberOfPlayer == 2) { + return "HU" + } else { + "${this.numberOfPlayer}-max" + } + } + override val resId: Int? get() { return if (this.numberOfPlayer == 2) { diff --git a/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt b/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt index 6191dcda..cc524dff 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt @@ -50,6 +50,37 @@ inline fun List.queryWith(query: RealmQ sealed class QueryCondition : FilterElementRow { + companion object { + fun valueOf(name:String) : QueryCondition { + val kClass = Class.forName("${QueryCondition::class.qualifiedName}$$name").kotlin + val instance = kClass.objectInstance ?: kClass.java.newInstance() + return instance as QueryCondition + } + + inline fun getInstance(): QueryCondition { + return when (T::class.java) { + Bankroll::class.java -> BANKROLL() + Game::class.java -> GAME() + Location::class.java -> LOCATION() + TournamentName::class.java -> TOURNAMENT_NAME() + TournamentFeature::class.java -> ANY_TOURNAMENT_FEATURES() + else -> throw PokerAnalyticsException.QueryTypeUnhandled + } + } + + inline fun < reified T: Filterable, reified S: QueryCondition>distinct(): RealmResults? { + FilterHelper.fieldNameForQueryType(S::class.java)?.let { + val realm = Realm.getDefaultInstance() + val distincts = realm.where().distinct(it).findAll().sort(it, Sort.ASCENDING) + realm.close() + return distincts + } + return null + } + + + } + interface Valuable > { var values: ArrayList? } @@ -123,14 +154,6 @@ sealed class QueryCondition : FilterElementRow { override var filterSectionRow: FilterSectionRow = FilterSectionRow.CASH_TOURNAMENT - open class OperationQueryCondition : QueryCondition(), asDoubleValue { - override var doubleValues = ArrayList() - } - - open class BetweenQueryCondition : QueryCondition(), asListOfDouble { - override var doubleValues = ArrayList() - } - abstract class QueryDataCondition < T: NameManageable > : QueryCondition(), asListOfString { fun setObject(dataObject: T) { this.dataObject = dataObject @@ -161,39 +184,6 @@ sealed class QueryCondition : FilterElementRow { } } - companion object { - fun valueOf(name:String) : QueryCondition { - val kClass = Class.forName("${QueryCondition::class.qualifiedName}$$name").kotlin - val instance = kClass.objectInstance ?: kClass.java.newInstance() - return instance as QueryCondition - } - - inline fun getInstance(): QueryCondition { - return when (T::class.java) { - Bankroll::class.java -> BANKROLL() - Game::class.java -> GAME() - Location::class.java -> LOCATION() - TournamentName::class.java -> TOURNAMENT_NAME() - TournamentFeature::class.java -> ANY_TOURNAMENT_FEATURES() - else -> throw PokerAnalyticsException.QueryTypeUnhandled - } - } - - inline fun < reified T: Filterable, reified S: QueryCondition>distinct(): RealmResults? { - FilterHelper.fieldNameForQueryType(S::class.java)?.let { - val realm = Realm.getDefaultInstance() - val distincts = realm.where().distinct(it).findAll().sort(it, Sort.ASCENDING) - realm.close() - return distincts - } - return null - } - - - } - - //open val name: String = this::class.simpleName ?: throw PokerAnalyticsException.FilterElementUnknownName - abstract class SingleValueQueryCondition : QueryCondition(), asIntValue { override var doubleValues = ArrayList() } @@ -201,7 +191,7 @@ sealed class QueryCondition : FilterElementRow { abstract class StaticDataQueryCondition : QueryCondition(), asListOfInt { var data : RowRepresentable? = null override var doubleValues = ArrayList() - abstract fun labelForValue(value:Int): String? + abstract fun labelForValue(value:Int): String fun label(): String { return when (intValues.size) { @@ -212,6 +202,23 @@ sealed class QueryCondition : FilterElementRow { } } + open class OperationQueryCondition : QueryCondition(), asDoubleValue { + override var doubleValues = ArrayList() + } + + open class BetweenQueryCondition : QueryCondition(), asListOfDouble { + override var doubleValues = ArrayList() + } + + open class DateQuery: QueryCondition(), asDateValue { + override var dateValue: Date = Date() + override val showTime: Boolean = false + } + + open class TimeQuery: DateQuery() { + override val showTime: Boolean = true + } + object LIVE : QueryCondition() object CASH : QueryCondition() object ONLINE : QueryCondition() @@ -224,22 +231,14 @@ sealed class QueryCondition : FilterElementRow { class LOCATION: QueryDataCondition() { override val entity: Class = Location::class.java } class LIMIT: StaticDataQueryCondition() { - override fun labelForValue(value: Int): String? { - return Limit.values()[value].longName + override fun labelForValue(value: Int): String { + return Limit.values()[value].getDisplayName() } } class TABLE_SIZE: StaticDataQueryCondition() { - val tableSize: TableSize get() { return TableSize(intValues.first()) } - //TODO dynamize this - override val resId: Int? = R.string.max - - override fun localizedTitle(context: Context): String { - return this.tableSize.localizedTitle(context) - } - - override fun labelForValue(value: Int): String? { - return null + override fun labelForValue(value: Int): String { + return TableSize(value).getDisplayName() } } @@ -287,18 +286,8 @@ sealed class QueryCondition : FilterElementRow { doubleValues.add(rightValue) } } - class MIN_RE_BUY: OperationQueryCondition(), More - class MAX_RE_BUY: OperationQueryCondition(), Less - - // Dates - open class DateQuery: QueryCondition(), asDateValue { - override var dateValue: Date = Date() - override val showTime: Boolean = false - } - - open class TimeQuery: DateQuery() { - override val showTime: Boolean = true - } + class MIN_RE_BUY: OperationQueryCondition(), More, Amount + class MAX_RE_BUY: OperationQueryCondition(), Less, Amount class STARTED_FROM_DATE: DateQuery() class STARTED_TO_DATE: DateQuery(), Less diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt index 7fefbff4..f0a5f15b 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt @@ -49,7 +49,7 @@ interface FilterElementRow : RowRepresentable { is QueryCondition.MAX_RE_BUY -> R.string.maximum is QueryCondition.More -> R.string.more_than is QueryCondition.Less -> R.string.less_than - else -> super.resId + else -> null } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSectionRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSectionRow.kt index ea802476..2bd511e4 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSectionRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSectionRow.kt @@ -107,7 +107,7 @@ enum class FilterSectionRow(override val resId: Int?) : RowRepresentable { BLIND -> Criteria.Blinds.queryConditions CASH_RE_BUY_COUNT -> arrayListOf( QueryCondition.MAX_RE_BUY(), - QueryCondition.MIN_RE_BUY() + QueryCondition.MIN_RE_BUY() as QueryCondition ) // Tournament