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

dev_raz_wip
Laurent 7 years ago
commit 973286dfa9
  1. 79
      app/src/main/java/net/pokeranalytics/android/ui/adapter/SettingsAdapter.kt
  2. 14
      app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicListAdapter.kt
  3. 91
      app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt
  4. 17
      app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowViewType.kt
  5. 142
      app/src/main/java/net/pokeranalytics/android/ui/fragment/BottomSheetFragment.kt
  6. 19
      app/src/main/java/net/pokeranalytics/android/ui/fragment/NewSessionFragment.kt
  7. 79
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt
  8. 13
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetType.kt
  9. 55
      app/src/main/java/net/pokeranalytics/android/ui/view/DataRowView.kt
  10. 26
      app/src/main/java/net/pokeranalytics/android/util/DatePickerFragment.kt
  11. 2
      app/src/main/java/net/pokeranalytics/android/util/PokerAnalyticsFragment.kt
  12. 26
      app/src/main/java/net/pokeranalytics/android/util/TimePickerFragment.kt
  13. 5
      app/src/main/res/drawable/ic_add_white_24dp.xml
  14. 5
      app/src/main/res/drawable/ic_check_white_24dp.xml
  15. 5
      app/src/main/res/drawable/ic_close_white_24dp.xml
  16. 5
      app/src/main/res/drawable/ic_delete_white_24dp.xml
  17. 13
      app/src/main/res/layout/bottom_sheet_bankroll.xml
  18. 59
      app/src/main/res/layout/bottom_sheet_blinds.xml
  19. 32
      app/src/main/res/layout/bottom_sheet_date.xml
  20. 19
      app/src/main/res/layout/bottom_sheet_game.xml
  21. 13
      app/src/main/res/layout/bottom_sheet_location.xml
  22. 13
      app/src/main/res/layout/bottom_sheet_table_size.xml
  23. 28
      app/src/main/res/layout/fragment_bottom_sheet.xml
  24. 45
      app/src/main/res/layout/fragment_bottom_sheet_container.xml
  25. 20
      app/src/main/res/layout/fragment_settings.xml
  26. 12
      app/src/main/res/layout/row_data_cell.xml
  27. 4
      app/src/main/res/layout/row_title.xml
  28. 23
      app/src/main/res/menu/bottom_sheet_menu.xml
  29. 6
      app/src/main/res/values/strings.xml
  30. 6
      app/src/main/res/values/styles.xml

@ -1,79 +0,0 @@
package net.pokeranalytics.android.ui.adapter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.row_data_cell.view.*
import kotlinx.android.synthetic.main.row_history_session.view.*
import net.pokeranalytics.android.R
class SettingsAdapter() : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
companion object {
const val ROW_DATA: Int = 100
enum class DataType {
BANKROLL {
override fun localizedName(): String {
return "Bankroll"
}
},
GAME {
override fun localizedName(): String {
return "Game"
}
},
LOCATION {
override fun localizedName(): String {
return "Location"
}
},
TOURNAMENT_TYPE {
override fun localizedName(): String {
return "Tournament Type"
}
},
TRANSACTION_TYPE {
override fun localizedName(): String {
return "Transaction"
}
};
abstract fun localizedName(): String
}
}
var onClickOnData: ((position: Int, dataType: DataType) -> Unit)? = null
inner class RowDataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(dataType: DataType) {
itemView.dataRow.setData(dataType.localizedName())
itemView.dataRow.setOnClickListener {
onClickOnData?.invoke(adapterPosition, dataType)
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
when (viewType) {
ROW_DATA -> return RowDataViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.row_data_cell, parent, false))
else -> throw IllegalStateException("Need to implement type $viewType in Settings Adapter")
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (getItemViewType(position)) {
ROW_DATA -> (holder as SettingsAdapter.RowDataViewHolder).bind(enumValues<DataType>()[position])
}
}
override fun getItemCount(): Int {
return enumValues<DataType>().count()
}
override fun getItemViewType(position: Int): Int {
return ROW_DATA
}
}

@ -4,8 +4,9 @@ import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView
import io.realm.Realm.init
interface EditableDataDelegate : DynamicRowDelegate {
interface EditableDataDelegate {
fun setValue(value: Any, row: DynamicRowInterface)
}
@ -13,8 +14,8 @@ interface DynamicRowDelegate {
fun adapterRows() : ArrayList<DynamicRowInterface>
fun boolForRow(row: DynamicRowInterface) : Boolean
fun stringForRow(row: DynamicRowInterface) : String
fun boolForRow(row: DynamicRowInterface) : Boolean { return false }
fun stringForRow(row: DynamicRowInterface) : String { return "" }
/**
* Manages:
@ -27,16 +28,13 @@ interface DynamicRowDelegate {
}
interface DynamicRowCallback {
fun onRowSelected(row: DynamicRowInterface)
}
class DynamicListAdapter(delegate: DynamicRowDelegate) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
class DynamicListAdapter(var delegate: DynamicRowDelegate, var callBackDelegate: DynamicRowCallback? = null) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private var rows: ArrayList<DynamicRowInterface> = ArrayList()
private var delegate: DynamicRowDelegate = delegate
var callback: ((row: DynamicRowInterface) -> Unit)? = null
init {
this.rows = delegate.adapterRows()
@ -58,7 +56,7 @@ class DynamicListAdapter(delegate: DynamicRowDelegate) : RecyclerView.Adapter<Re
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val dynamicRow = this.rows[position]
val listener = View.OnClickListener {
callback?.invoke(dynamicRow)
callBackDelegate?.onRowSelected(dynamicRow)
}
(holder as DynamicHolder).bind(dynamicRow, this.delegate, listener)
}

@ -2,54 +2,77 @@ package net.pokeranalytics.android.ui.adapter.components
import android.content.Context
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.fragment.components.BottomSheetType
class SectionRow(stringRes: Int) : DynamicRowInterface {
var stringRes: Int = stringRes
override fun localizedTitle(context: Context): String {
return context.getString(this.stringRes)
}
override var viewType: Int = 0
interface DynamicRowInterface {
fun localizedTitle(context: Context): String
var viewType: Int
var bottomSheetType: BottomSheetType
}
interface DynamicRowInterface {
class SectionRow(stringRes: Int) : DynamicRowInterface {
var stringRes: Int = stringRes
fun localizedTitle(context: Context): String
var viewType: Int
override fun localizedTitle(context: Context): String {
return context.getString(this.stringRes)
}
override var viewType: Int = 0
override var bottomSheetType: BottomSheetType = BottomSheetType.NONE
}
enum class SessionRow(val resId: Int) : DynamicRowInterface {
BLINDS(R.string.app_name),
GAME(R.string.title_history),
DATE(R.string.title_settings);
BLINDS(R.string.app_name),
GAME(R.string.title_history),
DATE(R.string.title_settings);
override fun localizedTitle(context: Context): String {
return context.getString(this.resId)
}
override var viewType: Int = RowViewType.HEADER.ordinal
get() {
return when (this) {
BLINDS, GAME, DATE -> RowViewType.TITLE_VALUE.ordinal
}
}
override var bottomSheetType: BottomSheetType = BottomSheetType.NONE
get() {
return when (this) {
BLINDS -> BottomSheetType.BLINDS
GAME -> BottomSheetType.GAME
DATE -> BottomSheetType.DATE
}
}
}
override fun localizedTitle(context: Context): String {
return context.getString(this.resId)
}
enum class BankrollRow(val resId: Int) : DynamicRowInterface {
NAME(R.string.app_name),
LIVE(R.string.app_name),
CURRENCY(R.string.app_name);
override var viewType: Int = RowViewType.HEADER.ordinal
get() {
return when (this) {
BLINDS, GAME, DATE -> RowViewType.TITLE_VALUE.ordinal
}
}
override fun localizedTitle(context: Context): String {
return context.getString(this.resId)
}
override var viewType: Int = 1
override var bottomSheetType: BottomSheetType = BottomSheetType.NONE
}
enum class BankrollRow(val resId: Int) : DynamicRowInterface {
NAME(R.string.app_name),
LIVE(R.string.app_name),
CURRENCY(R.string.app_name);
override fun localizedTitle(context: Context): String {
return context.getString(this.resId)
}
enum class BusinessObjectRowType(val resId: Int) : DynamicRowInterface {
BANKROLL(R.string.bankroll),
GAME(R.string.game),
LOCATION(R.string.location),
TOURNAMENT_TYPE(R.string.tournament_type),
TRANSACTION_TYPE(R.string.transaction_type);
override var viewType: Int = 1
override fun localizedTitle(context: Context): String {
return context.getString(this.resId)
}
override var viewType: Int = RowViewType.TITLE.ordinal
override var bottomSheetType: BottomSheetType = BottomSheetType.NONE
}

@ -17,6 +17,7 @@ interface DynamicHolder {
enum class RowViewType {
HEADER,
EDIT_TEXT,
TITLE,
TITLE_VALUE;
inner class FakeViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), DynamicHolder {
@ -32,6 +33,14 @@ enum class RowViewType {
}
}
inner class TitleViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), DynamicHolder {
override fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate, listener: View.OnClickListener) {
itemView.title.text = row.localizedTitle(itemView.context)
itemView.container.setOnClickListener(listener)
}
}
fun viewHolder(parent: ViewGroup): RecyclerView.ViewHolder {
return when (this) {
TITLE_VALUE -> TitleValueViewHolder(
@ -41,6 +50,14 @@ enum class RowViewType {
false
)
)
TITLE -> TitleViewHolder(
LayoutInflater.from(parent.context).inflate(
R.layout.row_title,
parent,
false
)
)
else -> FakeViewHolder(parent)
}
}

@ -1,17 +1,76 @@
package net.pokeranalytics.android.ui.fragment
import android.app.DatePickerDialog
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import kotlinx.android.synthetic.main.fragment_bottom_sheet_container.*
import net.pokeranalytics.android.R
import android.content.DialogInterface
import android.view.*
import androidx.constraintlayout.widget.ConstraintLayout
import kotlinx.android.synthetic.main.bottom_sheet_blinds.*
import kotlinx.android.synthetic.main.bottom_sheet_date.*
import kotlinx.android.synthetic.main.fragment_bottom_sheet.*
import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.*
import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface
import net.pokeranalytics.android.ui.adapter.components.EditableDataDelegate
import net.pokeranalytics.android.ui.fragment.components.BottomSheetType
import timber.log.Timber
import android.widget.DatePicker
import net.pokeranalytics.android.util.DatePickerFragment
import net.pokeranalytics.android.util.TimePickerFragment
import java.util.*
class BottomSheetFragment : BottomSheetDialogFragment() {
private var row: DynamicRowInterface? = null
private var valueDelegate: EditableDataDelegate? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_bottom_sheet_container, container, false)
val view = inflater.inflate(
net.pokeranalytics.android.R.layout.fragment_bottom_sheet,
container,
false
) as ConstraintLayout
row?.let {
when (it.bottomSheetType) {
BottomSheetType.BANKROLL -> inflater.inflate(
net.pokeranalytics.android.R.layout.bottom_sheet_bankroll,
view.bottomSheetContainer,
true
)
BottomSheetType.BLINDS -> inflater.inflate(
net.pokeranalytics.android.R.layout.bottom_sheet_blinds,
view.bottomSheetContainer,
true
)
BottomSheetType.DATE -> inflater.inflate(
net.pokeranalytics.android.R.layout.bottom_sheet_date,
view.bottomSheetContainer,
true
)
BottomSheetType.GAME -> inflater.inflate(
net.pokeranalytics.android.R.layout.bottom_sheet_game,
view.bottomSheetContainer,
true
)
BottomSheetType.LOCATION -> inflater.inflate(
net.pokeranalytics.android.R.layout.bottom_sheet_location,
view.bottomSheetContainer,
true
)
BottomSheetType.TABLE_SIZE -> inflater.inflate(
net.pokeranalytics.android.R.layout.bottom_sheet_table_size,
view.bottomSheetContainer,
true
)
else -> {
}
}
}
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -19,13 +78,80 @@ class BottomSheetFragment : BottomSheetDialogFragment() {
initUI()
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
// To display correctly the keyboard
dialog?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE)
}
override fun onStart() {
super.onStart()
// Open the keyboard
row?.let {
when (it.bottomSheetType) {
BottomSheetType.BLINDS -> {
smallBlind.requestFocus()
}
else -> {
}
}
}
}
override fun onDismiss(dialog: DialogInterface?) {
super.onDismiss(dialog)
// Return the value
row?.let {
valueDelegate?.setValue("Test", it)
}
}
/**
* Init UI
*/
private fun initUI() {
close.setOnClickListener {
dismiss()
row?.let {
//bottomSheetToolbar.title = row?.localizedTitle(requireContext())
bottomSheetToolbar.inflateMenu(net.pokeranalytics.android.R.menu.bottom_sheet_menu)
bottomSheetToolbar.setOnMenuItemClickListener {
false
}
}
row?.let {
when (it.bottomSheetType) {
BottomSheetType.DATE -> initDateUI()
else -> {}
}
}
}
/**
* Init date UI
*/
private fun initDateUI() {
startDate.setOnClickListener {
val dateFragment = DatePickerFragment()
dateFragment.show(fragmentManager, "datePicker")
}
endDate.setOnClickListener {
val timeFragment = TimePickerFragment()
timeFragment.show(fragmentManager, "timePicker")
}
}
/**
* Init
*/
fun init(row: DynamicRowInterface, valueDelegate: EditableDataDelegate) {
this.row = row
this.valueDelegate = valueDelegate
}
}

@ -18,9 +18,10 @@ import net.pokeranalytics.android.ui.adapter.NewSessionAdapter
import net.pokeranalytics.android.ui.adapter.components.DynamicListAdapter
import net.pokeranalytics.android.ui.adapter.components.DynamicRowCallback
import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface
import net.pokeranalytics.android.ui.adapter.components.EditableDataDelegate
import net.pokeranalytics.android.util.PokerAnalyticsFragment
class NewSessionFragment : PokerAnalyticsFragment() {
class NewSessionFragment : PokerAnalyticsFragment(), DynamicRowCallback, EditableDataDelegate {
private lateinit var newSession: Session
@ -30,11 +31,19 @@ class NewSessionFragment : PokerAnalyticsFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initData()
initUI()
}
override fun onRowSelected(row: DynamicRowInterface) {
val bottomSheetFragment = openBottomSheet()
bottomSheetFragment.init(row, this)
}
override fun setValue(value: Any, row: DynamicRowInterface) {
Toast.makeText(requireContext(), "Callback for ${row.localizedTitle(requireContext())} ($value)", Toast.LENGTH_SHORT).show()
}
private fun initData() {
newSession = Session()
}
@ -45,11 +54,7 @@ class NewSessionFragment : PokerAnalyticsFragment() {
private fun initUI() {
val viewManager = LinearLayoutManager(requireContext())
val newSessionAdapter = DynamicListAdapter(newSession)
newSessionAdapter.callback = {
val bottomSheetFragment = openBottomSheet()
}
val newSessionAdapter = DynamicListAdapter(newSession, this)
recyclerView.apply {
setHasFixedSize(true)

@ -4,51 +4,64 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.fragment_settings.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.adapter.SettingsAdapter
import net.pokeranalytics.android.ui.adapter.components.*
import net.pokeranalytics.android.util.PokerAnalyticsFragment
class SettingsFragment : PokerAnalyticsFragment() {
class SettingsFragment : PokerAnalyticsFragment(), DynamicRowDelegate, DynamicRowCallback {
companion object {
companion object {
/**
* Create new instance
*/
fun newInstance(): SettingsFragment {
val fragment = SettingsFragment()
val bundle = Bundle()
fragment.arguments = bundle
return fragment
}
}
/**
* Create new instance
*/
fun newInstance(): SettingsFragment {
val fragment = SettingsFragment()
val bundle = Bundle()
fragment.arguments = bundle
return fragment
}
}
private lateinit var settingsAdapter: SettingsAdapter
private lateinit var settingsAdapter: DynamicListAdapter
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_settings, container, false)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_settings, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initData()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initData()
}
/**
* Init data
*/
private fun initData() {
override fun adapterRows(): ArrayList<DynamicRowInterface> {
val rows = ArrayList<DynamicRowInterface>()
rows.addAll(BusinessObjectRowType.values())
return rows
}
val viewManager = LinearLayoutManager(requireContext())
settingsAdapter = SettingsAdapter()
override fun onRowSelected(row: DynamicRowInterface) {
//val bottomSheetFragment = openBottomSheet(row)
}
recyclerView.apply {
setHasFixedSize(true)
layoutManager = viewManager
adapter = settingsAdapter
}
}
/**
* Init data
*/
private fun initData() {
val viewManager = LinearLayoutManager(requireContext())
settingsAdapter = DynamicListAdapter(
this, this
)
recyclerView.apply {
setHasFixedSize(true)
layoutManager = viewManager
adapter = settingsAdapter
}
}
}

@ -0,0 +1,13 @@
package net.pokeranalytics.android.ui.fragment.components
enum class BottomSheetType {
NONE,
GAME,
BLINDS,
LOCATION,
BANKROLL,
TABLE_SIZE,
DATE
}

@ -1,55 +0,0 @@
package net.pokeranalytics.android.ui.view
import android.widget.FrameLayout
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
import kotlinx.android.synthetic.main.row_data_cell.view.*
import kotlinx.android.synthetic.main.row_data_content_view.view.*
import net.pokeranalytics.android.R
class DataRowView : FrameLayout {
private lateinit var rowDataCell: ConstraintLayout
/**
* 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
*
* @param attrs
*/
private fun init() {
val layoutInflater = LayoutInflater.from(context)
rowDataCell = layoutInflater.inflate(R.layout.row_data_content_view, this, false) as ConstraintLayout
val layoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.WRAP_CONTENT
)
addView(rowDataCell, layoutParams)
}
/**
* Set the session data to the view
*/
fun setData(title: String) {
rowDataCell.rowTitle.text = title
}
}

@ -0,0 +1,26 @@
package net.pokeranalytics.android.util
import android.app.DatePickerDialog
import android.app.Dialog
import android.os.Bundle
import android.widget.DatePicker
import androidx.fragment.app.DialogFragment
import java.util.*
class DatePickerFragment : DialogFragment(), DatePickerDialog.OnDateSetListener {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
// Use the current date as the default date in the picker
val c = Calendar.getInstance()
val year = c.get(Calendar.YEAR)
val month = c.get(Calendar.MONTH)
val day = c.get(Calendar.DAY_OF_MONTH)
// Create a new instance of DatePickerDialog and return it
return DatePickerDialog(activity, this, year, month, day)
}
override fun onDateSet(view: DatePicker, year: Int, month: Int, day: Int) {
// Do something with the date chosen by the user
}
}

@ -3,6 +3,7 @@ package net.pokeranalytics.android.util
import android.os.Bundle
import androidx.fragment.app.Fragment
import io.realm.Realm
import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface
import net.pokeranalytics.android.ui.fragment.BottomSheetFragment
open class PokerAnalyticsFragment: Fragment() {
@ -27,7 +28,6 @@ open class PokerAnalyticsFragment: Fragment() {
* Open the bottom sheet
*/
fun openBottomSheet(): BottomSheetFragment {
//TODO: Give the data to display in the bottom sheet here
val bottomSheetFragment = BottomSheetFragment()
bottomSheetFragment.show(fragmentManager, "bottomSheet")
return bottomSheetFragment

@ -0,0 +1,26 @@
package net.pokeranalytics.android.util
import android.app.Dialog
import android.app.TimePickerDialog
import android.os.Bundle
import android.text.format.DateFormat
import android.widget.TimePicker
import androidx.fragment.app.DialogFragment
import java.util.*
class TimePickerFragment : DialogFragment(), TimePickerDialog.OnTimeSetListener {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
// Use the current time as the default values for the picker
val c = Calendar.getInstance()
val hour = c.get(Calendar.HOUR_OF_DAY)
val minute = c.get(Calendar.MINUTE)
// Create a new instance of TimePickerDialog and return it
return TimePickerDialog(activity, this, hour, minute, DateFormat.is24HourFormat(activity))
}
override fun onTimeSet(view: TimePicker, hourOfDay: Int, minute: Int) {
// Do something with the time chosen by the user
}
}

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/>
</vector>

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
</vector>

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
</vector>

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6v12zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z"/>
</vector>

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/bankrollRecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="200dp" />
</LinearLayout>

@ -0,0 +1,59 @@
<?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:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:background="@color/gray_dark_1">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/appCompatTextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="16dp"
android:text="Blinds"
android:textColor="@color/white"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/smallBlind"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/smallBlind"
android:layout_width="96dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:gravity="end|center_vertical"
android:imeOptions="actionNext"
android:inputType="numberDecimal"
android:lines="1"
android:textColor="@color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/bigBlind"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/bigBlind"
android:layout_width="96dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:gravity="end|center_vertical"
android:imeOptions="actionDone"
android:inputType="numberDecimal"
android:lines="1"
android:textColor="@color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -0,0 +1,32 @@
<?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:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/startDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:text="Set start date"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/endDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
android:text="Set end date"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/gameTypeRecyclerView"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:minHeight="200dp" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/gameNameRecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="200dp" />
</LinearLayout>

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/locationRecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="200dp" />
</LinearLayout>

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/locationRecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="200dp" />
</LinearLayout>

@ -0,0 +1,28 @@
<?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:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#222222">
<androidx.appcompat.widget.Toolbar
android:id="@+id/bottomSheetToolbar"
style="@style/BottomSheetToolbar"
android:layout_width="0dp"
android:layout_height="?actionBarSize"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:title="Test" />
<FrameLayout
android:id="@+id/bottomSheetContainer"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/bottomSheetToolbar" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -1,45 +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"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/appCompatTextView"
android:layout_width="0dp"
android:layout_height="220dp"
android:background="#222222"
android:gravity="center"
android:text="Bottom sheet fragment"
android:textColor="#FFFFFF"
android:textSize="18sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/close"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:background="?selectableItemBackgroundBorderless"
android:scaleType="centerInside"
android:src="@drawable/ic_close_24dp"
android:tint="@color/white"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/appCompatTextView" />
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/editText"
android:layout_width="180dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:textColor="@color/white"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -3,19 +3,29 @@
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="match_parent"
tools:context=".ui.activity.HomeActivity">
android:layout_height="match_parent">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Settings"
android:layout_marginTop="8dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="8dp"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="8dp"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@+id/title"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:listitem="@layout/row_data_cell"/>
android:layout_marginTop="8dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<net.pokeranalytics.android.ui.view.DataRowView
android:id="@+id/dataRow"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</FrameLayout>

@ -5,10 +5,12 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?selectableItemBackground"
android:id="@+id/container"
android:padding="16dp">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/rowTitle"
android:id="@+id/title"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"

@ -0,0 +1,23 @@
<?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"
xmlns:tools="http://schemas.android.com/tools">
<item
android:id="@+id/actionClear"
android:orderInCategory="100"
android:title="@string/app_name"
android:icon="@drawable/ic_close_white_24dp"
app:showAsAction="always" />
<item
android:id="@+id/actionAdd"
android:icon="@drawable/ic_add_white_24dp"
android:orderInCategory="200"
android:title="Search"
app:showAsAction="ifRoom" />
<item
android:id="@+id/actionSave"
android:icon="@drawable/ic_check_white_24dp"
android:orderInCategory="300"
android:title="User"
app:showAsAction="ifRoom" />
</menu>

@ -5,4 +5,10 @@
<string name="title_stats">Stats</string>
<string name="title_settings">Settings</string>
<string name="bankroll">Bankroll</string>
<string name="game">Game</string>
<string name="location">Location</string>
<string name="tournament_type">Tournament Type</string>
<string name="transaction_type">Transaction Type</string>
</resources>

@ -8,4 +8,10 @@
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="BottomSheetToolbar" parent="AppTheme">
<item name="android:background">@color/gray_dark_1</item>
<item name="titleTextColor">@color/white</item>
</style>
</resources>

Loading…
Cancel
Save