Add Manageable and Deletable interfaces to manage clean deletion

feature/top10
Aurelien Hubert 7 years ago
parent 9a26ba2b3f
commit 1ea7391ccb
  1. 6
      app/src/main/java/net/pokeranalytics/android/model/LiveData.kt
  2. 31
      app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt
  3. 13
      app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt
  4. 4
      app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt
  5. 4
      app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt
  6. 4
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  7. 4
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt
  8. 3
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentType.kt
  9. 3
      app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt
  10. 15
      app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt
  11. 3
      app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt
  12. 4
      app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt

@ -5,7 +5,7 @@ import io.realm.RealmObject
import io.realm.RealmResults
import io.realm.Sort
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.model.interfaces.Manageable
import net.pokeranalytics.android.model.realm.*
import net.pokeranalytics.android.ui.view.Localizable
@ -57,11 +57,11 @@ enum class LiveData : Localizable {
}
}
fun deleteData(realm:Realm, data:Savable) {
fun deleteData(realm: Realm, data: Manageable) {
realm.where(this.relatedEntity).equalTo("id", data.uniqueIdentifier()).findAll().deleteAllFromRealm()
}
fun updateOrCreate(realm:Realm, primaryKey:String?): RealmObject {
fun updateOrCreate(realm: Realm, primaryKey: String?): RealmObject {
val proxyItem: RealmObject? = this.getData(realm, primaryKey)
proxyItem?.let {
return realm.copyFromRealm(it)

@ -3,6 +3,14 @@ package net.pokeranalytics.android.model.interfaces
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.view.RowRepresentable
/**
* An interface to grouped object which are managed by the database
*/
interface Manageable : Savable, Deletable, Identifiable
/**
* An interface associate a unique identifier to an object
*/
interface Identifiable {
/**
@ -15,7 +23,7 @@ interface Identifiable {
/**
* An interface to easily handle the validity of any object we want to save
*/
interface Savable : Identifiable {
interface Savable {
/**
* A method to define if an object is safe for saving in database
*/
@ -37,3 +45,24 @@ interface Savable : Identifiable {
*/
fun updateValue(value: Any?, row: RowRepresentable)
}
/**
* An interface to easily handle the validity of any object we want to delete
*/
interface Deletable {
/**
* A method to define if an object is safe for deletion in database
*/
fun isValidForDelete(): Boolean {
return true
}
/**
* A method to get the reason why the object can't be deleted
*/
fun getFailedDeleteMessage(): Int {
return R.string.none
}
}

@ -3,8 +3,9 @@ package net.pokeranalytics.android.model.realm
import io.realm.RealmList
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.Savable
import net.pokeranalytics.android.model.interfaces.Manageable
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
@ -13,7 +14,7 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import java.util.*
import kotlin.collections.ArrayList
open class Bankroll(name: String = "") : RealmObject(), Savable,
open class Bankroll(name: String = "") : RealmObject(), Manageable,
StaticRowRepresentableDataSource, RowRepresentable {
companion object {
@ -99,4 +100,12 @@ open class Bankroll(name: String = "") : RealmObject(), Savable,
return R.string.empty_name_for_br_error
}
override fun isValidForDelete(): Boolean {
return this.realm.where<Session>().equalTo("bankroll.id", id).findAll().isEmpty()
}
override fun getFailedDeleteMessage(): Int {
return R.string.bankroll_relationship_error
}
}

@ -3,7 +3,7 @@ package net.pokeranalytics.android.model.realm
import io.realm.RealmObject
import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.model.interfaces.Manageable
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
@ -12,7 +12,7 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import java.util.*
import kotlin.collections.ArrayList
open class Game : RealmObject(), Savable, StaticRowRepresentableDataSource, RowRepresentable {
open class Game : RealmObject(), Manageable, StaticRowRepresentableDataSource, RowRepresentable {
@PrimaryKey
var id = UUID.randomUUID().toString()

@ -5,7 +5,7 @@ import io.realm.RealmObject
import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.model.interfaces.Manageable
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
@ -15,7 +15,7 @@ import java.util.*
import kotlin.collections.ArrayList
open class Location : RealmObject(), Savable, StaticRowRepresentableDataSource, RowRepresentable {
open class Location : RealmObject(), Manageable, StaticRowRepresentableDataSource, RowRepresentable {
@PrimaryKey
var id = UUID.randomUUID().toString()

@ -18,7 +18,7 @@ import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.TableSize
import net.pokeranalytics.android.model.extensions.SessionState
import net.pokeranalytics.android.model.extensions.getState
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.model.interfaces.Manageable
import net.pokeranalytics.android.model.interfaces.Timed
import net.pokeranalytics.android.model.utils.SessionSetManager
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
@ -34,7 +34,7 @@ import java.util.*
import java.util.Currency
import kotlin.collections.ArrayList
open class Session : RealmObject(), SessionInterface, Savable, StaticRowRepresentableDataSource, RowRepresentable,
open class Session : RealmObject(), SessionInterface, Manageable, StaticRowRepresentableDataSource, RowRepresentable,
Timed {
enum class Type {

@ -3,7 +3,7 @@ package net.pokeranalytics.android.model.realm
import android.text.InputType
import io.realm.RealmObject
import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.model.interfaces.Manageable
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
@ -12,7 +12,7 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.TournamentFeatureRow
import java.util.*
import kotlin.collections.ArrayList
open class TournamentFeature : RealmObject(), Savable, StaticRowRepresentableDataSource, RowRepresentable {
open class TournamentFeature : RealmObject(), Manageable, StaticRowRepresentableDataSource, RowRepresentable {
@PrimaryKey
var id = UUID.randomUUID().toString()

@ -3,6 +3,7 @@ package net.pokeranalytics.android.model.realm
import io.realm.RealmObject
import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.Manageable
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
@ -12,7 +13,7 @@ import java.util.*
import kotlin.collections.ArrayList
open class TournamentType : RealmObject(), Savable, StaticRowRepresentableDataSource, RowRepresentable {
open class TournamentType : RealmObject(), Manageable, StaticRowRepresentableDataSource, RowRepresentable {
@PrimaryKey
var id = UUID.randomUUID().toString()

@ -3,6 +3,7 @@ package net.pokeranalytics.android.model.realm
import android.text.InputType
import io.realm.RealmObject
import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.model.interfaces.Manageable
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
@ -13,7 +14,7 @@ import java.util.*
import kotlin.collections.ArrayList
open class TransactionType : RealmObject(), Savable, StaticRowRepresentableDataSource, RowRepresentable {
open class TransactionType : RealmObject(), Manageable, StaticRowRepresentableDataSource, RowRepresentable {
@PrimaryKey
var id = UUID.randomUUID().toString()

@ -12,7 +12,7 @@ import io.realm.RealmObject
import io.realm.RealmResults
import kotlinx.android.synthetic.main.fragment_data_list.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.model.interfaces.Manageable
import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.LiveRowRepresentableDataSource
@ -23,6 +23,7 @@ import net.pokeranalytics.android.ui.helpers.SwipeToDeleteCallback
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rowrepresentable.SettingRow
import net.pokeranalytics.android.util.showAlertDialog
class DataListFragment : PokerAnalyticsFragment(), LiveRowRepresentableDataSource, RowRepresentableDelegate {
@ -69,7 +70,7 @@ class DataListFragment : PokerAnalyticsFragment(), LiveRowRepresentableDataSourc
EditableDataActivity.newInstance(
requireContext(),
it.ordinal,
(row as Savable).uniqueIdentifier()
(row as Manageable).uniqueIdentifier()
)
}
}
@ -98,12 +99,18 @@ class DataListFragment : PokerAnalyticsFragment(), LiveRowRepresentableDataSourc
lastDeletedItemPosition = position
if (mRecentlyDeletedItem is RealmObject) {
if ((mRecentlyDeletedItem as Manageable).isValidForDelete()) {
deletedItem = getRealm().copyFromRealm(mRecentlyDeletedItem)
getRealm().executeTransaction {
mRecentlyDeletedItem.deleteFromRealm()
}
dataListAdapter.notifyItemRemoved(position)
showUndoSnackBar()
} else {
dataListAdapter.notifyItemChanged(position)
showAlertDialog(R.string.warning, (mRecentlyDeletedItem as Manageable).getFailedDeleteMessage())
}
}
}
@ -134,9 +141,9 @@ class DataListFragment : PokerAnalyticsFragment(), LiveRowRepresentableDataSourc
val message = String.format(getString(R.string.data_deleted), this.dataType.localizedTitle(requireContext()))
val snackBar = Snackbar.make(constraintLayout, message, Snackbar.LENGTH_LONG)
snackBar.setAction(R.string.cancel) {
getRealm().executeTransaction {realm ->
getRealm().executeTransaction { realm ->
deletedItem?.let {
realm.copyToRealm(it)
realm.copyToRealmOrUpdate(it)
dataListAdapter.notifyItemInserted(lastDeletedItemPosition)
}
}

@ -13,6 +13,7 @@ import kotlinx.android.synthetic.main.fragment_editable_data.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.Manageable
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
@ -167,7 +168,7 @@ open class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDele
.setPositiveButton(R.string.yes) { _, _ ->
//TODO: Maybe update this code, does the object need to be managed?
this.getRealm().executeTransaction {
this.liveDataType.deleteData(it, (this.item as Savable))
this.liveDataType.deleteData(it, (this.item as Manageable))
}
this.activity?.finish()
}

@ -13,7 +13,7 @@ import kotlinx.android.synthetic.main.fragment_history.*
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.model.interfaces.Manageable
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.ui.activity.SessionActivity
import net.pokeranalytics.android.ui.adapter.LiveRowRepresentableDataSource
@ -175,6 +175,6 @@ class HistoryFragment : PokerAnalyticsFragment(), LiveRowRepresentableDataSource
}
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
SessionActivity.newInstance(requireContext(), sessionId = (row as Savable).uniqueIdentifier())
SessionActivity.newInstance(requireContext(), sessionId = (row as Manageable).uniqueIdentifier())
}
}
Loading…
Cancel
Save