diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt b/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt index 7767635e..b9749c35 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt @@ -1,14 +1,14 @@ package net.pokeranalytics.android.calculus -import android.content.Context -import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface -import net.pokeranalytics.android.ui.adapter.components.RowViewType +import net.pokeranalytics.android.R +import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.ui.view.RowViewType interface AnyStat { } -enum class Stat : AnyStat, DynamicRowInterface { +enum class Stat : AnyStat, RowRepresentable { NETRESULT, HOURLY_RATE, @@ -53,9 +53,28 @@ enum class Stat : AnyStat, DynamicRowInterface { } - override fun localizedTitle(context: Context): String { - return "Test" - } + override val resId: Int? + get() { + return when (this) { + NETRESULT -> R.string.net_result + HOURLY_RATE -> R.string.hourly_rate + AVERAGE -> R.string.average + NUMBER_OF_GROUPS -> R.string.number_of_groups + NUMBER_OF_GAMES -> R.string.number_of_games + DURATION -> R.string.duration + AVERAGE_DURATION -> R.string.average_duration + NET_BB_PER_100_HANDS -> R.string.net_bb_per_100_hands + HOURLY_RATE_BB -> R.string.hourly_rate_bb + AVERAGE_NET_BB -> R.string.average_net_bb + WIN_RATIO -> R.string.win_ratio + AVERAGE_BUYIN -> R.string.average_buyin + ROI -> R.string.roi + STANDARD_DEVIATION -> R.string.standard_deviation + STANDARD_DEVIATION_HOURLY -> R.string.standard_deviation_hourly + STANDARD_DEVIATION_BB_PER_100_HANDS -> R.string.standard_deviation_bb_per_100_hands + HANDS_PLAYED -> R.string.hands_played + } + } override val viewType: Int = RowViewType.TITLE_VALUE.ordinal } diff --git a/app/src/main/java/net/pokeranalytics/android/model/DataList.kt b/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt similarity index 77% rename from app/src/main/java/net/pokeranalytics/android/model/DataList.kt rename to app/src/main/java/net/pokeranalytics/android/model/LiveData.kt index 8e6eba29..f54b5fd8 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/DataList.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt @@ -1,21 +1,13 @@ package net.pokeranalytics.android.model -import android.text.InputType import io.realm.Realm import io.realm.RealmObject import io.realm.RealmResults import io.realm.Sort import net.pokeranalytics.android.model.realm.* -import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface -import net.pokeranalytics.android.ui.adapter.components.EditableDataSource -import net.pokeranalytics.android.ui.adapter.components.SimpleRow -import net.pokeranalytics.android.ui.fragment.components.BottomSheetData -import net.pokeranalytics.android.ui.fragment.components.BottomSheetDelegate -import net.pokeranalytics.android.ui.fragment.components.BottomSheetFragment import java.util.* -import kotlin.collections.ArrayList -enum class DataList { +enum class LiveData { BANKROLL, GAME, LOCATION, @@ -27,7 +19,7 @@ enum class DataList { } private var sortingFieldName: String = "name" - private var sorting: Sort = Sort.DESCENDING + private var sorting: Sort = Sort.ASCENDING private val relatedEntity: Class < out RealmObject > 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 72422531..a44f8f02 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 @@ -5,10 +5,15 @@ import io.realm.* import io.realm.annotations.PrimaryKey import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.fragment.components.BottomSheetData +import net.pokeranalytics.android.ui.view.BankrollRow +import net.pokeranalytics.android.ui.view.RowEditable +import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.ui.view.SimpleRow import java.util.* import kotlin.collections.ArrayList -open class Bankroll(name: String = "") : RealmObject(), DynamicRowDelegate, DisplayableDataSource, EditableDataSource { +open class Bankroll(name: String = "") : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, + RowEditable { companion object { fun newInstance() : Bankroll { @@ -37,14 +42,14 @@ open class Bankroll(name: String = "") : RealmObject(), DynamicRowDelegate, Disp override val title: String get() = this.name override val primaryKey: String get() = this.id - override fun adapterRows(): ArrayList { - val rows = ArrayList() + override fun adapterRows(): ArrayList { + val rows = ArrayList() rows.add(SimpleRow.NAME) rows.addAll(BankrollRow.values()) return rows } - override fun stringForRow(row: DynamicRowInterface): String { + override fun stringForRow(row: RowRepresentable): String { return when (row) { SimpleRow.NAME -> this.name BankrollRow.LIVE -> if (this.live) "live" else "online" @@ -53,14 +58,14 @@ open class Bankroll(name: String = "") : RealmObject(), DynamicRowDelegate, Disp } } - override fun boolForRow(row: DynamicRowInterface): Boolean { + override fun boolForRow(row: RowRepresentable): Boolean { when (row) { BankrollRow.LIVE -> return true else -> return super.boolForRow(row) } } - override fun getBottomSheetData(row: DynamicRowInterface): ArrayList { + override fun getBottomSheetData(row: RowRepresentable): ArrayList { val data = java.util.ArrayList() when (row) { SimpleRow.NAME -> data.add(BottomSheetData(this.name, SimpleRow.NAME.resId, InputType.TYPE_CLASS_TEXT)) @@ -68,7 +73,7 @@ open class Bankroll(name: String = "") : RealmObject(), DynamicRowDelegate, Disp return data } - override fun setBottomSheetValue(value: Any, row: DynamicRowInterface) { + override fun updateValue(value: Any, row: RowRepresentable) { when (row) { SimpleRow.NAME -> this.name = value as String } 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 d44a528b..59bce216 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 @@ -1,14 +1,17 @@ package net.pokeranalytics.android.model.realm import android.text.InputType -import io.realm.Realm import io.realm.RealmObject import io.realm.annotations.PrimaryKey import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.fragment.components.BottomSheetData +import net.pokeranalytics.android.ui.view.RowEditable +import net.pokeranalytics.android.ui.view.GameRow +import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.ui.view.SimpleRow import java.util.* -open class Game : RealmObject(), DynamicRowDelegate, DisplayableDataSource, EditableDataSource { +open class Game : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable { @PrimaryKey var id = UUID.randomUUID().toString() @@ -22,21 +25,21 @@ open class Game : RealmObject(), DynamicRowDelegate, DisplayableDataSource, Edit override val title: String get() = this.name override val primaryKey: String get() = this.id - override fun adapterRows(): ArrayList { - val rows = ArrayList() + override fun adapterRows(): ArrayList { + val rows = ArrayList() rows.add(SimpleRow.NAME) rows.addAll(GameRow.values()) return rows } - override fun stringForRow(row: DynamicRowInterface): String { + override fun stringForRow(row: RowRepresentable): String { return when (row) { SimpleRow.NAME -> this.name else -> return super.stringForRow(row) } } - override fun getBottomSheetData(row: DynamicRowInterface): ArrayList { + override fun getBottomSheetData(row: RowRepresentable): ArrayList { val data = java.util.ArrayList() when (row) { SimpleRow.NAME -> data.add(BottomSheetData(this.name, SimpleRow.NAME.resId, InputType.TYPE_CLASS_TEXT)) @@ -44,7 +47,7 @@ open class Game : RealmObject(), DynamicRowDelegate, DisplayableDataSource, Edit return data } - override fun setBottomSheetValue(value: Any, row: DynamicRowInterface) { + override fun updateValue(value: Any, row: RowRepresentable) { when (row) { SimpleRow.NAME -> this.name = value as String } 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 2566bf61..baf5003a 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 @@ -1,15 +1,18 @@ package net.pokeranalytics.android.model.realm import android.text.InputType -import io.realm.Realm import io.realm.RealmObject import io.realm.annotations.PrimaryKey import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.fragment.components.BottomSheetData +import net.pokeranalytics.android.ui.view.RowEditable +import net.pokeranalytics.android.ui.view.LocationRow +import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.ui.view.SimpleRow import java.util.* -open class Location : RealmObject(), DynamicRowDelegate, DisplayableDataSource, EditableDataSource { +open class Location : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable { @PrimaryKey var id = UUID.randomUUID().toString() @@ -26,21 +29,21 @@ open class Location : RealmObject(), DynamicRowDelegate, DisplayableDataSource, override val title: String get() = this.name override val primaryKey: String get() = this.id - override fun adapterRows(): ArrayList { - val rows = ArrayList() + override fun adapterRows(): ArrayList { + val rows = ArrayList() rows.add(SimpleRow.NAME) rows.addAll(LocationRow.values()) return rows } - override fun stringForRow(row: DynamicRowInterface): String { + override fun stringForRow(row: RowRepresentable): String { return when (row) { SimpleRow.NAME -> this.name else -> return super.stringForRow(row) } } - override fun getBottomSheetData(row: DynamicRowInterface): ArrayList { + override fun getBottomSheetData(row: RowRepresentable): ArrayList { val data = java.util.ArrayList() when (row) { SimpleRow.NAME -> data.add(BottomSheetData(this.name, SimpleRow.NAME.resId, InputType.TYPE_CLASS_TEXT)) @@ -48,7 +51,7 @@ open class Location : RealmObject(), DynamicRowDelegate, DisplayableDataSource, return data } - override fun setBottomSheetValue(value: Any, row: DynamicRowInterface) { + override fun updateValue(value: Any, row: RowRepresentable) { when (row) { SimpleRow.NAME -> this.name = value as String } 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 37745774..c89ea819 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 @@ -6,15 +6,19 @@ import io.realm.annotations.Ignore import io.realm.annotations.PrimaryKey import net.pokeranalytics.android.R import net.pokeranalytics.android.calculus.SessionInterface -import net.pokeranalytics.android.model.DataList +import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.fragment.components.BottomSheetData +import net.pokeranalytics.android.ui.view.RowEditable +import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.ui.view.SessionRow import net.pokeranalytics.android.util.data.sessionDao import net.pokeranalytics.android.util.short import java.util.* import kotlin.collections.ArrayList -open class Session : RealmObject(), SessionInterface, DynamicRowDelegate, DisplayableDataSource, EditableDataSource { +open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource, LiveDataDataSource, + RowEditable { @PrimaryKey var id = UUID.randomUUID().toString() @@ -128,17 +132,17 @@ open class Session : RealmObject(), SessionInterface, DynamicRowDelegate, Displa return 0.0 } - override fun adapterRows(): ArrayList { - val rows = ArrayList() + override fun adapterRows(): ArrayList { + val rows = ArrayList() rows.addAll(SessionRow.values()) return rows } - override fun boolForRow(row: DynamicRowInterface): Boolean { + override fun boolForRow(row: RowRepresentable): Boolean { return false } - override fun stringForRow(row: DynamicRowInterface): String { + override fun stringForRow(row: RowRepresentable): String { return when (row) { SessionRow.BLINDS -> if (cgSmallBlind != null && cgBigBlind != null) "$cgSmallBlind / $cgBigBlind" else "--" SessionRow.GAME -> game?.title ?: "--" @@ -151,7 +155,7 @@ open class Session : RealmObject(), SessionInterface, DynamicRowDelegate, Displa } } - override fun actionIconForRow(row: DynamicRowInterface): Int? { + override fun actionIconForRow(row: RowRepresentable): Int? { return when (row) { SessionRow.START_DATE, SessionRow.END_DATE -> { R.drawable.ic_close_white_24dp @@ -164,19 +168,19 @@ open class Session : RealmObject(), SessionInterface, DynamicRowDelegate, Displa override var title: String = "Change that: $creationDate" override val primaryKey: String get() = this.id - override fun getBottomSheetData(row: DynamicRowInterface): ArrayList { + override fun getBottomSheetData(row: RowRepresentable): ArrayList { val data = ArrayList() when (row) { SessionRow.GAME -> { - data.add(BottomSheetData(game, inputType = InputType.TYPE_NULL, data = DataList.GAME.items(realm))) + data.add(BottomSheetData(game, inputType = InputType.TYPE_NULL, data = LiveData.GAME.items(realm))) } SessionRow.LOCATION -> { - data.add(BottomSheetData(location, inputType = InputType.TYPE_NULL, data = DataList.LOCATION.items(realm))) + data.add(BottomSheetData(location, inputType = InputType.TYPE_NULL, data = LiveData.LOCATION.items(realm))) } SessionRow.BANKROLL -> { - data.add(BottomSheetData(bankroll, inputType = InputType.TYPE_NULL, data = DataList.BANKROLL.items(realm))) + data.add(BottomSheetData(bankroll, inputType = InputType.TYPE_NULL, data = LiveData.BANKROLL.items(realm))) } SessionRow.BLINDS -> { data.add(BottomSheetData(cgSmallBlind, R.string.small_blind, InputType.TYPE_CLASS_NUMBER)) @@ -190,7 +194,7 @@ open class Session : RealmObject(), SessionInterface, DynamicRowDelegate, Displa return data } - override fun setBottomSheetValue(value: Any, row: DynamicRowInterface) { + override fun updateValue(value: Any, row: RowRepresentable) { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } } 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 6f6277cc..d8799a63 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 @@ -1,14 +1,17 @@ package net.pokeranalytics.android.model.realm import android.text.InputType -import io.realm.Realm import io.realm.RealmObject import io.realm.annotations.PrimaryKey import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.fragment.components.BottomSheetData +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(), DynamicRowDelegate, DisplayableDataSource, EditableDataSource { +open class TournamentFeature : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable { @PrimaryKey var id = UUID.randomUUID().toString() @@ -19,14 +22,14 @@ open class TournamentFeature : RealmObject(), DynamicRowDelegate, DisplayableDat override val title: String get() = this.name override val primaryKey: String get() = this.id - override fun adapterRows(): ArrayList { - val rows = ArrayList() + override fun adapterRows(): ArrayList { + val rows = ArrayList() rows.add(SimpleRow.NAME) rows.addAll(TournamentFeatureRow.values()) return rows } - override fun stringForRow(row: DynamicRowInterface): String { + override fun stringForRow(row: RowRepresentable): String { return when (row) { SimpleRow.NAME -> this.name else -> return super.stringForRow(row) @@ -34,7 +37,7 @@ open class TournamentFeature : RealmObject(), DynamicRowDelegate, DisplayableDat } - override fun getBottomSheetData(row: DynamicRowInterface): ArrayList { + override fun getBottomSheetData(row: RowRepresentable): ArrayList { val data = java.util.ArrayList() when (row) { SimpleRow.NAME -> data.add(BottomSheetData(this.name, SimpleRow.NAME.resId, InputType.TYPE_CLASS_TEXT)) @@ -42,7 +45,7 @@ open class TournamentFeature : RealmObject(), DynamicRowDelegate, DisplayableDat return data } - override fun setBottomSheetValue(value: Any, row: DynamicRowInterface) { + override fun updateValue(value: Any, row: RowRepresentable) { when (row) { SimpleRow.NAME -> this.name = value as String } 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 da1b7ed0..50a7f84e 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 @@ -1,15 +1,18 @@ package net.pokeranalytics.android.model.realm import android.text.InputType -import io.realm.Realm import io.realm.RealmObject import io.realm.annotations.PrimaryKey import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.fragment.components.BottomSheetData +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.TransactionTypeRow import java.util.* -open class TransactionType : RealmObject(), DynamicRowDelegate, DisplayableDataSource, EditableDataSource { +open class TransactionType : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable { @PrimaryKey var id = UUID.randomUUID().toString() @@ -29,21 +32,21 @@ open class TransactionType : RealmObject(), DynamicRowDelegate, DisplayableDataS override val title: String get() = this.name override val primaryKey: String get() = this.id - override fun adapterRows(): ArrayList { - val rows = ArrayList() + override fun adapterRows(): ArrayList { + val rows = ArrayList() rows.add(SimpleRow.NAME) rows.addAll(TransactionTypeRow.values()) return rows } - override fun stringForRow(row: DynamicRowInterface): String { + override fun stringForRow(row: RowRepresentable): String { return when (row) { SimpleRow.NAME -> this.name else -> return super.stringForRow(row) } } - override fun getBottomSheetData(row: DynamicRowInterface): ArrayList { + override fun getBottomSheetData(row: RowRepresentable): ArrayList { val data = java.util.ArrayList() when (row) { SimpleRow.NAME -> data.add(BottomSheetData(this.name, SimpleRow.NAME.resId, InputType.TYPE_CLASS_TEXT)) @@ -51,7 +54,7 @@ open class TransactionType : RealmObject(), DynamicRowDelegate, DisplayableDataS return data } - override fun setBottomSheetValue(value: Any, row: DynamicRowInterface) { + override fun updateValue(value: Any, row: RowRepresentable) { when (row) { SimpleRow.NAME -> this.name = value as String } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/NewSessionAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/NewSessionAdapter.kt deleted file mode 100644 index 3feee255..00000000 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/NewSessionAdapter.kt +++ /dev/null @@ -1,53 +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 net.pokeranalytics.android.R -import net.pokeranalytics.android.model.realm.Session -import timber.log.Timber - -class NewSessionAdapter(private var session: Session) : RecyclerView.Adapter() { - - companion object { - const val ROW_SESSION: Int = 100 - } - - //var onClickOnSession: ((position: Int) -> Unit)? = null - - inner class RowSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - fun bind() { - Timber.d("Bind 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 NewSessionAdapter") - } - } - - override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - when (getItemViewType(position)) { - ROW_SESSION -> (holder as NewSessionAdapter.RowSessionViewHolder).bind() - } - } - - override fun getItemCount(): Int { - return 2 - } - - 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/components/DynamicRowInterface.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt deleted file mode 100644 index e058dc3d..00000000 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt +++ /dev/null @@ -1,140 +0,0 @@ -package net.pokeranalytics.android.ui.adapter.components - -import android.content.Context -import net.pokeranalytics.android.R -import net.pokeranalytics.android.model.DataList -import net.pokeranalytics.android.ui.fragment.components.BottomSheetType - - -interface DynamicRowInterface { - fun localizedTitle(context: Context): String - val viewType: Int - get() { - return 0 - } - - val bottomSheetType: BottomSheetType - get() { - return BottomSheetType.NONE - } - - val relatedDataList: DataList? - get() { - return null - } -} - -class SectionRow(stringRes: Int) : DynamicRowInterface { - - var stringRes: Int = stringRes - - override fun localizedTitle(context: Context): String { - return context.getString(this.stringRes) - } -} - -enum class SessionRow(val resId: Int) : DynamicRowInterface { - GAME(R.string.game), - BLINDS(R.string.blinds), - LOCATION(R.string.location), - BANKROLL(R.string.bankroll), - START_DATE(R.string.start_date), - END_DATE(R.string.end_date), - COMMENT(R.string.comment); - - override fun localizedTitle(context: Context): String { - return context.getString(this.resId) - } - - override val viewType: Int - get() { - return when (this) { - BLINDS, GAME, BANKROLL, LOCATION, COMMENT -> RowViewType.TITLE_VALUE.ordinal - START_DATE, END_DATE -> RowViewType.TITLE_VALUE_ACTION.ordinal - } - } - - override val bottomSheetType: BottomSheetType - get() { - return when (this) { - BLINDS -> BottomSheetType.DOUBLE_EDIT_TEXT - GAME -> BottomSheetType.LIST - LOCATION -> BottomSheetType.LIST - BANKROLL -> BottomSheetType.LIST - COMMENT -> BottomSheetType.EDIT_TEXT - else -> BottomSheetType.NONE - } - } - -} - -enum class SimpleRow(val resId: Int) : DynamicRowInterface { - NAME(R.string.name); - override fun localizedTitle(context: Context): String { - return context.getString(this.resId) - } - override val viewType: Int = RowViewType.TITLE_VALUE.ordinal - override val bottomSheetType: BottomSheetType = BottomSheetType.EDIT_TEXT -} - -enum class BankrollRow(val resId: Int) : DynamicRowInterface { - LIVE(R.string.live), - CURRENCY(R.string.currency); - - override fun localizedTitle(context: Context): String { - return context.getString(this.resId) - } - - override val viewType: Int - get() { - return when (this) { - LIVE, CURRENCY -> RowViewType.TITLE_VALUE.ordinal - } - } - - override val bottomSheetType: BottomSheetType - get() { - return when (this) { - LIVE -> BottomSheetType.NONE - CURRENCY -> BottomSheetType.LIST - } - } -} - -enum class GameRow(val resId: Int) : DynamicRowInterface { -} - -enum class LocationRow(val resId: Int) : DynamicRowInterface { -} - -enum class TransactionTypeRow(val resId: Int) : DynamicRowInterface { -} - -enum class TournamentFeatureRow(val resId: Int) : DynamicRowInterface { -} - -enum class SettingRow(val resId: Int) : DynamicRowInterface { - BANKROLL(R.string.bankroll), - GAME(R.string.game), - LOCATION(R.string.location), - TOURNAMENT_TYPE(R.string.tournament_type), - TRANSACTION_TYPE(R.string.transaction_type); - - override fun localizedTitle(context: Context): String { - return context.getString(this.resId) - } - - override val viewType: Int = RowViewType.TITLE.ordinal - - override val relatedDataList : DataList? - get() { - return when (this) { - BANKROLL -> DataList.BANKROLL - GAME -> DataList.GAME - LOCATION -> DataList.LOCATION - TOURNAMENT_TYPE -> DataList.TOURNAMENT_TYPE - TRANSACTION_TYPE-> DataList.TRANSACTION_TYPE - } - } - -} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DataListAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/LiveDataAdapter.kt similarity index 65% rename from app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DataListAdapter.kt rename to app/src/main/java/net/pokeranalytics/android/ui/adapter/components/LiveDataAdapter.kt index c899a62f..2528a469 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DataListAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/LiveDataAdapter.kt @@ -6,30 +6,24 @@ import android.view.ViewGroup import androidx.appcompat.widget.AppCompatTextView import androidx.constraintlayout.widget.ConstraintLayout import androidx.recyclerview.widget.RecyclerView -import io.realm.Realm import net.pokeranalytics.android.R -import net.pokeranalytics.android.ui.fragment.components.BottomSheetData +import net.pokeranalytics.android.ui.view.RowViewType -interface DisplayableDelegate { - fun data(position: Int) : DisplayableDataSource - fun onRowSelected(position: Int) - fun size() : Int -} - -interface DisplayableDataSource { +interface LiveDataDataSource { val title: String val primaryKey: String } -interface EditableDataSource { - fun getBottomSheetData(row: DynamicRowInterface): ArrayList - fun setBottomSheetValue(value: Any, row: DynamicRowInterface) +interface LiveDataDelegate { + fun data(position: Int) : LiveDataDataSource + fun onRowSelected(position: Int) + fun size() : Int } -class DataListAdapter(var delegate: DisplayableDelegate, var layout: Int? = null) : RecyclerView.Adapter() { +class LiveDataAdapter(var adapterDelegate: LiveDataDelegate, var layout: Int? = null) : RecyclerView.Adapter() { inner class DataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - fun bind(row: DisplayableDataSource, listener: View.OnClickListener) { + fun bind(row: LiveDataDataSource, listener: View.OnClickListener) { try { itemView.findViewById(R.id.title).text = row.title itemView.findViewById(R.id.container).setOnClickListener(listener) @@ -50,13 +44,13 @@ class DataListAdapter(var delegate: DisplayableDelegate, var layout: Int? = null } override fun getItemCount(): Int { - return delegate.size() + return adapterDelegate.size() } override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { val listener = View.OnClickListener { - delegate.onRowSelected(position) + adapterDelegate.onRowSelected(position) } - (holder as DataViewHolder).bind(this.delegate.data(position), listener) + (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/adapter/components/DynamicListAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowRepresentableAdapter.kt similarity index 51% rename from app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicListAdapter.kt rename to app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowRepresentableAdapter.kt index 3978e424..429d6ae9 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicListAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowRepresentableAdapter.kt @@ -3,24 +3,23 @@ package net.pokeranalytics.android.ui.adapter.components import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView +import net.pokeranalytics.android.ui.view.DynamicHolder +import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.ui.view.RowViewType -interface EditableDataDelegate { - fun setValue(value: Any, row: DynamicRowInterface) -} - -interface DynamicRowDelegate { +interface RowRepresentableDataSource { - fun adapterRows(): ArrayList + fun adapterRows(): ArrayList - fun boolForRow(row: DynamicRowInterface): Boolean { + fun boolForRow(row: RowRepresentable): Boolean { return false } - fun stringForRow(row: DynamicRowInterface): String { + fun stringForRow(row: RowRepresentable): String { return "" } - fun actionIconForRow(row: DynamicRowInterface): Int? { + fun actionIconForRow(row: RowRepresentable): Int? { return 0 } @@ -35,18 +34,18 @@ interface DynamicRowDelegate { } -interface DynamicRowCallback { - fun onRowSelected(row: DynamicRowInterface) {} - fun onActionSelected(row: DynamicRowInterface) {} +interface RowRepresentableDelegate { + fun onRowSelected(row: RowRepresentable) {} + fun onActionSelected(row: RowRepresentable) {} } -class DynamicListAdapter(var delegate: DynamicRowDelegate, var callBackDelegate: DynamicRowCallback? = null) : +class RowRepresentableAdapter(var rowRepresentableDataSource: RowRepresentableDataSource, var rowRepresentableDelegate: RowRepresentableDelegate? = null) : RecyclerView.Adapter() { - private var rows: ArrayList = ArrayList() + private var rows: ArrayList = ArrayList() init { - this.rows = delegate.adapterRows() + this.rows = rowRepresentableDataSource.adapterRows() } override fun getItemViewType(position: Int): Int { @@ -66,20 +65,20 @@ class DynamicListAdapter(var delegate: DynamicRowDelegate, var callBackDelegate: val dynamicRow = this.rows[position] val listener = View.OnClickListener { - callBackDelegate?.onRowSelected(dynamicRow) + rowRepresentableDelegate?.onRowSelected(dynamicRow) } val actionListener = View.OnClickListener { - callBackDelegate?.onActionSelected(dynamicRow) + rowRepresentableDelegate?.onActionSelected(dynamicRow) } - (holder as DynamicHolder).bind(dynamicRow, this.delegate, listener, actionListener) + (holder as DynamicHolder).bind(dynamicRow, this.rowRepresentableDataSource, listener, actionListener) } /** * Refresh the row in the adapter */ - fun refreshRow(row: DynamicRowInterface) { + fun refreshRow(row: RowRepresentable) { val index = rows.indexOf(row) if (index >= 0) { notifyItemChanged(index) 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 f1bde12b..a5e69cc5 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 @@ -6,16 +6,16 @@ import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager import io.realm.Realm -import io.realm.RealmChangeListener import io.realm.RealmResults import kotlinx.android.synthetic.main.fragment_data_list.* import net.pokeranalytics.android.R 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.SettingRow import timber.log.Timber -class DataListFragment : PokerAnalyticsFragment(), DisplayableDelegate { +class DataListFragment : PokerAnalyticsFragment(), LiveDataDelegate { private lateinit var dataType: SettingRow @@ -31,12 +31,12 @@ class DataListFragment : PokerAnalyticsFragment(), DisplayableDelegate { initUI() } - override fun data(position: Int): DisplayableDataSource { - return (items[position] as DisplayableDataSource) + override fun data(position: Int): LiveDataDataSource { + return (items[position] as LiveDataDataSource) } override fun onRowSelected(position: Int) { - this.dataType.relatedDataList?.let { + this.dataType.relatedResultsRepresentable?.let { EditableDataActivity.newInstance(requireContext(), it.ordinal, this.data(position).primaryKey) } } @@ -54,7 +54,7 @@ class DataListFragment : PokerAnalyticsFragment(), DisplayableDelegate { private fun initUI() { val viewManager = LinearLayoutManager(requireContext()) - val dataListAdapter = DataListAdapter(this) + val dataListAdapter = LiveDataAdapter(this) recyclerView.apply { setHasFixedSize(true) @@ -63,7 +63,7 @@ class DataListFragment : PokerAnalyticsFragment(), DisplayableDelegate { } this.addButton.setOnClickListener { - this.dataType.relatedDataList?.let { + this.dataType.relatedResultsRepresentable?.let { EditableDataActivity.newInstance( requireContext(), dataType = it.ordinal, @@ -83,7 +83,7 @@ class DataListFragment : PokerAnalyticsFragment(), DisplayableDelegate { this.title.text = this.dataType.name.toLowerCase().capitalize() val realm = Realm.getDefaultInstance() - this.dataType.relatedDataList?.let { + this.dataType.relatedResultsRepresentable?.let { this.items = it.items(realm) this.items.addChangeListener { newItems -> Timber.d("newItems: ${newItems.size}") 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 0b44efdd..50212c16 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 @@ -11,18 +11,20 @@ import io.realm.RealmObject 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.DataList +import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.fragment.components.BottomSheetDelegate import net.pokeranalytics.android.ui.fragment.components.BottomSheetFragment import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment +import net.pokeranalytics.android.ui.view.RowEditable +import net.pokeranalytics.android.ui.view.RowRepresentable -class EditableDataFragment : PokerAnalyticsFragment(), DynamicRowCallback, BottomSheetDelegate { +class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, BottomSheetDelegate { private lateinit var item: RealmObject - private lateinit var dataType: DataList - private lateinit var dynamicListAdapter: DynamicListAdapter + private lateinit var liveDataType: LiveData + private lateinit var rowRepresentableAdapter: RowRepresentableAdapter override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_editable_data, container, false) @@ -34,24 +36,24 @@ class EditableDataFragment : PokerAnalyticsFragment(), DynamicRowCallback, Botto initUI() } - override fun onRowSelected(row: DynamicRowInterface) { - BottomSheetFragment.create(fragmentManager, row, this, (this.item as EditableDataSource).getBottomSheetData(row)) + override fun onRowSelected(row: RowRepresentable) { + BottomSheetFragment.create(fragmentManager, row, this, (this.item as RowEditable).getBottomSheetData(row)) } - override fun clickOnAdd(row: DynamicRowInterface) { + override fun clickOnAdd(row: RowRepresentable) { Toast.makeText(requireContext(), "Add new element: $row", Toast.LENGTH_SHORT).show() } - override fun clickOnClear(row: DynamicRowInterface) { + override fun clickOnClear(row: RowRepresentable) { Toast.makeText(requireContext(), "Clear: $row", Toast.LENGTH_SHORT).show() } - override fun setValue(value: Any, row: DynamicRowInterface) { - (this.item as EditableDataSource).setBottomSheetValue(value, row) + override fun setValue(value: Any, row: RowRepresentable) { + (this.item as RowEditable).updateValue(value, row) this.getRealm().executeTransaction { it.copyToRealmOrUpdate(this.item) } - dynamicListAdapter.refreshRow(row) + rowRepresentableAdapter.refreshRow(row) } private fun initData() { @@ -78,19 +80,19 @@ class EditableDataFragment : PokerAnalyticsFragment(), DynamicRowCallback, Botto */ fun setData(dataType: Int, primaryKey: String?) { - this.dataType = DataList.values()[dataType] + this.liveDataType = LiveData.values()[dataType] val realm = Realm.getDefaultInstance() - var proxyItem : RealmObject? = this.dataType.getData(realm, primaryKey) + var proxyItem : RealmObject? = this.liveDataType.getData(realm, primaryKey) proxyItem?.let { - this.appBar.toolbar.title = "Update ${this.dataType.name.toLowerCase().capitalize()}" + this.appBar.toolbar.title = "Update ${this.liveDataType.name.toLowerCase().capitalize()}" } ?: run { - this.appBar.toolbar.title = "New ${this.dataType.name.toLowerCase().capitalize()}" + this.appBar.toolbar.title = "New ${this.liveDataType.name.toLowerCase().capitalize()}" } - this.item = this.dataType.updateOrCreate(realm, primaryKey) + this.item = this.liveDataType.updateOrCreate(realm, primaryKey) - this.dynamicListAdapter = DynamicListAdapter((this.item as DynamicRowDelegate), this) - this.recyclerView.adapter = dynamicListAdapter + 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/NewSessionFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/NewSessionFragment.kt index e5a498c0..c92cbf67 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/NewSessionFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/NewSessionFragment.kt @@ -8,24 +8,24 @@ import android.widget.Toast import androidx.recyclerview.widget.LinearLayoutManager import kotlinx.android.synthetic.main.fragment_new_session.* import net.pokeranalytics.android.R -import net.pokeranalytics.android.model.DataList +import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.ui.activity.EditableDataActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity -import net.pokeranalytics.android.ui.adapter.components.DynamicListAdapter -import net.pokeranalytics.android.ui.adapter.components.DynamicRowCallback -import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface -import net.pokeranalytics.android.ui.adapter.components.SessionRow +import net.pokeranalytics.android.ui.adapter.components.RowRepresentableAdapter +import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDelegate +import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.ui.view.SessionRow import net.pokeranalytics.android.ui.fragment.components.BottomSheetDelegate import net.pokeranalytics.android.ui.fragment.components.BottomSheetFragment import net.pokeranalytics.android.ui.fragment.components.DateTimePickerManager import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import java.util.* -class NewSessionFragment : PokerAnalyticsFragment(), DynamicRowCallback, BottomSheetDelegate { +class NewSessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, BottomSheetDelegate { private lateinit var currentSession: Session - private lateinit var sessionAdapter : DynamicListAdapter + private lateinit var sessionAdapterRow : RowRepresentableAdapter override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_new_session, container, false) @@ -37,7 +37,7 @@ class NewSessionFragment : PokerAnalyticsFragment(), DynamicRowCallback, BottomS initUI() } - override fun onRowSelected(row: DynamicRowInterface) { + override fun onRowSelected(row: RowRepresentable) { val data = currentSession.getBottomSheetData(row) when(row) { SessionRow.START_DATE -> DateTimePickerManager.create(requireContext(), row, this, currentSession.timeFrame?.startDate) @@ -46,19 +46,19 @@ class NewSessionFragment : PokerAnalyticsFragment(), DynamicRowCallback, BottomS } } - override fun onActionSelected(row: DynamicRowInterface) { + override fun onActionSelected(row: RowRepresentable) { Toast.makeText(requireContext(), "Action for row: $row", Toast.LENGTH_SHORT).show() } - override fun clickOnAdd(row: DynamicRowInterface) { + override fun clickOnAdd(row: RowRepresentable) { when(row) { - SessionRow.GAME -> EditableDataActivity.newInstance(requireContext(), DataList.GAME.ordinal) - SessionRow.BANKROLL -> EditableDataActivity.newInstance(requireContext(), DataList.BANKROLL.ordinal) - SessionRow.LOCATION -> EditableDataActivity.newInstance(requireContext(), DataList.LOCATION.ordinal) + SessionRow.GAME -> EditableDataActivity.newInstance(requireContext(), LiveData.GAME.ordinal) + SessionRow.BANKROLL -> EditableDataActivity.newInstance(requireContext(), LiveData.BANKROLL.ordinal) + SessionRow.LOCATION -> EditableDataActivity.newInstance(requireContext(), LiveData.LOCATION.ordinal) } } - override fun clickOnClear(row: DynamicRowInterface) { + override fun clickOnClear(row: RowRepresentable) { when(row) { SessionRow.GAME -> currentSession.game = null SessionRow.BANKROLL -> currentSession.bankroll = null @@ -71,10 +71,10 @@ class NewSessionFragment : PokerAnalyticsFragment(), DynamicRowCallback, BottomS SessionRow.START_DATE -> currentSession.timeFrame?.setDate(Date(), null) SessionRow.END_DATE -> currentSession.timeFrame?.setDate(Date(), null) } - sessionAdapter.notifyItemChanged(SessionRow.values().indexOf(row)) + sessionAdapterRow.notifyItemChanged(SessionRow.values().indexOf(row)) } - override fun setValue(value: Any, row: DynamicRowInterface) { + override fun setValue(value: Any, row: RowRepresentable) { when(row) { SessionRow.GAME -> if (value is Game) currentSession.game = value SessionRow.BANKROLL -> if (value is Bankroll) currentSession.bankroll = value @@ -95,7 +95,7 @@ class NewSessionFragment : PokerAnalyticsFragment(), DynamicRowCallback, BottomS currentSession.timeFrame = timeFrame } } - sessionAdapter.notifyItemChanged(SessionRow.values().indexOf(row)) + sessionAdapterRow.notifyItemChanged(SessionRow.values().indexOf(row)) } private fun initData() { @@ -112,12 +112,12 @@ class NewSessionFragment : PokerAnalyticsFragment(), DynamicRowCallback, BottomS activity.supportActionBar?.setDisplayHomeAsUpEnabled(true) val viewManager = LinearLayoutManager(requireContext()) - sessionAdapter = DynamicListAdapter(currentSession, this) + sessionAdapterRow = RowRepresentableAdapter(currentSession, this) recyclerView.apply { setHasFixedSize(true) layoutManager = viewManager - adapter = sessionAdapter + adapter = sessionAdapterRow } } 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 294c1021..145bf11b 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 @@ -10,8 +10,10 @@ import net.pokeranalytics.android.R import net.pokeranalytics.android.ui.activity.DataListActivity import net.pokeranalytics.android.ui.adapter.components.* 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(), DynamicRowDelegate, DynamicRowCallback { +class SettingsFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, RowRepresentableDelegate { companion object { @@ -26,7 +28,7 @@ class SettingsFragment : PokerAnalyticsFragment(), DynamicRowDelegate, DynamicRo } } - private lateinit var settingsAdapter: DynamicListAdapter + private lateinit var settingsAdapterRow: RowRepresentableAdapter override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { @@ -38,13 +40,13 @@ class SettingsFragment : PokerAnalyticsFragment(), DynamicRowDelegate, DynamicRo initData() } - override fun adapterRows(): ArrayList { - val rows = ArrayList() + override fun adapterRows(): ArrayList { + val rows = ArrayList() rows.addAll(SettingRow.values()) return rows } - override fun onRowSelected(row: DynamicRowInterface) { + override fun onRowSelected(row: RowRepresentable) { DataListActivity.newInstance(requireContext(), (row as SettingRow).ordinal) } @@ -54,14 +56,14 @@ class SettingsFragment : PokerAnalyticsFragment(), DynamicRowDelegate, DynamicRo private fun initData() { val viewManager = LinearLayoutManager(requireContext()) - settingsAdapter = DynamicListAdapter( + settingsAdapterRow = RowRepresentableAdapter( this, this ) recyclerView.apply { setHasFixedSize(true) layoutManager = viewManager - adapter = settingsAdapter + adapter = settingsAdapterRow } } } \ No newline at end of file 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 c2967fbb..263616b0 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,14 +8,12 @@ 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.activity.DataListActivity -import net.pokeranalytics.android.ui.adapter.components.DynamicListAdapter -import net.pokeranalytics.android.ui.adapter.components.DynamicRowDelegate -import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface -import net.pokeranalytics.android.ui.adapter.components.SettingRow +import net.pokeranalytics.android.ui.adapter.components.RowRepresentableAdapter +import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDataSource +import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment -class StatsFragment : PokerAnalyticsFragment(), DynamicRowDelegate { +class StatsFragment : PokerAnalyticsFragment(), RowRepresentableDataSource { companion object { @@ -30,7 +28,7 @@ class StatsFragment : PokerAnalyticsFragment(), DynamicRowDelegate { } } - private lateinit var statsAdapter: DynamicListAdapter + private lateinit var statsAdapterRow: RowRepresentableAdapter override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_stats, container, false) @@ -41,8 +39,8 @@ class StatsFragment : PokerAnalyticsFragment(), DynamicRowDelegate { initData() } - override fun adapterRows(): ArrayList { - val rows = ArrayList() + override fun adapterRows(): ArrayList { + val rows = ArrayList() rows.addAll(Stat.values()) return rows } @@ -53,14 +51,14 @@ class StatsFragment : PokerAnalyticsFragment(), DynamicRowDelegate { private fun initData() { val viewManager = LinearLayoutManager(requireContext()) - this.statsAdapter = DynamicListAdapter( + this.statsAdapterRow = RowRepresentableAdapter( this ) recyclerView.apply { setHasFixedSize(true) layoutManager = viewManager - adapter = statsAdapter + adapter = statsAdapterRow } } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetData.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetData.kt index 5c0f2184..11de3aab 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetData.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetData.kt @@ -2,6 +2,7 @@ package net.pokeranalytics.android.ui.fragment.components import android.text.InputType import io.realm.RealmResults +import net.pokeranalytics.android.ui.view.RowRepresentable class BottomSheetData( var defaultValue: Any? = null, diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDoubleListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDoubleListFragment.kt index 7615da1f..3141a68a 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDoubleListFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDoubleListFragment.kt @@ -8,12 +8,12 @@ import kotlinx.android.synthetic.main.bottom_sheet_double_list.* import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.* import net.pokeranalytics.android.R import net.pokeranalytics.android.model.realm.Game -import net.pokeranalytics.android.ui.adapter.components.DataListAdapter -import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource -import net.pokeranalytics.android.ui.adapter.components.DisplayableDelegate +import net.pokeranalytics.android.ui.adapter.components.LiveDataAdapter +import net.pokeranalytics.android.ui.adapter.components.LiveDataDataSource +import net.pokeranalytics.android.ui.adapter.components.LiveDataDelegate -class BottomSheetDoubleListFragment : BottomSheetFragment(), DisplayableDelegate { +class BottomSheetDoubleListFragment : BottomSheetFragment(), LiveDataDelegate { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -22,7 +22,7 @@ class BottomSheetDoubleListFragment : BottomSheetFragment(), DisplayableDelegate initUI() } - override fun data(position: Int): DisplayableDataSource { + override fun data(position: Int): LiveDataDataSource { //TODO: Change that return Game() } @@ -50,7 +50,7 @@ class BottomSheetDoubleListFragment : BottomSheetFragment(), DisplayableDelegate LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_double_list, view?.bottomSheetContainer, true) val viewManager = LinearLayoutManager(requireContext()) - val dataAdapter = DataListAdapter(this, R.layout.row_bottom_sheet_title) + val dataAdapter = LiveDataAdapter(this, R.layout.row_bottom_sheet_title) gameNameRecyclerView.apply { setHasFixedSize(true) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetFragment.kt index 869e689f..f98c16b5 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetFragment.kt @@ -9,7 +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.adapter.components.DynamicRowInterface +import net.pokeranalytics.android.ui.view.RowRepresentable enum class BottomSheetType { NONE, @@ -22,25 +22,25 @@ enum class BottomSheetType { } interface BottomSheetDelegate { - fun clickOnAdd(row: DynamicRowInterface) - fun clickOnClear(row: DynamicRowInterface) - fun setValue(value: Any, row: DynamicRowInterface) + fun clickOnAdd(row: RowRepresentable) + fun clickOnClear(row: RowRepresentable) + fun setValue(value: Any, row: RowRepresentable) } open class BottomSheetFragment : BottomSheetDialogFragment() { - lateinit var row: DynamicRowInterface + lateinit var row: RowRepresentable lateinit var bottomSheetDelegate: BottomSheetDelegate private var data: ArrayList = ArrayList() companion object { fun create( - fragmentManager: FragmentManager?, - row: DynamicRowInterface, - bottomSheetDelegate: BottomSheetDelegate, - data: ArrayList + fragmentManager: FragmentManager?, + row: RowRepresentable, + bottomSheetDelegate: BottomSheetDelegate, + data: ArrayList ): BottomSheetFragment { val bottomSheetFragment = when (row.bottomSheetType) { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetListFragment.kt index 6b83b8ff..dc9456ad 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetListFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetListFragment.kt @@ -9,14 +9,14 @@ import kotlinx.android.synthetic.main.bottom_sheet_double_list.* import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.* import net.pokeranalytics.android.R import net.pokeranalytics.android.model.realm.Game -import net.pokeranalytics.android.ui.adapter.components.DataListAdapter -import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource -import net.pokeranalytics.android.ui.adapter.components.DisplayableDelegate +import net.pokeranalytics.android.ui.adapter.components.LiveDataAdapter +import net.pokeranalytics.android.ui.adapter.components.LiveDataDataSource +import net.pokeranalytics.android.ui.adapter.components.LiveDataDelegate -class BottomSheetListFragment : BottomSheetFragment(), DisplayableDelegate { +class BottomSheetListFragment : BottomSheetFragment(), LiveDataDelegate { private var realmData: RealmResults<*>? = null - private lateinit var dataAdapter: DataListAdapter + private lateinit var dataAdapter: LiveDataAdapter override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -29,9 +29,9 @@ class BottomSheetListFragment : BottomSheetFragment(), DisplayableDelegate { dataAdapter.notifyDataSetChanged() } - override fun data(position: Int): DisplayableDataSource { + override fun data(position: Int): LiveDataDataSource { realmData?.let { - return it[position] as DisplayableDataSource + return it[position] as LiveDataDataSource } //TODO: Change that return Game() @@ -70,7 +70,7 @@ class BottomSheetListFragment : BottomSheetFragment(), DisplayableDelegate { LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_list, view?.bottomSheetContainer, true) val viewManager = LinearLayoutManager(requireContext()) - dataAdapter = DataListAdapter(this, R.layout.row_bottom_sheet_title) + dataAdapter = LiveDataAdapter(this, R.layout.row_bottom_sheet_title) gameNameRecyclerView.apply { setHasFixedSize(true) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/DateTimePickerManager.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/DateTimePickerManager.kt index 2f6e9a91..68c8d516 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/DateTimePickerManager.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/DateTimePickerManager.kt @@ -8,7 +8,7 @@ import android.text.format.DateFormat import android.widget.DatePicker import android.widget.TimePicker import net.pokeranalytics.android.R -import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface +import net.pokeranalytics.android.ui.view.RowRepresentable import java.util.* class DateTimePickerManager : DatePickerDialog.OnDateSetListener, @@ -16,16 +16,16 @@ class DateTimePickerManager : DatePickerDialog.OnDateSetListener, private var context: Context? = null - lateinit var row: DynamicRowInterface + lateinit var row: RowRepresentable lateinit var bottomSheetDelegate: BottomSheetDelegate lateinit var calendar: Calendar companion object { fun create( - context: Context, - row: DynamicRowInterface, - bottomSheetDelegate: BottomSheetDelegate, - date: Date? + context: Context, + row: RowRepresentable, + bottomSheetDelegate: BottomSheetDelegate, + date: Date? ) : DateTimePickerManager { val calendar = Calendar.getInstance() diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/DynamicListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/DynamicListFragment.kt deleted file mode 100644 index 5f4b8df5..00000000 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/DynamicListFragment.kt +++ /dev/null @@ -1,7 +0,0 @@ -package net.pokeranalytics.android.ui.fragment.components - -open class DynamicListFragment : PokerAnalyticsFragment() { - - - -} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/PokerAnalyticsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/PokerAnalyticsFragment.kt index 399b449c..1c6365f5 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/PokerAnalyticsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/PokerAnalyticsFragment.kt @@ -4,7 +4,6 @@ import android.os.Bundle import androidx.fragment.app.Fragment import io.realm.Realm import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity -import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface open class PokerAnalyticsFragment: Fragment() { 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 new file mode 100644 index 00000000..0313d58c --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowEditable.kt @@ -0,0 +1,8 @@ +package net.pokeranalytics.android.ui.view + +import net.pokeranalytics.android.ui.fragment.components.BottomSheetData + +interface RowEditable { + fun getBottomSheetData(row: RowRepresentable): ArrayList + fun updateValue(value: Any, row: RowRepresentable) +} \ 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 new file mode 100644 index 00000000..599ad6f8 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt @@ -0,0 +1,158 @@ +package net.pokeranalytics.android.ui.view + +import android.content.Context +import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.LiveData +import net.pokeranalytics.android.ui.fragment.components.BottomSheetType + + +interface RowRepresentable { + fun localizedTitle(context: Context): String { + this.resId?.let { + return context.getString(it) + } + return "LOCALISATION NOT FOUND" + } + + val resId: Int? + get() { + return null + } + + val viewType: Int + get() { + return 0 + } + + val bottomSheetType: BottomSheetType + get() { + return BottomSheetType.NONE + } + + val relatedResultsRepresentable: LiveData? + get() { + return null + } +} + +enum class SessionRow : RowRepresentable { + GAME, + BLINDS, + LOCATION, + BANKROLL, + START_DATE, + END_DATE, + COMMENT; + + override val resId: Int? + get() { + return when (this) { + BLINDS -> R.string.blinds + GAME -> R.string.game + LOCATION -> R.string.location + BANKROLL -> R.string.bankroll + COMMENT -> R.string.comment + START_DATE -> R.string.start_date + END_DATE -> R.string.end_date + } + } + + override val viewType: Int + get() { + return when (this) { + BLINDS, GAME, BANKROLL, LOCATION, COMMENT -> RowViewType.TITLE_VALUE.ordinal + START_DATE, END_DATE -> RowViewType.TITLE_VALUE_ACTION.ordinal + } + } + + override val bottomSheetType: BottomSheetType + get() { + return when (this) { + BLINDS -> BottomSheetType.DOUBLE_EDIT_TEXT + GAME -> BottomSheetType.LIST + LOCATION -> BottomSheetType.LIST + BANKROLL -> BottomSheetType.LIST + COMMENT -> BottomSheetType.EDIT_TEXT + else -> BottomSheetType.NONE + } + } +} + +enum class SimpleRow : RowRepresentable { + NAME; + override val resId: Int? = R.string.name + override val viewType: Int = RowViewType.TITLE_VALUE.ordinal + override val bottomSheetType: BottomSheetType = BottomSheetType.EDIT_TEXT +} + +enum class BankrollRow : RowRepresentable { + LIVE, + CURRENCY; + + override val resId: Int? + get() { + return when (this) { + LIVE -> R.string.live + CURRENCY -> R.string.currency + } + } + + override val viewType: Int + get() { + return when (this) { + LIVE, CURRENCY -> RowViewType.TITLE_VALUE.ordinal + } + } + + override val bottomSheetType: BottomSheetType + get() { + return when (this) { + LIVE -> BottomSheetType.NONE + CURRENCY -> BottomSheetType.LIST + } + } +} + +enum class GameRow : RowRepresentable { +} + +enum class LocationRow : RowRepresentable { +} + +enum class TransactionTypeRow : RowRepresentable { +} + +enum class TournamentFeatureRow : RowRepresentable { +} + +enum class SettingRow: RowRepresentable { + BANKROLL, + GAME, + LOCATION, + TOURNAMENT_TYPE, + TRANSACTION_TYPE; + + override val resId: Int? + get() { + return when (this) { + BANKROLL -> R.string.bankroll + GAME -> R.string.game + LOCATION -> R.string.location + TOURNAMENT_TYPE -> R.string.tournament_type + TRANSACTION_TYPE -> R.string.transaction_type + } + } + + override val viewType: Int = RowViewType.TITLE.ordinal + + override val relatedResultsRepresentable : LiveData? + get() { + return when (this) { + BANKROLL -> LiveData.BANKROLL + GAME -> LiveData.GAME + LOCATION -> LiveData.LOCATION + TOURNAMENT_TYPE -> LiveData.TOURNAMENT_TYPE + TRANSACTION_TYPE -> LiveData.TRANSACTION_TYPE + } + } +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowViewType.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt similarity index 61% rename from app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowViewType.kt rename to app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt index 7886c073..02d34b2f 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowViewType.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt @@ -1,4 +1,4 @@ -package net.pokeranalytics.android.ui.adapter.components +package net.pokeranalytics.android.ui.view import android.view.LayoutInflater import android.view.View @@ -6,10 +6,11 @@ import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import kotlinx.android.synthetic.main.row_title_value_action.view.* import net.pokeranalytics.android.R +import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDataSource interface DynamicHolder { - fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate? = null, listener: View.OnClickListener, actionListener: View.OnClickListener? = null) {} + fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource? = null, listener: View.OnClickListener, actionListener: View.OnClickListener? = null) {} } @@ -20,33 +21,37 @@ enum class RowViewType { TITLE_VALUE, TITLE_VALUE_ACTION; - inner class FakeViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), DynamicHolder { - override fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate?, listener: View.OnClickListener, actionListener: View.OnClickListener?) { + inner class FakeViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), + DynamicHolder { + override fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource?, listener: View.OnClickListener, actionListener: View.OnClickListener?) { } } - inner class TitleViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), DynamicHolder { - override fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate?, listener: View.OnClickListener, actionListener: View.OnClickListener?) { + inner class TitleViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), + DynamicHolder { + override fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource?, listener: View.OnClickListener, actionListener: View.OnClickListener?) { itemView.title.text = row.localizedTitle(itemView.context) itemView.container.setOnClickListener(listener) } } - inner class TitleValueViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), DynamicHolder { - override fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate?, listener: View.OnClickListener, actionListener: View.OnClickListener?) { + inner class TitleValueViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), + DynamicHolder { + override fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource?, listener: View.OnClickListener, actionListener: View.OnClickListener?) { itemView.title.text = row.localizedTitle(itemView.context) - delegate?.let { + rowRepresentableDataSource?.let { itemView.value.text = it.stringForRow(row) } itemView.container.setOnClickListener(listener) } } - inner class TitleValueActionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), DynamicHolder { - override fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate?, listener: View.OnClickListener, actionListener: View.OnClickListener?) { + inner class TitleValueActionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), + DynamicHolder { + override fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource?, listener: View.OnClickListener, actionListener: View.OnClickListener?) { itemView.title.text = row.localizedTitle(itemView.context) - delegate?.let { rowDelegate -> + rowRepresentableDataSource?.let { rowDelegate -> val value = rowDelegate.stringForRow(row) itemView.value.text = value diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6f6f9e67..de29a14f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -27,4 +27,21 @@ Add Done + Net Result + Hourly Rate + Average + Number of groups + Number of games + Duration + Average duration + Net(BB) per 100 hands + Hourly rate (BB) + Average net (BB) + Win ratio + Average buyin + ROI + Standard deviation + Standard deviation hourly + Standard deviation BB per 100 hands + Hands played