Improve Session history UI

feature/top10
Aurelien Hubert 7 years ago
parent 42d97a3672
commit 665d8f491d
  1. 59
      app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt
  2. 4
      app/src/main/java/net/pokeranalytics/android/util/Extensions.kt
  3. 121
      app/src/main/res/layout/row_session_view.xml
  4. 1
      app/src/main/res/values/styles.xml

@ -6,13 +6,16 @@ import android.view.LayoutInflater
import android.widget.FrameLayout import android.widget.FrameLayout
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import kotlinx.android.synthetic.main.row_session_view.view.* import kotlinx.android.synthetic.main.row_session_view.view.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.TableSize
import net.pokeranalytics.android.model.extensions.SessionState
import net.pokeranalytics.android.model.extensions.getState
import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.util.getDayNumber import net.pokeranalytics.android.util.getDayNumber
import net.pokeranalytics.android.util.getShortDayName import net.pokeranalytics.android.util.getShortDayName
import net.pokeranalytics.android.util.toCurrency import net.pokeranalytics.android.util.toCurrency
import timber.log.Timber
class SessionRowView : FrameLayout { class SessionRowView : FrameLayout {
@ -55,16 +58,58 @@ class SessionRowView : FrameLayout {
*/ */
fun setData(session: Session) { fun setData(session: Session) {
// Date
rowHistorySession.dateDay.text = session.creationDate.getShortDayName() rowHistorySession.dateDay.text = session.creationDate.getShortDayName()
rowHistorySession.dateNumber.text = session.creationDate.getDayNumber() rowHistorySession.dateNumber.text = session.creationDate.getDayNumber()
rowHistorySession.gameType.text = session.getGameTitle() // Title / Game type
rowHistorySession.gameInfo.text = session.getDuration(context) var title = ""
rowHistorySession.gameResult.text = session.result?.netResult?.toCurrency() ?: "$0" if (session.cgSmallBlind != null && session.cgBigBlind != null) {
title += session.getBlinds()
}
session.game?.let {
title += session.getGameTitle()
}
title += if (title.isEmpty()) "--" else ""
val result = session.result?.netResult ?: 0.0 rowHistorySession.sessionTitle.text = title
val resultColor = if (result >= 0.0) R.color.green else R.color.red
rowHistorySession.gameResult.setTextColor(ContextCompat.getColor(context, resultColor)) // Duration
rowHistorySession.sessionInfoDurationIcon.isVisible = session.timeFrame != null
rowHistorySession.sessionInfoDurationValue.isVisible = session.timeFrame != null
session.timeFrame?.let {
rowHistorySession.sessionInfoDurationValue.text = session.getDuration(context)
}
// Location
rowHistorySession.sessionInfoLocationIcon.isVisible = session.location != null
rowHistorySession.sessionInfoLocationValue.isVisible = session.location != null
session.location?.let {
rowHistorySession.sessionInfoLocationValue.text = it.name
}
// Table size
rowHistorySession.sessionInfoTableIcon.isVisible = session.tableSize != null
rowHistorySession.sessionInfoTableValue.isVisible = session.tableSize != null
session.tableSize?.let {
rowHistorySession.sessionInfoTableValue.text = TableSize.all[it].localizedTitle(context)
}
// State
if (session.getState() == SessionState.STARTED) {
rowHistorySession.gameResult.isVisible = false
rowHistorySession.playingIcon.isVisible = true
rowHistorySession.playingTitle.isVisible = true
} else {
rowHistorySession.gameResult.isVisible = true
rowHistorySession.playingIcon.isVisible = false
rowHistorySession.playingTitle.isVisible = false
val result = session.result?.netResult ?: 0.0
val resultColor = if (result >= 0.0) R.color.green else R.color.red
rowHistorySession.gameResult.text = result.toCurrency()
rowHistorySession.gameResult.setTextColor(ContextCompat.getColor(context, resultColor))
}
} }

@ -104,13 +104,11 @@ fun Date.getDuration(context: Context, toDate: Date) : String {
val numOfDays = (difference / (1000 * 60 * 60 * 24)) val numOfDays = (difference / (1000 * 60 * 60 * 24))
val hours = (difference / (1000 * 60 * 60)) val hours = (difference / (1000 * 60 * 60))
val minutes = (difference / (1000 * 60)) % 60 val minutes = (difference / (1000 * 60)) % 60
val seconds = (difference / 1000) % 60
val hoursStr = if (hours < 10) "0$hours" else "$hours" val hoursStr = if (hours < 10) "0$hours" else "$hours"
val minutesStr = if (minutes < 10) "0$minutes" else "$minutes" val minutesStr = if (minutes < 10) "0$minutes" else "$minutes"
val secondsStr = if (seconds < 10) "0$seconds" else "$seconds"
return "$hoursStr:$minutesStr:$secondsStr" return "$hoursStr:$minutesStr"
} }

@ -36,14 +36,14 @@
tools:text="21" /> tools:text="21" />
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/gameType" android:id="@+id/sessionTitle"
style="@style/PokerAnalyticsTheme.TextView.SessionRow.Title" style="@style/PokerAnalyticsTheme.TextView.SessionRow.Title"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="8dp" android:layout_marginStart="8dp"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
app:layout_constraintBottom_toTopOf="@+id/gameInfo" app:layout_constraintBottom_toTopOf="@+id/sessionInfoLayout"
app:layout_constraintEnd_toStartOf="@+id/linearLayout" app:layout_constraintEnd_toStartOf="@+id/linearLayout"
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/dateDay" app:layout_constraintStart_toEndOf="@+id/dateDay"
@ -51,37 +51,142 @@
app:layout_constraintVertical_chainStyle="packed" app:layout_constraintVertical_chainStyle="packed"
tools:text="$300 NL Hold'em" /> tools:text="$300 NL Hold'em" />
<LinearLayout
android:id="@+id/sessionInfoLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:gravity="center_vertical"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/linearLayout"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="@+id/sessionTitle"
app:layout_constraintTop_toBottomOf="@+id/sessionTitle">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/sessionInfoDurationIcon"
android:layout_width="16dp"
android:layout_height="16dp"
android:src="@drawable/clock"
android:tint="@color/kaki_lighter"
android:visibility="gone"
tools:visibility="visible" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/sessionInfoDurationValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginEnd="8dp"
android:fontFamily="@font/roboto"
android:textAllCaps="true"
android:textColor="@color/kaki_lighter"
android:textSize="12sp"
android:visibility="gone"
tools:text="4:21"
tools:visibility="visible" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/sessionInfoLocationIcon"
android:layout_width="16dp"
android:layout_height="16dp"
android:src="@drawable/pin"
android:tint="@color/kaki_lighter"
android:visibility="gone"
tools:visibility="visible" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/sessionInfoLocationValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginEnd="8dp"
android:fontFamily="@font/roboto"
android:textColor="@color/kaki_lighter"
android:textSize="12sp"
android:visibility="gone"
tools:text="Rennes, France"
tools:visibility="visible" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/sessionInfoTableIcon"
android:layout_width="16dp"
android:layout_height="16dp"
android:src="@drawable/info"
android:tint="@color/kaki_lighter"
android:visibility="gone"
tools:visibility="visible" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/sessionInfoTableValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginEnd="8dp"
android:fontFamily="@font/roboto"
android:textColor="@color/kaki_lighter"
android:textSize="12sp"
android:visibility="gone"
tools:text="6-max"
tools:visibility="visible" />
</LinearLayout>
<!--
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/gameInfo" android:id="@+id/sessionSubtitle"
style="@style/PokerAnalyticsTheme.TextView.SessionRow.Subtitle" style="@style/PokerAnalyticsTheme.TextView.SessionRow.Subtitle"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/linearLayout" app:layout_constraintEnd_toStartOf="@+id/linearLayout"
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="@+id/gameType" app:layout_constraintStart_toStartOf="@+id/sessionTitle"
app:layout_constraintTop_toBottomOf="@+id/gameType" app:layout_constraintTop_toBottomOf="@+id/sessionTitle"
tools:text="Settings of this game" /> tools:text="Settings of this game" /> -->
<LinearLayout <LinearLayout
android:id="@+id/linearLayout" android:id="@+id/linearLayout"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:gravity="center"
android:orientation="vertical" android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="@+id/gameInfo" app:layout_constraintBottom_toBottomOf="@+id/sessionInfoLayout"
app:layout_constraintEnd_toStartOf="@+id/nextArrow" app:layout_constraintEnd_toStartOf="@+id/nextArrow"
app:layout_constraintTop_toTopOf="@+id/gameType"> app:layout_constraintTop_toTopOf="@+id/sessionTitle">
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/gameResult" android:id="@+id/gameResult"
style="@style/PokerAnalyticsTheme.TextView.SessionRow.Result" style="@style/PokerAnalyticsTheme.TextView.SessionRow.Result"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:visibility="gone"
tools:text="$500" /> tools:text="$500" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/playingIcon"
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@drawable/chip"
android:tint="@color/green"
android:visibility="gone" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/playingTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/roboto_medium"
android:text="@string/running_session_state"
android:textAllCaps="true"
android:textSize="10sp"
android:visibility="gone" />
</LinearLayout> </LinearLayout>
<ImageView <ImageView

@ -118,6 +118,7 @@
<style name="PokerAnalyticsTheme.TextView.SessionRow.Date"> <style name="PokerAnalyticsTheme.TextView.SessionRow.Date">
<item name="android:textSize">12sp</item> <item name="android:textSize">12sp</item>
<item name="android:fontFamily">@font/roboto</item> <item name="android:fontFamily">@font/roboto</item>
<item name="android:letterSpacing">0.02</item>
</style> </style>
<style name="PokerAnalyticsTheme.TextView.SessionRow.DateNumber"> <style name="PokerAnalyticsTheme.TextView.SessionRow.DateNumber">

Loading…
Cancel
Save