Improve Sessions history UI

feature/top10
Aurelien Hubert 7 years ago
parent 910675ba27
commit 30254db040
  1. 59
      app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt
  2. 13
      app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt
  3. 6
      app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt
  4. 47
      app/src/main/res/layout/fragment_history.xml
  5. 28
      app/src/main/res/layout/row_history_session.xml
  6. 2
      app/src/main/res/layout/row_session_view.xml

@ -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<Session>
private val sessions: ArrayList<Session> = 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<Session>().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) {

@ -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)
}
}

@ -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))
}
}

@ -7,6 +7,8 @@
android:layout_height="match_parent"
tools:context=".ui.activity.HomeActivity">
<!--
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/newSession"
android:layout_width="48dp"
@ -17,6 +19,7 @@
android:elevation="4dp"
android:scaleType="fitCenter"
android:src="@drawable/add_cash_game"
android:visibility="gone"
app:layout_constraintEnd_toStartOf="@+id/newTournament"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
@ -31,6 +34,7 @@
android:elevation="4dp"
android:scaleType="fitCenter"
android:src="@drawable/add_tournoi"
android:visibility="gone"
app:layout_constraintEnd_toStartOf="@+id/newHand"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/newSession"
@ -45,6 +49,7 @@
android:elevation="4dp"
android:scaleType="fitCenter"
android:src="@drawable/add_hand"
android:visibility="gone"
app:layout_constraintEnd_toStartOf="@+id/newTransaction"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/newTournament"
@ -60,20 +65,58 @@
android:elevation="4dp"
android:scaleType="fitCenter"
android:src="@drawable/add_transaction"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/newHand"
app:layout_constraintTop_toTopOf="@+id/newSession" />
-->
<com.google.android.material.button.MaterialButton
android:id="@+id/newCashGame"
style="@style/PokerAnalyticsTheme.Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:text="@string/new_cash_game"
app:icon="@drawable/add_cash_game"
app:iconSize="32dp"
app:layout_constraintEnd_toStartOf="@+id/newTournament"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintHorizontal_chainStyle="spread"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.button.MaterialButton
android:id="@+id/newTournament"
style="@style/PokerAnalyticsTheme.Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:text="@string/new_tournament"
app:icon="@drawable/add_tournoi"
app:iconSize="32dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/newCashGame"
app:layout_constraintTop_toTopOf="parent" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="16dp"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/newHand"
app:layout_constraintTop_toBottomOf="@+id/newCashGame"
tools:listitem="@layout/row_history_session" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -1,12 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/sessionHeader"
style="@style/PokerAnalyticsTheme.TextView.SessionHeader"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:visibility="gone"
tools:text="Header"
tools:visibility="visible" />
<net.pokeranalytics.android.ui.view.SessionRowView
android:id="@+id/sessionRow"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
android:id="@+id/sessionRow"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</FrameLayout>
</LinearLayout>

@ -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"

Loading…
Cancel
Save