Fixes issue when creating subdata

perftest
Laurent 3 years ago
parent e0279fcc85
commit 0aac37b288
  1. 19
      app/src/main/java/net/pokeranalytics/android/model/LiveData.kt
  2. 7
      app/src/main/java/net/pokeranalytics/android/ui/activity/components/BaseActivity.kt
  3. 5
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BaseFragment.kt
  4. 27
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt
  5. 7
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListGameFragment.kt
  6. 51
      app/src/main/java/net/pokeranalytics/android/ui/modules/data/DataManagerFragment.kt
  7. 1
      app/src/main/java/net/pokeranalytics/android/ui/modules/data/EditableDataFragment.kt
  8. 21
      app/src/main/java/net/pokeranalytics/android/ui/modules/data/TransactionDataFragment.kt
  9. 15
      app/src/main/java/net/pokeranalytics/android/ui/modules/session/SessionFragment.kt
  10. 12
      app/src/main/java/net/pokeranalytics/android/ui/viewmodel/DataManagerViewModel.kt
  11. 3
      app/src/main/res/layout/activity_home.xml
  12. 4
      app/src/main/res/layout/fragment_editable_data.xml

@ -8,7 +8,7 @@ import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.model.realm.*
import net.pokeranalytics.android.model.realm.handhistory.HandHistory
import net.pokeranalytics.android.ui.modules.data.EditableDataActivity
import net.pokeranalytics.android.ui.modules.data.*
import net.pokeranalytics.android.ui.modules.handhistory.HandHistoryActivity
import net.pokeranalytics.android.ui.view.Localizable
import net.pokeranalytics.android.util.extensions.findById
@ -32,6 +32,10 @@ enum class LiveData : Localizable {
var subType: Int? = null
fun instanceFromOrdinal(ordinal: Int): LiveData {
return values()[ordinal]
}
val relatedEntity: Class<out Deletable>
get() {
return when (this) {
@ -186,4 +190,17 @@ enum class LiveData : Localizable {
}
}
val dataFragment: EditableDataFragment
get() {
return when (this) {
BANKROLL -> BankrollDataFragment()
LOCATION -> LocationDataFragment()
TRANSACTION -> TransactionDataFragment()
CUSTOM_FIELD -> CustomFieldDataFragment()
TRANSACTION_TYPE -> TransactionTypeDataFragment()
PLAYER -> PlayerDataFragment()
else -> EditableDataFragment()
}
}
}

@ -129,6 +129,13 @@ abstract class BaseActivity : AppCompatActivity() {
fragmentTransaction.commit()
}
fun addFragmentWithBackStack(fragment: Fragment, containerId: Int) {
val fragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.add(containerId, fragment)
fragmentTransaction.addToBackStack(fragment.javaClass.toString())
fragmentTransaction.commit()
}
/**
* Return the realm instance
*/

@ -109,6 +109,11 @@ abstract class BaseFragment : Fragment() {
view?.findViewById<Toolbar>(R.id.toolbar)?.let { toolbar ->
parentActivity?.setSupportActionBar(toolbar)
}
context?.getColor(R.color.kaki_darkest)?.let { color ->
view?.setBackgroundColor(color)
}
}
/**

@ -18,11 +18,13 @@ import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.ui.activity.components.BaseActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.fragment.components.BaseFragment
import net.pokeranalytics.android.ui.modules.data.EditableDataActivity
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.rows.SessionPropertiesRow
import net.pokeranalytics.android.ui.view.rows.TransactionPropertiesRow
import net.pokeranalytics.android.ui.viewmodel.AddedDataViewModel
import net.pokeranalytics.android.ui.viewmodel.BottomSheetViewModel
import net.pokeranalytics.android.ui.viewmodel.BottomSheetViewModelFactory
import timber.log.Timber
@ -49,6 +51,10 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
private var _binding: FragmentBottomSheetBinding? = null
private val binding get() = _binding!!
protected open val addedDataViewModel: AddedDataViewModel by lazy {
ViewModelProvider(requireActivity()).get(AddedDataViewModel::class.java)
}
companion object {
private var config: BottomSheetConfig? = null
@ -233,11 +239,22 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
else -> throw PAIllegalStateException("row $it does not have an associated LiveData value")
}
EditableDataActivity.newInstanceForResult(
this,
liveData,
requestCode = REQUEST_CODE_ADD_NEW_OBJECT
)
val fragment = liveData.dataFragment
//
this.addedDataViewModel.dataForAdd = true
val bundle = Bundle()
bundle.putInt(BaseFragment.BundleKey.DATA_TYPE.value, liveData.ordinal)
fragment.arguments = bundle
(this.activity as BaseActivity).addFragmentWithBackStack(fragment, R.id.container)
dismiss()
// EditableDataActivity.newInstanceForResult(
// this,
// liveData,
// requestCode = REQUEST_CODE_ADD_NEW_OBJECT
// )
true
}

@ -7,6 +7,7 @@ import android.view.ViewGroup
import androidx.core.view.get
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.chip.Chip
import io.realm.RealmModel
import net.pokeranalytics.android.databinding.BottomSheetGameListBinding
import net.pokeranalytics.android.model.Limit
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
@ -38,10 +39,10 @@ class BottomSheetListGameFragment : BottomSheetListFragment() {
}
override fun onRowSelected(position: Int, row: RowRepresentable, tag: Int) {
this.model.realmData?.let {
val selectedData = it[position]
this.model.realmData?.let { realmResults ->
val selectedData = realmResults[position]
selectedData?.let { data ->
this.model.someValues[1] = data
this.model.someValues[1] = realmResults.realm.copyFromRealm(data as RealmModel)
this.onRowValueChanged()
// this.delegate.onRowValueChanged(values, this.row)
dismiss()

@ -5,19 +5,17 @@ import android.content.Intent
import android.os.Bundle
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.view.View
import androidx.appcompat.app.AlertDialog
import androidx.lifecycle.ViewModelProvider
import io.realm.kotlin.isManaged
import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.ConfigurationException
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.fragment.components.RealmFragment
import net.pokeranalytics.android.ui.modules.datalist.DataListActivity
import net.pokeranalytics.android.ui.viewmodel.AddedDataViewModel
import net.pokeranalytics.android.ui.viewmodel.DataManagerViewModel
import timber.log.Timber
open class DataManagerFragment : RealmFragment() {
@ -25,6 +23,10 @@ open class DataManagerFragment : RealmFragment() {
ViewModelProvider(this).get(modelClass)
}
protected open val addedDataViewModel: AddedDataViewModel by lazy {
ViewModelProvider(requireActivity()).get(AddedDataViewModel::class.java)
}
open val modelClass: Class<out DataManagerViewModel> = DataManagerViewModel::class.java
var deleteButtonShouldAppear = false
@ -50,10 +52,22 @@ open class DataManagerFragment : RealmFragment() {
menu.clear()
inflater.inflate(R.menu.toolbar_editable_data, menu)
this.editableMenu = menu
setMenuListeners()
updateMenuUI()
super.onCreateOptionsMenu(menu, inflater)
}
private fun setMenuListeners() {
editableMenu?.findItem(R.id.delete)?.setOnMenuItemClickListener {
deleteData()
return@setOnMenuItemClickListener true
}
editableMenu?.findItem(R.id.save)?.setOnMenuItemClickListener {
saveData()
return@setOnMenuItemClickListener true
}
}
/**
* Update menu UI
*/
@ -62,13 +76,13 @@ open class DataManagerFragment : RealmFragment() {
editableMenu?.findItem(R.id.save)?.isVisible = this.saveButtonShouldAppear
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.save -> saveData()
R.id.delete -> deleteData()
}
return true
}
// override fun onOptionsItemSelected(item: MenuItem): Boolean {
// when (item.itemId) {
// R.id.save -> saveData()
// R.id.delete -> deleteData()
// }
// return true
// }
/**
* Init data
@ -93,15 +107,20 @@ open class DataManagerFragment : RealmFragment() {
val status = savable.getSaveValidityStatus(realm = this.getRealm())
when (status) {
SaveValidityStatus.VALID -> {
Timber.d("ismanaged = ${this.model.item.isManaged()}")
this.getRealm().executeTransactionAsync { asyncRealm ->
val managedItem = asyncRealm.copyToRealmOrUpdate(this.model.item)
if (managedItem is Savable) {
val uniqueIdentifier = managedItem.id
finishActivityWithResult(uniqueIdentifier)
}
asyncRealm.copyToRealmOrUpdate(savable)
}
onDataSaved()
if (this.addedDataViewModel.dataForAdd) {
this.addedDataViewModel.data.value = savable
this.parentActivity?.supportFragmentManager?.popBackStack()
} else {
val uniqueIdentifier = savable.id
finishActivityWithResult(uniqueIdentifier)
}
}
else -> {
val message = savable.getFailedSaveMessage(status)

@ -42,7 +42,6 @@ open class EditableDataFragment : DataManagerFragment(), RowRepresentableDelegat
this.model.primaryKey = this.arguments?.getString(BundleKey.PRIMARY_KEY.value)
this.model.loadItemWithRealm(getRealm())
}
open fun indexOfFirstRowToSelect(): Int {

@ -2,7 +2,10 @@ package net.pokeranalytics.android.ui.modules.data
import android.content.Context
import io.realm.kotlin.where
import kotlinx.coroutines.*
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import net.pokeranalytics.android.calculus.bankroll.BankrollReportManager
import net.pokeranalytics.android.model.realm.Bankroll
import net.pokeranalytics.android.model.realm.Transaction
@ -30,6 +33,11 @@ class TransactionDataFragment : EditableDataFragment(), StaticRowRepresentableDa
return this.model.item as Transaction
}
override fun onDestroyView() {
super.onDestroyView()
this.addedDataViewModel.data.removeObservers(this)
}
override fun initData() {
super.initData()
@ -42,6 +50,14 @@ class TransactionDataFragment : EditableDataFragment(), StaticRowRepresentableDa
}
}
}
this.addedDataViewModel.data.observeForever {
if (this.addedDataViewModel.dataForAdd) {
this.addedDataViewModel.dataForAdd = false
this.onRowValueChanged(it, this.addedDataViewModel.dataIdentifier)
}
}
}
override fun indexOfFirstRowToSelect(): Int {
@ -101,6 +117,9 @@ class TransactionDataFragment : EditableDataFragment(), StaticRowRepresentableDa
}
override fun onRowSelected(position: Int, row: RowRepresentable, tag: Int) {
this.addedDataViewModel.dataIdentifier = row
when (row) {
TransactionPropertiesRow.DATE -> DateTimePickerManager.create(
requireContext(),

@ -35,6 +35,7 @@ import net.pokeranalytics.android.ui.modules.datalist.DataListActivity
import net.pokeranalytics.android.ui.modules.handhistory.HandHistoryActivity
import net.pokeranalytics.android.ui.view.*
import net.pokeranalytics.android.ui.view.rows.SessionPropertiesRow
import net.pokeranalytics.android.ui.viewmodel.AddedDataViewModel
import net.pokeranalytics.android.util.CrashLogging
import net.pokeranalytics.android.util.Preferences
import net.pokeranalytics.android.util.extensions.*
@ -46,6 +47,10 @@ class SessionFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRepr
private lateinit var model: SessionViewModel
private val addedDataViewModel: AddedDataViewModel by lazy {
ViewModelProvider(requireActivity()).get(AddedDataViewModel::class.java)
}
companion object {
const val TIMER_DELAY = 5000L
const val REQUEST_CODE_NEW_CUSTOM_FIELD = 1000
@ -102,13 +107,21 @@ class SessionFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRepr
super.onViewCreated(view, savedInstanceState)
loadOrCreateSession()
initUI()
initData()
}
override fun onDestroyView() {
super.onDestroyView()
this.addedDataViewModel.data.removeObservers(this)
_binding = null
}
private fun initData() {
this.addedDataViewModel.data.observeForever {
this.onRowValueChanged(it, this.addedDataViewModel.dataIdentifier)
}
}
/**
* Init UI
*/
@ -223,6 +236,8 @@ class SessionFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRepr
return
}
this.addedDataViewModel.dataIdentifier = row
val session = this.currentSession
val data = this.editDescriptors(row)

@ -1,9 +1,21 @@
package net.pokeranalytics.android.ui.viewmodel
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import io.realm.Realm
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.ui.view.RowRepresentable
open class AddedDataViewModel : ViewModel() {
var dataForAdd = true
lateinit var dataIdentifier: RowRepresentable
var data: MutableLiveData<Identifiable> = MutableLiveData()
}
open class DataManagerViewModel : ViewModel() {

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

Loading…
Cancel
Save