From b1116df47f7b1a164d6f0c9df1f2ae8c862b2054 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Fri, 22 Feb 2019 19:12:06 +0100 Subject: [PATCH] minor refactoring --- .../android/PokerAnalyticsApplication.kt | 3 - .../net/pokeranalytics/android/model/Limit.kt | 43 +++++++- .../pokeranalytics/android/model/LiveData.kt | 15 +-- .../pokeranalytics/android/model/TableSize.kt | 36 +++++++ .../android/model/interfaces/Savable.kt | 19 ++++ .../android/model/realm/Bankroll.kt | 21 ++-- .../android/model/realm/Game.kt | 28 +++-- .../android/model/realm/Location.kt | 18 ++-- .../android/model/realm/Session.kt | 100 +++++++++++++----- .../android/model/realm/TournamentFeature.kt | 18 ++-- .../android/model/realm/TransactionType.kt | 18 ++-- .../android/ui/fragment/DataListFragment.kt | 6 +- .../ui/fragment/EditableDataFragment.kt | 8 +- .../android/ui/fragment/HistoryFragment.kt | 5 +- .../android/ui/fragment/SessionFragment.kt | 2 +- .../components/bottomsheet/BottomSheetData.kt | 11 -- .../bottomsheet/BottomSheetFragment.kt | 8 +- .../BottomSheetListGameFragment.kt | 13 +-- .../BottomSheetTableSizeGridFragment.kt | 34 +----- .../android/ui/view/RowEditable.kt | 28 ++++- .../android/ui/view/RowRepresentable.kt | 4 + 21 files changed, 289 insertions(+), 149 deletions(-) create mode 100644 app/src/main/java/net/pokeranalytics/android/model/TableSize.kt create mode 100644 app/src/main/java/net/pokeranalytics/android/model/interfaces/Savable.kt delete mode 100644 app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetData.kt diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt index f884ce17..a9b1286f 100644 --- a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt +++ b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt @@ -5,7 +5,6 @@ import io.realm.Realm import io.realm.RealmConfiguration import io.realm.RealmResults import io.realm.kotlin.where -import net.pokeranalytics.android.model.Limit import net.pokeranalytics.android.model.realm.Game import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.util.PokerAnalyticsLogs @@ -53,8 +52,6 @@ class PokerAnalyticsApplication : Application() { */ } - Limit.init(this) - if (BuildConfig.DEBUG) { // Logs Timber.plant(PokerAnalyticsLogs()) diff --git a/app/src/main/java/net/pokeranalytics/android/model/Limit.kt b/app/src/main/java/net/pokeranalytics/android/model/Limit.kt index ca9f5402..95121954 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/Limit.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/Limit.kt @@ -1,8 +1,44 @@ package net.pokeranalytics.android.model -import android.content.Context -import net.pokeranalytics.android.R +import net.pokeranalytics.android.ui.view.RowRepresentable +enum class Limit : RowRepresentable { + NO, + POT, + FIXED, + SPREAD, + MIXED; + + val shortName: String + get() { + return when (this) { + NO -> "NL" + POT -> "PL" + FIXED -> "FL" + MIXED -> "ML" + SPREAD -> "SL" + } + } + + val longName: String + get() { + val limit = "Limit" + return when (this) { + NO -> "No $limit" + POT -> "Pot $limit" + FIXED -> "Fixed $limit" + MIXED -> "Mixed $limit" + SPREAD -> "Spread $limit" + } + } + + + override fun getDisplayName(): String { + return this.longName + } +} + +/* class Limit { companion object { @@ -23,4 +59,5 @@ class Limit { } } -} \ No newline at end of file +} + */ \ No newline at end of file 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 1d79a807..c5687eb8 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt @@ -5,21 +5,10 @@ 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.realm.* -import net.pokeranalytics.android.ui.adapter.components.LiveDataDataSource import net.pokeranalytics.android.ui.view.Localizable -/** - * An interface to easily handle the validity of any object we want to save - */ -interface ObjectSavable { - fun isValidForSave(): Boolean { - return true - } - - fun uniqueIdentifier(): String -} - /** * An enum managing the business objects related to a realm results */ @@ -66,7 +55,7 @@ enum class LiveData : Localizable { } } - fun deleteData(realm:Realm, data:ObjectSavable) { + fun deleteData(realm:Realm, data:Savable) { realm.where(this.relatedEntity).equalTo("id", data.uniqueIdentifier()).findAll().deleteAllFromRealm() } diff --git a/app/src/main/java/net/pokeranalytics/android/model/TableSize.kt b/app/src/main/java/net/pokeranalytics/android/model/TableSize.kt new file mode 100644 index 00000000..50ec2f16 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/model/TableSize.kt @@ -0,0 +1,36 @@ +package net.pokeranalytics.android.model + +import android.content.Context +import net.pokeranalytics.android.R +import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.ui.view.RowViewType + +class TableSize(var numberOfPlayer:Int): RowRepresentable { + companion object { + val all = Array(8, init = + { index -> TableSize(index+2)}) + } + + override val resId: Int? + get() { + return if (this.numberOfPlayer == 2) { + R.string.heads_up + } else { + R.string.max + } + } + + override fun localizedTitle(context: Context): String { + this.resId?.let { + return if (this.numberOfPlayer == 2) { + context.getString(it) + } else { + "$this.numberOfPlayer$context.getString(it)" + } + } + return super.localizedTitle(context) + } + + override val viewType: Int + get() = RowViewType.TITLE_GRID.ordinal +} 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 new file mode 100644 index 00000000..7bc511bf --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/model/interfaces/Savable.kt @@ -0,0 +1,19 @@ +package net.pokeranalytics.android.model.interfaces + +/** + * An interface to easily handle the validity of any object we want to save + */ +interface Savable { + /** + * 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 unique identifier getter + */ + fun uniqueIdentifier(): String +} \ 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 be0cc9d9..d467bb14 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 @@ -4,16 +4,15 @@ import android.text.InputType import io.realm.RealmList import io.realm.RealmObject import io.realm.annotations.PrimaryKey -import net.pokeranalytics.android.model.ObjectSavable -import net.pokeranalytics.android.ui.adapter.components.LiveDataDataSource +import net.pokeranalytics.android.model.interfaces.Savable import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDataSource -import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetData +import net.pokeranalytics.android.ui.view.RowEditableDescriptor import net.pokeranalytics.android.ui.view.* import java.util.* import kotlin.collections.ArrayList -open class Bankroll(name: String = "") : RealmObject(), RowRepresentableDataSource, - RowEditable, ObjectSavable, RowRepresentable { +open class Bankroll(name: String = "") : RealmObject(), Savable, RowRepresentableDataSource, + RowEditable, RowRepresentable { companion object { fun newInstance() : Bankroll { @@ -70,10 +69,16 @@ open class Bankroll(name: String = "") : RealmObject(), RowRepresentableDataSour } } - override fun getBottomSheetData(row: RowRepresentable): ArrayList { - val data = java.util.ArrayList() + override fun rowEditableDescriptors(row: RowRepresentable): ArrayList { + val data = java.util.ArrayList() when (row) { - SimpleRow.NAME -> data.add(BottomSheetData(this.name, SimpleRow.NAME.resId, InputType.TYPE_CLASS_TEXT)) + SimpleRow.NAME -> data.add( + RowEditableDescriptor( + this.name, + SimpleRow.NAME.resId, + InputType.TYPE_CLASS_TEXT + ) + ) } return data } 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 2ff50761..1669fd1e 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 @@ -3,15 +3,13 @@ package net.pokeranalytics.android.model.realm import android.text.InputType import io.realm.RealmObject import io.realm.annotations.PrimaryKey -import net.pokeranalytics.android.model.ObjectSavable -import net.pokeranalytics.android.ui.adapter.components.DisplayableDelegate -import net.pokeranalytics.android.ui.adapter.components.LiveDataDataSource +import net.pokeranalytics.android.model.interfaces.Savable import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDataSource -import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetData +import net.pokeranalytics.android.ui.view.RowEditableDescriptor import net.pokeranalytics.android.ui.view.* import java.util.* -open class Game : RealmObject(), RowRepresentableDataSource, RowEditable, ObjectSavable, +open class Game : RealmObject(), Savable, RowRepresentableDataSource, RowEditable, RowRepresentable { @PrimaryKey @@ -46,11 +44,23 @@ open class Game : RealmObject(), RowRepresentableDataSource, RowEditable, Object } } - override fun getBottomSheetData(row: RowRepresentable): ArrayList { - val data = java.util.ArrayList() + override fun rowEditableDescriptors(row: RowRepresentable): ArrayList { + val data = java.util.ArrayList() when (row) { - SimpleRow.NAME -> data.add(BottomSheetData(this.name, SimpleRow.NAME.resId, InputType.TYPE_CLASS_TEXT)) - GameRow.SHORT_NAME -> data.add(BottomSheetData(this.shortName, GameRow.SHORT_NAME.resId, InputType.TYPE_CLASS_TEXT)) + SimpleRow.NAME -> data.add( + RowEditableDescriptor( + this.name, + SimpleRow.NAME.resId, + InputType.TYPE_CLASS_TEXT + ) + ) + GameRow.SHORT_NAME -> data.add( + RowEditableDescriptor( + this.shortName, + GameRow.SHORT_NAME.resId, + InputType.TYPE_CLASS_TEXT + ) + ) } return data } 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 733d6de6..fc46c6a4 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 @@ -3,9 +3,9 @@ package net.pokeranalytics.android.model.realm import android.text.InputType import io.realm.RealmObject import io.realm.annotations.PrimaryKey -import net.pokeranalytics.android.model.ObjectSavable +import net.pokeranalytics.android.model.interfaces.Savable import net.pokeranalytics.android.ui.adapter.components.* -import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetData +import net.pokeranalytics.android.ui.view.RowEditableDescriptor import net.pokeranalytics.android.ui.view.RowEditable import net.pokeranalytics.android.ui.view.LocationRow import net.pokeranalytics.android.ui.view.RowRepresentable @@ -13,7 +13,7 @@ import net.pokeranalytics.android.ui.view.SimpleRow import java.util.* -open class Location : RealmObject(), RowRepresentableDataSource, RowEditable, ObjectSavable, RowRepresentable { +open class Location : RealmObject(), Savable, RowRepresentableDataSource, RowEditable, RowRepresentable { @PrimaryKey var id = UUID.randomUUID().toString() @@ -49,10 +49,16 @@ open class Location : RealmObject(), RowRepresentableDataSource, RowEditable, Ob } } - override fun getBottomSheetData(row: RowRepresentable): ArrayList { - val data = java.util.ArrayList() + override fun rowEditableDescriptors(row: RowRepresentable): ArrayList { + val data = java.util.ArrayList() when (row) { - SimpleRow.NAME -> data.add(BottomSheetData(this.name, SimpleRow.NAME.resId, InputType.TYPE_CLASS_TEXT)) + SimpleRow.NAME -> data.add( + RowEditableDescriptor( + this.name, + SimpleRow.NAME.resId, + InputType.TYPE_CLASS_TEXT + ) + ) } return data } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt index 21d64b97..d3c2411a 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt @@ -10,11 +10,11 @@ import net.pokeranalytics.android.R import net.pokeranalytics.android.calculus.SessionInterface import net.pokeranalytics.android.model.Limit import net.pokeranalytics.android.model.LiveData -import net.pokeranalytics.android.model.ObjectSavable 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.ui.adapter.components.RowRepresentableDataSource -import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetData +import net.pokeranalytics.android.ui.view.RowEditableDescriptor import net.pokeranalytics.android.ui.view.RowEditable import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.SessionRow @@ -26,8 +26,8 @@ import timber.log.Timber import java.util.* import kotlin.collections.ArrayList -open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource, - RowEditable, RowRepresentable, ObjectSavable { +open class Session : RealmObject(), SessionInterface, Savable, RowRepresentableDataSource, + RowEditable, RowRepresentable { @PrimaryKey var id = UUID.randomUUID().toString() @@ -201,7 +201,7 @@ open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource fun getGameTitle(): String { var gameTitle = "" limit?.let { - gameTitle += Limit.get(it) + " " + gameTitle += Limit.values()[it].shortName + " " } if (game != null) { gameTitle += game?.name @@ -294,64 +294,112 @@ open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource } } - override fun getBottomSheetData(row: RowRepresentable): ArrayList { + override fun rowEditableDescriptors(row: RowRepresentable): ArrayList { - val data = ArrayList() + val data = ArrayList() when (row) { SessionRow.BUY_IN -> { // Add first & second buttons values, current value & set the 2 edit texts - data.add(BottomSheetData(100.0 * (cgBigBlind ?: 0.0))) - data.add(BottomSheetData(200.0 * (cgBigBlind ?: 0.0))) - data.add(BottomSheetData(buyin)) + data.add(RowEditableDescriptor(100.0 * (cgBigBlind ?: 0.0))) + data.add(RowEditableDescriptor(200.0 * (cgBigBlind ?: 0.0))) + data.add(RowEditableDescriptor(buyin)) data.add( - BottomSheetData( + RowEditableDescriptor( "", inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL ) ) data.add( - BottomSheetData( + RowEditableDescriptor( "", inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL ) ) } SessionRow.CASHED_OUT -> { - data.add(BottomSheetData(result?.cashout, inputType = InputType.TYPE_CLASS_NUMBER)) + data.add( + RowEditableDescriptor( + result?.cashout, + inputType = InputType.TYPE_CLASS_NUMBER + ) + ) } SessionRow.TIPS -> { // Disable the buttons with value = 0, add current value & set the 2 edit texts // TODO: manage tips - data.add(BottomSheetData(cgSmallBlind ?: 0.0)) - data.add(BottomSheetData(cgBigBlind ?: 0.0)) - data.add(BottomSheetData(0)) - data.add(BottomSheetData("", inputType = InputType.TYPE_CLASS_NUMBER)) - data.add(BottomSheetData("", inputType = InputType.TYPE_CLASS_NUMBER)) + data.add(RowEditableDescriptor(cgSmallBlind ?: 0.0)) + data.add(RowEditableDescriptor(cgBigBlind ?: 0.0)) + data.add(RowEditableDescriptor(0)) + data.add( + RowEditableDescriptor( + "", + inputType = InputType.TYPE_CLASS_NUMBER + ) + ) + data.add( + RowEditableDescriptor( + "", + inputType = InputType.TYPE_CLASS_NUMBER + ) + ) } SessionRow.TABLE_SIZE -> { - data.add(BottomSheetData(tableSize)) + data.add(RowEditableDescriptor(tableSize)) } SessionRow.GAME -> { // Add current game & games list - data.add(BottomSheetData(limit)) - data.add(BottomSheetData(game, data = LiveData.GAME.items(realm))) + data.add(RowEditableDescriptor(limit)) + data.add( + RowEditableDescriptor( + game, + data = LiveData.GAME.items(realm) + ) + ) } SessionRow.LOCATION -> { // Add current location and locations list - data.add(BottomSheetData(location, data = LiveData.LOCATION.items(realm))) + data.add( + RowEditableDescriptor( + location, + data = LiveData.LOCATION.items(realm) + ) + ) } SessionRow.BANKROLL -> { // Add current bankroll and bankrolls list - data.add(BottomSheetData(bankroll, data = LiveData.BANKROLL.items(realm))) + data.add( + RowEditableDescriptor( + bankroll, + data = LiveData.BANKROLL.items(realm) + ) + ) } SessionRow.BLINDS -> { - data.add(BottomSheetData(cgSmallBlind, R.string.smallblind, InputType.TYPE_CLASS_NUMBER)) - data.add(BottomSheetData(cgBigBlind, R.string.bigblind, InputType.TYPE_CLASS_NUMBER)) + data.add( + RowEditableDescriptor( + cgSmallBlind, + R.string.smallblind, + InputType.TYPE_CLASS_NUMBER + ) + ) + data.add( + RowEditableDescriptor( + cgBigBlind, + R.string.bigblind, + InputType.TYPE_CLASS_NUMBER + ) + ) } SessionRow.COMMENT -> { - data.add(BottomSheetData(comment, R.string.comment, InputType.TYPE_CLASS_TEXT)) + data.add( + RowEditableDescriptor( + comment, + R.string.comment, + InputType.TYPE_CLASS_TEXT + ) + ) } } 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 a765249b..1dd03fff 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 @@ -3,16 +3,16 @@ package net.pokeranalytics.android.model.realm import android.text.InputType import io.realm.RealmObject import io.realm.annotations.PrimaryKey -import net.pokeranalytics.android.model.ObjectSavable +import net.pokeranalytics.android.model.interfaces.Savable import net.pokeranalytics.android.ui.adapter.components.* -import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetData +import net.pokeranalytics.android.ui.view.RowEditableDescriptor import net.pokeranalytics.android.ui.view.RowEditable import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.SimpleRow import net.pokeranalytics.android.ui.view.TournamentFeatureRow import java.util.* -open class TournamentFeature : RealmObject(), RowRepresentableDataSource, RowEditable, ObjectSavable, RowRepresentable { +open class TournamentFeature : RealmObject(), Savable, RowRepresentableDataSource, RowEditable, RowRepresentable { @PrimaryKey var id = UUID.randomUUID().toString() @@ -43,10 +43,16 @@ open class TournamentFeature : RealmObject(), RowRepresentableDataSource, RowEdi } - override fun getBottomSheetData(row: RowRepresentable): ArrayList { - val data = java.util.ArrayList() + override fun rowEditableDescriptors(row: RowRepresentable): ArrayList { + val data = java.util.ArrayList() when (row) { - SimpleRow.NAME -> data.add(BottomSheetData(this.name, SimpleRow.NAME.resId, InputType.TYPE_CLASS_TEXT)) + SimpleRow.NAME -> data.add( + RowEditableDescriptor( + this.name, + SimpleRow.NAME.resId, + InputType.TYPE_CLASS_TEXT + ) + ) } return data } 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 8e526eab..4885c110 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 @@ -3,9 +3,9 @@ package net.pokeranalytics.android.model.realm import android.text.InputType import io.realm.RealmObject import io.realm.annotations.PrimaryKey -import net.pokeranalytics.android.model.ObjectSavable +import net.pokeranalytics.android.model.interfaces.Savable import net.pokeranalytics.android.ui.adapter.components.* -import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetData +import net.pokeranalytics.android.ui.view.RowEditableDescriptor import net.pokeranalytics.android.ui.view.RowEditable import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.SimpleRow @@ -13,7 +13,7 @@ import net.pokeranalytics.android.ui.view.TransactionTypeRow import java.util.* -open class TransactionType : RealmObject(), RowRepresentableDataSource, RowEditable, ObjectSavable, RowRepresentable { +open class TransactionType : RealmObject(), Savable, RowRepresentableDataSource, RowEditable, RowRepresentable { @PrimaryKey var id = UUID.randomUUID().toString() @@ -52,10 +52,16 @@ open class TransactionType : RealmObject(), RowRepresentableDataSource, RowEdita } } - override fun getBottomSheetData(row: RowRepresentable): ArrayList { - val data = java.util.ArrayList() + override fun rowEditableDescriptors(row: RowRepresentable): ArrayList { + val data = java.util.ArrayList() when (row) { - SimpleRow.NAME -> data.add(BottomSheetData(this.name, SimpleRow.NAME.resId, InputType.TYPE_CLASS_TEXT)) + SimpleRow.NAME -> data.add( + RowEditableDescriptor( + this.name, + SimpleRow.NAME.resId, + InputType.TYPE_CLASS_TEXT + ) + ) } return data } 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 5b7798c4..131977f5 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 @@ -5,15 +5,15 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager -import io.realm.ObjectChangeSet import io.realm.Realm import io.realm.RealmResults import kotlinx.android.synthetic.main.fragment_data_list.* import net.pokeranalytics.android.R -import net.pokeranalytics.android.model.ObjectSavable +import net.pokeranalytics.android.model.interfaces.Savable import net.pokeranalytics.android.ui.activity.EditableDataActivity import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment +import net.pokeranalytics.android.ui.view.RowEditable import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.SettingRow @@ -53,7 +53,7 @@ class DataListFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, R override fun onIndexSelected(position: Int) { this.dataType.relatedResultsRepresentable?.let { - EditableDataActivity.newInstance(requireContext(), it.ordinal, (this.items[position] as ObjectSavable).uniqueIdentifier()) + EditableDataActivity.newInstance(requireContext(), it.ordinal, (this.items[position] as Savable).uniqueIdentifier()) } } 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 9b9de841..724c9454 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 @@ -10,7 +10,7 @@ import kotlinx.android.synthetic.main.fragment_editable_data.* 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.ObjectSavable +import net.pokeranalytics.android.model.interfaces.Savable import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment @@ -54,7 +54,7 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, } override fun onRowSelected(row: RowRepresentable) { - BottomSheetFragment.create(fragmentManager, row, this, (this.item as RowEditable).getBottomSheetData(row)) + BottomSheetFragment.create(fragmentManager, row, this, (this.item as RowEditable).rowEditableDescriptors(row)) } override fun clickOnAdd(row: RowRepresentable) { @@ -110,7 +110,7 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, * Save data */ private fun saveData() { - if ((this.item as ObjectSavable).isValidForSave()) { + if ((this.item as Savable).isValidForSave()) { this.getRealm().executeTransaction { it.copyToRealmOrUpdate(this.item) } @@ -138,7 +138,7 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Toast.makeText(requireContext(), "isManaged", Toast.LENGTH_SHORT).show() Timber.d("is managed") this.getRealm().executeTransaction { - this.liveDataType.deleteData(it, (this.item as ObjectSavable)) + this.liveDataType.deleteData(it, (this.item as Savable)) } } else { Toast.makeText(requireContext(), "isNotManaged", Toast.LENGTH_SHORT).show() diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt index b9a2a85c..fa34480b 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt @@ -11,13 +11,14 @@ import io.realm.Sort import io.realm.kotlin.where import kotlinx.android.synthetic.main.fragment_history.* import net.pokeranalytics.android.R -import net.pokeranalytics.android.model.ObjectSavable +import net.pokeranalytics.android.model.interfaces.Savable import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.ui.activity.SessionActivity import net.pokeranalytics.android.ui.adapter.components.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDelegate import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment +import net.pokeranalytics.android.ui.view.RowEditable import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType @@ -109,6 +110,6 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, Ro } override fun onRowSelected(row: RowRepresentable) { - SessionActivity.newInstance(requireContext(), sessionId = (row as ObjectSavable).uniqueIdentifier()) + SessionActivity.newInstance(requireContext(), sessionId = (row as Savable).uniqueIdentifier()) } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt index f06fca4b..731355e2 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt @@ -67,7 +67,7 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott override fun onRowSelected(row: RowRepresentable) { - val data = currentSession.getBottomSheetData(row) + val data = currentSession.rowEditableDescriptors(row) when (row) { SessionRow.START_DATE -> DateTimePickerManager.create( requireContext(), diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetData.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetData.kt deleted file mode 100644 index de66d062..00000000 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetData.kt +++ /dev/null @@ -1,11 +0,0 @@ -package net.pokeranalytics.android.ui.fragment.components.bottomsheet - -import android.text.InputType -import io.realm.RealmResults - -class BottomSheetData( - var defaultValue: Any? = null, - var hint: Int? = null, - var inputType: Int? = InputType.TYPE_CLASS_TEXT, - var data: RealmResults<*>? = null -) \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt index 518a7b69..197e2125 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt @@ -9,6 +9,7 @@ import androidx.fragment.app.FragmentManager import com.google.android.material.bottomsheet.BottomSheetDialogFragment import kotlinx.android.synthetic.main.fragment_bottom_sheet.* import net.pokeranalytics.android.R +import net.pokeranalytics.android.ui.view.RowEditableDescriptor import net.pokeranalytics.android.ui.view.RowRepresentable enum class BottomSheetType { @@ -28,20 +29,19 @@ interface BottomSheetDelegate { fun setValue(value: Any?, row: RowRepresentable) } - open class BottomSheetFragment : BottomSheetDialogFragment() { lateinit var row: RowRepresentable lateinit var bottomSheetDelegate: BottomSheetDelegate - private var data: ArrayList = ArrayList() + private var data: ArrayList = ArrayList() companion object { fun create( fragmentManager: FragmentManager?, row: RowRepresentable, bottomSheetDelegate: BottomSheetDelegate, - data: ArrayList + data: ArrayList ): BottomSheetFragment { val bottomSheetFragment = when (row.bottomSheetType) { @@ -112,7 +112,7 @@ open class BottomSheetFragment : BottomSheetDialogFragment() { /** * Return the data list */ - fun getData(): ArrayList { + fun getData(): ArrayList { return data } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListGameFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListGameFragment.kt index deb023f0..1eab9bf3 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListGameFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListGameFragment.kt @@ -9,6 +9,7 @@ import io.realm.RealmResults import kotlinx.android.synthetic.main.bottom_sheet_game_list.* import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.* import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.Limit import net.pokeranalytics.android.ui.adapter.components.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDelegate @@ -95,23 +96,19 @@ class BottomSheetListGameFragment : BottomSheetFragment(), RowRepresentableDataS values.add(0, null) values.add(1, null) - val limits = ArrayList() - limits.addAll(resources.getStringArray(R.array.limit_short_name)) - chipGroup.removeAllViews() - for ((index, limit) in limits.withIndex()) { + Limit.values().forEach { val chip = Chip(requireContext()) - chip.text = limit - chip.id = index + chip.text = it.shortName + chip.id = it.ordinal chipGroup.addView(chip) } - chipGroup.setOnCheckedChangeListener { chipGroup, i -> + chipGroup.setOnCheckedChangeListener { _, i -> Timber.d("Chip selected: $i") values[0] = i } - val viewManager2 = LinearLayoutManager(requireContext()) dataAdapter = RowRepresentableAdapter(this, this) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt index 38159ee5..e3a4cfd4 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt @@ -1,49 +1,17 @@ package net.pokeranalytics.android.ui.fragment.components.bottomsheet -import android.content.Context import android.os.Bundle import android.view.LayoutInflater import android.view.View import androidx.recyclerview.widget.GridLayoutManager import kotlinx.android.synthetic.main.bottom_sheet_grid.* import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.* -import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.TableSize import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.view.GridSpacingItemDecoration import net.pokeranalytics.android.ui.view.RowRepresentable -import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.util.px -class TableSize(var numberOfPlayer:Int): RowRepresentable { - companion object { - val all = Array(8, init = - { index -> TableSize(index+2)}) - } - - override val resId: Int? - get() { - return if (this.numberOfPlayer == 2) { - R.string.heads_up - } else { - R.string.max - } - } - - override fun localizedTitle(context: Context): String { - this.resId?.let { - return if (this.numberOfPlayer == 2) { - context.getString(it) - } else { - "$this.numberOfPlayer$context.getString(it)" - } - } - return super.localizedTitle(context) - } - - override val viewType: Int - get() = RowViewType.TITLE_GRID.ordinal -} - class BottomSheetTableSizeGridFragment : BottomSheetFragment(), RowRepresentableDataSource, RowRepresentableDelegate { private lateinit var dataAdapter: RowRepresentableAdapter diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowEditable.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowEditable.kt index fc99fc1f..a91fb0ca 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowEditable.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowEditable.kt @@ -1,8 +1,30 @@ package net.pokeranalytics.android.ui.view -import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetData +import android.text.InputType +import io.realm.RealmResults +/** +* An interface to describe how an object can be editable and to handle the update of the object +*/ interface RowEditable { - fun getBottomSheetData(row: RowRepresentable): ArrayList + /** + * A list of [RowEditableDescriptor] object specifying the way the edition will be handled + */ + fun rowEditableDescriptors(row: RowRepresentable): ArrayList + + /** + * 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 +} + +/** + * An container class to describe the way an field of an object will be edited + */ +class RowEditableDescriptor( + var defaultValue: Any? = null, + var hint: Int? = null, + var inputType: Int? = InputType.TYPE_CLASS_TEXT, + var data: RealmResults<*>? = null +) \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt index f3770e73..81c00890 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt @@ -30,11 +30,15 @@ interface Localizable { } +/** + * An interface extending Displayable to add a way to represent an object as a String + */ interface RowRepresentable : Displayable { fun getDisplayName(): String { return "UNKNOWN NAME" } } + /** * An interface used so that enums values can be represented visually * as rows in RecyclerViews