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 abc9e6e5..8a9915a4 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 @@ -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 = 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,25 +97,27 @@ 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) + 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 */ @@ -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 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 - // Maybe we don't need to do anything because the object is already up to date + val filterId = filterCopy?.id ?: "" - finishActivityWithResult("") + 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() }