Filters added ViewModel and navigation refactoring to fix crash

hh
Laurent 6 years ago
parent 5848f7df22
commit 570cacdffe
  1. 5
      app/src/main/AndroidManifest.xml
  2. 5
      app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt
  3. 2
      app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt
  4. 6
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/EditableDataFragment.kt
  5. 70
      app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterDetailsActivity.kt
  6. 149
      app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterDetailsFragment.kt
  7. 76
      app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterViewModel.kt
  8. 63
      app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FiltersActivity.kt
  9. 140
      app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FiltersFragment.kt

@ -142,11 +142,6 @@
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity
android:name="net.pokeranalytics.android.ui.modules.filter.FilterDetailsActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity
android:name="net.pokeranalytics.android.ui.activity.GDPRActivity"
android:launchMode="singleTop"

@ -105,11 +105,8 @@ open class Filter : RealmObject(), RowRepresentable, Editable, Deletable, Counta
it.groupId == groupId
}
.apply {
Timber.d("list of querys: ${this.map { it.id }}")
val casted = arrayListOf<QueryCondition>()
casted.addAll(this)
val newFilterCondition = FilterCondition(casted)
val newFilterCondition = FilterCondition(this)
val previousCondition = filterConditions.filter {
it.filterName == newFilterCondition.filterName && it.operator == newFilterCondition.operator
}

@ -14,7 +14,7 @@ open class FilterCondition() : RealmObject() {
this.sectionName = sectionName
}
constructor(filterElementRows: ArrayList<QueryCondition>) : this(filterElementRows.first().baseId, filterElementRows.first().filterSectionRow.name) {
constructor(filterElementRows: List<QueryCondition>) : this(filterElementRows.first().baseId, filterElementRows.first().filterSectionRow.name) {
val row = filterElementRows.first()
this.filterName ?: throw PokerAnalyticsException.FilterElementUnknownName
this.operator = row.operator.ordinal

@ -111,8 +111,10 @@ open class EditableDataFragment : DataManagerFragment(), RowRepresentableDelegat
// When creating an object, open automatically the keyboard for the first row
if (!deleteButtonShouldAppear && shouldOpenKeyboard) {
val index = indexOfFirstRowToSelect()
dataSource.adapterRows()?.get(index)?.let { row ->
onRowSelected(index, row)
dataSource.adapterRows()?.let { rows ->
if (rows.size > index) {
onRowSelected(index, rows.get(index))
}
}
}
}

@ -1,70 +0,0 @@
package net.pokeranalytics.android.ui.modules.filter
import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.fragment.app.Fragment
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.activity.components.BaseActivity
class FilterDetailsActivity : BaseActivity() {
enum class IntentKey(val keyName: String) {
FILTER_ID("FILTER_ID"),
FILTER_CATEGORY_ORDINAL("FILTER_CATEGORY_ORDINAL")
}
companion object {
/**
* Default constructor
*/
fun newInstance(context: Context, filterId: String, filterCategoryOrdinal: Int) {
val intent = Intent(context, FilterDetailsActivity::class.java)
intent.putExtra(IntentKey.FILTER_ID.keyName, filterId)
intent.putExtra(IntentKey.FILTER_CATEGORY_ORDINAL.keyName, filterCategoryOrdinal)
context.startActivity(intent)
}
/**
* Create a new instance for result
*/
fun newInstanceForResult(fragment: Fragment, filterId: String, filterCategoryOrdinal: Int, requestCode: Int) {
val intent = Intent(fragment.requireContext(), FilterDetailsActivity::class.java)
intent.putExtra(IntentKey.FILTER_ID.keyName, filterId)
intent.putExtra(IntentKey.FILTER_CATEGORY_ORDINAL.keyName, filterCategoryOrdinal)
fragment.startActivityForResult(intent, requestCode)
}
}
private lateinit var fragment: FilterDetailsFragment
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_filter_details)
initUI()
}
override fun onBackPressed() {
fragment.onBackPressed()
}
/**
* Init UI
*/
private fun initUI() {
val fragmentManager = supportFragmentManager
val fragmentTransaction = fragmentManager.beginTransaction()
val filterId = intent.getStringExtra(IntentKey.FILTER_ID.keyName)
val filterCategoryOrdinal = intent.getIntExtra(IntentKey.FILTER_CATEGORY_ORDINAL.keyName, 0)
fragment =
FilterDetailsFragment()
fragmentTransaction.add(R.id.container, fragment)
fragmentTransaction.commit()
fragment.setData(filterId, filterCategoryOrdinal)
}
}

@ -1,18 +1,16 @@
package net.pokeranalytics.android.ui.modules.filter
import android.app.Activity.RESULT_OK
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.fragment_filter_details.*
import kotlinx.android.synthetic.main.fragment_filter_details.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
@ -21,7 +19,6 @@ import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheet
import net.pokeranalytics.android.ui.helpers.DateTimePickerManager
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategoryRow
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElementRow
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow
import net.pokeranalytics.android.util.NULL_TEXT
@ -31,11 +28,13 @@ import kotlin.collections.ArrayList
open class FilterDetailsFragment : RealmFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate {
val model: FilterViewModel by lazy {
ViewModelProviders.of(requireActivity()).get(FilterViewModel::class.java)
}
private lateinit var rowRepresentableAdapter: RowRepresentableAdapter
private lateinit var primaryKey: String
private lateinit var filterCategoryRow: FilterCategoryRow
private var currentFilter: Filter? = null
// private var currentFilter: Filter? = null
private var rows: ArrayList<RowRepresentable> = ArrayList()
private var rowsForFilterSubcategoryRow: HashMap<FilterSectionRow, ArrayList<RowRepresentable>> = HashMap()
@ -55,6 +54,67 @@ open class FilterDetailsFragment : RealmFragment(), StaticRowRepresentableDataSo
override fun onBackPressed() {
super.onBackPressed()
saveData()
// requireFragmentManager().popBackStackImmediate("f1", 0)
// requireFragmentManager().popBackStackImmediate()
}
/**
* Init UI
*/
private fun initUI() {
setDisplayHomeAsUpEnabled(true)
this.appBar.toolbar.title = getString(R.string.filter)
val viewManager = LinearLayoutManager(requireContext())
recyclerView.apply {
setHasFixedSize(true)
layoutManager = viewManager
}
}
/**
* Init data
*/
private fun initData() {
// this.arguments?.let { bundle ->
//
// bundle.getString(BundleKey.PRIMARY_KEY.value)?.let { filterId ->
// this.currentFilter = getRealm().findById(filterId)
// }
//
// val category = bundle.getInt(BundleKey.DATA_TYPE.value)
// this.filterCategoryRow = FilterCategoryRow.values()[category]
//
// } ?: throw PAIllegalStateException("Missing bundle")
//currentFilter = Filter.getFilterBydId(getRealm(), primaryKey)
// currentFilter = FiltersFragment.currentFilter
Timber.d(">> Filter = ${this.model.currentFilter}")
Timber.d("selectedRow = ${this.model.selectedCategoryRow}")
val filterCategoryRow = this.model.filterCategoryRow
this.appBar.toolbar.title = filterCategoryRow.localizedTitle(requireContext())
this.rows.clear()
this.rowsForFilterSubcategoryRow.clear()
this.rows.addAll(filterCategoryRow.filterElements)
this.rows.forEach { element ->
if (element is QueryCondition && this.model.currentFilter?.contains(element) == true) {
this.model.currentFilter?.loadValueForElement(element)
this.selectedRows.add(element)
}
}
this.rowRepresentableAdapter = RowRepresentableAdapter(this, this)
this.recyclerView.adapter = rowRepresentableAdapter
}
override fun onRowSelected(position: Int, row: RowRepresentable, tag: Int) {
@ -166,48 +226,6 @@ open class FilterDetailsFragment : RealmFragment(), StaticRowRepresentableDataSo
return if (rowViewType != -1) rowViewType else RowViewType.TITLE_CHECK.ordinal
}
/**
* Init UI
*/
private fun initUI() {
setDisplayHomeAsUpEnabled(true)
this.appBar.toolbar.title = getString(R.string.filter)
val viewManager = LinearLayoutManager(requireContext())
recyclerView.apply {
setHasFixedSize(true)
layoutManager = viewManager
}
}
/**
* Init data
*/
private fun initData() {
//currentFilter = Filter.getFilterBydId(getRealm(), primaryKey)
currentFilter = FiltersFragment.currentFilter
this.appBar.toolbar.title = filterCategoryRow.localizedTitle(requireContext())
this.rows.clear()
this.rowsForFilterSubcategoryRow.clear()
this.rows.addAll(filterCategoryRow.filterElements)
this.rows.forEach { element ->
if (element is QueryCondition && currentFilter?.contains(element) == true) {
currentFilter?.loadValueForElement(element)
this.selectedRows.add(element)
}
}
this.rowRepresentableAdapter = RowRepresentableAdapter(this, this)
this.recyclerView.adapter = rowRepresentableAdapter
}
/**
* Update rows selection
*/
@ -233,47 +251,42 @@ open class FilterDetailsFragment : RealmFragment(), StaticRowRepresentableDataSo
println("list of selected rows : $selectedRows")
// Update UI
rowRepresentableAdapter.refreshRow(row)
this.rowRepresentableAdapter.refreshRow(row)
}
/**
* Save data
*/
private fun saveData() {
val currentFilter = this.model.currentFilter
//TODO: Save currentFilter details data
Timber.d("Save data for queryWith: ${currentFilter?.id}")
selectedRows.forEach {
this.selectedRows.forEach {
Timber.d("Selected rows: $it")
}
getRealm().executeTransaction {
currentFilter?.remove(filterCategoryRow)
currentFilter?.createOrUpdateFilterConditions(selectedRows)
currentFilter?.remove(this.model.filterCategoryRow)
currentFilter?.createOrUpdateFilterConditions(this.selectedRows)
}
currentFilter?.filterConditions?.forEach {
Timber.d("Condition: $it")
}
finishActivityWithResult(currentFilter?.id)
// finishActivityWithResult(currentFilter?.id)
}
/**
* Finish the activity with a result
*/
private fun finishActivityWithResult(uniqueIdentifier: String?) {
val intent = Intent()
intent.putExtra(FilterDetailsActivity.IntentKey.FILTER_ID.keyName, uniqueIdentifier)
activity?.setResult(RESULT_OK, intent)
activity?.finish()
}
/**
* Set fragment data
*/
fun setData(primaryKey: String, filterCategory: Int) {
this.primaryKey = primaryKey
this.filterCategoryRow = FilterCategoryRow.values()[filterCategory]
}
// private fun finishActivityWithResult(uniqueIdentifier: String?) {
// val intent = Intent()
// intent.putExtra(FilterDetailsActivity.IntentKey.FILTER_ID.keyName, uniqueIdentifier)
// activity?.setResult(RESULT_OK, intent)
// activity?.finish()
// }
}

@ -0,0 +1,76 @@
package net.pokeranalytics.android.ui.modules.filter
import android.content.Context
import androidx.lifecycle.ViewModel
import io.realm.Realm
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategoryRow
import net.pokeranalytics.android.util.extensions.findById
class FilterViewModel : ViewModel(), StaticRowRepresentableDataSource {
var currentFilter: Filter? = null
// Main
var filterableType: FilterableType? = null
var filterCopy: Filter? = null
private var categoryRows: ArrayList<RowRepresentable> = ArrayList()
var primaryKey: String? = null
var selectedCategoryRow: RowRepresentable? = null
var isUpdating = false
// Details
val filterCategoryRow: FilterCategoryRow
get() {
return this.selectedCategoryRow as FilterCategoryRow
}
fun init(realm: Realm) {
if (this.currentFilter != null) { // can be called twice and we don't want that
return
}
this.primaryKey?.let {
val filter = realm.findById<Filter>(it) ?: throw PAIllegalStateException("Can't find filter with id=$it")
this.currentFilter = realm.copyFromRealm(filter)
this.isUpdating = true
} ?: run {
this.filterableType?.uniqueIdentifier?.let {
this.currentFilter = Filter.newInstance(it) //realm.copyFromRealm(Filter.newInstanceForResult(realm, this.filterableType.ordinal))
}
}
// Create a copy if the user cancels the updates
this.currentFilter?.let {
if (it.isValid && it.isManaged) {
this.filterCopy = realm.copyFromRealm(it)
}
}
this.categoryRows.clear()
this.filterableType?.let {
this.categoryRows.addAll(FilterCategoryRow.values(it))
}
}
// Data source
override fun adapterRows(): List<RowRepresentable>? {
return this.categoryRows
}
override fun charSequenceForRow(row: RowRepresentable, context: Context, tag: Int): CharSequence {
// Return the number of selected filters for this category
val count = this.currentFilter?.countBy(row as FilterCategoryRow) ?: 0
return if (count > 0) count.toString() else ""
}
}

@ -4,11 +4,17 @@ import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProviders
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.activity.components.BaseActivity
import net.pokeranalytics.android.ui.fragment.components.BaseFragment
class FiltersActivity : BaseActivity() {
val model: FilterViewModel by lazy {
ViewModelProviders.of(this).get(FilterViewModel::class.java)
}
enum class IntentKey(val keyName: String) {
FILTER_ID("FILTER_ID"),
FILTERABLE_TYPE("FILTERABLE_TYPE"),
@ -16,7 +22,9 @@ class FiltersActivity : BaseActivity() {
;
}
private lateinit var fragment: FiltersFragment
// private lateinit var fragment: FiltersFragment
private var currentFragment: BaseFragment? = null
companion object {
/**
@ -51,7 +59,19 @@ class FiltersActivity : BaseActivity() {
}
override fun onBackPressed() {
fragment.onBackPressed()
this.currentFragment?.onBackPressed()
if (supportFragmentManager.backStackEntryCount > 0) {
supportFragmentManager.popBackStack()
val ff = supportFragmentManager.findFragmentByTag(Tag.CATEGORIES.identifier) as FiltersFragment
ff.refreshView()
this.currentFragment = ff
} else {
this.finish()
}
}
/**
@ -59,19 +79,44 @@ class FiltersActivity : BaseActivity() {
*/
private fun initUI() {
val fragmentManager = supportFragmentManager
val fragmentTransaction = fragmentManager.beginTransaction()
val filterId = intent.getStringExtra(IntentKey.FILTER_ID.keyName)
val uniqueIdentifier= intent.getIntExtra(IntentKey.FILTERABLE_TYPE.keyName, 0)
val hideMostUsedFilters = intent.getBooleanExtra(IntentKey.HIDE_MOST_USED_FILTERS.keyName, false)
val filterableType = FilterableType.valueByIdentifier(uniqueIdentifier)
// val filterableType = FilterableType.valueByIdentifier(uniqueIdentifier)
this.model.primaryKey = filterId
this.model.filterableType = FilterableType.valueByIdentifier(uniqueIdentifier)
val filtersFragment = FiltersFragment()
// val bundle = Bundle()
// bundle.putString(BaseFragment.BundleKey.PRIMARY_KEY.value, filterId)
// bundle.putInt(BaseFragment.BundleKey.DATA_TYPE.value, uniqueIdentifier)
// fragment.arguments = bundle
fragment = FiltersFragment()
fragment.setData(filterId, filterableType)
fragmentTransaction.add(R.id.container, fragment)
// fragment.setData(filterId, filterableType)
val fragmentTransaction = this.supportFragmentManager.beginTransaction()
fragmentTransaction.add(R.id.container, filtersFragment, Tag.CATEGORIES.identifier)
// fragmentTransaction.addToBackStack(null)
fragmentTransaction.commit()
fragment.updateMostUsedFiltersVisibility(!hideMostUsedFilters)
filtersFragment.updateMostUsedFiltersVisibility(!hideMostUsedFilters)
}
fun showDetailsFragment() {
val detailsFragment = FilterDetailsFragment()
val fragmentTransaction = this.supportFragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.container, detailsFragment)
fragmentTransaction.addToBackStack(null)
fragmentTransaction.commit()
this.currentFragment = detailsFragment
}
enum class Tag(var identifier: String) {
CATEGORIES("categories"),
}
}

@ -1,11 +1,11 @@
package net.pokeranalytics.android.ui.modules.filter
import android.app.Activity.RESULT_OK
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.*
import androidx.core.view.isVisible
import androidx.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.chip.Chip
import kotlinx.android.synthetic.main.fragment_editable_data.appBar
@ -13,53 +13,35 @@ 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.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.realm.Filter
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.view.RowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategoryRow
import net.pokeranalytics.android.util.Preferences
import net.pokeranalytics.android.util.extensions.findById
import net.pokeranalytics.android.util.extensions.sorted
import timber.log.Timber
open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate {
open class FiltersFragment : RealmFragment(), RowRepresentableDelegate {
val model: FilterViewModel by lazy {
ViewModelProviders.of(requireActivity()).get(FilterViewModel::class.java)
}
companion object {
const val REQUEST_CODE_FILTER_DETAILS = 100
const val MOST_USED_FILTERS_DISPLAYED = 6
var currentFilter: Filter? = null
}
private lateinit var rowRepresentableAdapter: RowRepresentableAdapter
private var filterCopy: Filter? = null
private var rows: ArrayList<RowRepresentable> = 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
private var showMostUsedFiltersLayout = true
/**
* Set fragment data
*/
fun setData(primaryKey: String?, filterableType: FilterableType) {
this.primaryKey = primaryKey
this.filterableType = filterableType
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_filters, container, false)
@ -76,19 +58,10 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource,
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_CODE_FILTER_DETAILS && resultCode == RESULT_OK) {
// Update object
/*
currentFilter?.id?.let { currentFilterId ->
Filter.getFilterBydId(getRealm(), currentFilterId)?.let { filter ->
currentFilter = filter
}
}
*/
selectedRow?.let {
this.model.selectedCategoryRow?.let {
rowRepresentableAdapter.refreshRow(it)
}
} else if (requestCode == FilterActivityRequestCode.SELECT_FILTER.ordinal) {
updateMostUsedFilters()
@ -100,6 +73,15 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource,
}
}
fun refreshView() {
this.model.selectedCategoryRow?.let {
rowRepresentableAdapter.refreshRow(it)
}
// this.rowRepresentableAdapter.notifyDataSetChanged()
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
menu.clear()
inflater.inflate(R.menu.toolbar_editable_data, menu)
@ -109,10 +91,10 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource,
}
override fun onBackPressed() {
if (isUpdating) {
if (this.model.isUpdating) {
cancelUpdates()
} else {
activity?.finish()
// activity?.finish()
}
}
@ -123,37 +105,6 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource,
return true
}
override fun adapterRows(): List<RowRepresentable>? {
return rows
}
override fun charSequenceForRow(
row: RowRepresentable,
context: Context,
tag: Int
): CharSequence {
// Return the number of selected filters for this category
var selectedFilters = ""
if (row is FilterCategoryRow) {
currentFilter?.countBy(row)?.let { nbFilters ->
if (nbFilters > 0) {
selectedFilters = nbFilters.toString()
}
}
}
return selectedFilters
}
override fun onRowSelected(position: Int, row: RowRepresentable, tag: Int) {
super.onRowSelected(position, row, tag)
selectedRow = row
currentFilter?.id?.let { filterId ->
FilterDetailsActivity.newInstanceForResult(this, filterId, (row as FilterCategoryRow).ordinal,
REQUEST_CODE_FILTER_DETAILS
)
}
}
/**
* Init UI
*/
@ -170,7 +121,7 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource,
}
moreFilters.setOnClickListener {
LiveData.FILTER.subType = filterableType.uniqueIdentifier
LiveData.FILTER.subType = this.model.filterableType?.uniqueIdentifier
FiltersListActivity.newSelectInstance(this, LiveData.FILTER.ordinal, false)
}
@ -182,30 +133,34 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource,
*/
private fun initData() {
val realm = getRealm()
// this.arguments?.let { bundle ->
// this.model.primaryKey = bundle.getString(BundleKey.PRIMARY_KEY.value)
// val type = bundle.getInt(BundleKey.DATA_TYPE.value)
// this.model.filterableType = FilterableType.valueByIdentifier(type)
// } ?: throw PAIllegalStateException("Missing bundle")
primaryKey?.let {
this.model.init(getRealm())
val filter = realm.findById<Filter>(it) ?: throw PAIllegalStateException("Can't find filter with id=$it")
currentFilter = realm.copyFromRealm(filter)
isUpdating = true
} ?: run {
currentFilter = Filter.newInstance(this.filterableType.uniqueIdentifier) //realm.copyFromRealm(Filter.newInstanceForResult(realm, this.filterableType.ordinal))
}
this.rowRepresentableAdapter = RowRepresentableAdapter(this.model, this)
this.recyclerView.adapter = rowRepresentableAdapter
// Create a copy if the user cancels the updates
currentFilter?.let {
if (it.isValid && it.isManaged) {
filterCopy = getRealm().copyFromRealm(it)
}
}
}
override fun onRowSelected(position: Int, row: RowRepresentable, tag: Int) {
super.onRowSelected(position, row, tag)
rows.clear()
rows.addAll(FilterCategoryRow.values(this.filterableType))
this.model.selectedCategoryRow = row
this.model.currentFilter?.id?.let { filterId ->
this.rowRepresentableAdapter = RowRepresentableAdapter(this, this)
this.recyclerView.adapter = rowRepresentableAdapter
(activity as FiltersActivity).showDetailsFragment()
// this.model.filterCategoryRow = row as FilterCategoryRow
// FilterDetailsActivity.newInstanceForResult(
// this, filterId, (row as FilterCategoryRow).ordinal,
// REQUEST_CODE_FILTER_DETAILS
// )
}
}
/**
@ -214,10 +169,10 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource,
private fun updateMostUsedFilters() {
var nbChips = 0
val filters = getRealm().sorted(Filter::class.java, editableOnly = false, filterableTypeUniqueIdentifier = this.filterableType.uniqueIdentifier)
val filters = getRealm().sorted(Filter::class.java, editableOnly = false, filterableTypeUniqueIdentifier = this.model.filterableType?.uniqueIdentifier)
val currentFilterId = Preferences.getActiveFilterId(requireContext())
if (isUpdating || filters.isEmpty() || (filters.size == 1 && filters.first()?.id == currentFilterId)) {
if (this.model.isUpdating || filters.isEmpty() || (filters.size == 1 && filters.first()?.id == currentFilterId)) {
mostUsedFiltersLayout.visibility = View.GONE
return
}
@ -265,7 +220,9 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource,
* Validate the updates of the queryWith
*/
private fun validateUpdates() {
getRealm().executeTransaction { realm ->
val currentFilter = this.model.currentFilter
getRealm().executeTransaction { realm ->
currentFilter?.let {
it.name = it.query.getName(requireContext())
realm.copyToRealmOrUpdate(it)
@ -280,6 +237,9 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource,
* Cancel the latest updates of the queryWith
*/
private fun cancelUpdates() {
val filterCopy = this.model.filterCopy
val filterId = filterCopy?.id ?: ""
getRealm().executeTransaction { realm ->
filterCopy?.let {

Loading…
Cancel
Save