From 1d4ffa5a2466cedeaba5dc054e66e94b422c30e2 Mon Sep 17 00:00:00 2001 From: Laurent Date: Tue, 28 May 2019 13:42:28 +0200 Subject: [PATCH] Making DataListFragment deletableItems Deletable by default --- .../pokeranalytics/android/model/LiveData.kt | 15 +++++++-------- .../android/model/interfaces/Manageable.kt | 2 +- .../android/ui/fragment/BankrollFragment.kt | 5 ++--- .../android/ui/fragment/DataListFragment.kt | 7 ++++--- .../android/ui/fragment/ReportsFragment.kt | 4 ++-- .../components/DeletableItemFragment.kt | 18 +++++++----------- .../ui/fragment/data/DataManagerFragment.kt | 12 +++++------- 7 files changed, 28 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt b/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt index 0512dc2f..0e3f16e8 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt @@ -2,9 +2,8 @@ package net.pokeranalytics.android.model import android.content.Context import io.realm.Realm -import io.realm.RealmModel import net.pokeranalytics.android.R -import net.pokeranalytics.android.model.interfaces.Identifiable +import net.pokeranalytics.android.model.interfaces.Deletable import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.ui.view.Localizable import net.pokeranalytics.android.util.extensions.findById @@ -24,7 +23,7 @@ enum class LiveData : Localizable { CUSTOM_FIELD, REPORT_SETUP; - val relatedEntity: Class + val relatedEntity: Class get() { return when (this) { BANKROLL -> Bankroll::class.java @@ -40,8 +39,8 @@ enum class LiveData : Localizable { } } - fun updateOrCreate(realm: Realm, primaryKey: String?): RealmModel { - val proxyItem: Identifiable? = this.getData(realm, primaryKey) + fun updateOrCreate(realm: Realm, primaryKey: String?): Deletable { + val proxyItem: Deletable? = this.getData(realm, primaryKey) proxyItem?.let { return realm.copyFromRealm(it) } ?: run { @@ -49,12 +48,12 @@ enum class LiveData : Localizable { } } - private fun newEntity(): RealmModel { + private fun newEntity(): Deletable { return this.relatedEntity.newInstance() } - fun getData(realm: Realm, primaryKey: String?): Identifiable? { - var proxyItem: Identifiable? = null + fun getData(realm: Realm, primaryKey: String?): Deletable? { + var proxyItem: Deletable? = null primaryKey?.let { val t = realm.findById(this.relatedEntity, it) t?.let { diff --git a/app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt b/app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt index 25ce8221..74097255 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt @@ -21,7 +21,7 @@ enum class DeleteValidityStatus { } /** - * An interface to grouped object which are managed by the database + * An interface to group object which are managed by the database */ interface Manageable : Savable, Deletable, Editable diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollFragment.kt index 5d07aaf4..348efc70 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollFragment.kt @@ -22,6 +22,7 @@ import net.pokeranalytics.android.calculus.bankroll.BankrollCalculator import net.pokeranalytics.android.calculus.bankroll.BankrollReport import net.pokeranalytics.android.calculus.bankroll.BankrollReportSetup import net.pokeranalytics.android.model.LiveData +import net.pokeranalytics.android.model.interfaces.Deletable import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.model.realm.Bankroll import net.pokeranalytics.android.ui.activity.BankrollDetailsActivity @@ -59,8 +60,6 @@ class BankrollFragment : DeletableItemFragment(), StaticRowRepresentableDataSour } } - private lateinit var bankrollAdapter: RowRepresentableAdapter - private var rows: ArrayList = ArrayList() private var bankrollReportForRow: HashMap = HashMap() private var lastItemClickedPosition: Int = 0 @@ -69,7 +68,7 @@ class BankrollFragment : DeletableItemFragment(), StaticRowRepresentableDataSour private lateinit var bankrolls: RealmResults - override fun deletableItems() : List { + override fun deletableItems() : List { return this.bankrolls } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt index eb7b5edf..7241c472 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt @@ -13,6 +13,7 @@ import io.realm.RealmResults import kotlinx.android.synthetic.main.fragment_data_list.* import net.pokeranalytics.android.R import net.pokeranalytics.android.model.LiveData +import net.pokeranalytics.android.model.interfaces.Deletable import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.ui.activity.EditableDataActivity @@ -33,12 +34,12 @@ class DataListFragment : DeletableItemFragment(), LiveRowRepresentableDataSource const val REQUEST_CODE_DETAILS = 1000 } - private lateinit var identifiableClass: Class + private lateinit var identifiableClass: Class private lateinit var dataType: LiveData - private lateinit var items: RealmResults + private lateinit var items: RealmResults - override fun deletableItems() : List { + override fun deletableItems() : List { return this.items } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt index 263a1dee..77f4e5d3 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt @@ -20,7 +20,7 @@ import net.pokeranalytics.android.calculus.Calculator import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.model.Criteria import net.pokeranalytics.android.model.combined -import net.pokeranalytics.android.model.interfaces.Identifiable +import net.pokeranalytics.android.model.interfaces.Deletable import net.pokeranalytics.android.model.realm.ReportSetup import net.pokeranalytics.android.ui.activity.DataListActivity import net.pokeranalytics.android.ui.activity.ReportCreationActivity @@ -42,7 +42,7 @@ class ReportsFragment : DeletableItemFragment(), StaticRowRepresentableDataSourc private lateinit var reportSetups: RealmResults private var adapterRows = mutableListOf() - override fun deletableItems(): List { + override fun deletableItems(): List { return this.reportSetups } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/DeletableItemFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/DeletableItemFragment.kt index 4dbcb5e4..232a7d46 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/DeletableItemFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/DeletableItemFragment.kt @@ -14,13 +14,13 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.launch import net.pokeranalytics.android.R import net.pokeranalytics.android.model.interfaces.Deletable -import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.ui.activity.DataListActivity import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter /** * Deletable Item Fragment - * Don't forget to add a CoordinatorLayout at the top of your XML if you want to display correctly the snack bar + * Don't forget to add a CoordinatorLayout at the top of your XML + * if you want to display correctly the snack bar */ abstract class DeletableItemFragment : RealmFragment() { @@ -37,7 +37,7 @@ abstract class DeletableItemFragment : RealmFragment() { private var mainLayout: ViewGroup? = null private var snackBar: Snackbar? = null - abstract fun deletableItems() : List + abstract fun deletableItems() : List override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -60,7 +60,6 @@ abstract class DeletableItemFragment : RealmFragment() { deleteItem(dataListAdapter, deletableItems(), id) } } - } } @@ -69,9 +68,8 @@ abstract class DeletableItemFragment : RealmFragment() { * [dataListAdapter]: Adapter to update * [items]: List of items which contains the element to delete * [itemId]: Id of the item to delete - * [container]: View to display the Snackbar */ - fun deleteItem(dataListAdapter: RowRepresentableAdapter, items: List, itemId: String) { + fun deleteItem(dataListAdapter: RowRepresentableAdapter, items: List, itemId: String) { if (isDetached || activity == null) { return @@ -85,10 +83,8 @@ abstract class DeletableItemFragment : RealmFragment() { if (itemToDelete is RealmObject && itemPosition != -1) { - val deletableItem = (itemToDelete as Deletable) - // Check if the object is valid for the deletion - if (deletableItem.isValidForDelete(this.getRealm())) { + if (itemToDelete.isValidForDelete(this.getRealm())) { deletedItem = getRealm().copyFromRealm(itemToDelete) lastDeletedItemPosition = itemPosition getRealm().executeTransaction { @@ -100,8 +96,8 @@ abstract class DeletableItemFragment : RealmFragment() { showUndoSnackBar() } else { dataListAdapter.notifyItemChanged(itemPosition) - val status = deletableItem.getDeleteStatus(requireContext(), this.getRealm()) - val message = deletableItem.getFailedDeleteMessage(status) + val status = itemToDelete.getDeleteStatus(requireContext(), this.getRealm()) + val message = itemToDelete.getFailedDeleteMessage(status) val builder = AlertDialog.Builder(requireContext()) .setMessage(message) .setNegativeButton(R.string.ok, null) 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 cf0b68c8..e6cbc3b2 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 @@ -8,7 +8,6 @@ import android.view.MenuInflater import android.view.MenuItem import android.view.View import androidx.appcompat.app.AlertDialog -import io.realm.RealmModel import net.pokeranalytics.android.R import net.pokeranalytics.android.exceptions.ConfigurationException import net.pokeranalytics.android.model.LiveData @@ -21,7 +20,7 @@ import net.pokeranalytics.android.ui.fragment.components.RealmFragment open class DataManagerFragment : RealmFragment() { - lateinit var item: RealmModel + lateinit var item: Deletable lateinit var liveDataType: LiveData protected var primaryKey: String? = null @@ -123,17 +122,16 @@ open class DataManagerFragment : RealmFragment() { */ protected open fun deleteData() { - val deletable = this.item as Deletable val realm = this.getRealm() - if (deletable.isValidForDelete(realm)) { + if (this.item.isValidForDelete(realm)) { val intent = Intent() - intent.putExtra(DataListActivity.IntentKey.ITEM_DELETED.keyName, deletable.id) + intent.putExtra(DataListActivity.IntentKey.ITEM_DELETED.keyName, this.item.id) activity?.setResult(Activity.RESULT_OK, intent) activity?.finish() } else { - val status = deletable.getDeleteStatus(requireContext(), realm) - val message = deletable.getFailedDeleteMessage(status) + val status = this.item.getDeleteStatus(requireContext(), realm) + val message = this.item.getFailedDeleteMessage(status) val builder = AlertDialog.Builder(requireContext()) .setMessage(message) .setNegativeButton(R.string.ok, null)