From 6838cf59d32428bed4c323ab53fb8e69a08b1d1f Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Fri, 15 Feb 2019 12:11:59 +0100 Subject: [PATCH] clean up Settings and Data List --- .../android/model/realm/Bankroll.kt | 7 ++--- .../ui/adapter/components/DataListAdapter.kt | 17 +++++------ .../adapter/components/DynamicRowInterface.kt | 28 +++++++++++++++++-- .../android/ui/fragment/DataListFragment.kt | 26 +++++++---------- .../android/ui/fragment/SettingsFragment.kt | 6 ++-- 5 files changed, 47 insertions(+), 37 deletions(-) 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 46ac57e8..11c535dc 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,14 +4,11 @@ import android.content.Context import io.realm.RealmList import io.realm.RealmObject import io.realm.annotations.PrimaryKey -import net.pokeranalytics.android.ui.adapter.components.DisplayableData -import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface -import net.pokeranalytics.android.ui.adapter.components.RowViewType -import net.pokeranalytics.android.ui.fragment.components.BottomSheetType +import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource import java.util.* -open class Bankroll(name: String = "") : RealmObject(), DisplayableData { +open class Bankroll(name: String = "") : RealmObject(), DisplayableDataSource { @PrimaryKey var id = UUID.randomUUID().toString() 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 37b35ca5..7ab9e23b 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 @@ -7,23 +7,20 @@ import androidx.recyclerview.widget.RecyclerView import kotlinx.android.synthetic.main.row_session.view.* import net.pokeranalytics.android.R -interface DataRowDelegate { - fun data(position: Int) : DisplayableData - fun size() : Int -} - -interface DataRowCallback { +interface DisplayableDelegate { + fun data(position: Int) : DisplayableDataSource fun onRowSelected(position: Int) + fun size() : Int } -interface DisplayableData { +interface DisplayableDataSource { var title: String } -class DataListAdapter(var delegate: DataRowDelegate, var callBackDelegate: DataRowCallback? = null) : RecyclerView.Adapter() { +class DataListAdapter(var delegate: DisplayableDelegate) : RecyclerView.Adapter() { inner class DataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - fun bind(row: DisplayableData, listener: View.OnClickListener) { + fun bind(row: DisplayableDataSource, listener: View.OnClickListener) { itemView.title.text = row.title itemView.container.setOnClickListener(listener) } @@ -43,7 +40,7 @@ class DataListAdapter(var delegate: DataRowDelegate, var callBackDelegate: DataR override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { val listener = View.OnClickListener { - callBackDelegate?.onRowSelected(position) + delegate.onRowSelected(position) } (holder as DataViewHolder).bind(this.delegate.data(position), listener) } 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 4d114ce5..e07964e0 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 @@ -1,7 +1,12 @@ package net.pokeranalytics.android.ui.adapter.components import android.content.Context +import io.realm.Realm +import io.realm.RealmModel +import io.realm.RealmResults +import io.realm.Sort import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.ui.fragment.components.BottomSheetType @@ -11,6 +16,12 @@ interface DynamicRowInterface { var bottomSheetType: BottomSheetType } +interface DynamicValues { + fun items(realm: Realm): RealmResults<*> + var sortingFieldName: String + var sorting: Sort +} + class SectionRow(stringRes: Int) : DynamicRowInterface { var stringRes: Int = stringRes @@ -62,7 +73,7 @@ enum class BankrollRow(val resId: Int) : DynamicRowInterface { override var bottomSheetType: BottomSheetType = BottomSheetType.NONE } -enum class DataObjectRowType(val resId: Int) : DynamicRowInterface { +enum class SettingRow(val resId: Int) : DynamicRowInterface, DynamicValues { BANKROLL(R.string.bankroll), GAME(R.string.game), LOCATION(R.string.location), @@ -75,4 +86,17 @@ enum class DataObjectRowType(val resId: Int) : DynamicRowInterface { override var viewType: Int = RowViewType.TITLE.ordinal override var bottomSheetType: BottomSheetType = BottomSheetType.NONE -} + + override fun items(realm: Realm): RealmResults<*> { + return when (this) { + BANKROLL -> realm.where(Bankroll::class.java).findAll().sort(this.sortingFieldName, this.sorting) + GAME-> realm.where(Game::class.java).findAll().sort(this.sortingFieldName, this.sorting) + LOCATION -> realm.where(Location::class.java).findAll().sort(this.sortingFieldName, this.sorting) + TOURNAMENT_TYPE -> realm.where(TournamentFeature::class.java).findAll().sort(this.sortingFieldName, this.sorting) + TRANSACTION_TYPE -> realm.where(TransactionType::class.java).findAll().sort(this.sortingFieldName, this.sorting) + } + } + + override var sortingFieldName: String = "name" + override var sorting: Sort = Sort.DESCENDING +} \ 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 40fd66ed..0131e1a3 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 @@ -7,6 +7,7 @@ import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager import io.realm.Realm import io.realm.RealmObject +import io.realm.RealmResults import io.realm.Sort import kotlinx.android.synthetic.main.fragment_new_session.* import net.pokeranalytics.android.R @@ -14,11 +15,11 @@ import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.util.PokerAnalyticsFragment -class DataListFragment : PokerAnalyticsFragment(), DataRowDelegate, DataRowCallback { +class DataListFragment : PokerAnalyticsFragment(), DisplayableDelegate { - private lateinit var dataType: DataObjectRowType + private lateinit var dataType: SettingRow - private lateinit var realmObjects: ArrayList + private lateinit var items: RealmResults<*> override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_data_list, container, false) @@ -30,8 +31,8 @@ class DataListFragment : PokerAnalyticsFragment(), DataRowDelegate, DataRowCallb initUI() } - override fun data(position: Int): DisplayableData { - return (realmObjects[position] as DisplayableData) + override fun data(position: Int): DisplayableDataSource { + return (items[position] as DisplayableDataSource) } override fun onRowSelected(position: Int) { @@ -39,7 +40,7 @@ class DataListFragment : PokerAnalyticsFragment(), DataRowDelegate, DataRowCallb } override fun size(): Int { - return realmObjects.size + return items.size } private fun initData() { @@ -51,7 +52,7 @@ class DataListFragment : PokerAnalyticsFragment(), DataRowDelegate, DataRowCallb private fun initUI() { val viewManager = LinearLayoutManager(requireContext()) - val dataListAdapter = DataListAdapter(this, this) + val dataListAdapter = DataListAdapter(this) recyclerView.apply { setHasFixedSize(true) @@ -65,15 +66,8 @@ class DataListFragment : PokerAnalyticsFragment(), DataRowDelegate, DataRowCallb * Set fragment data */ fun setData(dataType: Int) { - this.dataType = DataObjectRowType.values()[dataType] + this.dataType = SettingRow.values()[dataType] val realm = Realm.getDefaultInstance() - - realmObjects = ArrayList( when (DataObjectRowType.values()[dataType]) { - DataObjectRowType.BANKROLL -> realm.where(Bankroll::class.java).findAll().sort("name", Sort.DESCENDING) - DataObjectRowType.GAME-> realm.where(Game::class.java).findAll().sort("name", Sort.DESCENDING) - DataObjectRowType.LOCATION -> realm.where(Location::class.java).findAll().sort("name", Sort.DESCENDING) - DataObjectRowType.TOURNAMENT_TYPE -> realm.where(TournamentFeature::class.java).findAll().sort("name", Sort.DESCENDING) - DataObjectRowType.TRANSACTION_TYPE -> realm.where(TransactionType::class.java).findAll().sort("name", Sort.DESCENDING) - }) + this.items = this.dataType.items(realm) } } \ No newline at end of file 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 5b78f727..d38518e3 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 @@ -4,12 +4,10 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.Toast 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.activity.NewSessionActivity import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.util.PokerAnalyticsFragment @@ -42,12 +40,12 @@ class SettingsFragment : PokerAnalyticsFragment(), DynamicRowDelegate, DynamicRo override fun adapterRows(): ArrayList { val rows = ArrayList() - rows.addAll(DataObjectRowType.values()) + rows.addAll(SettingRow.values()) return rows } override fun onRowSelected(row: DynamicRowInterface) { - DataListActivity.newInstance(requireContext(), (row as DataObjectRowType).ordinal) + DataListActivity.newInstance(requireContext(), (row as SettingRow).ordinal) } /**