From c94b42abe8930f90f9bc0679e0efadc0119f9849 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Thu, 6 Jun 2019 12:33:43 +0200 Subject: [PATCH] Add filter name edition --- app/src/main/AndroidManifest.xml | 5 + .../android/model/realm/Filter.kt | 204 +++++++++++------- .../ui/activity/FiltersListActivity.kt | 58 +++++ .../android/ui/fragment/DataListFragment.kt | 4 +- .../android/ui/fragment/FiltersFragment.kt | 4 +- .../ui/fragment/FiltersListFragment.kt | 122 +++++++++++ .../BottomSheetDoubleEditTextFragment.kt | 1 - .../BottomSheetEditTextFragment.kt | 1 - .../bottomsheet/BottomSheetFragment.kt | 2 +- .../BottomSheetNumericTextFragment.kt | 1 - .../android/ui/interfaces/FilterHandler.kt | 114 +++++----- .../main/res/layout/activity_filters_list.xml | 15 ++ 12 files changed, 383 insertions(+), 148 deletions(-) create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/activity/FiltersListActivity.kt create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersListFragment.kt create mode 100644 app/src/main/res/layout/activity_filters_list.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c296be62..8cf3f769 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -109,6 +109,11 @@ android:launchMode="singleTop" android:screenOrientation="portrait" /> + + ().equalTo("id", filterId).findFirst() } - inline fun queryOn(realm: Realm, query: Query, sortField: String? = null): RealmResults { - val realmQuery = realm.where() - sortField?.let { - return query.queryWith(realmQuery).sort(it).findAll() - } ?: run { - return query.queryWith(realmQuery).findAll() - } - } - } + inline fun queryOn(realm: Realm, query: Query, sortField: String? = null): RealmResults { + val realmQuery = realm.where() + sortField?.let { + return query.queryWith(realmQuery).sort(it).findAll() + } ?: run { + return query.queryWith(realmQuery).findAll() + } + } + } + + override val viewType: Int + get() = RowViewType.TITLE_VALUE_ACTION.ordinal + override val imageRes: Int? + get() = R.drawable.ic_outline_settings + override val imageTint: Int? + get() = R.color.green + override val imageClickable: Boolean? + get() = true + @PrimaryKey - override var id = UUID.randomUUID().toString() + override var id = UUID.randomUUID().toString() // the queryWith name var name: String = "" - get() { - if (field.isEmpty()) { - return this.query.defaultName - } - return field - } + get() { + if (field.isEmpty()) { + return this.query.defaultName + } + return field + } - override var useCount: Int = 0 + override var useCount: Int = 0 var filterConditions: RealmList = RealmList() private set - private var filterableTypeUniqueIdentifier: Int? = null + private var filterableTypeUniqueIdentifier: Int? = null - val filterableType: FilterableType - get() { - this.filterableTypeUniqueIdentifier?.let { - return FilterableType.valueByIdentifier(it) - } - return FilterableType.ALL - } + val filterableType: FilterableType + get() { + this.filterableTypeUniqueIdentifier?.let { + return FilterableType.valueByIdentifier(it) + } + return FilterableType.ALL + } fun createOrUpdateFilterConditions(filterConditionRows: ArrayList) { - println("list of querys saving: ${filterConditionRows.map { it.id }}") - println("list of querys previous: ${this.filterConditions.map { it.queryCondition.id }}") - filterConditionRows + Timber.d("list of querys saving: ${filterConditionRows.map { it.id }}") + Timber.d("list of querys previous: ${this.filterConditions.map { it.queryCondition.id }}") + filterConditionRows .map { it.groupId } .distinct() - .forEach { groupId-> + .forEach { groupId -> filterConditionRows .filter { it.groupId == groupId } .apply { - println("list of querys: ${this.map { it.id }}") - val casted = arrayListOf() - casted.addAll(this) - val newFilterCondition = FilterCondition(casted) - val previousCondition = filterConditions.filter { - it.filterName == newFilterCondition.filterName && it.operator == newFilterCondition.operator - } - filterConditions.removeAll(previousCondition) - filterConditions.add(newFilterCondition) - } + Timber.d("list of querys: ${this.map { it.id }}") + val casted = arrayListOf() + casted.addAll(this) + val newFilterCondition = FilterCondition(casted) + val previousCondition = filterConditions.filter { + it.filterName == newFilterCondition.filterName && it.operator == newFilterCondition.operator + } + filterConditions.removeAll(previousCondition) + filterConditions.add(newFilterCondition) + } } } - fun remove(filterCategoryRow: FilterCategoryRow) { - val sections = filterCategoryRow.filterSectionRows.map { it.name } - val savedSections = filterConditions.filter { sections.contains(it.sectionName) } - this.filterConditions.removeAll(savedSections) - } + fun remove(filterCategoryRow: FilterCategoryRow) { + val sections = filterCategoryRow.filterSectionRows.map { it.name } + val savedSections = filterConditions.filter { sections.contains(it.sectionName) } + this.filterConditions.removeAll(savedSections) + } fun countBy(filterCategoryRow: FilterCategoryRow): Int { val sections = filterCategoryRow.filterSectionRows.map { it.name } - println("list of sections $sections") - val savedSections = filterConditions.filter { sections.contains(it.sectionName) }.flatMap { it.queryCondition.id } - println("list of savedSections $savedSections") - return savedSections.size + Timber.d("list of sections $sections") + val savedSections = filterConditions.filter { sections.contains(it.sectionName) }.flatMap { it.queryCondition.id } + Timber.d("list of savedSections $savedSections") + return savedSections.size } fun contains(filterElementRow: QueryCondition): Boolean { - println("list of saved queries ${filterConditions.map { it.queryCondition.id }}") - println("list of contains ${filterElementRow.id}") - val contained = filterConditions.flatMap{ it.queryCondition.id }.contains(filterElementRow.id.first()) - println("list of : $contained") - return contained + Timber.d("list of saved queries ${filterConditions.map { it.queryCondition.id }}") + Timber.d("list of contains ${filterElementRow.id}") + val contained = filterConditions.flatMap { it.queryCondition.id }.contains(filterElementRow.id.first()) + Timber.d("list of : $contained") + return contained } /** * Get the saved value for the given [filterElementRow] */ - fun loadValueForElement(filterElementRow: QueryCondition) { + fun loadValueForElement(filterElementRow: QueryCondition) { val filtered = filterConditions.filter { it.queryCondition.id == filterElementRow.id } if (filtered.isNotEmpty()) { - return filterElementRow.updateValueBy(filtered.first()) + return filterElementRow.updateValueBy(filtered.first()) } } inline fun results(firstField: String? = null, secondField: String? = null): RealmResults { - val realmQuery = realm.where() + val realmQuery = realm.where() - if (firstField != null && secondField != null) { - return this.query.queryWith(realmQuery).distinct(firstField, secondField).findAll() - } + if (firstField != null && secondField != null) { + return this.query.queryWith(realmQuery).distinct(firstField, secondField).findAll() + } - if (firstField != null) { - return this.query.queryWith(realmQuery).distinct(firstField).findAll() - } + if (firstField != null) { + return this.query.queryWith(realmQuery).distinct(firstField).findAll() + } - return this.query.queryWith(realmQuery).findAll() - } + return this.query.queryWith(realmQuery).findAll() + } - val query: Query - get() { - val query = Query() - this.filterConditions.forEach { - query.add(it.queryCondition) - } - return query - } + val query: Query + get() { + val query = Query() + this.filterConditions.forEach { + query.add(it.queryCondition) + } + return query + } - override fun getDisplayName(context: Context): String { - if (name.isNotEmpty()) return name - return this.query.getName(context) - } + override fun getDisplayName(context: Context): String { + if (name.isNotEmpty()) return name + return this.query.getName(context) + } - override fun isValidForDelete(realm: Realm): Boolean { + override fun isValidForDelete(realm: Realm): Boolean { return true } override fun getFailedDeleteMessage(status: DeleteValidityStatus): Int { return R.string.relationship_error } + + override val bottomSheetType: BottomSheetType + get() { + return BottomSheetType.EDIT_TEXT + } + + override fun localizedTitle(context: Context): String { + return context.getString(R.string.name) + } + + override fun editingDescriptors(map: Map): ArrayList? { + val defaultValue: String? by map + return arrayListOf(RowRepresentableEditDescriptor(defaultValue, R.string.name)) + } + + override fun updateValue(value: Any?, row: RowRepresentable) { + realm.executeTransaction { + val newName = value as String? ?: "" + if (newName.isNotEmpty()) { + name = newName + } + } + } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/FiltersListActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/FiltersListActivity.kt new file mode 100644 index 00000000..2dc2b16d --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/FiltersListActivity.kt @@ -0,0 +1,58 @@ +package net.pokeranalytics.android.ui.activity + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import androidx.fragment.app.Fragment +import kotlinx.android.synthetic.main.activity_filters_list.* +import net.pokeranalytics.android.R +import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity +import net.pokeranalytics.android.ui.fragment.FiltersListFragment +import net.pokeranalytics.android.ui.interfaces.FilterActivityRequestCode + +class FiltersListActivity : PokerAnalyticsActivity() { + + enum class IntentKey(val keyName: String) { + DATA_TYPE("DATA_TYPE"), + LIVE_DATA_TYPE("LIVE_DATA_TYPE"), + ITEM_DELETED("ITEM_DELETED"), + SHOW_ADD_BUTTON("SHOW_ADD_BUTTON"), + } + + companion object { + fun newInstance(context: Context, dataType: Int) { + context.startActivity(getIntent(context, dataType)) + } + + fun newSelectInstance(fragment: Fragment, dataType: Int, showAddButton: Boolean = true) { + val context = fragment.requireContext() + fragment.startActivityForResult(getIntent(context, dataType, showAddButton), FilterActivityRequestCode.SELECT_FILTER.ordinal) + } + + private fun getIntent(context: Context, dataType: Int, showAddButton: Boolean = true): Intent { + val intent = Intent(context, FiltersListActivity::class.java) + intent.putExtra(IntentKey.DATA_TYPE.keyName, dataType) + intent.putExtra(IntentKey.SHOW_ADD_BUTTON.keyName, showAddButton) + return intent + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_filters_list) + + initUI() + } + + /** + * Init UI + */ + private fun initUI() { + val dataType = intent.getIntExtra(IntentKey.DATA_TYPE.keyName, 0) + val showAddButton = intent.getBooleanExtra(IntentKey.SHOW_ADD_BUTTON.keyName, true) + val fragment = filtersListFragment as FiltersListFragment + fragment.setData(dataType) + fragment.updateUI(showAddButton) + } + +} \ No newline at end of file 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 68ee1388..67186d9d 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 @@ -11,7 +11,6 @@ import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager import io.realm.Realm import io.realm.RealmResults -import io.realm.kotlin.isValid import kotlinx.android.synthetic.main.fragment_data_list.* import net.pokeranalytics.android.R import net.pokeranalytics.android.model.LiveData @@ -25,7 +24,6 @@ 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 @@ -45,7 +43,7 @@ open class DataListFragment : DeletableItemFragment(), LiveRowRepresentableDataS /** * Set fragment data */ - fun setData(dataType: Int) { + open fun setData(dataType: Int) { this.dataType = LiveData.values()[dataType] this.identifiableClass = this.dataType.relatedEntity 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 eb36582f..3aeebf19 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 @@ -14,9 +14,9 @@ import kotlinx.android.synthetic.main.fragment_filters.view.toolbar import net.pokeranalytics.android.R import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.realm.Filter -import net.pokeranalytics.android.ui.activity.DataListActivity import net.pokeranalytics.android.ui.activity.FilterDetailsActivity import net.pokeranalytics.android.ui.activity.FiltersActivity +import net.pokeranalytics.android.ui.activity.FiltersListActivity import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource @@ -159,7 +159,7 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource, moreFilters.setOnClickListener { LiveData.FILTER.subType = filterableType.uniqueIdentifier - DataListActivity.newSelectInstance(this, LiveData.FILTER.ordinal, false) + FiltersListActivity.newSelectInstance(this, LiveData.FILTER.ordinal, false) } mostUsedFiltersLayout.isVisible = showMostUsedFiltersLayout diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersListFragment.kt new file mode 100644 index 00000000..8c4abc81 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersListFragment.kt @@ -0,0 +1,122 @@ +package net.pokeranalytics.android.ui.fragment + +import android.app.Activity +import android.content.Context +import android.content.Intent +import io.realm.RealmResults +import net.pokeranalytics.android.model.LiveData +import net.pokeranalytics.android.model.interfaces.Deletable +import net.pokeranalytics.android.model.interfaces.Identifiable +import net.pokeranalytics.android.model.realm.Filter +import net.pokeranalytics.android.ui.activity.EditableDataActivity +import net.pokeranalytics.android.ui.activity.FiltersActivity +import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetFragment +import net.pokeranalytics.android.ui.interfaces.FilterHandler.Companion.INTENT_FILTER_UPDATE_FILTER_UI +import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor +import net.pokeranalytics.android.ui.view.RowViewType +import net.pokeranalytics.android.util.Preferences +import timber.log.Timber + + +open class FiltersListFragment : DataListFragment() { + + private var identifiableClass: Class = Filter::class.java + private var dataType: LiveData = LiveData.FILTER + private lateinit var items: RealmResults + + /** + * Set fragment data + */ + override fun setData(dataType: Int) { + super.setData(dataType) + + this.dataType = LiveData.FILTER + this.identifiableClass = Filter::class.java + setToolbarTitle(this.dataType.pluralLocalizedTitle(requireContext())) + this.items = this.retrieveItems(getRealm()) as RealmResults + } + + override fun rowRepresentableForPosition(position: Int): RowRepresentable? { + Timber.d("rowRepresentableForPosition: ${this.items[position] as RowRepresentable}") + return this.items[position] as RowRepresentable + } + + override fun numberOfRows(): Int { + return this.items.size + } + + override fun adapterRows(): List? { + return items + } + + override fun viewTypeForPosition(position: Int): Int { + val viewType = (this.items[position] as RowRepresentable).viewType + return if (viewType != -1) viewType else RowViewType.DATA.ordinal + } + + override fun editDescriptors(row: RowRepresentable): ArrayList? { + return when (row) { + is Filter -> row.editingDescriptors(mapOf("defaultValue" to row.name)) + else -> super.editDescriptors(row) + } + } + + override fun onRowValueChanged(value: Any?, row: RowRepresentable) { + when (row) { + is Filter -> { + row.updateValue(value, row) + dataListAdapter.refreshRow(row) + updateFilterUIIfNecessary(requireContext(), row.id) + } + else -> super.onRowValueChanged(value, row) + } + } + + override fun onRowDeleted(row: RowRepresentable) { + when (row) { + is Filter -> { + val filterId = row.id + deleteItem(dataListAdapter, items, filterId) + if (filterId == Preferences.getActiveFilterId(requireContext())) { + Preferences.setActiveFilterId("", requireContext()) + updateFilterUIIfNecessary(requireContext(), "") + } + } + else -> super.onRowDeleted(row) + } + } + + override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { + when (row) { + is Filter -> { + if (fromAction) { + val data = row.editingDescriptors(mapOf("defaultValue" to row.name)) + BottomSheetFragment.create(fragmentManager, row, this, data, false, isDeletable = true, valueHasPlaceholder = false) + } else { + val intent = Intent() + intent.putExtra(FiltersActivity.IntentKey.FILTER_ID.keyName, row.id) + activity?.setResult(Activity.RESULT_OK, intent) + activity?.finish() + } + } + else -> { + val identifier = (row as Identifiable).id + EditableDataActivity.newInstanceForResult(this, this.dataType, identifier, REQUEST_CODE_DETAILS) + } + } + } + + /** + * Update filter UI + */ + fun updateFilterUIIfNecessary(context: Context, filterId: String) { + if (filterId == Preferences.getActiveFilterId(context)) { + // Send broadcast + val intent = Intent() + intent.action = INTENT_FILTER_UPDATE_FILTER_UI + context.sendBroadcast(intent) + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt index 74c8d6b8..320197f1 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt @@ -42,7 +42,6 @@ class BottomSheetDoubleEditTextFragment : BottomSheetFragment() { * Init data */ private fun initData() { - valueHasPlaceholder = true isEditingBlinds = row == SessionRow.BLINDS } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt index 537da59b..86a9a0c1 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt @@ -43,7 +43,6 @@ class BottomSheetEditTextFragment : BottomSheetFragment() { * Init data */ private fun initData() { - valueHasPlaceholder = true } /** diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt index 8c33bf13..8657df58 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt @@ -48,7 +48,7 @@ open class BottomSheetFragment : BottomSheetDialogFragment() { isClearable: Boolean? = true, currentCurrency: Currency? = null, isDeletable: Boolean? = false, - valueHasPlaceholder: Boolean? = false + valueHasPlaceholder: Boolean? = null ): BottomSheetFragment { val bottomSheetFragment = row.bottomSheetType.newInstance() bottomSheetFragment.show(fragmentManager, "bottomSheet") diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetNumericTextFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetNumericTextFragment.kt index a5213f7b..90f4d45c 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetNumericTextFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetNumericTextFragment.kt @@ -36,7 +36,6 @@ class BottomSheetNumericTextFragment : BottomSheetFragment() { * Init data */ private fun initData() { - valueHasPlaceholder = true } /** 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 64f687ba..15d45a77 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 @@ -12,69 +12,69 @@ import net.pokeranalytics.android.util.enumerations.IntIdentifiable import net.pokeranalytics.android.util.enumerations.IntSearchable enum class FilterActivityRequestCode { - SELECT_FILTER, - CREATE_FILTER, - ; + SELECT_FILTER, + CREATE_FILTER, + ; } -enum class FilterableType(override var uniqueIdentifier: Int): IntIdentifiable { - ALL(0), - SESSION(1), - TRANSACTION(2), - BANKROLL(3), - HAND_HISTORY(4), - ; +enum class FilterableType(override var uniqueIdentifier: Int) : IntIdentifiable { + ALL(0), + SESSION(1), + TRANSACTION(2), + BANKROLL(3), + HAND_HISTORY(4), + ; - companion object : IntSearchable { + companion object : IntSearchable { - override fun valuesInternal(): Array { - return values() - } - } + override fun valuesInternal(): Array { + return values() + } + } } interface FilterHandler { - companion object { - const val INTENT_FILTER_UPDATE_FILTER_UI = "net.pokeranalytics.android.UPDATE_FILTER_UI" - } - - fun applyFilter() - fun removeFilter() - - fun saveFilter(context: Context, filterId:String) { - Preferences.setActiveFilterId(filterId, context) - - - val realm = Realm.getDefaultInstance() - realm.beginTransaction() - currentFilter(context, realm)?.let { - it.useCount++ - } - realm.commitTransaction() - realm.close() - - // Send broadcast - val intent = Intent() - intent.action = INTENT_FILTER_UPDATE_FILTER_UI - context.sendBroadcast(intent) - } - - fun currentFilter(context: Context, realm: Realm): Filter? { - return Preferences.getActiveFilterId(context)?.let { - realm.where().equalTo("id", it).findFirst() - } ?: run { - null - } - } - - var currentFilterable: FilterableType - - - /** - * Manage filters - */ - fun manageFilters(fragment: Fragment) { - FiltersActivity.newInstanceForResult(fragment = fragment, currentFilterable = currentFilterable) - } + companion object { + const val INTENT_FILTER_UPDATE_FILTER_UI = "net.pokeranalytics.android.UPDATE_FILTER_UI" + } + + fun applyFilter() + fun removeFilter() + + fun saveFilter(context: Context, filterId: String) { + Preferences.setActiveFilterId(filterId, context) + + + val realm = Realm.getDefaultInstance() + realm.beginTransaction() + currentFilter(context, realm)?.let { + it.useCount++ + } + realm.commitTransaction() + realm.close() + + // Send broadcast + val intent = Intent() + intent.action = INTENT_FILTER_UPDATE_FILTER_UI + context.sendBroadcast(intent) + } + + fun currentFilter(context: Context, realm: Realm): Filter? { + return Preferences.getActiveFilterId(context)?.let { + realm.where().equalTo("id", it).findFirst() + } ?: run { + null + } + } + + var currentFilterable: FilterableType + + + /** + * Manage filters + */ + fun manageFilters(fragment: Fragment) { + FiltersActivity.newInstanceForResult(fragment = fragment, currentFilterable = currentFilterable) + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_filters_list.xml b/app/src/main/res/layout/activity_filters_list.xml new file mode 100644 index 00000000..8560f7e1 --- /dev/null +++ b/app/src/main/res/layout/activity_filters_list.xml @@ -0,0 +1,15 @@ + + + + + + \ No newline at end of file