From 1dc6f591e51c5866ab664a5059f9f86f60f85609 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Fri, 22 Feb 2019 14:41:34 +0100 Subject: [PATCH] remove usage of HistoryAdapter --- .../android/model/realm/Session.kt | 6 ++- .../android/ui/activity/HomeActivity.kt | 3 +- .../android/ui/fragment/HistoryFragment.kt | 52 ++++++++++++------- .../android/ui/view/RowViewType.kt | 19 ++++++- 4 files changed, 57 insertions(+), 23 deletions(-) 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 9da0cf4b..67d2feeb 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 @@ -24,7 +24,7 @@ import java.util.* import kotlin.collections.ArrayList open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource, - RowEditable { + RowEditable, RowRepresentable { @PrimaryKey var id = UUID.randomUUID().toString() @@ -242,6 +242,10 @@ open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource return 0.0 } + override fun getDisplayName(): String { + return "session ${this.creationDate}" + } + override fun adapterRows(): ArrayList { val rows = ArrayList() rows.addAll(SessionRow.getRowsForState(getState())) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt index b8203b78..b1c395b9 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt @@ -3,6 +3,7 @@ package net.pokeranalytics.android.ui.activity import android.content.Context import android.content.Intent import android.os.Bundle +import androidx.fragment.app.Fragment import com.google.android.material.bottomnavigation.BottomNavigationView import kotlinx.android.synthetic.main.activity_home.* import net.pokeranalytics.android.R @@ -68,7 +69,7 @@ class HomeActivity : PokerAnalyticsActivity() { else -> "" } - val fragment = when(index) { + val fragment: Fragment = when(index) { 0 -> HistoryFragment() 1 -> StatsFragment() else -> SettingsFragment() diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt index 517aeca3..e43a9487 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt @@ -9,13 +9,19 @@ import androidx.recyclerview.widget.LinearLayoutManager import io.realm.RealmResults import kotlinx.android.synthetic.main.fragment_history.* import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.ObjectSavable import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.ui.activity.SessionActivity import net.pokeranalytics.android.ui.adapter.HistoryAdapter +import net.pokeranalytics.android.ui.adapter.components.RowRepresentableAdapter +import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDataSource +import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDelegate import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment +import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.util.data.sessionDao -class HistoryFragment : PokerAnalyticsFragment() { +class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, RowRepresentableDelegate { companion object { fun newInstance(): HistoryFragment { @@ -26,8 +32,8 @@ class HistoryFragment : PokerAnalyticsFragment() { } } - private lateinit var historyAdapter: HistoryAdapter - private var realmSessions: RealmResults? = null + private lateinit var historyAdapter: RowRepresentableAdapter + private lateinit var realmSessions: RealmResults override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_history, container, false) @@ -41,7 +47,7 @@ class HistoryFragment : PokerAnalyticsFragment() { override fun onDestroyView() { super.onDestroyView() - realmSessions?.removeAllChangeListeners() + realmSessions.removeAllChangeListeners() } /** @@ -70,28 +76,34 @@ class HistoryFragment : PokerAnalyticsFragment() { * Init data */ private fun initData() { - realmSessions = getRealm().sessionDao().findAllSessions() - realmSessions?.let { + val viewManager = LinearLayoutManager(requireContext()) + historyAdapter = RowRepresentableAdapter(this, this) - val viewManager = LinearLayoutManager(requireContext()) - historyAdapter = HistoryAdapter(it) + recyclerView.apply { + setHasFixedSize(true) + layoutManager = viewManager + adapter = historyAdapter + } + } - recyclerView.apply { - setHasFixedSize(true) - layoutManager = viewManager - adapter = historyAdapter - } + override fun rowRepresentableForPosition(position: Int): RowRepresentable { + return this.realmSessions[position] as RowRepresentable + } - historyAdapter.onClickOnSession = {position, session -> - SessionActivity.newInstance(requireContext(), sessionId = session.id) - } + override fun numberOfRows(): Int { + return this.realmSessions.size + } - it.addChangeListener { newSessions -> - historyAdapter.notifyDataSetChanged() - } - } + override fun viewTypeForPosition(position: Int): Int { + return RowViewType.ROW_SESSION.ordinal + } + override fun indexForRow(row: RowRepresentable): Int { + return this.realmSessions.indexOf(row) } + override fun onRowSelected(row: RowRepresentable) { + SessionActivity.newInstance(requireContext(), sessionId = (row as ObjectSavable).uniqueIdentifier()) + } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt index d1dbeb88..a0845f5d 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt @@ -8,10 +8,12 @@ import androidx.constraintlayout.widget.ConstraintLayout import androidx.recyclerview.widget.RecyclerView import kotlinx.android.synthetic.main.row_bottom_sheet_grid_title.view.* import kotlinx.android.synthetic.main.row_header_title_value.view.* +import kotlinx.android.synthetic.main.row_history_session.view.* import kotlinx.android.synthetic.main.row_title.view.* import kotlinx.android.synthetic.main.row_title_value.view.* import kotlinx.android.synthetic.main.row_title_value_action.view.* import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.ui.adapter.TableSizeGridAdapter import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDataSource @@ -33,7 +35,8 @@ enum class RowViewType { TITLE_VALUE_ACTION, DATA, BOTTOM_SHEET_DATA, - TITLE_GRID; + TITLE_GRID, + ROW_SESSION; inner class FakeViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { @@ -41,6 +44,14 @@ enum class RowViewType { } } + inner class RowSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), + BindableHolder { + override fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource?, listener: View.OnClickListener, actionListener: View.OnClickListener?) { + itemView.sessionRow.setData(row as Session) + itemView.sessionRow.setOnClickListener(listener) + } + } + inner class CellSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { override fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource?, listener: View.OnClickListener, actionListener: View.OnClickListener?) { itemView.title.text = row.localizedTitle(itemView.context) @@ -163,6 +174,12 @@ enum class RowViewType { parent, false) ) + ROW_SESSION -> RowSessionViewHolder( + LayoutInflater.from(parent.context).inflate( + R.layout.row_history_session, + parent, + false) + ) else -> FakeViewHolder(parent) } }