Improve filter edition management

feature/top10
Aurelien Hubert 7 years ago
parent ed424e9dcd
commit 9b4b1ba985
  1. 121
      app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt

@ -1,6 +1,7 @@
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.*
@ -11,14 +12,13 @@ import kotlinx.android.synthetic.main.fragment_filters.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.ui.activity.FilterDetailsActivity
import net.pokeranalytics.android.ui.activity.FiltersActivity
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
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.fragment.components.PokerAnalyticsFragment
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategoryRow
import timber.log.Timber
@ -29,13 +29,12 @@ open class FiltersFragment : PokerAnalyticsFragment(), StaticRowRepresentableDat
const val REQUEST_CODE_FILTER_DETAILS = 100
}
private val categories = FilterCategoryRow.values()
private lateinit var parentActivity: PokerAnalyticsActivity
private lateinit var rowRepresentableAdapter: RowRepresentableAdapter
private var currentFilter: Filter? = null
private var filterCopy: Filter? = null
private var rows: ArrayList<RowRepresentable> = ArrayList()
private var filterMenu: Menu? = null
private var primaryKey: String? = null
@ -57,26 +56,14 @@ open class FiltersFragment : PokerAnalyticsFragment(), StaticRowRepresentableDat
if (requestCode == REQUEST_CODE_FILTER_DETAILS && resultCode == Activity.RESULT_OK) {
/*
Timber.d("onActivityResult: $requestCode")
if (data != null && data.hasExtra(FilterDetailsActivity.IntentKey.FILTER_ID.keyName)) {
val filterId = data.getStringExtra(FilterDetailsActivity.IntentKey.FILTER_ID.keyName)
Timber.d("Updated filter: ${filterId}")
}
*/
//TODO: Improve that
rows.clear()
for (category in categories) {
var filtersSelected = ""
currentFilter?.countBy(category)?.let { nbFilters ->
if (nbFilters > 0) {
filtersSelected = nbFilters.toString()
}
}
rows.add(CustomizableRowRepresentable(RowViewType.TITLE_VALUE_ARROW, category.resId, value = filtersSelected, isSelectable = true))
}
rowRepresentableAdapter.notifyDataSetChanged()
// TODO: Update the selected row here...
selectedRow?.let {
rowRepresentableAdapter.refreshRow(it)
}
@ -91,17 +78,17 @@ open class FiltersFragment : PokerAnalyticsFragment(), StaticRowRepresentableDat
}
override fun onBackPressed() {
super.onBackPressed()
//TODO: Cancel changes on the Filter object
finishActivityWithResult("")
if (isUpdating) {
cancelUpdates()
} else {
deleteFilter()
}
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
when (item!!.itemId) {
R.id.save -> saveData()
R.id.delete -> deleteData()
R.id.save -> validUpdates()
R.id.delete -> deleteFilter()
}
return true
}
@ -110,23 +97,25 @@ open class FiltersFragment : PokerAnalyticsFragment(), StaticRowRepresentableDat
return rows
}
override fun stringForRow(row: RowRepresentable): String {
// 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, fromAction: Boolean) {
super.onRowSelected(position, row, fromAction)
selectedRow = row
currentFilter?.id?.let { filterId ->
FilterDetailsActivity.newInstanceForResult(this, filterId, categories[position].ordinal, REQUEST_CODE_FILTER_DETAILS)
}
}
//TODO
/*
override fun stringForRow(row: RowRepresentable): String {
return this.currentFilter?.numberOfElementIn(row as FilterCategoryRow).toString()
FilterDetailsActivity.newInstanceForResult(this, filterId, (row as FilterCategoryRow).ordinal, REQUEST_CODE_FILTER_DETAILS)
}
*/
override fun onRowValueChanged(value: Any?, row: RowRepresentable) {
super.onRowValueChanged(value, row)
}
/**
@ -161,24 +150,20 @@ open class FiltersFragment : PokerAnalyticsFragment(), StaticRowRepresentableDat
primaryKey?.let {
currentFilter = Filter.getFilterBydId(realm, it)
isUpdating = true
} ?: run {
realm.beginTransaction()
currentFilter = Filter.newInstance(realm)
realm.commitTransaction()
}
rows.clear()
for (category in categories) {
var filtersSelected = ""
currentFilter?.countBy(category)?.let { nbFilters ->
if (nbFilters > 0) {
filtersSelected = nbFilters.toString()
}
}
rows.add(CustomizableRowRepresentable(RowViewType.TITLE_VALUE_ARROW, category.resId, value = filtersSelected, isSelectable = true))
// Create a copy if the user cancels the updates
currentFilter?.let {
filterCopy = getRealm().copyFromRealm(it)
}
//rows.addAll(FilterCategoryRow.values())
rows.clear()
rows.addAll(FilterCategoryRow.values())
this.rowRepresentableAdapter = RowRepresentableAdapter(this, this)
this.recyclerView.adapter = rowRepresentableAdapter
@ -194,35 +179,51 @@ open class FiltersFragment : PokerAnalyticsFragment(), StaticRowRepresentableDat
}
/**
* Save data
* Valid the updates of the filter
*/
private fun saveData() {
private fun validUpdates() {
Timber.d("Valid filter updates")
val filterId = currentFilter?.id ?: ""
finishActivityWithResult(filterId)
}
// TODO: Save the currentFilter object here
// Maybe we don't need to do anything because the object is already up to date
/**
* Cancel the latest updates of the filter
*/
private fun cancelUpdates() {
Timber.d("Cancel filter updates")
finishActivityWithResult("")
val filterId = filterCopy?.id ?: ""
val realm = getRealm()
realm.beginTransaction()
filterCopy?.let {
realm.copyToRealmOrUpdate(it)
}
realm.commitTransaction()
finishActivityWithResult(filterId)
}
/**
* Delete data
*/
private fun deleteData() {
// TODO: Delete the currentFilter object here
private fun deleteFilter() {
Timber.d("Delete filter")
val realm = getRealm()
realm.beginTransaction()
currentFilter?.deleteFromRealm()
realm.commitTransaction()
finishActivityWithResult("")
}
/**
* Finish the activity with a result
*/
private fun finishActivityWithResult(uniqueIdentifier: String) {
/*
val intent = Intent()
intent.putExtra(EditableDataActivity.IntentKey.DATA_TYPE.keyName, dataType)
intent.putExtra(EditableDataActivity.IntentKey.PRIMARY_KEY.keyName, uniqueIdentifier)
intent.putExtra(FiltersActivity.IntentKey.FILTER_ID.keyName, uniqueIdentifier)
activity?.setResult(RESULT_OK, intent)
*/
activity?.finish()
}

Loading…
Cancel
Save