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

Loading…
Cancel
Save