From e2e8ea7903f97606eb7a74b3239c867b86a20c80 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Fri, 17 May 2019 18:19:42 +0200 Subject: [PATCH] Start working on filters management --- .../android/model/realm/Filter.kt | 13 ++- .../android/ui/fragment/FiltersFragment.kt | 66 +++++++++++++-- .../android/ui/fragment/StatisticsFragment.kt | 4 +- app/src/main/res/layout/fragment_filters.xml | 80 +++---------------- 4 files changed, 82 insertions(+), 81 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt index 1c72398b..cba181ef 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt @@ -4,9 +4,12 @@ import android.content.Context import io.realm.* import io.realm.annotations.PrimaryKey import io.realm.kotlin.where +import net.pokeranalytics.android.R import net.pokeranalytics.android.model.filter.Filterable import net.pokeranalytics.android.model.filter.Query import net.pokeranalytics.android.model.filter.QueryCondition +import net.pokeranalytics.android.model.interfaces.Deletable +import net.pokeranalytics.android.model.interfaces.DeleteValidityStatus import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.ui.interfaces.FilterableType import net.pokeranalytics.android.ui.view.RowRepresentable @@ -18,7 +21,7 @@ import java.util.* * It contains a list of [FilterCondition] describing the complete query to launch * The [Filter] is working closely with a [Filterable] interface providing the entity we want the query being launched on */ -open class Filter : RealmObject(), RowRepresentable, Identifiable { +open class Filter : RealmObject(), RowRepresentable, Identifiable, Deletable { companion object { @@ -162,4 +165,12 @@ open class Filter : RealmObject(), RowRepresentable, Identifiable { if (name.isNotEmpty()) return name return this.query.getName(context) } + + override fun isValidForDelete(realm: Realm): Boolean { + return true + } + + override fun getFailedDeleteMessage(status: DeleteValidityStatus): Int { + return R.string.relationship_error + } } 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 8b27a6fd..f8e1bdd0 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 @@ -1,14 +1,16 @@ package net.pokeranalytics.android.ui.fragment -import android.app.Activity import android.app.Activity.RESULT_OK import android.content.Intent import android.os.Bundle import android.view.* import androidx.recyclerview.widget.LinearLayoutManager +import com.google.android.material.chip.Chip import io.realm.kotlin.where -import kotlinx.android.synthetic.main.fragment_editable_data.* -import kotlinx.android.synthetic.main.fragment_filters.view.* +import kotlinx.android.synthetic.main.fragment_editable_data.appBar +import kotlinx.android.synthetic.main.fragment_editable_data.recyclerView +import kotlinx.android.synthetic.main.fragment_filters.* +import kotlinx.android.synthetic.main.fragment_filters.view.toolbar import net.pokeranalytics.android.R import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.ui.activity.FilterDetailsActivity @@ -16,10 +18,13 @@ import net.pokeranalytics.android.ui.activity.FiltersActivity 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.extensions.px 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 net.pokeranalytics.android.util.Preferences +import net.pokeranalytics.android.util.sorted import timber.log.Timber @@ -37,7 +42,7 @@ 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 lateinit var filterableType: FilterableType private var selectedRow: RowRepresentable? = null private var isUpdating = false @@ -56,7 +61,7 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource, override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) - if (requestCode == REQUEST_CODE_FILTER_DETAILS && resultCode == Activity.RESULT_OK) { + if (requestCode == REQUEST_CODE_FILTER_DETAILS && resultCode == RESULT_OK) { /* Timber.d("onActivityResult: $requestCode") @@ -136,6 +141,49 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource, setHasFixedSize(true) layoutManager = viewManager } + + val filters = getRealm().sorted(Filter::class.java) + val currentFilterId = Preferences.getActiveFilterId(requireContext()) + + mostUsedFilters.removeAllViews() + filters.forEachIndexed { index, filter -> + if (index < 5) { + val chip = Chip(requireContext()) + chip.id = View.generateViewId() + chip.tag = filter.id + chip.text = filter.getDisplayName(requireContext()) + chip.chipStartPadding = 8f.px + chip.chipEndPadding = 8f.px + + chip.isCloseIconVisible = true + chip.isChecked = filter.id == currentFilterId + chip.setOnCloseIconClickListener { + Preferences.removeActiveFilterId(requireContext()) + chip.isChecked = false + } + chip.setOnClickListener { + deleteFilter(false) + finishActivityWithResult(filter.id) + } + mostUsedFilters.addView(chip) + } + } + + /* + Limit.values().forEach { + val chip = Chip(requireContext()) + chip.id = it.ordinal + chip.text = it.shortName + chip.chipStartPadding = 8f.px + chip.chipEndPadding = 8f.px + chip.isChecked = false + mostUsedFilters.addView(chip) + } + + mostUsedFilters.setOnCheckedChangeListener { _, i -> + } + */ + } /** @@ -208,14 +256,16 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource, /** * Delete data */ - private fun deleteFilter() { + private fun deleteFilter(closeActivity: Boolean = true) { Timber.d("Delete queryWith") val realm = getRealm() realm.beginTransaction() currentFilter?.deleteFromRealm() realm.commitTransaction() - finishActivityWithResult("") + if (closeActivity) { + finishActivityWithResult("") + } } /** @@ -233,7 +283,7 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource, */ fun setData(primaryKey: String?, filterableType: FilterableType) { this.primaryKey = primaryKey - this.filterableType = filterableType + 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 94c6b5a3..dee2be17 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 @@ -22,7 +22,7 @@ import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.realm.ComputableResult import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.ui.activity.FiltersActivity -import net.pokeranalytics.android.ui.fragment.components.RealmFragment +import net.pokeranalytics.android.ui.fragment.components.FilterableFragment import net.pokeranalytics.android.ui.fragment.report.ComposableTableReportFragment import net.pokeranalytics.android.ui.interfaces.FilterActivityRequestCode import net.pokeranalytics.android.ui.interfaces.FilterHandler @@ -31,7 +31,7 @@ import timber.log.Timber import java.util.* import kotlin.coroutines.CoroutineContext -class StatisticsFragment : RealmFragment(), FilterHandler { +class StatisticsFragment : FilterableFragment(), FilterHandler { val coroutineContext: CoroutineContext get() = Dispatchers.Main diff --git a/app/src/main/res/layout/fragment_filters.xml b/app/src/main/res/layout/fragment_filters.xml index 505687b9..067e048f 100644 --- a/app/src/main/res/layout/fragment_filters.xml +++ b/app/src/main/res/layout/fragment_filters.xml @@ -19,6 +19,16 @@ app:title="Poker Analytics" app:titleTextColor="@color/white" /> + @@ -46,74 +56,4 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file