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..964144ed 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,16 @@ 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.ui.adapter.components.RowRepresentableDataSource -import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetData +import net.pokeranalytics.android.model.interfaces.Savable +import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource +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 +70,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..2bf0fa53 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.ui.adapter.components.RowRepresentableDataSource -import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetData +import net.pokeranalytics.android.model.interfaces.Savable +import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource +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..7e4f49a0 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.ui.adapter.components.* -import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetData +import net.pokeranalytics.android.model.interfaces.Savable +import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource +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 e4b9083f..95b2025b 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.ui.adapter.components.RowRepresentableDataSource -import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetData +import net.pokeranalytics.android.model.interfaces.Savable +import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource +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,9 @@ 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 +202,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 @@ -300,64 +301,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..4b36646f 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.ui.adapter.components.* -import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetData +import net.pokeranalytics.android.model.interfaces.Savable +import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource +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..0d1130c7 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.ui.adapter.components.* -import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetData +import net.pokeranalytics.android.model.interfaces.Savable +import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource +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/adapter/HistoryAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/HistoryAdapter.kt deleted file mode 100644 index f782256c..00000000 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/HistoryAdapter.kt +++ /dev/null @@ -1,58 +0,0 @@ -package net.pokeranalytics.android.ui.adapter - -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView -import io.realm.RealmResults -import kotlinx.android.synthetic.main.row_history_session.view.* -import net.pokeranalytics.android.R -import net.pokeranalytics.android.model.realm.Session -import timber.log.Timber - -class HistoryAdapter(private var sessions: RealmResults) : RecyclerView.Adapter() { - - companion object { - const val ROW_SESSION: Int = 100 - const val ROW_TOURNAMENT: Int = 101 - const val ROW_HAND: Int = 102 - const val ROW_TRANSACTION: Int = 103 - } - - var onClickOnSession: ((position: Int, session: Session) -> Unit)? = null - - inner class RowSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - - fun bind(session: Session?) { - session?.let { - itemView.sessionRow.setData(session) - itemView.sessionRow.setOnClickListener { - onClickOnSession?.invoke(adapterPosition, session) - } - } - } - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - when (viewType) { - ROW_SESSION -> return RowSessionViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.row_history_session, parent, false)) - else -> throw IllegalStateException("Need to implement type $viewType in HistoryAdapter") - } - } - - override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - when (getItemViewType(position)) { - ROW_SESSION -> (holder as HistoryAdapter.RowSessionViewHolder).bind(sessions.get(position)) - } - } - - override fun getItemCount(): Int { - return sessions.size - } - - override fun getItemViewType(position: Int): Int { - return ROW_SESSION - } - - -} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/LimitTypesAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/LimitTypesAdapter.kt deleted file mode 100644 index 52832cbd..00000000 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/LimitTypesAdapter.kt +++ /dev/null @@ -1,51 +0,0 @@ -package net.pokeranalytics.android.ui.adapter - -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView -import kotlinx.android.synthetic.main.row_bottom_sheet_grid_title.view.* -import net.pokeranalytics.android.R - -class LimitTypesAdapter(private var tableSizes: ArrayList) : RecyclerView.Adapter() { - - companion object { - const val ROW_LIMIT: Int = 100 - } - - var onClickOnItem: ((position: Int) -> Unit)? = null - - inner class CellSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - - fun bind(tableSize: String) { - itemView.title.text = tableSize - itemView.container.setOnClickListener { - onClickOnItem?.invoke(adapterPosition) - - } - } - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - when (viewType) { - ROW_LIMIT -> return CellSessionViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.row_bottom_sheet_title, parent, false)) - else -> throw IllegalStateException("Need to implement type $viewType in HistoryAdapter") - } - } - - override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - when (getItemViewType(position)) { - ROW_LIMIT -> (holder as LimitTypesAdapter.CellSessionViewHolder).bind(tableSizes[position]) - } - } - - override fun getItemCount(): Int { - return tableSizes.size - } - - override fun getItemViewType(position: Int): Int { - return ROW_LIMIT - } - - -} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowRepresentableAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt similarity index 95% rename from app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowRepresentableAdapter.kt rename to app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt index 9977fe0b..5b13bd61 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowRepresentableAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt @@ -1,4 +1,4 @@ -package net.pokeranalytics.android.ui.adapter.components +package net.pokeranalytics.android.ui.adapter import android.view.View import android.view.ViewGroup @@ -91,8 +91,8 @@ interface DisplayableDelegate { * @param delegate the delegate, notified of UI actions */ class RowRepresentableAdapter( - var dataSource: RowRepresentableDataSource, - var delegate: RowRepresentableDelegate? = null + var dataSource: RowRepresentableDataSource, + var delegate: RowRepresentableDelegate? = null ) : RecyclerView.Adapter() { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/TableSizeGridAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/TableSizeGridAdapter.kt deleted file mode 100644 index c0ea5637..00000000 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/TableSizeGridAdapter.kt +++ /dev/null @@ -1,50 +0,0 @@ -package net.pokeranalytics.android.ui.adapter - -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView -import kotlinx.android.synthetic.main.row_bottom_sheet_grid_title.view.* -import net.pokeranalytics.android.R - -class TableSizeGridAdapter(private var tableSizes: ArrayList) : RecyclerView.Adapter() { - - companion object { - const val ROW_TABLE_SIZE: Int = 100 - } - - var onClickOnItem: ((position: Int) -> Unit)? = null - - inner class CellSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - - fun bind(tableSize: String) { - itemView.title.text = tableSize - itemView.container.setOnClickListener { - onClickOnItem?.invoke(adapterPosition) - } - } - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - when (viewType) { - ROW_TABLE_SIZE -> return CellSessionViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.row_bottom_sheet_grid_title, parent, false)) - else -> throw IllegalStateException("Need to implement type $viewType in HistoryAdapter") - } - } - - override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - when (getItemViewType(position)) { - ROW_TABLE_SIZE -> (holder as TableSizeGridAdapter.CellSessionViewHolder).bind(tableSizes[position]) - } - } - - override fun getItemCount(): Int { - return tableSizes.size - } - - override fun getItemViewType(position: Int): Int { - return ROW_TABLE_SIZE - } - - -} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/LiveDataAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/LiveDataAdapter.kt deleted file mode 100644 index f2e3b683..00000000 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/LiveDataAdapter.kt +++ /dev/null @@ -1,71 +0,0 @@ -package net.pokeranalytics.android.ui.adapter.components - -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.appcompat.widget.AppCompatTextView -import androidx.constraintlayout.widget.ConstraintLayout -import androidx.recyclerview.widget.RecyclerView -import net.pokeranalytics.android.R -import net.pokeranalytics.android.ui.view.RowViewType - -enum class LiveDataViewType { - DATA, - BOTTOM_SHEET_DATA -} - -interface LiveDataDataSource { - val title: String -} - -interface LiveDataDelegate { - fun data(position: Int) : LiveDataDataSource - fun onRowSelected(position: Int) - fun size() : Int -} - -class LiveDataAdapter(var adapterDelegate: LiveDataDelegate, var liveDataViewType: LiveDataViewType? = LiveDataViewType.DATA) : RecyclerView.Adapter() { - - inner class DataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - fun bind(row: LiveDataDataSource, listener: View.OnClickListener) { - when(liveDataViewType) { - LiveDataViewType.DATA -> { - itemView.findViewById(R.id.rowTitle_title).text = row.title - itemView.findViewById(R.id.rowTitle_container).setOnClickListener(listener) - } - LiveDataViewType.BOTTOM_SHEET_DATA -> { - itemView.findViewById(R.id.title).text = row.title - itemView.findViewById(R.id.container).setOnClickListener(listener) - } - } - } - } - - override fun getItemViewType(position: Int): Int { - return RowViewType.TITLE.ordinal - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - val layoutToInflate = when(liveDataViewType) { - LiveDataViewType.DATA -> { - R.layout.row_title - } - LiveDataViewType.BOTTOM_SHEET_DATA -> { - R.layout.row_bottom_sheet_title - } - else -> R.layout.row_title - } - return DataViewHolder(LayoutInflater.from(parent.context).inflate(layoutToInflate, parent, false)) - } - - override fun getItemCount(): Int { - return adapterDelegate.size() - } - - override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - val listener = View.OnClickListener { - adapterDelegate.onRowSelected(position) - } - (holder as DataViewHolder).bind(this.adapterDelegate.data(position), listener) - } -} \ No newline at end of file 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..bbe261f1 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,21 +5,23 @@ 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.adapter.RowRepresentableAdapter +import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource +import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.SettingRow import timber.log.Timber -class DataListFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, RowRepresentableDelegate{ +class DataListFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, + RowRepresentableDelegate { private lateinit var dataType: SettingRow @@ -53,7 +55,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..ffe71634 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,9 +10,11 @@ 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.adapter.RowRepresentableAdapter +import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource +import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetDelegate import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetFragment @@ -54,7 +56,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 +112,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 +140,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() @@ -164,7 +166,10 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, this.appBar.toolbar.title = "New ${this.liveDataType.name.toLowerCase().capitalize()}" } this.item = this.liveDataType.updateOrCreate(this.getRealm(), primaryKey) - this.rowRepresentableAdapter = RowRepresentableAdapter((this.item as RowRepresentableDataSource), this) + this.rowRepresentableAdapter = RowRepresentableAdapter( + (this.item as RowRepresentableDataSource), + this + ) this.recyclerView.adapter = rowRepresentableAdapter } } \ No newline at end of file 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..1eef93e2 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,17 +11,18 @@ 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.adapter.RowRepresentableAdapter +import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource +import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType -class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, RowRepresentableDelegate { +class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, + RowRepresentableDelegate { companion object { fun newInstance(): HistoryFragment { @@ -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..348e33aa 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 @@ -16,8 +16,8 @@ import net.pokeranalytics.android.model.extensions.getState import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.ui.activity.EditableDataActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity -import net.pokeranalytics.android.ui.adapter.components.RowRepresentableAdapter -import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDelegate +import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter +import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.fragment.components.DateTimePickerManager import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetDelegate @@ -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/SettingsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt index 145bf11b..78e7aad0 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt @@ -8,12 +8,15 @@ import androidx.recyclerview.widget.LinearLayoutManager import kotlinx.android.synthetic.main.fragment_settings.* import net.pokeranalytics.android.R import net.pokeranalytics.android.ui.activity.DataListActivity -import net.pokeranalytics.android.ui.adapter.components.* +import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter +import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource +import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.SettingRow -class SettingsFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, RowRepresentableDelegate { +class SettingsFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, + RowRepresentableDelegate { companion object { @@ -57,8 +60,8 @@ class SettingsFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, R val viewManager = LinearLayoutManager(requireContext()) settingsAdapterRow = RowRepresentableAdapter( - this, this - ) + this, this + ) recyclerView.apply { setHasFixedSize(true) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt index 263616b0..a8734ab6 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt @@ -8,8 +8,8 @@ import androidx.recyclerview.widget.LinearLayoutManager import kotlinx.android.synthetic.main.fragment_settings.* import net.pokeranalytics.android.R import net.pokeranalytics.android.calculus.Stat -import net.pokeranalytics.android.ui.adapter.components.RowRepresentableAdapter -import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDataSource +import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter +import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment 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/BottomSheetListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt index abca4c07..44558220 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt @@ -8,11 +8,14 @@ import io.realm.RealmResults import kotlinx.android.synthetic.main.bottom_sheet_list.* import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.* import net.pokeranalytics.android.R -import net.pokeranalytics.android.ui.adapter.components.* +import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter +import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource +import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType -class BottomSheetListFragment : BottomSheetFragment(), RowRepresentableDataSource, RowRepresentableDelegate { +class BottomSheetListFragment : BottomSheetFragment(), RowRepresentableDataSource, + RowRepresentableDelegate { private var realmData: RealmResults<*>? = null private lateinit var dataAdapter: RowRepresentableAdapter 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..da42f45c 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,15 +9,18 @@ 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.ui.adapter.components.RowRepresentableAdapter -import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDataSource -import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDelegate +import net.pokeranalytics.android.model.Limit +import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter +import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource +import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType import timber.log.Timber -class BottomSheetListGameFragment : BottomSheetFragment(), RowRepresentableDataSource, RowRepresentableDelegate { +class BottomSheetListGameFragment : BottomSheetFragment(), + RowRepresentableDataSource, + RowRepresentableDelegate { private var realmData: RealmResults<*>? = null private lateinit var dataAdapter: RowRepresentableAdapter @@ -95,23 +98,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..f97c8acf 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,50 +1,22 @@ 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.ui.adapter.components.* +import net.pokeranalytics.android.model.TableSize +import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter +import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource +import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate 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 { +class BottomSheetTableSizeGridFragment : BottomSheetFragment(), + RowRepresentableDataSource, + RowRepresentableDelegate { private lateinit var dataAdapter: RowRepresentableAdapter private var defaultSize: Int? = null 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 diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt index a0845f5d..e44d662f 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt @@ -14,8 +14,7 @@ import kotlinx.android.synthetic.main.row_title_value.view.* import kotlinx.android.synthetic.main.row_title_value_action.view.* import net.pokeranalytics.android.R import net.pokeranalytics.android.model.realm.Session -import net.pokeranalytics.android.ui.adapter.TableSizeGridAdapter -import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDataSource +import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource /** * An interface used to factor the configuration of RecyclerView.ViewHolder