From 30254db040d6145f9af7141486902768fc845664 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Mon, 25 Feb 2019 11:30:08 +0100 Subject: [PATCH] Improve Sessions history UI --- .../android/ui/fragment/HistoryFragment.kt | 59 +++++++++++++++---- .../android/ui/view/RowViewType.kt | 13 +++- .../android/ui/view/SessionRowView.kt | 6 ++ app/src/main/res/layout/fragment_history.xml | 47 ++++++++++++++- .../main/res/layout/row_history_session.xml | 28 ++++++--- app/src/main/res/layout/row_session_view.xml | 2 +- 6 files changed, 130 insertions(+), 25 deletions(-) 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 1eef93e2..2ee7bd10 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 @@ -4,7 +4,6 @@ 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 io.realm.RealmResults import io.realm.Sort @@ -20,6 +19,11 @@ import net.pokeranalytics.android.ui.adapter.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.getMonthAndYear +import net.pokeranalytics.android.util.isSameDay +import net.pokeranalytics.android.util.isSameMonth +import net.pokeranalytics.android.util.longDate +import java.util.* class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, RowRepresentableDelegate { @@ -35,6 +39,7 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, private lateinit var historyAdapter: RowRepresentableAdapter private lateinit var realmSessions: RealmResults + private val sessions: ArrayList = ArrayList() override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_history, container, false) @@ -54,6 +59,10 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, override fun onResume() { super.onResume() historyAdapter.notifyDataSetChanged() + + sessions.clear() + sessions.addAll(getRealm().copyFromRealm(realmSessions)) + createSessionsHeaders() } /** @@ -61,7 +70,7 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, */ private fun initUI() { - newSession.setOnClickListener { + newCashGame.setOnClickListener { SessionActivity.newInstance(requireContext(), false) } @@ -69,13 +78,6 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, SessionActivity.newInstance(requireContext(), true) } - newHand.setOnClickListener { - Toast.makeText(requireContext(), "Open new hand", Toast.LENGTH_SHORT).show() - } - newTransaction.setOnClickListener { - Toast.makeText(requireContext(), "Open new transaction", Toast.LENGTH_SHORT).show() - } - } /** @@ -83,9 +85,12 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, */ private fun initData() { realmSessions = getRealm().where().findAll().sort("timeFrame.startDate", Sort.DESCENDING) + val viewManager = LinearLayoutManager(requireContext()) historyAdapter = RowRepresentableAdapter(this, this) + createSessionsHeaders() + recyclerView.apply { setHasFixedSize(true) layoutManager = viewManager @@ -93,12 +98,42 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, } } + /** + * Create the sessions headers + */ + private fun createSessionsHeaders() { + + val groupedByDay = false + + val calendar = Calendar.getInstance() + val currentCalendar = Calendar.getInstance() + + for ((index, session) in sessions.withIndex()) { + currentCalendar.time = session.creationDate + if (groupedByDay) { + if (!calendar.isSameDay(currentCalendar) || index == 0) { + calendar.time = currentCalendar.time + session.displayHeader = true + session.headerValues = arrayListOf(session.creationDate.longDate(), "$ 123") + } + } else { + if (!calendar.isSameMonth(currentCalendar) || index == 0) { + calendar.time = currentCalendar.time + session.displayHeader = true + session.headerValues = arrayListOf(session.creationDate.getMonthAndYear(), "$ 123") + } + } + } + + } + + override fun rowRepresentableForPosition(position: Int): RowRepresentable { - return this.realmSessions[position] as RowRepresentable + return this.sessions[position] } override fun numberOfRows(): Int { - return this.realmSessions.size + return this.sessions.size } override fun viewTypeForPosition(position: Int): Int { @@ -106,7 +141,7 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, } override fun indexForRow(row: RowRepresentable): Int { - return this.realmSessions.indexOf(row) + return this.sessions.indexOf(row) } override fun onRowSelected(row: RowRepresentable) { 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 9cb810a3..27b1acf6 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 @@ -3,6 +3,7 @@ package net.pokeranalytics.android.ui.view import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.view.isVisible import androidx.recyclerview.widget.RecyclerView import kotlinx.android.synthetic.main.row_bottom_sheet_grid_title.view.* import kotlinx.android.synthetic.main.row_bottom_sheet_title.view.* @@ -45,8 +46,16 @@ 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) + + if (row.displayHeader) { + itemView.sessionHeader.isVisible = true + itemView.sessionHeader.text = row.headerValues.firstOrNull() ?: "" + } else { + itemView.sessionHeader.isVisible = false + } + + itemView.sessionRow.setData(row as Session) + itemView.sessionRow.setOnClickListener(listener) } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt index b286df75..30a0b39a 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt @@ -5,12 +5,14 @@ import android.util.AttributeSet import android.view.LayoutInflater import android.widget.FrameLayout import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.content.ContextCompat import kotlinx.android.synthetic.main.row_session_view.view.* import net.pokeranalytics.android.R import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.util.getDayNumber import net.pokeranalytics.android.util.getShortDayName import net.pokeranalytics.android.util.toCurrency +import timber.log.Timber class SessionRowView : FrameLayout { @@ -60,6 +62,10 @@ class SessionRowView : FrameLayout { rowHistorySession.gameInfo.text = session.getDuration(context) rowHistorySession.gameResult.text = session.result?.netResult?.toCurrency() ?: "$0" + val result = session.result?.netResult ?: 0.0 + val resultColor = if (result >= 0.0) R.color.green else R.color.red + rowHistorySession.gameResult.setTextColor(ContextCompat.getColor(context, resultColor)) + } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_history.xml b/app/src/main/res/layout/fragment_history.xml index 3408c3e6..7af3b04a 100644 --- a/app/src/main/res/layout/fragment_history.xml +++ b/app/src/main/res/layout/fragment_history.xml @@ -7,6 +7,8 @@ android:layout_height="match_parent" tools:context=".ui.activity.HomeActivity"> + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/row_history_session.xml b/app/src/main/res/layout/row_history_session.xml index c4c27304..fdefc67b 100644 --- a/app/src/main/res/layout/row_history_session.xml +++ b/app/src/main/res/layout/row_history_session.xml @@ -1,12 +1,24 @@ - + + + + android:id="@+id/sessionRow" + android:layout_width="match_parent" + android:layout_height="wrap_content" /> - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/row_session_view.xml b/app/src/main/res/layout/row_session_view.xml index ff4b18a8..61515f4b 100644 --- a/app/src/main/res/layout/row_session_view.xml +++ b/app/src/main/res/layout/row_session_view.xml @@ -40,7 +40,7 @@ style="@style/PokerAnalyticsTheme.TextView.SessionRow.Title" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginStart="16dp" + android:layout_marginStart="8dp" android:layout_marginTop="8dp" android:layout_marginEnd="8dp" app:layout_constraintBottom_toTopOf="@+id/gameInfo"