Fix crash for transactions

dev
Aurelien Hubert 7 years ago
parent cf969e5d25
commit 7ae1c3ea06
  1. 12
      app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt
  2. 3
      app/src/main/java/net/pokeranalytics/android/ui/adapter/FeedTransactionRowRepresentableAdapter.kt
  3. 54
      app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt
  4. 4
      app/src/main/java/net/pokeranalytics/android/ui/fragment/TransactionDataFragment.kt
  5. 4
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/TransactionRow.kt
  6. 2
      app/src/main/res/layout/fragment_feed.xml

@ -39,6 +39,10 @@ open class Transaction : RealmObject(), Manageable, StaticRowRepresentableDataSo
} }
} }
init {
this.updateTimeParameter(Date())
}
@PrimaryKey @PrimaryKey
override var id = UUID.randomUUID().toString() override var id = UUID.randomUUID().toString()
@ -50,6 +54,10 @@ open class Transaction : RealmObject(), Manageable, StaticRowRepresentableDataSo
// The date of the transaction // The date of the transaction
override var date: Date = Date() override var date: Date = Date()
set(value) {
field = value
this.updateTimeParameter(field)
}
// The type of the transaction // The type of the transaction
var type: TransactionType? = null var type: TransactionType? = null
@ -95,11 +103,11 @@ open class Transaction : RealmObject(), Manageable, StaticRowRepresentableDataSo
} }
override fun alreadyExists(realm: Realm): Boolean { override fun alreadyExists(realm: Realm): Boolean {
return realm.where<Transaction>().equalTo("id", id).findFirst()!= null return realm.where<Transaction>().equalTo("id", id).findFirst() != null
} }
override fun isValidForDelete(realm: Realm): Boolean { 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 { override fun getFailedDeleteMessage(): Int {

@ -13,7 +13,6 @@ import net.pokeranalytics.android.ui.view.BindableHolder
import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.util.NULL_TEXT import net.pokeranalytics.android.util.NULL_TEXT
import net.pokeranalytics.android.util.extensions.getMonthAndYear import net.pokeranalytics.android.util.extensions.getMonthAndYear
import timber.log.Timber
import java.util.* import java.util.*
import kotlin.collections.HashMap import kotlin.collections.HashMap
@ -149,8 +148,6 @@ class FeedTransactionRowRepresentableAdapter(
} }
sortedHeaders = headersPositions.toSortedMap() sortedHeaders = headersPositions.toSortedMap()
Timber.d("Create viewTypesPositions in: ${System.currentTimeMillis() - start}ms")
} }
/** /**

@ -10,6 +10,7 @@ import android.widget.Toast
import androidx.core.app.ActivityOptionsCompat import androidx.core.app.ActivityOptionsCompat
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.interpolator.view.animation.FastOutSlowInInterpolator import androidx.interpolator.view.animation.FastOutSlowInInterpolator
import com.google.android.material.chip.ChipGroup
import io.realm.RealmResults import io.realm.RealmResults
import io.realm.Sort import io.realm.Sort
import io.realm.kotlin.where 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.interfaces.Editable
import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.model.realm.Transaction 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.EditableDataActivity
import net.pokeranalytics.android.ui.activity.NewDataMenuActivity import net.pokeranalytics.android.ui.activity.NewDataMenuActivity
import net.pokeranalytics.android.ui.activity.SessionActivity import net.pokeranalytics.android.ui.activity.SessionActivity
import net.pokeranalytics.android.ui.adapter.FeedSessionRowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.FeedSessionRowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.FeedTransactionRowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.FeedTransactionRowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate 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.fragment.components.PokerAnalyticsFragment
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.SmoothScrollLinearLayoutManager import net.pokeranalytics.android.ui.view.SmoothScrollLinearLayoutManager
@ -33,14 +36,12 @@ import java.text.SimpleDateFormat
import java.util.* import java.util.*
class FeedFragment : PokerAnalyticsFragment(), RowRepresentableDelegate { class FeedFragment : PokerAnalyticsFragment(), RowRepresentableDelegate {
companion object { companion object {
const val REQUEST_CODE_MENU = 100 const val REQUEST_CODE_MENU = 100
const val REQUEST_CODE_TRANSACTION_DETAILS = 101
fun newInstance(): FeedFragment { fun newInstance(): FeedFragment {
val fragment = FeedFragment() val fragment = FeedFragment()
@ -57,6 +58,8 @@ class FeedFragment : PokerAnalyticsFragment(), RowRepresentableDelegate {
private lateinit var betaLimitDate: Date private lateinit var betaLimitDate: Date
private var newSessionCreated: Boolean = false 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? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_feed, container, false) 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?) { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data) super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_CODE_MENU && resultCode == RESULT_OK && data != null) { 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) 0 -> createNewSession(false)
1 -> createNewSession(true) 1 -> createNewSession(true)
2 -> createNewTransaction() 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() { override fun onDestroyView() {
super.onDestroyView() super.onDestroyView()
realmSessions.removeAllChangeListeners() realmSessions.removeAllChangeListeners()
realmTransactions.removeAllChangeListeners()
} }
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
when(row) { when (row) {
is Session -> SessionActivity.newInstance(requireContext(), sessionId = (row as Editable).id) 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 { filters.setOnCheckedChangeListener(object : ChipGroupExtension.SingleSelectionOnCheckedListener() {
recyclerView.adapter = this.feedSessionAdapter 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
} }
filterTransactions.setOnClickListener {
recyclerView.adapter = this.feedTransactionAdapter
} }
})
} }
@ -133,6 +147,7 @@ class FeedFragment : PokerAnalyticsFragment(), RowRepresentableDelegate {
val sdf = SimpleDateFormat("dd/M/yyyy hh:mm", Locale.getDefault()) val sdf = SimpleDateFormat("dd/M/yyyy hh:mm", Locale.getDefault())
betaLimitDate = sdf.parse("17/7/2019 10:00") betaLimitDate = sdf.parse("17/7/2019 10:00")
// Sessions
this.realmSessions = getRealm().where<Session>().findAll().sort("startDate", Sort.DESCENDING) this.realmSessions = getRealm().where<Session>().findAll().sort("startDate", Sort.DESCENDING)
this.realmSessions.addChangeListener { _, _ -> this.realmSessions.addChangeListener { _, _ ->
this.feedSessionAdapter.refreshData() this.feedSessionAdapter.refreshData()
@ -143,7 +158,13 @@ class FeedFragment : PokerAnalyticsFragment(), RowRepresentableDelegate {
val distinctDateSessions = getRealm().where<Session>().distinct("year", "month").findAll().sort("startDate", Sort.DESCENDING) val distinctDateSessions = getRealm().where<Session>().distinct("year", "month").findAll().sort("startDate", Sort.DESCENDING)
this.feedSessionAdapter = FeedSessionRowRepresentableAdapter(this, realmSessions, pendingSessions, distinctDateSessions) this.feedSessionAdapter = FeedSessionRowRepresentableAdapter(this, realmSessions, pendingSessions, distinctDateSessions)
// Transactions
this.realmTransactions = getRealm().where<Transaction>().findAll().sort("date", Sort.DESCENDING) this.realmTransactions = getRealm().where<Transaction>().findAll().sort("date", Sort.DESCENDING)
this.realmTransactions.addChangeListener { _, _ ->
this.feedTransactionAdapter.refreshData()
this.feedTransactionAdapter.notifyDataSetChanged()
}
val distinctDateTransactions = getRealm().where<Transaction>().distinct("year", "month").findAll().sort("date", Sort.DESCENDING) val distinctDateTransactions = getRealm().where<Transaction>().distinct("year", "month").findAll().sort("date", Sort.DESCENDING)
this.feedTransactionAdapter = FeedTransactionRowRepresentableAdapter(this, realmTransactions, distinctDateTransactions) this.feedTransactionAdapter = FeedTransactionRowRepresentableAdapter(this, realmTransactions, distinctDateTransactions)
@ -182,6 +203,17 @@ class FeedFragment : PokerAnalyticsFragment(), RowRepresentableDelegate {
EditableDataActivity.newInstance(requireContext(), LiveData.TRANSACTION.ordinal) 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 * Show end of beta message
*/ */

@ -80,8 +80,8 @@ class TransactionDataFragment : EditableDataFragment(), StaticRowRepresentableDa
when(row) { when(row) {
TransactionRow.BANKROLL -> onRowSelected(0, TransactionRow.TYPE) TransactionRow.BANKROLL -> onRowSelected(0, TransactionRow.TYPE)
TransactionRow.TYPE -> onRowSelected(0, TransactionRow.AMOUNT) TransactionRow.TYPE -> onRowSelected(0, TransactionRow.AMOUNT)
TransactionRow.AMOUNT -> onRowSelected(0, TransactionRow.COMMENT) TransactionRow.AMOUNT -> onRowSelected(0, TransactionRow.DATE)
TransactionRow.COMMENT -> onRowSelected(0, TransactionRow.DATE) TransactionRow.DATE -> onRowSelected(0, TransactionRow.COMMENT)
} }
} }
} }

@ -14,8 +14,8 @@ enum class TransactionRow : RowRepresentable, DefaultEditDataSource {
BANKROLL, BANKROLL,
TYPE, TYPE,
AMOUNT, AMOUNT,
COMMENT, DATE,
DATE; COMMENT;
override val resId: Int? override val resId: Int?
get() { get() {

@ -24,7 +24,7 @@
android:padding="8dp"> android:padding="8dp">
<com.google.android.material.chip.ChipGroup <com.google.android.material.chip.ChipGroup
android:id="@+id/filtersTime" android:id="@+id/filters"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:chipSpacing="8dp" app:chipSpacing="8dp"

Loading…
Cancel
Save