From 9a26ba2b3f5347bf63edf170ea66ef5143f7e00d Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Fri, 8 Mar 2019 17:23:01 +0100 Subject: [PATCH] Add method to get message when save failed for Savable --- .../android/model/interfaces/Savable.kt | 40 +++++++++++-------- .../android/model/realm/Bankroll.kt | 5 +++ .../android/model/realm/Game.kt | 5 +++ .../android/model/realm/Location.kt | 5 +++ .../android/model/realm/TournamentType.kt | 4 ++ .../ui/fragment/EditableDataFragment.kt | 17 +------- 6 files changed, 45 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/interfaces/Savable.kt b/app/src/main/java/net/pokeranalytics/android/model/interfaces/Savable.kt index d84c1332..fffbdebc 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/interfaces/Savable.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/interfaces/Savable.kt @@ -1,13 +1,14 @@ package net.pokeranalytics.android.model.interfaces +import net.pokeranalytics.android.R import net.pokeranalytics.android.ui.view.RowRepresentable interface Identifiable { - /** - * A unique identifier getter - */ - fun uniqueIdentifier(): String + /** + * A unique identifier getter + */ + fun uniqueIdentifier(): String } @@ -15,17 +16,24 @@ interface Identifiable { * An interface to easily handle the validity of any object we want to save */ interface Savable : Identifiable { - /** - * A method to define if an object is safe for saving in database - */ - fun isValidForSave(): Boolean { - //TODO should be by default to false - return true - } + /** + * A method to define if an object is safe for saving in database + */ + fun isValidForSave(): Boolean { + //TODO should be by default to false + return true + } - /** - * a method to handle the modification of the object. - * Through [RowRepresentable] the object is able to update the right variable with the new value. - */ - fun updateValue(value: Any?, row: RowRepresentable) + /** + * A method to get the reason why the object can't be saved + */ + fun getFailedSaveMessage(): Int { + return R.string.none + } + + /** + * a method to handle the modification of the object. + * Through [RowRepresentable] the object is able to update the right variable with the new value. + */ + fun updateValue(value: Any?, row: RowRepresentable) } \ No newline at end of file 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 83337bbe..ed094817 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 @@ -3,6 +3,7 @@ package net.pokeranalytics.android.model.realm import io.realm.RealmList 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.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.view.RowRepresentable @@ -94,4 +95,8 @@ open class Bankroll(name: String = "") : RealmObject(), Savable, return this.name.isNotEmpty() } + override fun getFailedSaveMessage(): Int { + return R.string.empty_name_for_br_error + } + } \ No newline at end of file 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 6e82814d..e1868239 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 @@ -2,6 +2,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.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.view.RowRepresentable @@ -75,4 +76,8 @@ open class Game : RealmObject(), Savable, StaticRowRepresentableDataSource, RowR return this.name.isNotEmpty() } + override fun getFailedSaveMessage(): Int { + return R.string.variant_empty_name_error + } + } 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 501d43dc..df1db34c 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 @@ -4,6 +4,7 @@ import com.google.android.libraries.places.api.model.Place 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.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.view.RowRepresentable @@ -101,6 +102,10 @@ open class Location : RealmObject(), Savable, StaticRowRepresentableDataSource, return this.name.isNotEmpty() } + override fun getFailedSaveMessage(): Int { + return R.string.location_empty_field_error + } + /** * Fill the location attributes with a place object */ diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentType.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentType.kt index c29e87b7..32954e15 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentType.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentType.kt @@ -2,6 +2,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.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.view.RowRepresentable @@ -64,5 +65,8 @@ open class TournamentType : RealmObject(), Savable, StaticRowRepresentableDataSo return this.name.isNotEmpty() } + override fun getFailedSaveMessage(): Int { + return R.string.tt_empty_field_error + } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt index 3f8e9c10..9f7f28f3 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt @@ -14,10 +14,6 @@ import net.pokeranalytics.android.R import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.model.interfaces.Savable -import net.pokeranalytics.android.model.realm.Bankroll -import net.pokeranalytics.android.model.realm.Game -import net.pokeranalytics.android.model.realm.Location -import net.pokeranalytics.android.model.realm.TournamentType import net.pokeranalytics.android.ui.activity.EditableDataActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter @@ -104,7 +100,7 @@ open class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDele * Init data */ private fun initData() { - if (this.dataType != null && this.primaryKey != null) { + if (this.dataType != null) { val proxyItem: RealmObject? = this.liveDataType.getData(this.getRealm(), primaryKey) proxyItem?.let { this.appBar.toolbar.title = "Update ${this.liveDataType.name.toLowerCase().capitalize()}" @@ -152,20 +148,11 @@ open class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDele finishActivityWithResult(uniqueIdentifier) } } else { - - val message = when (item) { - is Bankroll -> R.string.empty_name_for_br_error - is Location -> R.string.location_empty_field_error - is Game -> R.string.location_empty_field_error - is TournamentType -> R.string.tt_empty_field_error - else -> throw IllegalStateException("Need to manage ${item::class.java} error") - } - + val message = (this.item as Savable).getFailedSaveMessage() val builder = AlertDialog.Builder(requireContext()) .setMessage(message) .setNegativeButton(R.string.ok, null) builder.show() - } }