Merge branch 'master' of gitlab.com:stax-river/poker-analytics

feature/top10
Razmig Sarkissian 7 years ago
commit e89b1a6bbb
  1. 7
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  2. 25
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt
  3. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt
  4. 13
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListGameFragment.kt
  5. 53
      app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt
  6. 4
      app/src/main/java/net/pokeranalytics/android/util/Extensions.kt
  7. 10
      app/src/main/res/layout/fragment_session.xml
  8. 118
      app/src/main/res/layout/row_session_view.xml
  9. 10
      app/src/main/res/menu/session_bottom_app_bar.xml
  10. 9
      app/src/main/res/menu/session_toolbar.xml
  11. 7
      app/src/main/res/values/styles.xml

@ -362,12 +362,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

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

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

@ -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 += session.getGameTitle()
}
title += if (title.isEmpty()) "--" else ""
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.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 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"
}

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

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

@ -31,11 +31,9 @@
<!-- Toolbar -->
<style name="PokerAnalyticsTheme.Toolbar" parent="Widget.MaterialComponents.Toolbar">
<item name="android:background">@color/gray_darker</item>
<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 +50,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 +120,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