From 7ae1c3ea06f123809406135540ae67f59d2b69f9 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Fri, 3 May 2019 17:18:30 +0200 Subject: [PATCH] Fix crash for transactions --- .../android/model/realm/Transaction.kt | 12 +++- .../FeedTransactionRowRepresentableAdapter.kt | 3 - .../android/ui/fragment/FeedFragment.kt | 58 ++++++++++++++----- .../ui/fragment/TransactionDataFragment.kt | 4 +- .../view/rowrepresentable/TransactionRow.kt | 4 +- app/src/main/res/layout/fragment_feed.xml | 2 +- 6 files changed, 60 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt index d502df37..6cc518da 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt @@ -39,6 +39,10 @@ open class Transaction : RealmObject(), Manageable, StaticRowRepresentableDataSo } } + init { + this.updateTimeParameter(Date()) + } + @PrimaryKey override var id = UUID.randomUUID().toString() @@ -50,6 +54,10 @@ open class Transaction : RealmObject(), Manageable, StaticRowRepresentableDataSo // The date of the transaction override var date: Date = Date() + set(value) { + field = value + this.updateTimeParameter(field) + } // The type of the transaction var type: TransactionType? = null @@ -95,11 +103,11 @@ open class Transaction : RealmObject(), Manageable, StaticRowRepresentableDataSo } override fun alreadyExists(realm: Realm): Boolean { - return realm.where().equalTo("id", id).findFirst()!= null + return realm.where().equalTo("id", id).findFirst() != null } override fun isValidForDelete(realm: Realm): Boolean { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + return true } override fun getFailedDeleteMessage(): Int { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/FeedTransactionRowRepresentableAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/FeedTransactionRowRepresentableAdapter.kt index 603ebf33..ea262236 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/FeedTransactionRowRepresentableAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/FeedTransactionRowRepresentableAdapter.kt @@ -13,7 +13,6 @@ import net.pokeranalytics.android.ui.view.BindableHolder import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.util.NULL_TEXT import net.pokeranalytics.android.util.extensions.getMonthAndYear -import timber.log.Timber import java.util.* import kotlin.collections.HashMap @@ -149,8 +148,6 @@ class FeedTransactionRowRepresentableAdapter( } sortedHeaders = headersPositions.toSortedMap() - - Timber.d("Create viewTypesPositions in: ${System.currentTimeMillis() - start}ms") } /** diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt index 00405ddf..9bfed0ca 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt @@ -10,6 +10,7 @@ import android.widget.Toast import androidx.core.app.ActivityOptionsCompat import androidx.core.view.isVisible import androidx.interpolator.view.animation.FastOutSlowInInterpolator +import com.google.android.material.chip.ChipGroup import io.realm.RealmResults import io.realm.Sort import io.realm.kotlin.where @@ -19,12 +20,14 @@ import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.interfaces.Editable import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.Transaction +import net.pokeranalytics.android.ui.activity.DataListActivity import net.pokeranalytics.android.ui.activity.EditableDataActivity import net.pokeranalytics.android.ui.activity.NewDataMenuActivity import net.pokeranalytics.android.ui.activity.SessionActivity import net.pokeranalytics.android.ui.adapter.FeedSessionRowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.FeedTransactionRowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate +import net.pokeranalytics.android.ui.extensions.ChipGroupExtension import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.SmoothScrollLinearLayoutManager @@ -33,14 +36,12 @@ import java.text.SimpleDateFormat import java.util.* - - - class FeedFragment : PokerAnalyticsFragment(), RowRepresentableDelegate { companion object { const val REQUEST_CODE_MENU = 100 + const val REQUEST_CODE_TRANSACTION_DETAILS = 101 fun newInstance(): FeedFragment { val fragment = FeedFragment() @@ -57,6 +58,8 @@ class FeedFragment : PokerAnalyticsFragment(), RowRepresentableDelegate { private lateinit var betaLimitDate: Date private var newSessionCreated: Boolean = false + private var selectedTransaction: Transaction? = null + private var selectedTransactionPosition: Int = -1 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_feed, container, false) @@ -71,23 +74,32 @@ class FeedFragment : PokerAnalyticsFragment(), RowRepresentableDelegate { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == REQUEST_CODE_MENU && resultCode == RESULT_OK && data != null) { - when(data.getIntExtra(NewDataMenuActivity.IntentKey.CHOICE.keyName, -1)) { + when (data.getIntExtra(NewDataMenuActivity.IntentKey.CHOICE.keyName, -1)) { 0 -> createNewSession(false) 1 -> createNewSession(true) 2 -> createNewTransaction() } + } else if (requestCode == REQUEST_CODE_TRANSACTION_DETAILS && resultCode == RESULT_OK && data != null) { + if (data.getBooleanExtra(DataListActivity.IntentKey.ITEM_DELETED.keyName, false)) { + deleteSelectedTransaction() + } } } override fun onDestroyView() { super.onDestroyView() realmSessions.removeAllChangeListeners() + realmTransactions.removeAllChangeListeners() } override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { - when(row) { + when (row) { is Session -> SessionActivity.newInstance(requireContext(), sessionId = (row as Editable).id) - is Transaction -> EditableDataActivity.newInstance(requireContext(), LiveData.TRANSACTION.ordinal, row.id) + is Transaction -> { + selectedTransaction = row + selectedTransactionPosition = position + EditableDataActivity.newInstanceForResult(this, LiveData.TRANSACTION.ordinal, row.id, REQUEST_CODE_TRANSACTION_DETAILS) + } } } @@ -115,13 +127,15 @@ class FeedFragment : PokerAnalyticsFragment(), RowRepresentableDelegate { } } - filterSessions.setOnClickListener { - recyclerView.adapter = this.feedSessionAdapter - } - - filterTransactions.setOnClickListener { - recyclerView.adapter = this.feedTransactionAdapter - } + filters.setOnCheckedChangeListener(object : ChipGroupExtension.SingleSelectionOnCheckedListener() { + override fun onCheckedChanged(group: ChipGroup, checkedId: Int) { + super.onCheckedChanged(group, checkedId) + when (checkedId) { + R.id.filterSessions -> recyclerView.adapter = feedSessionAdapter + R.id.filterTransactions -> recyclerView.adapter = feedTransactionAdapter + } + } + }) } @@ -133,6 +147,7 @@ class FeedFragment : PokerAnalyticsFragment(), RowRepresentableDelegate { val sdf = SimpleDateFormat("dd/M/yyyy hh:mm", Locale.getDefault()) betaLimitDate = sdf.parse("17/7/2019 10:00") + // Sessions this.realmSessions = getRealm().where().findAll().sort("startDate", Sort.DESCENDING) this.realmSessions.addChangeListener { _, _ -> this.feedSessionAdapter.refreshData() @@ -143,7 +158,13 @@ class FeedFragment : PokerAnalyticsFragment(), RowRepresentableDelegate { val distinctDateSessions = getRealm().where().distinct("year", "month").findAll().sort("startDate", Sort.DESCENDING) this.feedSessionAdapter = FeedSessionRowRepresentableAdapter(this, realmSessions, pendingSessions, distinctDateSessions) + // Transactions this.realmTransactions = getRealm().where().findAll().sort("date", Sort.DESCENDING) + this.realmTransactions.addChangeListener { _, _ -> + this.feedTransactionAdapter.refreshData() + this.feedTransactionAdapter.notifyDataSetChanged() + } + val distinctDateTransactions = getRealm().where().distinct("year", "month").findAll().sort("date", Sort.DESCENDING) this.feedTransactionAdapter = FeedTransactionRowRepresentableAdapter(this, realmTransactions, distinctDateTransactions) @@ -182,6 +203,17 @@ class FeedFragment : PokerAnalyticsFragment(), RowRepresentableDelegate { EditableDataActivity.newInstance(requireContext(), LiveData.TRANSACTION.ordinal) } + /** + * Delete selected transaction + */ + private fun deleteSelectedTransaction() { + val realm = getRealm() + realm.beginTransaction() + selectedTransaction?.deleteFromRealm() + realm.commitTransaction() + selectedTransactionPosition = -1 + } + /** * Show end of beta message */ diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/TransactionDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/TransactionDataFragment.kt index c2474374..243f2898 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/TransactionDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/TransactionDataFragment.kt @@ -80,8 +80,8 @@ class TransactionDataFragment : EditableDataFragment(), StaticRowRepresentableDa when(row) { TransactionRow.BANKROLL -> onRowSelected(0, TransactionRow.TYPE) TransactionRow.TYPE -> onRowSelected(0, TransactionRow.AMOUNT) - TransactionRow.AMOUNT -> onRowSelected(0, TransactionRow.COMMENT) - TransactionRow.COMMENT -> onRowSelected(0, TransactionRow.DATE) + TransactionRow.AMOUNT -> onRowSelected(0, TransactionRow.DATE) + TransactionRow.DATE -> onRowSelected(0, TransactionRow.COMMENT) } } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/TransactionRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/TransactionRow.kt index 6dd25384..3092bd22 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/TransactionRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/TransactionRow.kt @@ -14,8 +14,8 @@ enum class TransactionRow : RowRepresentable, DefaultEditDataSource { BANKROLL, TYPE, AMOUNT, - COMMENT, - DATE; + DATE, + COMMENT; override val resId: Int? get() { diff --git a/app/src/main/res/layout/fragment_feed.xml b/app/src/main/res/layout/fragment_feed.xml index fda9a9ef..4ba53686 100644 --- a/app/src/main/res/layout/fragment_feed.xml +++ b/app/src/main/res/layout/fragment_feed.xml @@ -24,7 +24,7 @@ android:padding="8dp">