diff --git a/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt b/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt index 5fc05390..ba7658ff 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt @@ -23,6 +23,8 @@ enum class LiveData : Localizable { CUSTOM_FIELD, REPORT_SETUP; + var subType:Int? = null + val relatedEntity: Class get() { return when (this) { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt index c16383e7..9bd536d8 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt @@ -24,6 +24,7 @@ import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.fragment.components.DeletableItemFragment import net.pokeranalytics.android.ui.helpers.SwipeToDeleteCallback +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.util.extensions.sorted @@ -53,7 +54,7 @@ open class DataListFragment : DeletableItemFragment(), LiveRowRepresentableDataS } open fun retrieveItems(realm: Realm): RealmResults { - return realm.sorted(this.identifiableClass, editableOnly = true) + return realm.sorted(this.identifiableClass, editableOnly = true, filterableTypeOrdinal = dataType.subType) } override fun deletableItems() : List { 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 611595c2..7ac5b056 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 @@ -158,6 +158,7 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource, } moreFilters.setOnClickListener { + LiveData.FILTER.subType = filterableType.ordinal DataListActivity.newSelectInstance(this, LiveData.FILTER.ordinal, false) } @@ -201,10 +202,7 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource, private fun updateMostUsedFilters() { var nbChips = 0 - val filters = getRealm().sorted(Filter::class.java).filter { - it.filterableType == this.filterableType - } - + val filters = getRealm().sorted(Filter::class.java, editableOnly = false, filterableTypeOrdinal = this.filterableType.ordinal) val currentFilterId = Preferences.getActiveFilterId(requireContext()) if (isUpdating || filters.isEmpty() || (filters.size == 1 && filters.first()?.id == currentFilterId)) { diff --git a/app/src/main/java/net/pokeranalytics/android/util/extensions/RealmExtensions.kt b/app/src/main/java/net/pokeranalytics/android/util/extensions/RealmExtensions.kt index 67bbc119..074abbd0 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/extensions/RealmExtensions.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/extensions/RealmExtensions.kt @@ -1,14 +1,12 @@ package net.pokeranalytics.android.util.extensions -import io.realm.Realm -import io.realm.RealmModel -import io.realm.RealmResults -import io.realm.Sort +import io.realm.* import io.realm.kotlin.where import net.pokeranalytics.android.model.interfaces.CountableUsage import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.model.interfaces.NameManageable import net.pokeranalytics.android.model.realm.* +import net.pokeranalytics.android.ui.interfaces.FilterableType fun Realm.findById(clazz: Class, id: String) : T? { return this.where(clazz).equalTo("id", id).findFirst() @@ -37,18 +35,22 @@ inline fun Realm.getOrCreate(name: String) : T { * Returns all entities of the [clazz] sorted with their default sorting * Set [editableOnly] to true to only receive entities that can be edited */ -fun < T : RealmModel> Realm.sorted(clazz: Class, editableOnly: Boolean = false) : RealmResults { +fun < T : RealmModel> Realm.sorted(clazz: Class, editableOnly: Boolean = false, filterableTypeOrdinal: Int? = null) : RealmResults { val query = this.where(clazz) + when (clazz.kotlin) { + TransactionType::class -> { + if (editableOnly) { + query.equalTo("lock", false) + } + } + Filter::class -> { + filterableTypeOrdinal?.let { + query.equalTo("filterableTypeOrdinal", it) + } + } + } - if (editableOnly) { - when (clazz.kotlin) { - TransactionType::class -> { - query.equalTo("lock", false) - } - } - } - - val items = query.findAll() + val items = query.findAll() var sortField = arrayOf("name") var resultSort = arrayOf(Sort.ASCENDING)