diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/FiltersActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/FiltersActivity.kt index e28cac11..0a7ec411 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/FiltersActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/FiltersActivity.kt @@ -5,35 +5,33 @@ import android.content.Intent import android.os.Bundle import androidx.fragment.app.Fragment import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.fragment.FiltersFragment import net.pokeranalytics.android.ui.interfaces.FilterActivityRequestCode +import net.pokeranalytics.android.ui.interfaces.FilterableType class FiltersActivity : PokerAnalyticsActivity() { enum class IntentKey(val keyName: String) { - FILTER_ID("FILTER_ID"); + FILTER_ID("FILTER_ID"), + FILTERABLE_TYPE("FILTERABLE_TYPE"), + ; } private lateinit var fragment: FiltersFragment companion object { - /** - * Default constructor - */ - fun newInstance(context: Context, filterId: String? = null) { - context.startActivity(getIntent(context, filterId)) - } - /** * Create a new instance for result */ - fun newInstanceForResult(fragment: Fragment, filterId: String? = null) { - fragment.startActivityForResult(getIntent(fragment.requireContext(), filterId), FilterActivityRequestCode.SELECT_FILTER.ordinal) + fun newInstanceForResult(fragment: Fragment, filterId: String? = null, currentFilterable: FilterableType) { + fragment.startActivityForResult(getIntent(fragment.requireContext(), filterId, currentFilterable), FilterActivityRequestCode.SELECT_FILTER.ordinal) } - private fun getIntent(context:Context, filterId:String?) : Intent { + private fun getIntent(context:Context, filterId:String?, currentFilterable: FilterableType) : Intent { val intent = Intent(context, FiltersActivity::class.java) + intent.putExtra(IntentKey.FILTERABLE_TYPE.keyName, currentFilterable.ordinal) filterId?.let { intent.putExtra(IntentKey.FILTER_ID.keyName, it) } @@ -59,11 +57,13 @@ class FiltersActivity : PokerAnalyticsActivity() { val fragmentManager = supportFragmentManager val fragmentTransaction = fragmentManager.beginTransaction() val filterId = intent.getStringExtra(IntentKey.FILTER_ID.keyName) + val ordinal = intent.getIntExtra(IntentKey.FILTERABLE_TYPE.keyName, 0) + val filterableType = FilterableType.values()[ordinal] fragment = FiltersFragment() fragmentTransaction.add(R.id.container, fragment) fragmentTransaction.commit() - fragment.setData(filterId) + fragment.setData(filterId, filterableType) } 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 8c9b6294..88552f8e 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 @@ -214,7 +214,8 @@ class HomeActivity : PokerAnalyticsActivity() { val fragment = supportFragmentManager.fragments[viewPager.currentItem] if (fragment is FilterHandler) { - fragment.manageFilters((fragment)) + + fragment.manageFilters(fragment = fragment) } } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt index 90ee52b4..e485a5e0 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt @@ -11,6 +11,7 @@ import kotlinx.android.synthetic.main.fragment_editable_data.* import kotlinx.android.synthetic.main.fragment_filters.view.* import net.pokeranalytics.android.R import net.pokeranalytics.android.model.realm.Filter +import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.ui.activity.FilterDetailsActivity import net.pokeranalytics.android.ui.activity.FiltersActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity @@ -18,6 +19,7 @@ import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.fragment.components.RealmFragment +import net.pokeranalytics.android.ui.interfaces.FilterableType import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategoryRow import timber.log.Timber @@ -38,6 +40,8 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource, private var rows: ArrayList = ArrayList() private var filterMenu: Menu? = null private var primaryKey: String? = null + private lateinit var filterableType: FilterableType + private var selectedRow: RowRepresentable? = null private var isUpdating = false @@ -165,7 +169,7 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource, } rows.clear() - rows.addAll(FilterCategoryRow.values()) + rows.addAll(FilterCategoryRow.values(this.filterableType)) this.rowRepresentableAdapter = RowRepresentableAdapter(this, this) this.recyclerView.adapter = rowRepresentableAdapter @@ -232,8 +236,9 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource, /** * Set fragment data */ - fun setData(primaryKey: String?) { + fun setData(primaryKey: String?, filterableType: FilterableType) { this.primaryKey = primaryKey + this.filterableType = filterableType } } \ No newline at end of file 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 b565b4bb..20d820bd 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 @@ -25,6 +25,7 @@ import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.ui.activity.FiltersActivity import net.pokeranalytics.android.ui.interfaces.FilterActivityRequestCode import net.pokeranalytics.android.ui.interfaces.FilterHandler +import net.pokeranalytics.android.ui.interfaces.FilterableType import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable import net.pokeranalytics.android.ui.view.rowrepresentable.StatRow @@ -104,6 +105,8 @@ class StatisticsFragment : TableReportFragment(), FilterHandler { this.sessionsChanged() } + override var currentFilterable: FilterableType = FilterableType.SESSION + // Business /** diff --git a/app/src/main/java/net/pokeranalytics/android/ui/interfaces/FilterHandler.kt b/app/src/main/java/net/pokeranalytics/android/ui/interfaces/FilterHandler.kt index c839a791..a2068f3b 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/interfaces/FilterHandler.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/interfaces/FilterHandler.kt @@ -7,6 +7,7 @@ import io.realm.Realm import io.realm.kotlin.where import net.pokeranalytics.android.R import net.pokeranalytics.android.model.LiveData +import net.pokeranalytics.android.model.filter.Filterable import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.ui.activity.DataListActivity import net.pokeranalytics.android.ui.activity.FiltersActivity @@ -19,6 +20,15 @@ enum class FilterActivityRequestCode { ; } +enum class FilterableType { + ALL, + SESSION, + TRANSACTION, + BANKROLL, + HAND_HISTORY, + ; +} + interface FilterHandler { fun createFilter() @@ -38,6 +48,9 @@ interface FilterHandler { } } + var currentFilterable: FilterableType + + /** * Manage filters */ @@ -69,9 +82,9 @@ interface FilterHandler { .setItems(choices.toTypedArray()) { _, which -> Timber.d("Click on $which") when (which) { - 0 -> FiltersActivity.newInstanceForResult(fragment = fragment) + 0 -> FiltersActivity.newInstanceForResult(fragment = fragment, currentFilterable = currentFilterable) 1 -> DataListActivity.newSelectInstance(fragment, LiveData.FILTER.ordinal) - 2 -> FiltersActivity.newInstanceForResult(fragment = fragment, filterId = filterId) + 2 -> FiltersActivity.newInstanceForResult(fragment = fragment, filterId = filterId, currentFilterable = currentFilterable) 3 -> { Preferences.removeActiveFilterId(context) removeFilter() 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 066d7410..42f73322 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 @@ -1,6 +1,13 @@ package net.pokeranalytics.android.ui.view.rowrepresentable +import io.realm.Realm import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.LiveData +import net.pokeranalytics.android.model.filter.Filterable +import net.pokeranalytics.android.model.realm.Filter +import net.pokeranalytics.android.model.realm.Session +import net.pokeranalytics.android.model.realm.Transaction +import net.pokeranalytics.android.ui.interfaces.FilterableType import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow.* @@ -20,6 +27,30 @@ enum class FilterCategoryRow(override val resId: Int?, override val viewType: In //PLAYERS(R.string.players), ; + companion object { + fun values(filterableType:FilterableType): ArrayList { + val list = arrayListOf() + for (category in values()) { + if (category.isAllowed(filterableType)) { + list.add(category) + } + } + return list + } + } + + fun isAllowed(filterableType:FilterableType): Boolean { + return when (filterableType) { + FilterableType.SESSION -> { true } + else -> { + when (this) { + DATE -> true + else -> false + } + } + } + } + val filterElements: List get() { return filterSectionRows.flatMap {