feature/top10
Laurent 7 years ago
commit 34f7330b23
  1. 2
      app/src/main/java/net/pokeranalytics/android/model/LiveData.kt
  2. 15
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  3. 11
      app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt
  4. 35
      app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableRecyclerView.kt
  5. 25
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt
  6. 15
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt
  7. 1
      app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt
  8. 4
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt
  9. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt
  10. 13
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListGameFragment.kt
  11. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt
  12. 7
      app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt
  13. 8
      app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt
  14. 59
      app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt
  15. 4
      app/src/main/java/net/pokeranalytics/android/util/Extensions.kt
  16. 6
      app/src/main/res/drawable/separator.xml
  17. 10
      app/src/main/res/layout/fragment_session.xml
  18. 4
      app/src/main/res/layout/fragment_settings.xml
  19. 118
      app/src/main/res/layout/row_session_view.xml
  20. 10
      app/src/main/res/menu/session_bottom_app_bar.xml
  21. 9
      app/src/main/res/menu/session_toolbar.xml
  22. 6
      app/src/main/res/values/styles.xml

@ -62,7 +62,7 @@ enum class LiveData : Localizable {
fun updateOrCreate(realm:Realm, primaryKey:String?): RealmObject {
val proxyItem: RealmObject? = this.getData(realm, primaryKey)
proxyItem?.let {
return proxyItem
return realm.copyFromRealm(it)
} ?: run {
return this.newEntity()
}

@ -2,6 +2,7 @@ package net.pokeranalytics.android.model.realm
import android.content.Context
import android.text.InputType
import com.google.android.material.tabs.TabLayout
import io.realm.RealmList
import io.realm.RealmObject
import io.realm.annotations.Ignore
@ -10,6 +11,7 @@ import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.SessionInterface
import net.pokeranalytics.android.model.Limit
import net.pokeranalytics.android.model.LiveData
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.interfaces.Savable
@ -286,14 +288,14 @@ open class Session : RealmObject(), SessionInterface, Savable,
return false
}
override fun stringForRow(row: RowRepresentable): String {
override fun stringForRow(row: RowRepresentable, context:Context): String {
return when (row) {
SessionRow.BUY_IN -> buyin.toCurrency()
SessionRow.BLINDS -> if (cgSmallBlind != null && cgBigBlind != null) "$cgSmallBlind / $cgBigBlind" else "--"
SessionRow.BLINDS -> getBlinds()
SessionRow.GAME -> getGameTitle()
SessionRow.LOCATION -> location?.name ?: "--"
SessionRow.BANKROLL -> bankroll?.name ?: "--"
SessionRow.TABLE_SIZE -> tableSize?.toString() ?: "--"
SessionRow.TABLE_SIZE -> this.tableSize?.let { TableSize(it).localizedTitle(context) } ?: "--"
SessionRow.START_DATE -> if (timeFrame != null) timeFrame?.startDate?.shortDateTime() ?: "--" else "--"
SessionRow.END_DATE -> if (timeFrame != null) timeFrame?.endDate?.shortDateTime() ?: "--" else "--"
SessionRow.COMMENT -> if (comment.isNotEmpty()) comment else "--"
@ -367,12 +369,7 @@ open class Session : RealmObject(), SessionInterface, Savable,
SessionRow.GAME -> {
// Add current game & games list
data.add(RowRepresentableEditDescriptor(limit))
data.add(
RowRepresentableEditDescriptor(
game,
data = LiveData.GAME.items(realm)
)
)
data.add(RowRepresentableEditDescriptor(game, data = LiveData.GAME.items(realm)))
}
SessionRow.LOCATION -> {
// Add current location and locations list

@ -1,9 +1,12 @@
package net.pokeranalytics.android.ui.adapter
import android.content.Context
import android.os.Handler
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.fragment_settings.*
import net.pokeranalytics.android.ui.view.BindableHolder
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowRepresentable
@ -62,6 +65,13 @@ interface DisplayableDataSource {
return false
}
/**
* Returns a localized string for a specific row
*/
fun stringForRow(row: RowRepresentable, context: Context): String {
return stringForRow(row)
}
/**
* Returns a string for a specific row
*/
@ -69,6 +79,7 @@ interface DisplayableDataSource {
return ""
}
/**
* Returns an action icon identifier for a specific row
*/

@ -0,0 +1,35 @@
package net.pokeranalytics.android.ui.adapter
import android.content.Context
import android.util.AttributeSet
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.RecyclerView
import net.pokeranalytics.android.R
class RowRepresentableRecyclerView : RecyclerView {
/**
* Constructors
*/
constructor(context: Context) : super(context) {
init()
}
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
init()
}
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
init()
}
/**
* Init
*/
private fun init() {
val itemDecorator = DividerItemDecoration(this.context, DividerItemDecoration.VERTICAL)
itemDecorator.setDrawable(ContextCompat.getDrawable(this.context!!, R.drawable.separator)!!)
this.addItemDecoration(itemDecorator)
}
}

@ -56,6 +56,10 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
when (item!!.itemId) {
R.id.stop -> {
currentSession.stopSession()
updateSessionUI()
}
R.id.restart -> toast("Restart is clicked!")
R.id.delete -> {
currentSession.delete()
@ -126,19 +130,6 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
layoutManager = viewManager
}
bottomAppBar.inflateMenu(R.menu.session_bottom_app_bar)
bottomAppBar.menu.findItem(R.id.stop).isVisible = false
bottomAppBar.setOnMenuItemClickListener { item ->
when (item.itemId) {
R.id.stop -> {
currentSession.stopSession()
updateSessionUI()
}
}
false
}
floatingActionButton.setOnClickListener {
manageSessionState()
}
@ -156,7 +147,7 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
state.setTextColor(ContextCompat.getColor(requireContext(), R.color.white))
sessionMenu?.findItem(R.id.restart)?.isVisible = false
floatingActionButton.setImageResource(R.drawable.ic_outline_play)
bottomAppBar.menu.findItem(R.id.stop).isVisible = false
sessionMenu?.findItem(R.id.stop)?.isVisible = false
floatingActionButton.animate().scaleX(1f).scaleY(1f).alpha(1f)
.setInterpolator(OvershootInterpolator()).start()
@ -170,7 +161,7 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
state.setTextColor(ContextCompat.getColor(requireContext(), R.color.green))
sessionMenu?.findItem(R.id.restart)?.isVisible = true
floatingActionButton.setImageResource(R.drawable.ic_outline_pause)
bottomAppBar.menu.findItem(R.id.stop).isVisible = true
sessionMenu?.findItem(R.id.stop)?.isVisible = true
floatingActionButton.animate().scaleX(1f).scaleY(1f).alpha(1f)
.setInterpolator(OvershootInterpolator()).start()
@ -184,7 +175,7 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
state.setTextColor(ContextCompat.getColor(requireContext(), R.color.blue))
sessionMenu?.findItem(R.id.restart)?.isVisible = true
floatingActionButton.setImageResource(R.drawable.ic_outline_play)
bottomAppBar.menu.findItem(R.id.stop).isVisible = true
sessionMenu?.findItem(R.id.stop)?.isVisible = true
floatingActionButton.animate().scaleX(1f).scaleY(1f).alpha(1f)
.setInterpolator(OvershootInterpolator()).start()
@ -197,7 +188,7 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
state.text = "FINISHED"
state.setTextColor(ContextCompat.getColor(requireContext(), R.color.white))
sessionMenu?.findItem(R.id.restart)?.isVisible = true
bottomAppBar.menu.findItem(R.id.stop).isVisible = false
sessionMenu?.findItem(R.id.stop)?.isVisible = false
floatingActionButton.animate().scaleX(0f).scaleY(0f).alpha(0f)
.setInterpolator(FastOutSlowInInterpolator()).start()

@ -4,7 +4,11 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.fragment_settings.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.activity.DataListActivity
@ -50,7 +54,14 @@ class SettingsFragment : PokerAnalyticsFragment(), RowRepresentableDataSource,
}
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
DataListActivity.newInstance(requireContext(), (row as SettingRow).ordinal)
when (row) {
SettingRow.GDPR -> Toast.makeText(requireContext(), "Show GDPR", Toast.LENGTH_SHORT).show()
}
row.relatedResultsRepresentable?.let {
DataListActivity.newInstance(requireContext(), (row as SettingRow).ordinal)
}
}
/**
@ -63,7 +74,7 @@ class SettingsFragment : PokerAnalyticsFragment(), RowRepresentableDataSource,
this, this
)
recyclerView.apply {
customRecyclerView.apply {
setHasFixedSize(true)
layoutManager = viewManager
adapter = settingsAdapterRow

@ -8,6 +8,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.fragment_settings.*
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.android.synthetic.main.fragment_stats.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.Calculator
import net.pokeranalytics.android.calculus.ComputedResults

@ -27,7 +27,7 @@ class BottomSheetEditTextFragment : BottomSheetFragment() {
}
override fun getValue(): Any? {
return value
return value.trim()
}
/**
@ -56,7 +56,7 @@ class BottomSheetEditTextFragment : BottomSheetFragment() {
editText1.setOnEditorActionListener { v, actionId, event ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
delegate.onRowValueChanged(value, row)
delegate.onRowValueChanged(getValue(), row)
dismiss()
true
} else {

@ -60,7 +60,7 @@ class BottomSheetListFragment : BottomSheetFragment(), RowRepresentableDataSourc
realmData?.let {
val selectedData = it[position]
selectedData?.let {data ->
this.delegate.onRowValueChanged(data, row)
this.delegate.onRowValueChanged(data, this.row)
dismiss()
}
}

@ -15,13 +15,11 @@ import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
import timber.log.Timber
class BottomSheetListGameFragment : BottomSheetFragment(),
RowRepresentableDataSource,
RowRepresentableDelegate {
class BottomSheetListGameFragment : BottomSheetFragment(), RowRepresentableDataSource, RowRepresentableDelegate {
private var limit: Int = -1
private var realmData: RealmResults<*>? = null
private lateinit var dataAdapter: RowRepresentableAdapter
private val values = ArrayList<Any?>()
@ -71,7 +69,7 @@ class BottomSheetListGameFragment : BottomSheetFragment(),
val selectedData = it[position]
selectedData?.let { data ->
values[1] = data
this.delegate.onRowValueChanged(data, row)
this.delegate.onRowValueChanged(values, this.row)
dismiss()
}
}
@ -84,6 +82,7 @@ class BottomSheetListGameFragment : BottomSheetFragment(),
private fun initData() {
val bottomSheetData = getData()
if (bottomSheetData.isNotEmpty() && bottomSheetData.size >= 2 && bottomSheetData[1].data != null) {
this.limit = bottomSheetData[0].defaultValue as Int? ?: -1
this.realmData = bottomSheetData[1].data as RealmResults<*>
}
}
@ -95,7 +94,7 @@ class BottomSheetListGameFragment : BottomSheetFragment(),
LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_game_list, view?.bottomSheetContainer, true)
values.add(0, null)
values.add(0, if (limit == -1) null else limit)
values.add(1, null)
chipGroup.removeAllViews()
@ -103,11 +102,11 @@ class BottomSheetListGameFragment : BottomSheetFragment(),
val chip = Chip(requireContext())
chip.text = it.shortName
chip.id = it.ordinal
chip.isChecked = it.ordinal == limit
chipGroup.addView(chip)
}
chipGroup.setOnCheckedChangeListener { _, i ->
Timber.d("Chip selected: $i")
values[0] = i
}

@ -85,7 +85,7 @@ class BottomSheetTableSizeGridFragment : BottomSheetFragment(),
}
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
this.delegate.onRowValueChanged((this.row as TableSize).numberOfPlayer, row)
this.delegate.onRowValueChanged((row as TableSize).numberOfPlayer, this.row)
dismiss()
}

@ -289,6 +289,7 @@ enum class TournamentFeatureRow : RowRepresentable {
}
enum class SettingRow : RowRepresentable {
GDPR,
BANKROLL,
GAME,
LOCATION,
@ -300,7 +301,10 @@ enum class SettingRow : RowRepresentable {
this.relatedResultsRepresentable?.let {
return it.resId
} ?: run {
return super.resId
return when (this) {
GDPR -> R.string.gdpr
else -> null
}
}
}
@ -314,6 +318,7 @@ enum class SettingRow : RowRepresentable {
LOCATION -> LiveData.LOCATION
TOURNAMENT_FEATURE -> LiveData.TOURNAMENT_FEATURE
TRANSACTION_TYPE -> LiveData.TRANSACTION_TYPE
else -> null
}
}

@ -16,8 +16,6 @@ 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.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
/**
* An interface used to factor the configuration of RecyclerView.ViewHolder
@ -117,7 +115,7 @@ enum class RowViewType {
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) {
itemView.rowHeaderTitleValue_title.text = row.localizedTitle(itemView.context)
adapter.dataSource?.let {
itemView.rowHeaderTitleValue_value.text = it.stringForRow(row)
itemView.rowHeaderTitleValue_value.text = it.stringForRow(row, itemView.context)
}
val listener = View.OnClickListener {
adapter.delegate?.onRowSelected(position, row)
@ -132,7 +130,7 @@ enum class RowViewType {
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) {
itemView.rowTitleValue_title.text = row.localizedTitle(itemView.context)
adapter.dataSource?.let {
itemView.rowTitleValue_value.text = it.stringForRow(row)
itemView.rowTitleValue_value.text = it.stringForRow(row, itemView.context)
}
val listener = View.OnClickListener {
adapter.delegate?.onRowSelected(position, row)
@ -168,7 +166,7 @@ enum class RowViewType {
itemView.rowTitleValueAction_title.text = row.localizedTitle(itemView.context)
adapter.dataSource?.let { rowDelegate ->
val value = rowDelegate.stringForRow(row)
val value = rowDelegate.stringForRow(row, itemView.context)
itemView.rowTitleValueAction_value.text = value
itemView.rowTitleValueAction_action.visibility = if (value == "--") View.GONE else View.VISIBLE
rowDelegate.actionIconForRow(row)?.let {icon ->

@ -6,13 +6,16 @@ import android.view.LayoutInflater
import android.widget.FrameLayout
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import kotlinx.android.synthetic.main.row_session_view.view.*
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.util.getDayNumber
import net.pokeranalytics.android.util.getShortDayName
import net.pokeranalytics.android.util.toCurrency
import timber.log.Timber
class SessionRowView : FrameLayout {
@ -55,16 +58,58 @@ class SessionRowView : FrameLayout {
*/
fun setData(session: Session) {
// Date
rowHistorySession.dateDay.text = session.creationDate.getShortDayName()
rowHistorySession.dateNumber.text = session.creationDate.getDayNumber()
rowHistorySession.gameType.text = session.getGameTitle()
rowHistorySession.gameInfo.text = session.getDuration(context)
rowHistorySession.gameResult.text = session.result?.netResult?.toCurrency() ?: "$0"
// Title / Game type
var title = ""
if (session.cgSmallBlind != null && session.cgBigBlind != null) {
title += session.getBlinds()
}
session.game?.let {
title += (if (title.isNotEmpty()) " " else "") + session.getGameTitle()
}
title += if (title.isEmpty()) "--" else ""
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))
rowHistorySession.sessionTitle.text = title
// 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(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 hours = (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 minutesStr = if (minutes < 10) "0$minutes" else "$minutes"
val secondsStr = if (seconds < 10) "0$seconds" else "$seconds"
return "$hoursStr:$minutesStr:$secondsStr"
return "$hoursStr:$minutesStr"
}

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/white_transparent"/>
<size android:height="0.5dp"/>
</shape>

@ -117,7 +117,7 @@
android:id="@+id/appBar"
android:layout_width="match_parent"
android:layout_height="128dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
android:theme="@style/PokerAnalyticsTheme.Toolbar.Session">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/collapsingToolbar"
@ -143,14 +143,6 @@
</com.google.android.material.appbar.AppBarLayout>
<com.google.android.material.bottomappbar.BottomAppBar
android:id="@+id/bottomAppBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="@color/red"
android:theme="@style/PokerAnalyticsTheme.BottomAppBar"
app:fabAlignmentMode="center" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/floatingActionButton"

@ -5,8 +5,8 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
<net.pokeranalytics.android.ui.adapter.RowRepresentableRecyclerView
android:id="@+id/customRecyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"

@ -36,14 +36,14 @@
tools:text="21" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/gameType"
android:id="@+id/sessionTitle"
style="@style/PokerAnalyticsTheme.TextView.SessionRow.Title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="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_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/dateDay"
@ -51,36 +51,132 @@
app:layout_constraintVertical_chainStyle="packed"
tools:text="$300 NL Hold'em" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/gameInfo"
style="@style/PokerAnalyticsTheme.TextView.SessionRow.Subtitle"
<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/gameType"
app:layout_constraintTop_toBottomOf="@+id/gameType"
tools:text="Settings of this game" />
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:ellipsize="end"
android:fontFamily="@font/roboto"
android:maxLines="1"
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:ellipsize="end"
android:fontFamily="@font/roboto"
android:maxLines="1"
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:ellipsize="end"
android:fontFamily="@font/roboto"
android:maxLines="1"
android:textColor="@color/kaki_lighter"
android:textSize="12sp"
android:visibility="gone"
tools:text="6-max"
tools:visibility="visible" />
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:gravity="center"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="@+id/gameInfo"
app:layout_constraintBottom_toBottomOf="@+id/sessionInfoLayout"
app:layout_constraintEnd_toStartOf="@+id/nextArrow"
app:layout_constraintTop_toTopOf="@+id/gameType">
app:layout_constraintTop_toTopOf="@+id/sessionTitle">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/gameResult"
style="@style/PokerAnalyticsTheme.TextView.SessionRow.Result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="$500" />
android:visibility="gone"
tools:text="$1000"
tools:visibility="visible" />
<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>

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/stop"
android:title="@string/stop"
app:showAsAction="always" />
</menu>

@ -2,16 +2,21 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/stop"
android:title="@string/stop"
app:showAsAction="always" />
<item
android:id="@+id/restart"
android:title="@string/restart_timer"
android:icon="@drawable/ic_outline_restart"
app:showAsAction="withText" />
app:showAsAction="never" />
<item
android:id="@+id/delete"
android:icon="@drawable/ic_outline_delete"
android:title="@string/delete"
app:showAsAction="withText" />
app:showAsAction="never" />
</menu>

@ -35,7 +35,6 @@
<item name="titleTextColor">@color/white</item>
<item name="titleTextAppearance">@style/PokerAnalyticsTheme.Toolbar.TitleAppearance</item>
</style>
+
<style name="PokerAnalyticsTheme.Toolbar.TitleAppearance">
<item name="android:textSize">20sp</item>
@ -52,6 +51,10 @@
<item name="android:textColor">@color/white</item>
</style>
<style name="PokerAnalyticsTheme.Toolbar.Session" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="android:actionMenuTextColor">@color/green</item>
</style>
<!-- Bottom App Bar -->
<style name="PokerAnalyticsTheme.BottomAppBar" parent="Widget.MaterialComponents.BottomAppBar">
<item name="backgroundTint">@color/gray_darker</item>
@ -118,6 +121,7 @@
<style name="PokerAnalyticsTheme.TextView.SessionRow.Date">
<item name="android:textSize">12sp</item>
<item name="android:fontFamily">@font/roboto</item>
<item name="android:letterSpacing">0.02</item>
</style>
<style name="PokerAnalyticsTheme.TextView.SessionRow.DateNumber">

Loading…
Cancel
Save