From 1e6de627a7d38fe10a13989e19369728789582bb Mon Sep 17 00:00:00 2001 From: Laurent Date: Fri, 20 Mar 2020 14:14:24 +0100 Subject: [PATCH] Autoselect bankroll for transaction when only one exists --- .../ui/fragment/data/BankrollDataFragment.kt | 2 +- .../fragment/data/CustomFieldDataFragment.kt | 2 +- .../ui/fragment/data/DataManagerFragment.kt | 18 ++++---- .../ui/fragment/data/EditableDataFragment.kt | 42 +++++++++++-------- .../ui/fragment/data/LocationDataFragment.kt | 2 +- .../ui/fragment/data/PlayerDataFragment.kt | 2 +- .../fragment/data/TransactionDataFragment.kt | 23 ++++++++-- .../data/TransactionTypeDataFragment.kt | 2 +- .../fragment/report/AbstractReportFragment.kt | 16 +++---- 9 files changed, 66 insertions(+), 43 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/BankrollDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/BankrollDataFragment.kt index ca4921af..7ffe8b63 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/BankrollDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/BankrollDataFragment.kt @@ -38,7 +38,7 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS // Return the item as a Bankroll object private val bankroll: Bankroll get() { - return this.viewModel.item as Bankroll + return this.model.item as Bankroll } private lateinit var defaultCurrency: Currency diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/CustomFieldDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/CustomFieldDataFragment.kt index d33b034f..ed56a377 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/CustomFieldDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/CustomFieldDataFragment.kt @@ -34,7 +34,7 @@ class CustomFieldDataFragment : EditableDataFragment(), StaticRowRepresentableDa // Return the item as a Custom TypedCSVField object private val customField: CustomField get() { - return this.viewModel.item as CustomField + return this.model.item as CustomField } private val itemTouchHelper = ItemTouchHelper(object : ItemTouchHelper.Callback() { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/DataManagerFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/DataManagerFragment.kt index 21a1b029..e2ce2b8f 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/DataManagerFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/DataManagerFragment.kt @@ -20,7 +20,7 @@ import net.pokeranalytics.android.ui.viewmodel.DataManagerViewModel open class DataManagerFragment : RealmFragment() { - protected val viewModel: DataManagerViewModel by lazy { + protected val model: DataManagerViewModel by lazy { ViewModelProviders.of(this).get(DataManagerViewModel::class.java) } @@ -78,7 +78,7 @@ open class DataManagerFragment : RealmFragment() { private fun loadItem() { // 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() { - val savable = this.viewModel.item + val savable = this.model.item this.willSaveData() when (savable) { @@ -96,7 +96,7 @@ open class DataManagerFragment : RealmFragment() { when (status) { SaveValidityStatus.VALID -> { this.getRealm().executeTransaction { - val managedItem = it.copyToRealmOrUpdate(this.viewModel.item) + val managedItem = it.copyToRealmOrUpdate(this.model.item) if (managedItem is Savable) { val uniqueIdentifier = managedItem.id finishActivityWithResult(uniqueIdentifier) @@ -134,14 +134,14 @@ open class DataManagerFragment : RealmFragment() { val realm = this.getRealm() - if (this.viewModel.item.isValidForDelete(realm)) { + if (this.model.item.isValidForDelete(realm)) { 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?.finish() } else { - val status = this.viewModel.item.getDeleteStatus(requireContext(), realm) - val message = this.viewModel.item.getFailedDeleteMessage(status) + val status = this.model.item.getDeleteStatus(requireContext(), realm) + val message = this.model.item.getFailedDeleteMessage(status) val builder = AlertDialog.Builder(requireContext()) .setMessage(message) .setNegativeButton(R.string.ok, null) @@ -156,7 +156,7 @@ open class DataManagerFragment : RealmFragment() { */ private fun finishActivityWithResult(uniqueIdentifier: String) { 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) activity?.setResult(Activity.RESULT_OK, intent) activity?.finish() diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/EditableDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/EditableDataFragment.kt index 05ded118..f3529b71 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/EditableDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/EditableDataFragment.kt @@ -38,22 +38,15 @@ open class EditableDataFragment : DataManagerFragment(), RowRepresentableDelegat open fun initData() { - this.viewModel.dataType = this.arguments?.getInt(BundleKey.DATA_TYPE.value) - this.viewModel.primaryKey = this.arguments?.getString(BundleKey.PRIMARY_KEY.value) - viewModel.loadItemWithRealm(getRealm()) + this.model.dataType = this.arguments?.getInt(BundleKey.DATA_TYPE.value) + this.model.primaryKey = this.arguments?.getString(BundleKey.PRIMARY_KEY.value) - val dataSource = getDataSource() - this.rowRepresentableAdapter = RowRepresentableAdapter(getDataSource(), this) - //this.rowRepresentableAdapter.setHasStableIds(true) - this.recyclerView.adapter = rowRepresentableAdapter + this.model.loadItemWithRealm(getRealm()) - // When creating an object, open automatically the keyboard for the first row - if (!deleteButtonShouldAppear && shouldOpenKeyboard) { - val row = dataSource.adapterRows()?.firstOrNull() - row?.let { - onRowSelected(0, it) - } - } + } + + open fun indexOfFirstRowToSelect(): Int { + return 0 } /** @@ -75,7 +68,7 @@ open class EditableDataFragment : DataManagerFragment(), RowRepresentableDelegat override fun onRowValueChanged(value: Any?, row: RowRepresentable) { this.getRealm().executeTransaction { try { - (this.viewModel.item as Editable).updateValue(value, row) + (this.model.item as Editable).updateValue(value, row) } catch (e: Exception) { Crashlytics.log("Exception caught: row = $row, value=$value, class=${this.javaClass}") throw e @@ -92,10 +85,10 @@ open class EditableDataFragment : DataManagerFragment(), RowRepresentableDelegat setDisplayHomeAsUpEnabled(true) - val liveDataType = this.viewModel.liveDataType + val liveDataType = this.model.liveDataType val proxyItem: RealmModel? = - liveDataType.getData(this.getRealm(), this.viewModel.primaryKey) + liveDataType.getData(this.getRealm(), this.model.primaryKey) proxyItem?.let { this.appBar.toolbar.title = liveDataType.updateEntityLocalizedTitle(requireContext()) deleteButtonShouldAppear = true @@ -109,13 +102,26 @@ open class EditableDataFragment : DataManagerFragment(), RowRepresentableDelegat setHasFixedSize(true) 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 */ open fun getDataSource(): RowRepresentableDataSource { - return this.viewModel.item as RowRepresentableDataSource + return this.model.item as RowRepresentableDataSource } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/LocationDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/LocationDataFragment.kt index c93a9690..1fd98f42 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/LocationDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/LocationDataFragment.kt @@ -24,7 +24,7 @@ class LocationDataFragment : EditableDataFragment(), StaticRowRepresentableDataS // Return the item as a Location object private val location: Location get() { - return this.viewModel.item as Location + return this.model.item as Location } // Loader boolean diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/PlayerDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/PlayerDataFragment.kt index c984fc0c..e91ca0e6 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/PlayerDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/PlayerDataFragment.kt @@ -41,7 +41,7 @@ class PlayerDataFragment : EditableDataFragment(), StaticRowRepresentableDataSou private val player: Player get() { - return this.viewModel.item as Player + return this.model.item as Player } private var mediaActivity: MediaActivity? = null diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/TransactionDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/TransactionDataFragment.kt index 84178f4e..99fe5f89 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/TransactionDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/TransactionDataFragment.kt @@ -3,6 +3,7 @@ package net.pokeranalytics.android.ui.fragment.data import android.content.Context import android.os.Bundle import android.view.View +import io.realm.kotlin.where import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.delay @@ -30,12 +31,28 @@ class TransactionDataFragment : EditableDataFragment(), StaticRowRepresentableDa // Return the item as a Transaction object private val transaction: Transaction get() { - return this.viewModel.item as Transaction + return this.model.item as Transaction } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 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().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 { @@ -99,7 +116,7 @@ class TransactionDataFragment : EditableDataFragment(), StaticRowRepresentableDa super.onRowValueChanged(value, 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) { delay(200) when (row) { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/TransactionTypeDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/TransactionTypeDataFragment.kt index abe80355..621413ef 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/TransactionTypeDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/TransactionTypeDataFragment.kt @@ -13,7 +13,7 @@ class TransactionTypeDataFragment : EditableDataFragment(), RowRepresentableData val transactionType: TransactionType get() { - return this.viewModel.item as TransactionType + return this.model.item as TransactionType } // RowRepresentableDataSource diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/AbstractReportFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/AbstractReportFragment.kt index fb87d866..d322d2f0 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/AbstractReportFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/AbstractReportFragment.kt @@ -37,10 +37,10 @@ abstract class AbstractReportFragment : DataManagerFragment() { private fun initData() { - this.viewModel.dataType = LiveData.REPORT_SETUP.ordinal - this.viewModel.primaryKey = this.selectedReport.options.reportSetupId + this.model.dataType = LiveData.REPORT_SETUP.ordinal + this.model.primaryKey = this.selectedReport.options.reportSetupId - this.viewModel.loadItemWithRealm(getRealm()) + this.model.loadItemWithRealm(getRealm()) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -48,7 +48,7 @@ abstract class AbstractReportFragment : DataManagerFragment() { initData() - this.deleteButtonShouldAppear = (this.viewModel.primaryKey != null) + this.deleteButtonShouldAppear = (this.model.primaryKey != null) this.saveButtonShouldAppear = this.selectedReport.options.userGenerated setDisplayHomeAsUpEnabled(true) @@ -71,7 +71,7 @@ abstract class AbstractReportFragment : DataManagerFragment() { view.findViewById(net.pokeranalytics.android.R.id.reportName) nameEditText.inputType = InputType.TYPE_TEXT_FLAG_CAP_SENTENCES - this.viewModel.primaryKey?.let { id -> + this.model.primaryKey?.let { id -> getRealm().findById(id)?.let { reportSetup -> nameEditText.hint = reportSetup.name } @@ -110,10 +110,10 @@ abstract class AbstractReportFragment : DataManagerFragment() { private fun saveReport(name: String) { this.reportViewModel.title = name - val rs = this.viewModel.item as ReportSetup + val rs = this.model.item as ReportSetup getRealm().executeTransaction { realm -> - val firstSave = (this.viewModel.primaryKey == null) + val firstSave = (this.model.primaryKey == null) if (firstSave) { val options = this.selectedReport.options rs.name = name @@ -139,7 +139,7 @@ abstract class AbstractReportFragment : DataManagerFragment() { } - this.viewModel.primaryKey = rs.id + this.model.primaryKey = rs.id this.deleteButtonShouldAppear = true setToolbarTitle(this.reportViewModel.title) }