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

feature/top10
Laurent 7 years ago
commit 9e5330ad87
  1. 4
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  2. 16
      app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowRepresentableAdapter.kt
  3. 38
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt
  4. 17
      app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt
  5. 35
      app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentableDiffCallback.kt
  6. 47
      app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt
  7. 46
      app/src/main/java/net/pokeranalytics/android/ui/view/SmoothScrollLinearLayoutManager.kt
  8. BIN
      app/src/main/mipmap-hdpi/ic_launcher_round.png
  9. BIN
      app/src/main/mipmap-mdpi/ic_launcher_round.png
  10. BIN
      app/src/main/mipmap-xhdpi/ic_launcher_round.png
  11. BIN
      app/src/main/mipmap-xxhdpi/ic_launcher_round.png
  12. BIN
      app/src/main/mipmap-xxxhdpi/ic_launcher_round.png
  13. 72
      app/src/main/res/layout/row_header_title_value.xml
  14. 9
      app/src/main/res/layout/row_separator.xml
  15. 44
      app/src/main/res/layout/row_session.xml
  16. 35
      app/src/main/res/layout/row_session_view.xml
  17. 33
      app/src/main/res/layout/row_title.xml
  18. 96
      app/src/main/res/layout/row_title_value.xml
  19. 39
      app/src/main/res/layout/row_title_value_action.xml
  20. 5
      app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
  21. 5
      app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
  22. BIN
      app/src/main/res/mipmap-hdpi/ic_launcher.png
  23. BIN
      app/src/main/res/mipmap-hdpi/ic_launcher_round.png
  24. BIN
      app/src/main/res/mipmap-mdpi/ic_launcher.png
  25. BIN
      app/src/main/res/mipmap-mdpi/ic_launcher_round.png
  26. BIN
      app/src/main/res/mipmap-xhdpi/ic_launcher.png
  27. BIN
      app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
  28. BIN
      app/src/main/res/mipmap-xxhdpi/ic_launcher.png
  29. BIN
      app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
  30. BIN
      app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
  31. BIN
      app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
  32. 1
      app/src/main/res/values/colors.xml

@ -143,8 +143,8 @@ open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource
* TODO: Cascade delete?
*/
fun delete() {
cleanup()
realm.executeTransaction {
cleanup()
deleteFromRealm()
}
}
@ -275,6 +275,8 @@ open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource
override var title: String = "Change that: $creationDate"
override val primaryKey: String get() = this.id
override fun getBottomSheetData(row: RowRepresentable): ArrayList<BottomSheetData> {
val data = ArrayList<BottomSheetData>()

@ -2,9 +2,11 @@ package net.pokeranalytics.android.ui.adapter.components
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import net.pokeranalytics.android.ui.view.BindableHolder
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableDiffCallback
import net.pokeranalytics.android.ui.view.RowViewType
/**
@ -62,7 +64,10 @@ interface RowRepresentableDelegate {
* @param rowRepresentableDataSource the datasource providing rows
* @param rowRepresentableDelegate the delegate, notified of UI actions
*/
class RowRepresentableAdapter(var rowRepresentableDataSource: RowRepresentableDataSource, var rowRepresentableDelegate: RowRepresentableDelegate? = null) :
class RowRepresentableAdapter(
var rowRepresentableDataSource: RowRepresentableDataSource,
var rowRepresentableDelegate: RowRepresentableDelegate? = null
) :
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
/**
@ -112,11 +117,12 @@ class RowRepresentableAdapter(var rowRepresentableDataSource: RowRepresentableDa
}
/**
* Refresh all adapter rows
* Update UI
*/
fun refreshAllRows() {
this.rows = rowRepresentableDataSource.adapterRows()
notifyDataSetChanged()
fun updateRows(newRows: ArrayList<RowRepresentable>) {
val diffResult = DiffUtil.calculateDiff(RowRepresentableDiffCallback(newRows, rows, rowRepresentableDataSource))
this.rows = newRows
diffResult.dispatchUpdatesTo(this)
}
}

@ -2,9 +2,9 @@ package net.pokeranalytics.android.ui.fragment
import android.os.Bundle
import android.view.*
import android.view.animation.OvershootInterpolator
import android.widget.Toast
import androidx.interpolator.view.animation.FastOutSlowInInterpolator
import androidx.recyclerview.widget.LinearLayoutManager
import io.realm.kotlin.where
import kotlinx.android.synthetic.main.fragment_session.*
import net.pokeranalytics.android.R
@ -22,6 +22,7 @@ import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheet
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetFragment
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.SessionRow
import net.pokeranalytics.android.ui.view.SmoothScrollLinearLayoutManager
import net.pokeranalytics.android.util.toast
import timber.log.Timber
import java.util.*
@ -30,6 +31,8 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
private lateinit var currentSession: Session
private lateinit var sessionAdapter: RowRepresentableAdapter
private var sessionMenu: Menu? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_session, container, false)
@ -42,12 +45,14 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
inflater?.inflate(R.menu.session_toolbar, menu)
this.sessionMenu = menu
updateSessionUI()
super.onCreateOptionsMenu(menu, inflater)
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
when (item!!.itemId) {
R.id.restart -> toast("Restard is clicked!")
R.id.restart -> toast("Restart is clicked!")
R.id.delete -> {
currentSession.delete()
activity?.finish()
@ -91,7 +96,7 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
override fun clickOnClear(row: RowRepresentable) {
currentSession.updateValue(null, row)
sessionAdapter.refreshRow(row)
when(row) {
when (row) {
SessionRow.START_DATE, SessionRow.END_DATE -> updateSessionUI()
}
}
@ -99,7 +104,7 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
override fun setValue(value: Any?, row: RowRepresentable) {
currentSession.updateValue(value, row)
sessionAdapter.refreshRow(row)
when(row) {
when (row) {
SessionRow.START_DATE, SessionRow.END_DATE -> updateSessionUI()
}
}
@ -118,8 +123,7 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
activity.supportActionBar?.setDisplayHomeAsUpEnabled(true)
setHasOptionsMenu(true)
val viewManager = LinearLayoutManager(requireContext())
val viewManager = SmoothScrollLinearLayoutManager(requireContext())
recyclerView.apply {
setHasFixedSize(true)
layoutManager = viewManager
@ -138,7 +142,6 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
false
}
floatingActionButton.setExpanded(false)
floatingActionButton.setOnClickListener {
manageSessionState()
}
@ -153,29 +156,36 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
when (currentSession.getState()) {
SessionState.PENDING -> {
sessionMenu?.findItem(R.id.restart)?.isVisible = false
floatingActionButton.setImageResource(R.drawable.ic_outline_play)
bottomAppBar.menu.findItem(R.id.stop).isVisible = false
floatingActionButton.animate().scaleX(1f).scaleY(1f).alpha(1f)
.setInterpolator(OvershootInterpolator()).start()
}
SessionState.STARTED -> {
sessionMenu?.findItem(R.id.restart)?.isVisible = true
floatingActionButton.setImageResource(R.drawable.ic_outline_pause)
bottomAppBar.menu.findItem(R.id.stop).isVisible = true
floatingActionButton.animate().scaleX(1f).scaleY(1f).alpha(1f)
.setInterpolator(OvershootInterpolator()).start()
}
SessionState.PAUSED -> {
sessionMenu?.findItem(R.id.restart)?.isVisible = true
floatingActionButton.setImageResource(R.drawable.ic_outline_play)
bottomAppBar.menu.findItem(R.id.stop).isVisible = true
floatingActionButton.animate().scaleX(1f).scaleY(1f).alpha(1f)
.setInterpolator(OvershootInterpolator()).start()
}
SessionState.FINISHED -> {
sessionMenu?.findItem(R.id.restart)?.isVisible = true
bottomAppBar.menu.findItem(R.id.stop).isVisible = false
floatingActionButton.animate()
.scaleX(0f)
.scaleY(0f)
.alpha(0f)
.setInterpolator(FastOutSlowInInterpolator())
.start()
floatingActionButton.animate().scaleX(0f).scaleY(0f).alpha(0f)
.setInterpolator(FastOutSlowInInterpolator()).start()
}
}
sessionAdapter.refreshAllRows()
sessionAdapter.updateRows(currentSession.adapterRows())
recyclerView.smoothScrollToPosition(0)
}
/**

@ -54,6 +54,11 @@ interface RowRepresentable : Localizable {
get() {
return null
}
val needSeparator: Boolean
get() {
return false
}
}
enum class SessionRow : RowRepresentable {
@ -110,6 +115,14 @@ enum class SessionRow : RowRepresentable {
}
}
override val needSeparator: Boolean
get() {
return when (this) {
TIPS, BANKROLL_VARIATION -> true
else -> false
}
}
override val resId: Int?
get() {
return when (this) {
@ -137,7 +150,7 @@ enum class SessionRow : RowRepresentable {
override val viewType: Int
get() {
return when (this) {
DURATION, NET_HOURLY_RATE, BANKROLL_VARIATION,
DURATION, NET_HOURLY_RATE, BANKROLL_VARIATION -> RowViewType.HEADER_TITLE_VALUE.ordinal
CASHED_OUT, BUY_IN, TIPS,
GAME, BLINDS, LOCATION, BANKROLL, TABLE_SIZE, COMMENT, START_DATE, END_DATE, BREAK_TIME -> RowViewType.TITLE_VALUE.ordinal
}
@ -259,7 +272,7 @@ enum class SettingRow : RowRepresentable {
override val resId: Int?
get() {
this.relatedResultsRepresentable?. let {
this.relatedResultsRepresentable?.let {
return it.resId
} ?: run {
return super.resId

@ -0,0 +1,35 @@
package net.pokeranalytics.android.ui.view
import androidx.annotation.Nullable
import androidx.recyclerview.widget.DiffUtil
import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDataSource
class RowRepresentableDiffCallback(
var newRows: List<RowRepresentable>, var oldRows: List<RowRepresentable>,
var rowRepresentableDataSource: RowRepresentableDataSource
) :
DiffUtil.Callback() {
override fun getOldListSize(): Int {
return oldRows.size
}
override fun getNewListSize(): Int {
return newRows.size
}
override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
return oldRows[oldItemPosition] === newRows[newItemPosition]
}
override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
// Force to update all the rows that were already there
return false
}
@Nullable
override fun getChangePayload(oldItemPosition: Int, newItemPosition: Int): Any? {
//you can return particular field for changed item.
return super.getChangePayload(oldItemPosition, newItemPosition)
}
}

@ -4,6 +4,9 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.row_header_title_value.view.*
import kotlinx.android.synthetic.main.row_title.view.*
import kotlinx.android.synthetic.main.row_title_value.view.*
import kotlinx.android.synthetic.main.row_title_value_action.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDataSource
@ -19,6 +22,7 @@ interface BindableHolder {
enum class RowViewType {
HEADER,
HEADER_TITLE_VALUE,
EDIT_TEXT,
TITLE,
TITLE_VALUE,
@ -33,38 +37,50 @@ enum class RowViewType {
inner class TitleViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
BindableHolder {
override fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource?, listener: View.OnClickListener, actionListener: View.OnClickListener?) {
itemView.title.text = row.localizedTitle(itemView.context)
itemView.container.setOnClickListener(listener)
itemView.rowTitle_title.text = row.localizedTitle(itemView.context)
itemView.rowTitle_container.setOnClickListener(listener)
}
}
inner class TitleValueViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
inner class HeaderTitleValueViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
BindableHolder {
override fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource?, listener: View.OnClickListener, actionListener: View.OnClickListener?) {
itemView.title.text = row.localizedTitle(itemView.context)
itemView.rowHeaderTitleValue_title.text = row.localizedTitle(itemView.context)
rowRepresentableDataSource?.let {
itemView.rowHeaderTitleValue_value.text = it.stringForRow(row)
}
itemView.rowHeaderTitleValue_container.setOnClickListener(listener)
itemView.rowHeaderTitleValue_separator.visibility = if (row.needSeparator) View.VISIBLE else View.GONE
}
}
inner class TitleValueViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
BindableHolder {
override fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource?, listener: View.OnClickListener, actionListener: View.OnClickListener?) {
itemView.rowTitleValue_title.text = row.localizedTitle(itemView.context)
rowRepresentableDataSource?.let {
itemView.value.text = it.stringForRow(row)
itemView.rowTitleValue_value.text = it.stringForRow(row)
}
itemView.container.setOnClickListener(listener)
itemView.rowTitleValue_container.setOnClickListener(listener)
itemView.rowTitleValue_separator.visibility = if (row.needSeparator) View.VISIBLE else View.GONE
}
}
inner class TitleValueActionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
BindableHolder {
override fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource?, listener: View.OnClickListener, actionListener: View.OnClickListener?) {
itemView.title.text = row.localizedTitle(itemView.context)
itemView.rowTitleValueAction_title.text = row.localizedTitle(itemView.context)
rowRepresentableDataSource?.let { rowDelegate ->
val value = rowDelegate.stringForRow(row)
itemView.value.text = value
itemView.action.visibility = if (value == "--") View.GONE else View.VISIBLE
itemView.rowTitleValueAction_value.text = value
itemView.rowTitleValueAction_action.visibility = if (value == "--") View.GONE else View.VISIBLE
rowDelegate.actionIconForRow(row)?.let {icon ->
itemView.action.setImageResource(icon)
itemView.rowTitleValueAction_action.setImageResource(icon)
}
}
itemView.container.setOnClickListener(listener)
itemView.action.setOnClickListener(actionListener)
itemView.rowTitleValueAction_container.setOnClickListener(listener)
itemView.rowTitleValueAction_action.setOnClickListener(actionListener)
}
}
@ -78,6 +94,13 @@ enum class RowViewType {
false
)
)
HEADER_TITLE_VALUE -> HeaderTitleValueViewHolder(
LayoutInflater.from(parent.context).inflate(
R.layout.row_header_title_value,
parent,
false
)
)
TITLE_VALUE -> TitleValueViewHolder(
LayoutInflater.from(parent.context).inflate(
R.layout.row_title_value,

@ -0,0 +1,46 @@
package net.pokeranalytics.android.ui.view
import android.content.Context
import android.graphics.PointF
import android.util.DisplayMetrics
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.LinearSmoothScroller
import androidx.recyclerview.widget.RecyclerView
/**
* SmoothScrollLinearLayoutManager
*/
class SmoothScrollLinearLayoutManager(context: Context) :
LinearLayoutManager(context, RecyclerView.VERTICAL, false) {
companion object {
private const val MILLISECONDS_PER_INCH = 100f
}
override fun smoothScrollToPosition(
recyclerView: RecyclerView, state: RecyclerView.State?,
position: Int
) {
val smoothScroller = TopSnappedSmoothScroller(recyclerView.context)
smoothScroller.targetPosition = position
startSmoothScroll(smoothScroller)
}
private inner class TopSnappedSmoothScroller(context: Context) : LinearSmoothScroller(context) {
override fun computeScrollVectorForPosition(targetPosition: Int): PointF? {
return this@SmoothScrollLinearLayoutManager
.computeScrollVectorForPosition(targetPosition)
}
override fun getVerticalSnapPreference(): Int {
return SNAP_TO_START
}
override fun calculateSpeedPerPixel(displayMetrics: DisplayMetrics): Float {
return MILLISECONDS_PER_INCH / displayMetrics.densityDpi
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

@ -0,0 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rowHeaderTitleValue.container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/green_header">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/rowHeaderTitleValue.title"
style="@style/PokerAnalyticsTheme.TextView.RowTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@+id/guidelineStart"
app:layout_constraintTop_toTopOf="parent"
tools:text="Title" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/rowHeaderTitleValue.value"
style="@style/PokerAnalyticsTheme.TextView.RowValue"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:ellipsize="end"
android:gravity="end"
android:maxLines="1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/guidelineEnd"
app:layout_constraintStart_toEndOf="@+id/rowHeaderTitleValue.title"
app:layout_constraintTop_toTopOf="parent"
tools:text="Value" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_begin="16dp" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineEnd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_end="16dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
<FrameLayout
android:id="@+id/rowHeaderTitleValue.separator"
android:layout_width="match_parent"
android:layout_height="16dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:visibility="visible" />
</androidx.appcompat.widget.LinearLayoutCompat>

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="16dp">
</androidx.constraintlayout.widget.ConstraintLayout>

@ -1,44 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?selectableItemBackground"
android:padding="16dp">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Title" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/value"
android:layout_width="0dp"
android:layout_height="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:ellipsize="end"
android:gravity="end"
android:maxLines="1"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/title"
app:layout_constraintTop_toTopOf="parent"
tools:text="Value" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -4,19 +4,19 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?selectableItemBackground"
android:padding="16dp">
android:background="?selectableItemBackground">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/dateDay"
style="@style/PokerAnalyticsTheme.TextView.SessionRow.Date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:textAllCaps="true"
app:layout_constraintBottom_toTopOf="@+id/dateNumber"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintStart_toStartOf="@+id/guidelineStart"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="spread"
app:layout_constraintVertical_chainStyle="packed"
tools:text="THU" />
<androidx.appcompat.widget.AppCompatTextView
@ -24,6 +24,7 @@
style="@style/PokerAnalyticsTheme.TextView.SessionRow.DateNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/dateDay"
app:layout_constraintHorizontal_bias="0.5"
@ -37,9 +38,11 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
app:layout_constraintBottom_toTopOf="@+id/gameInfo"
app:layout_constraintEnd_toStartOf="@+id/linearLayout"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/dateDay"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed"
@ -50,11 +53,11 @@
style="@style/PokerAnalyticsTheme.TextView.SessionRow.Subtitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginTop="2dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
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" />
@ -65,9 +68,9 @@
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintBottom_toBottomOf="@+id/gameInfo"
app:layout_constraintEnd_toStartOf="@+id/nextArrow"
app:layout_constraintTop_toTopOf="parent">
app:layout_constraintTop_toTopOf="@+id/gameType">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/gameResult"
@ -85,8 +88,22 @@
android:src="@drawable/ic_arrow_right"
android:tint="@color/gray_light"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintEnd_toEndOf="@+id/guidelineEnd"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_begin="16dp" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineEnd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_end="8dp" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -2,25 +2,36 @@
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:id="@+id/rowTitle.container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?selectableItemBackground"
android:padding="16dp">
android:background="?selectableItemBackground">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title"
android:id="@+id/rowTitle.title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:textSize="20sp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="@+id/guidelineEnd"
app:layout_constraintStart_toStartOf="@+id/guidelineStart"
app:layout_constraintTop_toTopOf="parent"
tools:text="Data Type Title" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_begin="16dp" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineEnd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_end="16dp" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -1,40 +1,78 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:id="@+id/rowTitleValue.container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?selectableItemBackground"
android:paddingStart="16dp"
android:paddingEnd="16dp">
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title"
android:layout_width="wrap_content"
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
style="@style/PokerAnalyticsTheme.TextView.RowTitle"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Title" />
android:background="?selectableItemBackground">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/value"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:ellipsize="end"
android:gravity="end"
android:maxLines="1"
style="@style/PokerAnalyticsTheme.TextView.RowValue"
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/rowTitleValue.title"
style="@style/PokerAnalyticsTheme.TextView.RowTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@+id/guidelineStart"
app:layout_constraintTop_toTopOf="parent"
tools:text="Title" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/rowTitleValue.value"
style="@style/PokerAnalyticsTheme.TextView.RowValue"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:ellipsize="end"
android:gravity="end"
android:maxLines="1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/guidelineEnd"
app:layout_constraintStart_toEndOf="@+id/rowTitleValue.title"
app:layout_constraintTop_toTopOf="parent"
tools:text="Value" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_begin="16dp" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineEnd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_end="16dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
<FrameLayout
android:id="@+id/rowTitleValue.separator"
android:layout_width="match_parent"
android:layout_height="16dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/title"
app:layout_constraintTop_toTopOf="parent"
tools:text="Value" />
app:layout_constraintStart_toStartOf="parent"
tools:visibility="visible">
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_gravity="center"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:background="@color/kaki" />
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.appcompat.widget.LinearLayoutCompat>

@ -2,15 +2,13 @@
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:id="@+id/rowTitleValueAction.container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?selectableItemBackground"
android:paddingStart="24dp"
android:paddingEnd="24dp">
android:background="?selectableItemBackground">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title"
android:id="@+id/rowTitleValueAction.title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
@ -18,12 +16,12 @@
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintStart_toStartOf="@+id/guidelineStart"
app:layout_constraintTop_toTopOf="parent"
tools:text="Title" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/value"
android:id="@+id/rowTitleValueAction.value"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
@ -32,23 +30,38 @@
android:maxLines="1"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/action"
app:layout_constraintStart_toEndOf="@+id/title"
app:layout_constraintEnd_toStartOf="@+id/rowTitleValueAction.action"
app:layout_constraintStart_toEndOf="@+id/rowTitleValueAction.title"
app:layout_constraintTop_toTopOf="parent"
tools:text="Value" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/action"
android:id="@+id/rowTitleValueAction.action"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginStart="16dp"
android:background="?selectableItemBackgroundBorderless"
android:padding="4dp"
android:layout_marginStart="16dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintEnd_toEndOf="@+id/guidelineEnd"
app:layout_constraintStart_toEndOf="@+id/rowTitleValueAction.value"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toEndOf="@+id/value"
tools:src="@drawable/ic_close" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_begin="16dp" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineEnd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_end="16dp" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 42 KiB

@ -23,6 +23,7 @@
<color name="green_darkest">#101911</color>
<color name="green_darkest_soft">#151c15</color>
<color name="green_darkest_softer">#1b1f1b</color>
<color name="green_header">#141714</color>
<color name="kaki">#3b4a39</color>
<color name="kaki_medium">#57815a</color>

Loading…
Cancel
Save