Add context for some Deletable functions & improve Filter deletion

dev
Aurelien Hubert 7 years ago
parent b8c5255cda
commit b370a6f441
  1. 7
      app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt
  2. 4
      app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt
  3. 2
      app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt
  4. 3
      app/src/main/java/net/pokeranalytics/android/model/realm/CustomFieldEntry.kt
  5. 7
      app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt
  6. 2
      app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt
  7. 4
      app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt
  8. 2
      app/src/main/java/net/pokeranalytics/android/model/realm/ReportSetup.kt
  9. 4
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt
  10. 4
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentName.kt
  11. 2
      app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt
  12. 2
      app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt
  13. 6
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/DeletableItemFragment.kt
  14. 5
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/CustomFieldDataFragment.kt
  15. 4
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/DataManagerFragment.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

@ -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<Session>().equalTo("bankroll.id", id).findAll().isEmpty()
&& realm.where<Transaction>().equalTo("bankroll.id", id).findAll().isEmpty()
}
override fun getDeleteStatus(realm: Realm): DeleteValidityStatus {
override fun getDeleteStatus(context: Context, realm: Realm): DeleteValidityStatus {
return if (!realm.where<Session>().equalTo("bankroll.id", id).findAll().isEmpty()) {
DeleteValidityStatus.SESSIONS_LINKED
} else if (!realm.where<Transaction>().equalTo("bankroll.id", id).findAll().isEmpty()) {

@ -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
}

@ -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<Session>().contains("customFieldEntries.id", id).findAll().isNotEmpty()) {
return false
}

@ -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
}
}

@ -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<Session>().equalTo("game.id", id).findAll().isEmpty()
}
}

@ -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<Session>().equalTo("location.id", id).findAll().isEmpty()
}
}

@ -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
}

@ -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<Session>().equalTo("tournamentFeatures.id", id).findAll().isEmpty()
}
}

@ -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<Session>().equalTo("tournamentName.id", id).findAll().isEmpty()
}
}

@ -115,7 +115,7 @@ open class Transaction : RealmObject(), Manageable, StaticRowRepresentableDataSo
return realm.where<Transaction>().equalTo("id", id).findFirst() != null
}
override fun isValidForDelete(realm: Realm): Boolean {
override fun isValidForDelete(context: Context, realm: Realm): Boolean {
return true
}

@ -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
}

@ -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)

@ -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)

@ -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)

Loading…
Cancel
Save