From b370a6f4414b0540e4e7eb186bb8da9619895fb2 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Fri, 24 May 2019 12:37:46 +0200 Subject: [PATCH] Add context for some Deletable functions & improve Filter deletion --- .../pokeranalytics/android/model/interfaces/Manageable.kt | 7 ++++--- .../net/pokeranalytics/android/model/realm/Bankroll.kt | 4 ++-- .../net/pokeranalytics/android/model/realm/CustomField.kt | 2 +- .../pokeranalytics/android/model/realm/CustomFieldEntry.kt | 3 +-- .../java/net/pokeranalytics/android/model/realm/Filter.kt | 7 ++++--- .../java/net/pokeranalytics/android/model/realm/Game.kt | 2 +- .../net/pokeranalytics/android/model/realm/Location.kt | 4 ++-- .../net/pokeranalytics/android/model/realm/ReportSetup.kt | 2 +- .../android/model/realm/TournamentFeature.kt | 4 ++-- .../pokeranalytics/android/model/realm/TournamentName.kt | 4 ++-- .../net/pokeranalytics/android/model/realm/Transaction.kt | 2 +- .../pokeranalytics/android/model/realm/TransactionType.kt | 2 +- .../ui/fragment/components/DeletableItemFragment.kt | 6 ++---- .../android/ui/fragment/data/CustomFieldDataFragment.kt | 5 ++--- .../android/ui/fragment/data/DataManagerFragment.kt | 4 ++-- 15 files changed, 28 insertions(+), 30 deletions(-) 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 7dc3068b..efc63551 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 @@ -1,5 +1,6 @@ package net.pokeranalytics.android.model.interfaces +import android.content.Context import io.realm.Realm import io.realm.RealmModel import net.pokeranalytics.android.R @@ -106,11 +107,11 @@ interface Deletable : Identifiable { /** * A method to define if an object is safe for deletion in database */ - fun isValidForDelete(realm: Realm): Boolean + fun isValidForDelete(context: Context, realm: Realm): Boolean - fun getDeleteStatus(realm: Realm): DeleteValidityStatus { - if (!isValidForDelete(realm)) { + fun getDeleteStatus(context: Context, realm: Realm): DeleteValidityStatus { + if (!isValidForDelete(context, realm)) { return DeleteValidityStatus.INVALID } return DeleteValidityStatus.VALID diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt index 3a7ef8bc..1d1f34f7 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt @@ -66,12 +66,12 @@ open class Bankroll : RealmObject(), NameManageable, RowRepresentable { } } - override fun isValidForDelete(realm: Realm): Boolean { + override fun isValidForDelete(context: Context, realm: Realm): Boolean { return realm.where().equalTo("bankroll.id", id).findAll().isEmpty() && realm.where().equalTo("bankroll.id", id).findAll().isEmpty() } - override fun getDeleteStatus(realm: Realm): DeleteValidityStatus { + override fun getDeleteStatus(context: Context, realm: Realm): DeleteValidityStatus { return if (!realm.where().equalTo("bankroll.id", id).findAll().isEmpty()) { DeleteValidityStatus.SESSIONS_LINKED } else if (!realm.where().equalTo("bankroll.id", id).findAll().isEmpty()) { diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt index e5f98fee..b5ef7161 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt @@ -117,7 +117,7 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa return realm.where(this::class.java).equalTo("name", this.name).and().notEqualTo("id", this.id).findAll().isNotEmpty() } - override fun isValidForDelete(realm: Realm): Boolean { + override fun isValidForDelete(context: Context, realm: Realm): Boolean { return true } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/CustomFieldEntry.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/CustomFieldEntry.kt index 67a8bcbb..ff8ead6b 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/CustomFieldEntry.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/CustomFieldEntry.kt @@ -10,7 +10,6 @@ import io.realm.kotlin.where import net.pokeranalytics.android.R import net.pokeranalytics.android.exceptions.ModelException import net.pokeranalytics.android.model.interfaces.DeleteValidityStatus -import net.pokeranalytics.android.model.interfaces.Manageable import net.pokeranalytics.android.model.interfaces.NameManageable import net.pokeranalytics.android.model.interfaces.SaveValidityStatus import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType @@ -95,7 +94,7 @@ open class CustomFieldEntry : RealmObject(), NameManageable, RowRepresentable { this.value = value as String? ?: "" } - override fun isValidForDelete(realm: Realm): Boolean { + override fun isValidForDelete(context: Context, realm: Realm): Boolean { if (realm.where().contains("customFieldEntries.id", id).findAll().isNotEmpty()) { return false } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt index a7576a40..02d35349 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt @@ -16,6 +16,7 @@ import net.pokeranalytics.android.ui.view.ImageDecorator import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategoryRow +import net.pokeranalytics.android.util.Preferences import java.util.* /** @@ -178,11 +179,11 @@ open class Filter : RealmObject(), RowRepresentable, Identifiable, Deletable, Im return this.query.getName(context) } - override fun isValidForDelete(realm: Realm): Boolean { - return true + override fun isValidForDelete(context: Context, realm: Realm): Boolean { + return id != Preferences.getActiveFilterId(context) } override fun getFailedDeleteMessage(status: DeleteValidityStatus): Int { - return R.string.relationship_error + return R.string.filter_currently_selected } } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt index 2334baa0..8c53f9ff 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt @@ -91,7 +91,7 @@ open class Game : RealmObject(), NameManageable, StaticRowRepresentableDataSourc } } - override fun isValidForDelete(realm: Realm): Boolean { + override fun isValidForDelete(context: Context, realm: Realm): Boolean { return realm.where().equalTo("game.id", id).findAll().isEmpty() } } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt index 878486ca..1453941b 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt @@ -7,8 +7,8 @@ import io.realm.RealmObject import io.realm.annotations.PrimaryKey import io.realm.kotlin.where import net.pokeranalytics.android.R -import net.pokeranalytics.android.model.interfaces.SaveValidityStatus import net.pokeranalytics.android.model.interfaces.NameManageable +import net.pokeranalytics.android.model.interfaces.SaveValidityStatus import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow import java.util.* @@ -59,7 +59,7 @@ open class Location : RealmObject(), NameManageable, RowRepresentable { } } - override fun isValidForDelete(realm: Realm): Boolean { + override fun isValidForDelete(context: Context, realm: Realm): Boolean { return realm.where().equalTo("location.id", id).findAll().isEmpty() } } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/ReportSetup.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/ReportSetup.kt index 82b996e8..f09a7764 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/ReportSetup.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/ReportSetup.kt @@ -70,7 +70,7 @@ open class ReportSetup : RealmObject(), RowRepresentable, Deletable { // Deletable - override fun isValidForDelete(realm: Realm): Boolean { + override fun isValidForDelete(context: Context, realm: Realm): Boolean { return true } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt index 95e6aaaa..1e6ca919 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt @@ -7,8 +7,8 @@ import io.realm.annotations.PrimaryKey import io.realm.kotlin.where import net.pokeranalytics.android.R import net.pokeranalytics.android.model.interfaces.CountableUsage -import net.pokeranalytics.android.model.interfaces.SaveValidityStatus import net.pokeranalytics.android.model.interfaces.NameManageable +import net.pokeranalytics.android.model.interfaces.SaveValidityStatus import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor @@ -73,7 +73,7 @@ open class TournamentFeature : RealmObject(), NameManageable, StaticRowRepresent } } - override fun isValidForDelete(realm: Realm): Boolean { + override fun isValidForDelete(context: Context, realm: Realm): Boolean { return realm.where().equalTo("tournamentFeatures.id", id).findAll().isEmpty() } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentName.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentName.kt index 5fe708c2..8c72ba2b 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentName.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentName.kt @@ -6,8 +6,8 @@ import io.realm.RealmObject import io.realm.annotations.PrimaryKey import io.realm.kotlin.where import net.pokeranalytics.android.R -import net.pokeranalytics.android.model.interfaces.SaveValidityStatus import net.pokeranalytics.android.model.interfaces.NameManageable +import net.pokeranalytics.android.model.interfaces.SaveValidityStatus import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor @@ -67,7 +67,7 @@ open class TournamentName : RealmObject(), NameManageable, StaticRowRepresentabl } } - override fun isValidForDelete(realm: Realm): Boolean { + override fun isValidForDelete(context: Context, realm: Realm): Boolean { return realm.where().equalTo("tournamentName.id", id).findAll().isEmpty() } } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt index 56296685..930a4776 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt @@ -115,7 +115,7 @@ open class Transaction : RealmObject(), Manageable, StaticRowRepresentableDataSo return realm.where().equalTo("id", id).findFirst() != null } - override fun isValidForDelete(realm: Realm): Boolean { + override fun isValidForDelete(context: Context, realm: Realm): Boolean { return true } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt index d511ca28..55f20221 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt @@ -90,7 +90,7 @@ open class TransactionType : RealmObject(), NameManageable, StaticRowRepresentab } } - override fun isValidForDelete(realm: Realm): Boolean { + override fun isValidForDelete(context: Context, realm: Realm): Boolean { return true } 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 7a777c74..cc193389 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 @@ -15,10 +15,8 @@ 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.model.realm.Filter import net.pokeranalytics.android.ui.activity.DataListActivity import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter -import timber.log.Timber /** * Deletable Item Fragment @@ -90,7 +88,7 @@ abstract class DeletableItemFragment : RealmFragment() { val deletableItem = (itemToDelete as Deletable) // Check if the object is valid for the deletion - if (deletableItem.isValidForDelete(this.getRealm())) { + if (deletableItem.isValidForDelete(requireContext(), this.getRealm())) { deletedItem = getRealm().copyFromRealm(itemToDelete) lastDeletedItemPosition = itemPosition getRealm().executeTransaction { @@ -102,7 +100,7 @@ abstract class DeletableItemFragment : RealmFragment() { showUndoSnackBar() } else { dataListAdapter.notifyItemChanged(itemPosition) - val status = deletableItem.getDeleteStatus(this.getRealm()) + val status = deletableItem.getDeleteStatus(requireContext(), this.getRealm()) val message = deletableItem.getFailedDeleteMessage(status) val builder = AlertDialog.Builder(requireContext()) .setMessage(message) 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 b0d68bbe..5559007c 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 @@ -24,7 +24,6 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.CustomFieldRow import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow import net.pokeranalytics.android.util.NULL_TEXT import java.util.* -import kotlin.collections.ArrayList /** * Custom EditableDataFragment to manage the Transaction data @@ -180,8 +179,8 @@ class CustomFieldDataFragment : EditableDataFragment(), StaticRowRepresentableDa super.onRowDeleted(row) when (row) { is CustomFieldEntry -> { - if (!row.isValidForDelete(getRealm())) { - val status = row.getDeleteStatus(getRealm()) + if (!row.isValidForDelete(requireContext(), getRealm())) { + val status = row.getDeleteStatus(requireContext(), getRealm()) val message = row.getFailedDeleteMessage(status) showAlertDialog(requireContext(), R.string.cf_entry_delete_popup_title, message, showCancelButton = true, positiveAction = { customField.deleteEntry(row) 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 938d9e09..686671d8 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 @@ -126,13 +126,13 @@ open class DataManagerFragment : RealmFragment() { val deletable = this.item as Deletable val realm = this.getRealm() - if (deletable.isValidForDelete(realm)) { + if (deletable.isValidForDelete(requireContext(), realm)) { val intent = Intent() intent.putExtra(DataListActivity.IntentKey.ITEM_DELETED.keyName, deletable.id) activity?.setResult(Activity.RESULT_OK, intent) activity?.finish() } else { - val status = deletable.getDeleteStatus(realm) + val status = deletable.getDeleteStatus(requireContext(), realm) val message = deletable.getFailedDeleteMessage(status) val builder = AlertDialog.Builder(requireContext()) .setMessage(message)