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 921206c9..002417dc 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 @@ -38,11 +38,28 @@ open class Bankroll(name: String = "") : RealmObject(), DynamicRowDelegate, Disp // @todo rate management - override var title: String = this.name + override val title: String get() = this.id + override val primaryKey: String get() = this.id override fun adapterRows(): ArrayList { val rows = ArrayList() rows.addAll(BankrollRow.values()) return rows } + + override fun stringForRow(row: DynamicRowInterface): String { + return when (row) { + BankrollRow.NAME -> this.id + BankrollRow.LIVE -> if (this.live) "live" else "online" + BankrollRow.CURRENCY -> this.currency?.code?: "" + else -> return super.stringForRow(row) + } + } + + override fun boolForRow(row: DynamicRowInterface): Boolean { + when (row) { + BankrollRow.LIVE -> return true + else -> return super.boolForRow(row) + } + } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt index 28ce2521..c3488443 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt @@ -2,10 +2,7 @@ package net.pokeranalytics.android.model.realm import io.realm.RealmObject import io.realm.annotations.PrimaryKey -import net.pokeranalytics.android.ui.adapter.components.BankrollRow -import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource -import net.pokeranalytics.android.ui.adapter.components.DynamicRowDelegate -import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface +import net.pokeranalytics.android.ui.adapter.components.* import java.util.* open class Game : RealmObject(), DynamicRowDelegate, DisplayableDataSource { @@ -19,14 +16,20 @@ open class Game : RealmObject(), DynamicRowDelegate, DisplayableDataSource { // A shorter name for the game var shortName: String? = null - override var title: String = "" - get() { - return name - } + override val title: String get() = this.id + override val primaryKey: String get() = this.id override fun adapterRows(): ArrayList { val rows = ArrayList() - rows.addAll(BankrollRow.values()) + rows.addAll(GameRow.values()) return rows } + + override fun stringForRow(row: DynamicRowInterface): String { + return when (row) { + GameRow.NAME -> this.id + else -> return super.stringForRow(row) + } + } + } 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 e066b8f4..e9fd9a0e 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 @@ -2,10 +2,14 @@ package net.pokeranalytics.android.model.realm import io.realm.RealmObject import io.realm.annotations.PrimaryKey +import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource +import net.pokeranalytics.android.ui.adapter.components.DynamicRowDelegate +import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface +import net.pokeranalytics.android.ui.adapter.components.LocationRow import java.util.* -open class Location : RealmObject() { +open class Location : RealmObject(), DynamicRowDelegate, DisplayableDataSource { @PrimaryKey var id = UUID.randomUUID().toString() @@ -19,4 +23,20 @@ open class Location : RealmObject() { // the latitude of the location var latitude: Double? = null + override val title: String get() = this.id + override val primaryKey: String get() = this.id + + override fun adapterRows(): ArrayList { + val rows = ArrayList() + rows.addAll(LocationRow.values()) + return rows + } + + override fun stringForRow(row: DynamicRowInterface): String { + return when (row) { + LocationRow.NAME -> this.id + else -> return super.stringForRow(row) + } + } + } 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 ae952946..f0a61a7c 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 @@ -126,7 +126,6 @@ open class Session : RealmObject(), SessionInterface, DynamicRowDelegate, Displa return 0.0 } - override fun adapterRows(): ArrayList { val rows = ArrayList() rows.addAll(SessionRow.values()) @@ -147,6 +146,7 @@ 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 { 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 cb4dfdf0..ac36b4aa 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 @@ -2,9 +2,13 @@ package net.pokeranalytics.android.model.realm import io.realm.RealmObject import io.realm.annotations.PrimaryKey +import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource +import net.pokeranalytics.android.ui.adapter.components.DynamicRowDelegate +import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface +import net.pokeranalytics.android.ui.adapter.components.TournamentFeatureRow import java.util.* -open class TournamentFeature : RealmObject() { +open class TournamentFeature : RealmObject(), DynamicRowDelegate, DisplayableDataSource { @PrimaryKey var id = UUID.randomUUID().toString() @@ -12,4 +16,19 @@ open class TournamentFeature : RealmObject() { // The name of the feature var name: String = "" + override val title: String get() = this.id + override val primaryKey: String get() = this.id + + override fun adapterRows(): ArrayList { + val rows = ArrayList() + rows.addAll(TournamentFeatureRow.values()) + return rows + } + + override fun stringForRow(row: DynamicRowInterface): String { + return when (row) { + TournamentFeatureRow.NAME -> this.id + else -> return super.stringForRow(row) + } + } } \ No newline at end of file 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 0ac2fc0c..b9b98cc0 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 @@ -2,10 +2,14 @@ package net.pokeranalytics.android.model.realm import io.realm.RealmObject import io.realm.annotations.PrimaryKey +import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource +import net.pokeranalytics.android.ui.adapter.components.DynamicRowDelegate +import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface +import net.pokeranalytics.android.ui.adapter.components.TransactionTypeRow import java.util.* -open class TransactionType : RealmObject() { +open class TransactionType : RealmObject(), DynamicRowDelegate, DisplayableDataSource { @PrimaryKey var id = UUID.randomUUID().toString() @@ -22,6 +26,21 @@ open class TransactionType : RealmObject() { // The predefined kind, if necessary, like: Withdrawal, deposit, or tips var kind: Int? = null + override val title: String get() = this.id + override val primaryKey: String get() = this.id + + override fun adapterRows(): ArrayList { + val rows = ArrayList() + rows.addAll(TransactionTypeRow.values()) + return rows + } + + override fun stringForRow(row: DynamicRowInterface): String { + return when (row) { + TransactionTypeRow.NAME -> this.id + else -> return super.stringForRow(row) + } + } } enum class TransactionKind { 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/DataListAdapter.kt index ea3def8b..7e9d7dbb 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/DataListAdapter.kt @@ -6,6 +6,7 @@ import android.view.ViewGroup import androidx.appcompat.widget.AppCompatTextView import androidx.constraintlayout.widget.ConstraintLayout import androidx.recyclerview.widget.RecyclerView +import kotlinx.android.synthetic.main.fragment_data_list.view.* import net.pokeranalytics.android.R import net.pokeranalytics.android.ui.fragment.components.BottomSheetData @@ -16,7 +17,8 @@ interface DisplayableDelegate { } interface DisplayableDataSource { - var title: String + val title: String + val primaryKey: String } interface EditableDataSource { @@ -27,9 +29,6 @@ class DataListAdapter(var delegate: DisplayableDelegate, var layout: Int? = null inner class DataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { fun bind(row: DisplayableDataSource, listener: View.OnClickListener) { - //itemView.title.text = row.title - //itemView.container.setOnClickListener(listener) - try { itemView.findViewById(R.id.title).text = row.title itemView.findViewById(R.id.container).setOnClickListener(listener) @@ -59,5 +58,4 @@ class DataListAdapter(var delegate: DisplayableDelegate, var layout: Int? = null } (holder as DataViewHolder).bind(this.delegate.data(position), listener) } - } \ 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 index 1dc41ce1..da23bfe5 100644 --- 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 @@ -88,6 +88,94 @@ enum class BankrollRow(val resId: Int) : DynamicRowInterface { } } +enum class GameRow(val resId: Int) : DynamicRowInterface { + NAME(R.string.name); + + override fun localizedTitle(context: Context): String { + return context.getString(this.resId) + } + + override var viewType: Int = RowViewType.HEADER.ordinal + get() { + return when (this) { + NAME -> RowViewType.TITLE_VALUE.ordinal + } + } + + override var bottomSheetType: BottomSheetType = BottomSheetType.NONE + get() { + return when (this) { + NAME -> BottomSheetType.EDIT_TEXT + } + } +} + +enum class LocationRow(val resId: Int) : DynamicRowInterface { + NAME(R.string.name); + + override fun localizedTitle(context: Context): String { + return context.getString(this.resId) + } + + override var viewType: Int = RowViewType.HEADER.ordinal + get() { + return when (this) { + NAME -> RowViewType.TITLE_VALUE.ordinal + } + } + + override var bottomSheetType: BottomSheetType = BottomSheetType.NONE + get() { + return when (this) { + NAME -> BottomSheetType.EDIT_TEXT + } + } +} + +enum class TransactionTypeRow(val resId: Int) : DynamicRowInterface { + NAME(R.string.name); + + override fun localizedTitle(context: Context): String { + return context.getString(this.resId) + } + + override var viewType: Int = RowViewType.HEADER.ordinal + get() { + return when (this) { + NAME -> RowViewType.TITLE_VALUE.ordinal + } + } + + override var bottomSheetType: BottomSheetType = BottomSheetType.NONE + get() { + return when (this) { + NAME -> BottomSheetType.EDIT_TEXT + } + } +} + +enum class TournamentFeatureRow(val resId: Int) : DynamicRowInterface { + NAME(R.string.name); + + override fun localizedTitle(context: Context): String { + return context.getString(this.resId) + } + + override var viewType: Int = RowViewType.HEADER.ordinal + get() { + return when (this) { + NAME -> RowViewType.TITLE_VALUE.ordinal + } + } + + override var bottomSheetType: BottomSheetType = BottomSheetType.NONE + get() { + return when (this) { + NAME -> BottomSheetType.EDIT_TEXT + } + } +} + enum class SettingRow(val resId: Int) : DynamicRowInterface, DynamicValues { BANKROLL(R.string.bankroll), GAME(R.string.game), 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 2fe055ff..c401d67e 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,12 +6,14 @@ 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 timber.log.Timber class DataListFragment : PokerAnalyticsFragment(), DisplayableDelegate { @@ -34,7 +36,7 @@ class DataListFragment : PokerAnalyticsFragment(), DisplayableDelegate { } override fun onRowSelected(position: Int) { - EditableDataActivity.newInstance(requireContext(), this.dataType.ordinal, null) + EditableDataActivity.newInstance(requireContext(), this.dataType.ordinal, this.data(position).primaryKey) } override fun size(): Int { @@ -70,7 +72,12 @@ class DataListFragment : PokerAnalyticsFragment(), DisplayableDelegate { */ fun setData(dataType: Int) { this.dataType = SettingRow.values()[dataType] + this.title.text = this.dataType.name.toLowerCase().capitalize() val realm = Realm.getDefaultInstance() this.items = this.dataType.items(realm) + this.items.addChangeListener { newItems -> + Timber.d("newItems: ${newItems.size}") + this.recyclerView.adapter?.notifyDataSetChanged() + } } } \ No newline at end of file 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 3819da10..defa6052 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,6 +10,7 @@ import io.realm.Realm import io.realm.RealmObject import kotlinx.android.synthetic.main.bottom_sheet_bankroll.* 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.realm.Bankroll import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity @@ -77,13 +78,17 @@ class EditableDataFragment : PokerAnalyticsFragment(), DynamicRowCallback, Botto } } - realm.beginTransaction() proxyItem?.let { this.item = realm.copyFromRealm(it) + this.appBar.toolbar.title = "Update ${this.dataType.name.toLowerCase().capitalize()}" } ?: run { - this.item = realm.createObject(Bankroll::class.java, UUID.randomUUID().toString()) + realm.beginTransaction() + val t = realm.createObject(this.dataType.clazz(), UUID.randomUUID().toString()) + realm.commitTransaction() + this.item = realm.copyFromRealm(t) + this.appBar.toolbar.title = "New ${this.dataType.name.toLowerCase().capitalize()}" } - realm.commitTransaction() + val dynamicListAdapter = DynamicListAdapter((this.item as DynamicRowDelegate), this) this.recyclerView.adapter = dynamicListAdapter diff --git a/app/src/main/res/layout/fragment_data_list.xml b/app/src/main/res/layout/fragment_data_list.xml index 3eaf9bf9..49a6b1a3 100644 --- a/app/src/main/res/layout/fragment_data_list.xml +++ b/app/src/main/res/layout/fragment_data_list.xml @@ -12,7 +12,7 @@ android:layout_marginStart="8dp" android:layout_marginTop="8dp" android:layout_marginEnd="8dp" - android:text="Data List" + tools:text="Data List" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -38,4 +38,5 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" /> + \ No newline at end of file