diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 648a853a..4945c459 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -142,11 +142,6 @@
android:launchMode="singleTop"
android:screenOrientation="portrait" />
-
-
()
- casted.addAll(this)
- val newFilterCondition = FilterCondition(casted)
+ val newFilterCondition = FilterCondition(this)
val previousCondition = filterConditions.filter {
it.filterName == newFilterCondition.filterName && it.operator == newFilterCondition.operator
}
diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt
index 46c4fc5b..3a4f1538 100644
--- a/app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt
+++ b/app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt
@@ -14,7 +14,7 @@ open class FilterCondition() : RealmObject() {
this.sectionName = sectionName
}
- constructor(filterElementRows: ArrayList) : this(filterElementRows.first().baseId, filterElementRows.first().filterSectionRow.name) {
+ constructor(filterElementRows: List) : this(filterElementRows.first().baseId, filterElementRows.first().filterSectionRow.name) {
val row = filterElementRows.first()
this.filterName ?: throw PokerAnalyticsException.FilterElementUnknownName
this.operator = row.operator.ordinal
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/EditableDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/EditableDataFragment.kt
index f3529b71..2fffab16 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/EditableDataFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/EditableDataFragment.kt
@@ -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))
+ }
}
}
}
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterDetailsActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterDetailsActivity.kt
deleted file mode 100644
index 52e8d002..00000000
--- a/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterDetailsActivity.kt
+++ /dev/null
@@ -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)
- }
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterDetailsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterDetailsFragment.kt
index a3eb2b18..2103f1c0 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterDetailsFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterDetailsFragment.kt
@@ -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 = ArrayList()
private var rowsForFilterSubcategoryRow: HashMap> = 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()
+// }
}
\ No newline at end of file
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterViewModel.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterViewModel.kt
new file mode 100644
index 00000000..450c633a
--- /dev/null
+++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterViewModel.kt
@@ -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 = 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(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? {
+ 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 ""
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FiltersActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FiltersActivity.kt
index fbe0a135..28ec56ce 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FiltersActivity.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FiltersActivity.kt
@@ -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"),
}
}
\ No newline at end of file
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FiltersFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FiltersFragment.kt
index 108ff1ca..1f9c1417 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FiltersFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FiltersFragment.kt
@@ -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 = 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? {
- 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(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 {