Autoselect bankroll for transaction when only one exists

hh
Laurent 6 years ago
parent 03ce732b95
commit 1e6de627a7
  1. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/BankrollDataFragment.kt
  2. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/CustomFieldDataFragment.kt
  3. 18
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/DataManagerFragment.kt
  4. 42
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/EditableDataFragment.kt
  5. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/LocationDataFragment.kt
  6. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/PlayerDataFragment.kt
  7. 23
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/TransactionDataFragment.kt
  8. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/TransactionTypeDataFragment.kt
  9. 16
      app/src/main/java/net/pokeranalytics/android/ui/fragment/report/AbstractReportFragment.kt

@ -38,7 +38,7 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
// Return the item as a Bankroll object // Return the item as a Bankroll object
private val bankroll: Bankroll private val bankroll: Bankroll
get() { get() {
return this.viewModel.item as Bankroll return this.model.item as Bankroll
} }
private lateinit var defaultCurrency: Currency private lateinit var defaultCurrency: Currency

@ -34,7 +34,7 @@ class CustomFieldDataFragment : EditableDataFragment(), StaticRowRepresentableDa
// Return the item as a Custom TypedCSVField object // Return the item as a Custom TypedCSVField object
private val customField: CustomField private val customField: CustomField
get() { get() {
return this.viewModel.item as CustomField return this.model.item as CustomField
} }
private val itemTouchHelper = ItemTouchHelper(object : ItemTouchHelper.Callback() { private val itemTouchHelper = ItemTouchHelper(object : ItemTouchHelper.Callback() {

@ -20,7 +20,7 @@ import net.pokeranalytics.android.ui.viewmodel.DataManagerViewModel
open class DataManagerFragment : RealmFragment() { open class DataManagerFragment : RealmFragment() {
protected val viewModel: DataManagerViewModel by lazy { protected val model: DataManagerViewModel by lazy {
ViewModelProviders.of(this).get(DataManagerViewModel::class.java) ViewModelProviders.of(this).get(DataManagerViewModel::class.java)
} }
@ -78,7 +78,7 @@ open class DataManagerFragment : RealmFragment() {
private fun loadItem() { private fun loadItem() {
// this.item = this.liveDataType.updateOrCreate(this.getRealm(), primaryKey) // this.item = this.liveDataType.updateOrCreate(this.getRealm(), primaryKey)
this.deleteButtonShouldAppear = this.viewModel.primaryKey != null this.deleteButtonShouldAppear = this.model.primaryKey != null
} }
@ -87,7 +87,7 @@ open class DataManagerFragment : RealmFragment() {
*/ */
protected open fun saveData() { protected open fun saveData() {
val savable = this.viewModel.item val savable = this.model.item
this.willSaveData() this.willSaveData()
when (savable) { when (savable) {
@ -96,7 +96,7 @@ open class DataManagerFragment : RealmFragment() {
when (status) { when (status) {
SaveValidityStatus.VALID -> { SaveValidityStatus.VALID -> {
this.getRealm().executeTransaction { this.getRealm().executeTransaction {
val managedItem = it.copyToRealmOrUpdate(this.viewModel.item) val managedItem = it.copyToRealmOrUpdate(this.model.item)
if (managedItem is Savable) { if (managedItem is Savable) {
val uniqueIdentifier = managedItem.id val uniqueIdentifier = managedItem.id
finishActivityWithResult(uniqueIdentifier) finishActivityWithResult(uniqueIdentifier)
@ -134,14 +134,14 @@ open class DataManagerFragment : RealmFragment() {
val realm = this.getRealm() val realm = this.getRealm()
if (this.viewModel.item.isValidForDelete(realm)) { if (this.model.item.isValidForDelete(realm)) {
val intent = Intent() val intent = Intent()
intent.putExtra(DataListActivity.IntentKey.ITEM_DELETED.keyName, this.viewModel.item.id) intent.putExtra(DataListActivity.IntentKey.ITEM_DELETED.keyName, this.model.item.id)
activity?.setResult(Activity.RESULT_OK, intent) activity?.setResult(Activity.RESULT_OK, intent)
activity?.finish() activity?.finish()
} else { } else {
val status = this.viewModel.item.getDeleteStatus(requireContext(), realm) val status = this.model.item.getDeleteStatus(requireContext(), realm)
val message = this.viewModel.item.getFailedDeleteMessage(status) val message = this.model.item.getFailedDeleteMessage(status)
val builder = AlertDialog.Builder(requireContext()) val builder = AlertDialog.Builder(requireContext())
.setMessage(message) .setMessage(message)
.setNegativeButton(R.string.ok, null) .setNegativeButton(R.string.ok, null)
@ -156,7 +156,7 @@ open class DataManagerFragment : RealmFragment() {
*/ */
private fun finishActivityWithResult(uniqueIdentifier: String) { private fun finishActivityWithResult(uniqueIdentifier: String) {
val intent = Intent() val intent = Intent()
intent.putExtra(EditableDataActivity.IntentKey.DATA_TYPE.keyName, viewModel.dataType) intent.putExtra(EditableDataActivity.IntentKey.DATA_TYPE.keyName, model.dataType)
intent.putExtra(EditableDataActivity.IntentKey.PRIMARY_KEY.keyName, uniqueIdentifier) intent.putExtra(EditableDataActivity.IntentKey.PRIMARY_KEY.keyName, uniqueIdentifier)
activity?.setResult(Activity.RESULT_OK, intent) activity?.setResult(Activity.RESULT_OK, intent)
activity?.finish() activity?.finish()

@ -38,22 +38,15 @@ open class EditableDataFragment : DataManagerFragment(), RowRepresentableDelegat
open fun initData() { open fun initData() {
this.viewModel.dataType = this.arguments?.getInt(BundleKey.DATA_TYPE.value) this.model.dataType = this.arguments?.getInt(BundleKey.DATA_TYPE.value)
this.viewModel.primaryKey = this.arguments?.getString(BundleKey.PRIMARY_KEY.value) this.model.primaryKey = this.arguments?.getString(BundleKey.PRIMARY_KEY.value)
viewModel.loadItemWithRealm(getRealm())
val dataSource = getDataSource() this.model.loadItemWithRealm(getRealm())
this.rowRepresentableAdapter = RowRepresentableAdapter(getDataSource(), this)
//this.rowRepresentableAdapter.setHasStableIds(true)
this.recyclerView.adapter = rowRepresentableAdapter
// When creating an object, open automatically the keyboard for the first row }
if (!deleteButtonShouldAppear && shouldOpenKeyboard) {
val row = dataSource.adapterRows()?.firstOrNull() open fun indexOfFirstRowToSelect(): Int {
row?.let { return 0
onRowSelected(0, it)
}
}
} }
/** /**
@ -75,7 +68,7 @@ open class EditableDataFragment : DataManagerFragment(), RowRepresentableDelegat
override fun onRowValueChanged(value: Any?, row: RowRepresentable) { override fun onRowValueChanged(value: Any?, row: RowRepresentable) {
this.getRealm().executeTransaction { this.getRealm().executeTransaction {
try { try {
(this.viewModel.item as Editable).updateValue(value, row) (this.model.item as Editable).updateValue(value, row)
} catch (e: Exception) { } catch (e: Exception) {
Crashlytics.log("Exception caught: row = $row, value=$value, class=${this.javaClass}") Crashlytics.log("Exception caught: row = $row, value=$value, class=${this.javaClass}")
throw e throw e
@ -92,10 +85,10 @@ open class EditableDataFragment : DataManagerFragment(), RowRepresentableDelegat
setDisplayHomeAsUpEnabled(true) setDisplayHomeAsUpEnabled(true)
val liveDataType = this.viewModel.liveDataType val liveDataType = this.model.liveDataType
val proxyItem: RealmModel? = val proxyItem: RealmModel? =
liveDataType.getData(this.getRealm(), this.viewModel.primaryKey) liveDataType.getData(this.getRealm(), this.model.primaryKey)
proxyItem?.let { proxyItem?.let {
this.appBar.toolbar.title = liveDataType.updateEntityLocalizedTitle(requireContext()) this.appBar.toolbar.title = liveDataType.updateEntityLocalizedTitle(requireContext())
deleteButtonShouldAppear = true deleteButtonShouldAppear = true
@ -109,13 +102,26 @@ open class EditableDataFragment : DataManagerFragment(), RowRepresentableDelegat
setHasFixedSize(true) setHasFixedSize(true)
layoutManager = viewManager layoutManager = viewManager
} }
val dataSource = getDataSource()
this.rowRepresentableAdapter = RowRepresentableAdapter(getDataSource(), this)
//this.rowRepresentableAdapter.setHasStableIds(true)
this.recyclerView.adapter = rowRepresentableAdapter
// When creating an object, open automatically the keyboard for the first row
if (!deleteButtonShouldAppear && shouldOpenKeyboard) {
val index = indexOfFirstRowToSelect()
dataSource.adapterRows()?.get(index)?.let { row ->
onRowSelected(index, row)
}
}
} }
/** /**
* Return the data source * Return the data source
*/ */
open fun getDataSource(): RowRepresentableDataSource { open fun getDataSource(): RowRepresentableDataSource {
return this.viewModel.item as RowRepresentableDataSource return this.model.item as RowRepresentableDataSource
} }
} }

@ -24,7 +24,7 @@ class LocationDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
// Return the item as a Location object // Return the item as a Location object
private val location: Location private val location: Location
get() { get() {
return this.viewModel.item as Location return this.model.item as Location
} }
// Loader boolean // Loader boolean

@ -41,7 +41,7 @@ class PlayerDataFragment : EditableDataFragment(), StaticRowRepresentableDataSou
private val player: Player private val player: Player
get() { get() {
return this.viewModel.item as Player return this.model.item as Player
} }
private var mediaActivity: MediaActivity? = null private var mediaActivity: MediaActivity? = null

@ -3,6 +3,7 @@ package net.pokeranalytics.android.ui.fragment.data
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import io.realm.kotlin.where
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
@ -30,12 +31,28 @@ class TransactionDataFragment : EditableDataFragment(), StaticRowRepresentableDa
// Return the item as a Transaction object // Return the item as a Transaction object
private val transaction: Transaction private val transaction: Transaction
get() { get() {
return this.viewModel.item as Transaction return this.model.item as Transaction
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
shouldOpenKeyboard = false // shouldOpenKeyboard = false
}
override fun initData() {
super.initData()
// Initialize with the only bankroll if possible
if (this.transaction.bankroll == null) {
val bankrolls = getRealm().where<Bankroll>().findAll()
if (bankrolls.size == 1) {
this.transaction.bankroll = bankrolls.first()
}
}
}
override fun indexOfFirstRowToSelect(): Int {
return if (this.transaction.bankroll == null) 0 else 1
} }
override fun getDataSource(): RowRepresentableDataSource { override fun getDataSource(): RowRepresentableDataSource {
@ -99,7 +116,7 @@ class TransactionDataFragment : EditableDataFragment(), StaticRowRepresentableDa
super.onRowValueChanged(value, row) super.onRowValueChanged(value, row)
rowRepresentableAdapter.refreshRow(row) rowRepresentableAdapter.refreshRow(row)
if (viewModel.primaryKey == null) { // automatically change the row for new data if (model.primaryKey == null) { // automatically change the row for new data
GlobalScope.launch(Dispatchers.Main) { GlobalScope.launch(Dispatchers.Main) {
delay(200) delay(200)
when (row) { when (row) {

@ -13,7 +13,7 @@ class TransactionTypeDataFragment : EditableDataFragment(), RowRepresentableData
val transactionType: TransactionType val transactionType: TransactionType
get() { get() {
return this.viewModel.item as TransactionType return this.model.item as TransactionType
} }
// RowRepresentableDataSource // RowRepresentableDataSource

@ -37,10 +37,10 @@ abstract class AbstractReportFragment : DataManagerFragment() {
private fun initData() { private fun initData() {
this.viewModel.dataType = LiveData.REPORT_SETUP.ordinal this.model.dataType = LiveData.REPORT_SETUP.ordinal
this.viewModel.primaryKey = this.selectedReport.options.reportSetupId this.model.primaryKey = this.selectedReport.options.reportSetupId
this.viewModel.loadItemWithRealm(getRealm()) this.model.loadItemWithRealm(getRealm())
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -48,7 +48,7 @@ abstract class AbstractReportFragment : DataManagerFragment() {
initData() initData()
this.deleteButtonShouldAppear = (this.viewModel.primaryKey != null) this.deleteButtonShouldAppear = (this.model.primaryKey != null)
this.saveButtonShouldAppear = this.selectedReport.options.userGenerated this.saveButtonShouldAppear = this.selectedReport.options.userGenerated
setDisplayHomeAsUpEnabled(true) setDisplayHomeAsUpEnabled(true)
@ -71,7 +71,7 @@ abstract class AbstractReportFragment : DataManagerFragment() {
view.findViewById<EditText>(net.pokeranalytics.android.R.id.reportName) view.findViewById<EditText>(net.pokeranalytics.android.R.id.reportName)
nameEditText.inputType = InputType.TYPE_TEXT_FLAG_CAP_SENTENCES nameEditText.inputType = InputType.TYPE_TEXT_FLAG_CAP_SENTENCES
this.viewModel.primaryKey?.let { id -> this.model.primaryKey?.let { id ->
getRealm().findById<ReportSetup>(id)?.let { reportSetup -> getRealm().findById<ReportSetup>(id)?.let { reportSetup ->
nameEditText.hint = reportSetup.name nameEditText.hint = reportSetup.name
} }
@ -110,10 +110,10 @@ abstract class AbstractReportFragment : DataManagerFragment() {
private fun saveReport(name: String) { private fun saveReport(name: String) {
this.reportViewModel.title = name this.reportViewModel.title = name
val rs = this.viewModel.item as ReportSetup val rs = this.model.item as ReportSetup
getRealm().executeTransaction { realm -> getRealm().executeTransaction { realm ->
val firstSave = (this.viewModel.primaryKey == null) val firstSave = (this.model.primaryKey == null)
if (firstSave) { if (firstSave) {
val options = this.selectedReport.options val options = this.selectedReport.options
rs.name = name rs.name = name
@ -139,7 +139,7 @@ abstract class AbstractReportFragment : DataManagerFragment() {
} }
this.viewModel.primaryKey = rs.id this.model.primaryKey = rs.id
this.deleteButtonShouldAppear = true this.deleteButtonShouldAppear = true
setToolbarTitle(this.reportViewModel.title) setToolbarTitle(this.reportViewModel.title)
} }

Loading…
Cancel
Save