From 11ca4895788af794f216d127fc01d0bc96da1cf7 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Thu, 14 Feb 2019 18:53:34 +0100 Subject: [PATCH] add a DataListAdapter to handle business objects --- app/src/main/AndroidManifest.xml | 2 +- .../android/model/realm/Bankroll.kt | 5 ++- .../ui/adapter/components/DataListAdapter.kt | 26 +++++++++++---- .../android/ui/fragment/DataListFragment.kt | 33 ++++++++++++++----- .../android/ui/fragment/SettingsFragment.kt | 4 ++- 5 files changed, 51 insertions(+), 19 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1b0bb87e..be419c96 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -20,7 +20,7 @@ - + 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 56b403ec..46ac57e8 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,13 +4,14 @@ 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 java.util.* -open class Bankroll(name: String = "") : RealmObject() { +open class Bankroll(name: String = "") : RealmObject(), DisplayableData { @PrimaryKey var id = UUID.randomUUID().toString() @@ -28,4 +29,6 @@ open class Bankroll(name: String = "") : RealmObject() { var currency: Currency? = null // @todo rate management + + override var title: String = this.name } \ 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/DataListAdapter.kt index 3ac5cbb5..37b35ca5 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 @@ -1,28 +1,40 @@ package net.pokeranalytics.android.ui.adapter.components +import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView +import kotlinx.android.synthetic.main.row_session.view.* +import net.pokeranalytics.android.R interface DataRowDelegate { - var viewType: RowViewType - fun data(position: Int) : DynamicRowInterface - fun size() : Int { return 0 } + fun data(position: Int) : DisplayableData + fun size() : Int } interface DataRowCallback { fun onRowSelected(position: Int) } +interface DisplayableData { + var title: String +} + class DataListAdapter(var delegate: DataRowDelegate, var callBackDelegate: DataRowCallback? = null) : RecyclerView.Adapter() { + inner class DataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + fun bind(row: DisplayableData, listener: View.OnClickListener) { + itemView.title.text = row.title + itemView.container.setOnClickListener(listener) + } + } + override fun getItemViewType(position: Int): Int { - return delegate.viewType.ordinal + return RowViewType.TITLE.ordinal } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - val rowViewType: RowViewType = RowViewType.values()[viewType] - return rowViewType.viewHolder(parent) + return DataViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.row_title, parent, false)) } override fun getItemCount(): Int { @@ -33,7 +45,7 @@ class DataListAdapter(var delegate: DataRowDelegate, var callBackDelegate: DataR val listener = View.OnClickListener { callBackDelegate?.onRowSelected(position) } - (holder as DynamicHolder).bind(this.delegate.data(position), null, listener) + (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/fragment/DataListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt index ef60341f..b771d810 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,42 +6,48 @@ import android.view.View 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 import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.util.PokerAnalyticsFragment +import net.pokeranalytics.android.util.data.sessionDao +import java.util.* +import kotlin.collections.ArrayList class DataListFragment : PokerAnalyticsFragment(), DataRowDelegate, DataRowCallback { private lateinit var dataType: DataObjectRowType + private lateinit var realmObjects: ArrayList + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_data_list, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - initData() initUI() } - override var viewType: RowViewType - get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates. - set(value) {} - - override fun data(position: Int): DynamicRowInterface { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + override fun data(position: Int): DisplayableData { + return (realmObjects[position] as DisplayableData) } override fun onRowSelected(position: Int) { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } - private fun initData() { - } + override fun size(): Int { + return realmObjects.size + } + + private fun initData() { + } /** * Init UI @@ -64,5 +70,14 @@ class DataListFragment : PokerAnalyticsFragment(), DataRowDelegate, DataRowCallb */ fun setData(dataType: Int) { this.dataType = DataObjectRowType.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) + }) } } \ 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 dd55a229..5b78f727 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt @@ -8,6 +8,8 @@ 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 @@ -45,7 +47,7 @@ class SettingsFragment : PokerAnalyticsFragment(), DynamicRowDelegate, DynamicRo } override fun onRowSelected(row: DynamicRowInterface) { - //val bottomSheetFragment = openBottomSheet(row) + DataListActivity.newInstance(requireContext(), (row as DataObjectRowType).ordinal) } /**