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

feature/top10
Laurent 7 years ago
commit 96c1c3316c
  1. 81
      app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt
  2. 27
      app/src/main/java/net/pokeranalytics/android/model/LiveData.kt
  3. 4
      app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt
  4. 5
      app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt
  5. 6
      app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt
  6. 20
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  7. 2
      app/src/main/java/net/pokeranalytics/android/model/realm/TimeFrame.kt
  8. 7
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt
  9. 6
      app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt
  10. 50
      app/src/main/java/net/pokeranalytics/android/ui/adapter/LimitTypesAdapter.kt
  11. 17
      app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt
  12. 8
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt
  13. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt
  14. 62
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleListFragment.kt
  15. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt
  16. 20
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt
  17. 1
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt
  18. 103
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListGameFragment.kt
  19. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetSumFragment.kt
  20. 10
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt
  21. 3
      app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt
  22. 19
      app/src/main/res/layout/bottom_sheet_double_list.xml
  23. 25
      app/src/main/res/layout/bottom_sheet_game_list.xml
  24. 44
      app/src/main/res/values/array_blind.xml
  25. 17
      app/src/main/res/values/array_limit.xml
  26. 21
      app/src/main/res/values/array_variant.xml
  27. 3
      app/src/main/res/values/strings.xml

@ -4,14 +4,17 @@ import android.app.Application
import io.realm.Realm import io.realm.Realm
import io.realm.RealmConfiguration import io.realm.RealmConfiguration
import io.realm.RealmResults import io.realm.RealmResults
import io.realm.kotlin.where
import net.pokeranalytics.android.model.realm.Game
import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.util.PokerAnalyticsLogs import net.pokeranalytics.android.util.PokerAnalyticsLogs
import timber.log.Timber import timber.log.Timber
import java.util.*
class PokerAnalyticsApplication: Application() { class PokerAnalyticsApplication : Application() {
var sessions: RealmResults<Session>? = null var sessions: RealmResults<Session>? = null
// private val listener: OrderedRealmCollectionChangeListener<RealmResults<Session>> = // private val listener: OrderedRealmCollectionChangeListener<RealmResults<Session>> =
// OrderedRealmCollectionChangeListener() { realmResults: RealmResults<Session>, changeSet: OrderedCollectionChangeSet -> // OrderedRealmCollectionChangeListener() { realmResults: RealmResults<Session>, changeSet: OrderedCollectionChangeSet ->
@ -27,34 +30,62 @@ class PokerAnalyticsApplication: Application() {
// //
// } // }
override fun onCreate() { override fun onCreate() {
super.onCreate() super.onCreate()
// Realm // Realm
Realm.init(this) Realm.init(this)
val realmConfiguration = RealmConfiguration.Builder() val realmConfiguration = RealmConfiguration.Builder()
.name(Realm.DEFAULT_REALM_NAME) .name(Realm.DEFAULT_REALM_NAME)
.deleteRealmIfMigrationNeeded() .deleteRealmIfMigrationNeeded()
.build() .build()
Realm.setDefaultConfiguration(realmConfiguration) Realm.setDefaultConfiguration(realmConfiguration)
val realm: Realm = Realm.getDefaultInstance() val realm: Realm = Realm.getDefaultInstance()
// Add observer on session time frame changes // Add observer on session time frame changes
this.sessions = realm.where(Session::class.java).findAll() // monitor session deletions this.sessions = realm.where(Session::class.java).findAll() // monitor session deletions
this.sessions?.addChangeListener { t, changeSet -> this.sessions?.addChangeListener { t, changeSet ->
/*
val deletedSessions =
realm.where(Session::class.java).`in`("id", changeSet.deletions.toTypedArray()).findAll()
deletedSessions.forEach { it.cleanup() }
*/
}
val deletedSessions = realm.where(Session::class.java).`in`("id", changeSet.deletions.toTypedArray()).findAll() if (BuildConfig.DEBUG) {
deletedSessions.forEach { it.cleanup() } // Logs
Timber.plant(PokerAnalyticsLogs())
} else {
//Fabric.with(this, Crashlytics())
}
} if (BuildConfig.DEBUG) {
createDefaultData()
}
if (BuildConfig.DEBUG) { }
// Logs
Timber.plant(PokerAnalyticsLogs())
} else {
//Fabric.with(this, Crashlytics())
}
} /**
* Create default data
*/
private fun createDefaultData() {
val gamesName = resources.getStringArray(R.array.game_name)
val gamesShortName = resources.getStringArray(R.array.game_short_name)
val realm = Realm.getDefaultInstance()
if (realm.where<Game>().findAll().isEmpty()) {
realm.executeTransaction {
for ((index, name) in gamesName.withIndex()) {
val game = Game()
game.id = UUID.randomUUID().toString()
game.name = name
game.shortName = gamesShortName[index]
realm.copyToRealmOrUpdate(game)
}
}
}
}
} }

@ -6,6 +6,7 @@ import io.realm.RealmResults
import io.realm.Sort import io.realm.Sort
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.model.realm.*
import net.pokeranalytics.android.ui.adapter.components.LiveDataDataSource
import net.pokeranalytics.android.ui.view.Localizable import net.pokeranalytics.android.ui.view.Localizable
/** /**
@ -63,6 +64,19 @@ enum class LiveData : Localizable {
} }
} }
fun deleteData(realm:Realm, data:LiveDataDataSource) {
realm.where(this.relatedEntity).equalTo("id", data.primaryKey).findAll().deleteAllFromRealm()
}
fun updateOrCreate(realm:Realm, primaryKey:String?): RealmObject {
val proxyItem: RealmObject? = this.getData(realm, primaryKey)
proxyItem?.let {
return proxyItem
} ?: run {
return this.newEntity()
}
}
fun newEntity(): RealmObject { fun newEntity(): RealmObject {
return when (this) { return when (this) {
BANKROLL -> Bankroll() BANKROLL -> Bankroll()
@ -84,19 +98,6 @@ enum class LiveData : Localizable {
return proxyItem return proxyItem
} }
fun updateOrCreate(realm: Realm, primaryKey: String?): RealmObject {
val proxyItem: RealmObject? = this.getData(realm, primaryKey)
proxyItem?.let {
return realm.copyFromRealm(it)
} ?: run {
return this.newEntity()
/* realm.beginTransaction()
val t = realm.createObject(this.relatedEntity, UUID.randomUUID().toString())
realm.commitTransaction()
return realm.copyFromRealm(t)*/
}
}
override val resId: Int? override val resId: Int?
get() { get() {
return when (this) { return when (this) {

@ -81,4 +81,8 @@ open class Bankroll(name: String = "") : RealmObject(), RowRepresentableDataSour
SimpleRow.NAME -> this.name = value as String? ?: "" SimpleRow.NAME -> this.name = value as String? ?: ""
} }
} }
override fun isValidForSave(): Boolean {
return this.name.isNotEmpty()
}
} }

@ -59,9 +59,6 @@ open class Game : RealmObject(), RowRepresentableDataSource, LiveDataDataSource,
} }
override fun isValidForSave(): Boolean { override fun isValidForSave(): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates. return this.name.isNotEmpty()
} }
} }

@ -3,6 +3,7 @@ package net.pokeranalytics.android.model.realm
import android.text.InputType import android.text.InputType
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.model.ObjectSavable
import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.adapter.components.*
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetData import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetData
import net.pokeranalytics.android.ui.view.RowEditable import net.pokeranalytics.android.ui.view.RowEditable
@ -12,7 +13,7 @@ import net.pokeranalytics.android.ui.view.SimpleRow
import java.util.* import java.util.*
open class Location : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable { open class Location : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable, ObjectSavable {
@PrimaryKey @PrimaryKey
var id = UUID.randomUUID().toString() var id = UUID.randomUUID().toString()
@ -57,4 +58,7 @@ open class Location : RealmObject(), RowRepresentableDataSource, LiveDataDataSou
} }
} }
override fun isValidForSave(): Boolean {
return this.name.isNotEmpty()
}
} }

@ -143,8 +143,8 @@ open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource
* TODO: Cascade delete? * TODO: Cascade delete?
*/ */
fun delete() { fun delete() {
cleanup()
realm.executeTransaction { realm.executeTransaction {
cleanup()
deleteFromRealm() deleteFromRealm()
} }
} }
@ -188,7 +188,6 @@ open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource
return gameTitle return gameTitle
} }
companion object { companion object {
fun newInstance(): Session { fun newInstance(): Session {
var session: Session = Session() var session: Session = Session()
@ -299,9 +298,10 @@ open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource
data.add(BottomSheetData("", inputType = InputType.TYPE_CLASS_NUMBER)) data.add(BottomSheetData("", inputType = InputType.TYPE_CLASS_NUMBER))
data.add(BottomSheetData("", inputType = InputType.TYPE_CLASS_NUMBER)) data.add(BottomSheetData("", inputType = InputType.TYPE_CLASS_NUMBER))
} }
SessionRow.TABLE_SIZE -> {} SessionRow.TABLE_SIZE -> {data.add(BottomSheetData(tableSize))}
SessionRow.GAME -> { SessionRow.GAME -> {
// Add current game & games list // Add current game & games list
data.add(BottomSheetData(limit))
data.add(BottomSheetData(game, data = LiveData.GAME.items(realm))) data.add(BottomSheetData(game, data = LiveData.GAME.items(realm)))
} }
SessionRow.LOCATION -> { SessionRow.LOCATION -> {
@ -351,13 +351,17 @@ open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource
} }
} }
//TODO: Update //TODO: Update
SessionRow.START_DATE -> if (value is Date) { SessionRow.START_DATE -> if (value is Date?) {
val timeFrameToUpdate = if (timeFrame != null) timeFrame as TimeFrame else realm.createObject(TimeFrame::class.java) if (value == null) {
timeFrameToUpdate.setDate(value, null) timeFrame = null
timeFrame = timeFrameToUpdate } else {
val timeFrameToUpdate = if (timeFrame != null) timeFrame as TimeFrame else realm.createObject(TimeFrame::class.java)
timeFrameToUpdate.setDate(value, null)
timeFrame = timeFrameToUpdate
}
} }
//TODO: Update //TODO: Update
SessionRow.END_DATE -> if (value is Date) { SessionRow.END_DATE -> if (value is Date?) {
val timeFrameToUpdate = if (timeFrame != null) timeFrame as TimeFrame else realm.createObject(TimeFrame::class.java) val timeFrameToUpdate = if (timeFrame != null) timeFrame as TimeFrame else realm.createObject(TimeFrame::class.java)
timeFrameToUpdate.setDate(null, value) timeFrameToUpdate.setDate(null, value)
timeFrame = timeFrameToUpdate timeFrame = timeFrameToUpdate

@ -90,7 +90,7 @@ open class TimeFrame : RealmObject() {
// Timber.d("this> sd = : ${this.startDate}, ed = ${this.endDate}") // Timber.d("this> sd = : ${this.startDate}, ed = ${this.endDate}")
if (this.endDate == null) { if (this.endDate == null) {
query.greaterThan("timeFrame.startDate", this.startDate.time).or().greaterThan("timeFrame.endDate", this.startDate.time) query.greaterThan("timeFrame.startDate", this.startDate).or().greaterThan("timeFrame.endDate", this.startDate)
} else { } else {
val endDate = this.endDate!! val endDate = this.endDate!!
query query

@ -3,6 +3,7 @@ package net.pokeranalytics.android.model.realm
import android.text.InputType import android.text.InputType
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.model.ObjectSavable
import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.adapter.components.*
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetData import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetData
import net.pokeranalytics.android.ui.view.RowEditable import net.pokeranalytics.android.ui.view.RowEditable
@ -11,7 +12,7 @@ import net.pokeranalytics.android.ui.view.SimpleRow
import net.pokeranalytics.android.ui.view.TournamentFeatureRow import net.pokeranalytics.android.ui.view.TournamentFeatureRow
import java.util.* import java.util.*
open class TournamentFeature : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable { open class TournamentFeature : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable, ObjectSavable {
@PrimaryKey @PrimaryKey
var id = UUID.randomUUID().toString() var id = UUID.randomUUID().toString()
@ -50,4 +51,8 @@ open class TournamentFeature : RealmObject(), RowRepresentableDataSource, LiveDa
SimpleRow.NAME -> this.name = value as String? ?: "" SimpleRow.NAME -> this.name = value as String? ?: ""
} }
} }
override fun isValidForSave(): Boolean {
return this.name.isNotEmpty()
}
} }

@ -3,6 +3,7 @@ package net.pokeranalytics.android.model.realm
import android.text.InputType import android.text.InputType
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.model.ObjectSavable
import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.adapter.components.*
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetData import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetData
import net.pokeranalytics.android.ui.view.RowEditable import net.pokeranalytics.android.ui.view.RowEditable
@ -12,7 +13,7 @@ import net.pokeranalytics.android.ui.view.TransactionTypeRow
import java.util.* import java.util.*
open class TransactionType : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable { open class TransactionType : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable, ObjectSavable {
@PrimaryKey @PrimaryKey
var id = UUID.randomUUID().toString() var id = UUID.randomUUID().toString()
@ -60,6 +61,9 @@ open class TransactionType : RealmObject(), RowRepresentableDataSource, LiveData
} }
} }
override fun isValidForSave(): Boolean {
return this.name.isNotEmpty()
}
} }
enum class TransactionKind { enum class TransactionKind {

@ -0,0 +1,50 @@
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_bottom_sheet_grid_title.view.*
import net.pokeranalytics.android.R
class LimitTypesAdapter(private var tableSizes: ArrayList<String>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
companion object {
const val ROW_LIMIT: Int = 100
}
var onClickOnItem: ((position: Int) -> Unit)? = null
inner class CellSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(tableSize: String) {
itemView.title.text = tableSize
itemView.container.setOnClickListener {
onClickOnItem?.invoke(adapterPosition)
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
when (viewType) {
ROW_LIMIT -> return CellSessionViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.row_bottom_sheet_title, parent, false))
else -> throw IllegalStateException("Need to implement type $viewType in HistoryAdapter")
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (getItemViewType(position)) {
ROW_LIMIT -> (holder as LimitTypesAdapter.CellSessionViewHolder).bind(tableSizes[position])
}
}
override fun getItemCount(): Int {
return tableSizes.size
}
override fun getItemViewType(position: Int): Int {
return ROW_LIMIT
}
}

@ -21,6 +21,7 @@ import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheet
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetFragment import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetFragment
import net.pokeranalytics.android.ui.view.RowEditable import net.pokeranalytics.android.ui.view.RowEditable
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import timber.log.Timber
class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, BottomSheetDelegate { class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, BottomSheetDelegate {
@ -55,7 +56,7 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate,
rowRepresentableAdapter.refreshRow(row) rowRepresentableAdapter.refreshRow(row)
} }
override fun setValue(value: Any, row: RowRepresentable) { override fun setValue(value: Any?, row: RowRepresentable) {
(this.item as RowEditable).updateValue(value, row) (this.item as RowEditable).updateValue(value, row)
this.getRealm().executeTransaction { this.getRealm().executeTransaction {
it.copyToRealmOrUpdate(this.item) it.copyToRealmOrUpdate(this.item)
@ -93,7 +94,7 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate,
} }
} else { } else {
val builder = AlertDialog.Builder(it.context) val builder = AlertDialog.Builder(it.context)
builder.setTitle(R.string.warning) .setMessage(R.string.empty_name_for_br_error)
.setNegativeButton(R.string.ok, null) .setNegativeButton(R.string.ok, null)
builder.show() builder.show()
} }
@ -106,8 +107,16 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate,
.setMessage(R.string.are_you_sure_you_want_to_do_that_) .setMessage(R.string.are_you_sure_you_want_to_do_that_)
.setNeutralButton(R.string.no, null) .setNeutralButton(R.string.no, null)
.setNegativeButton(R.string.yes, DialogInterface.OnClickListener { dialog, id -> .setNegativeButton(R.string.yes, DialogInterface.OnClickListener { dialog, id ->
this.getRealm().executeTransaction {
this.item.deleteFromRealm() if (this.item.isManaged) {
Toast.makeText(requireContext(), "isManaged", Toast.LENGTH_SHORT).show()
Timber.d("is managed")
this.getRealm().executeTransaction {
this.liveDataType.deleteData(it, (this.item as LiveDataDataSource))
}
} else {
Toast.makeText(requireContext(), "isNotManaged", Toast.LENGTH_SHORT).show()
Timber.d("is not managed")
} }
this.activity?.let { this.activity?.let {
it.finish() it.finish()

@ -91,11 +91,17 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
override fun clickOnClear(row: RowRepresentable) { override fun clickOnClear(row: RowRepresentable) {
currentSession.updateValue(null, row) currentSession.updateValue(null, row)
sessionAdapter.refreshRow(row) sessionAdapter.refreshRow(row)
when(row) {
SessionRow.START_DATE, SessionRow.END_DATE -> updateSessionUI()
}
} }
override fun setValue(value: Any, row: RowRepresentable) { override fun setValue(value: Any?, row: RowRepresentable) {
currentSession.updateValue(value, row) currentSession.updateValue(value, row)
sessionAdapter.refreshRow(row) sessionAdapter.refreshRow(row)
when(row) {
SessionRow.START_DATE, SessionRow.END_DATE -> updateSessionUI()
}
} }
/** /**

@ -26,7 +26,7 @@ class BottomSheetDoubleEditTextFragment : BottomSheetFragment() {
editText1.requestFocus() editText1.requestFocus()
} }
override fun getValue(): Any { override fun getValue(): Any? {
return values return values
} }

@ -1,62 +0,0 @@
package net.pokeranalytics.android.ui.fragment.components.bottomsheet
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.bottom_sheet_double_list.*
import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.Game
import net.pokeranalytics.android.ui.adapter.components.LiveDataAdapter
import net.pokeranalytics.android.ui.adapter.components.LiveDataDataSource
import net.pokeranalytics.android.ui.adapter.components.LiveDataDelegate
class BottomSheetDoubleListFragment : BottomSheetFragment(), LiveDataDelegate {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initData()
initUI()
}
override fun data(position: Int): LiveDataDataSource {
//TODO: Change that
return Game()
}
override fun onRowSelected(position: Int) {
}
override fun size(): Int {
return 1
}
/**
* Init data
*/
private fun initData() {
val data = getData()
//game = if (data is Game) data else Game()
//game.title = "Test"
}
/**
* Init UI
*/
private fun initUI() {
LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_double_list, view?.bottomSheetContainer, true)
val viewManager = LinearLayoutManager(requireContext())
val dataAdapter = LiveDataAdapter(this, R.layout.row_bottom_sheet_title)
reyclerView1.apply {
setHasFixedSize(true)
layoutManager = viewManager
adapter = dataAdapter
}
}
}

@ -26,7 +26,7 @@ class BottomSheetEditTextFragment : BottomSheetFragment() {
editText1.requestFocus() editText1.requestFocus()
} }
override fun getValue(): Any { override fun getValue(): Any? {
return value return value
} }

@ -14,6 +14,7 @@ import net.pokeranalytics.android.ui.view.RowRepresentable
enum class BottomSheetType { enum class BottomSheetType {
NONE, NONE,
LIST, LIST,
LIST_GAME,
DOUBLE_LIST, DOUBLE_LIST,
GRID, GRID,
EDIT_TEXT, EDIT_TEXT,
@ -24,7 +25,7 @@ enum class BottomSheetType {
interface BottomSheetDelegate { interface BottomSheetDelegate {
fun clickOnAdd(row: RowRepresentable) fun clickOnAdd(row: RowRepresentable)
fun clickOnClear(row: RowRepresentable) fun clickOnClear(row: RowRepresentable)
fun setValue(value: Any, row: RowRepresentable) fun setValue(value: Any?, row: RowRepresentable)
} }
@ -37,16 +38,17 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
companion object { companion object {
fun create( fun create(
fragmentManager: FragmentManager?, fragmentManager: FragmentManager?,
row: RowRepresentable, row: RowRepresentable,
bottomSheetDelegate: BottomSheetDelegate, bottomSheetDelegate: BottomSheetDelegate,
data: ArrayList<BottomSheetData> data: ArrayList<BottomSheetData>
): BottomSheetFragment { ): BottomSheetFragment {
val bottomSheetFragment = when (row.bottomSheetType) { val bottomSheetFragment = when (row.bottomSheetType) {
BottomSheetType.LIST -> BottomSheetListFragment() BottomSheetType.LIST -> BottomSheetListFragment()
BottomSheetType.LIST_GAME -> BottomSheetListGameFragment()
BottomSheetType.GRID -> BottomSheetTableSizeGridFragment() BottomSheetType.GRID -> BottomSheetTableSizeGridFragment()
BottomSheetType.DOUBLE_LIST -> BottomSheetDoubleListFragment() BottomSheetType.DOUBLE_LIST -> BottomSheetListGameFragment()
BottomSheetType.EDIT_TEXT -> BottomSheetEditTextFragment() BottomSheetType.EDIT_TEXT -> BottomSheetEditTextFragment()
BottomSheetType.DOUBLE_EDIT_TEXT -> BottomSheetDoubleEditTextFragment() BottomSheetType.DOUBLE_EDIT_TEXT -> BottomSheetDoubleEditTextFragment()
BottomSheetType.SUM -> BottomSheetSumFragment() BottomSheetType.SUM -> BottomSheetSumFragment()
@ -62,7 +64,7 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
} }
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_bottom_sheet,container,false) return inflater.inflate(R.layout.fragment_bottom_sheet, container, false)
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -114,8 +116,8 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
return data return data
} }
open fun getValue(): Any { open fun getValue(): Any? {
return Any() return null
} }
/** /**

@ -55,7 +55,6 @@ class BottomSheetListFragment : BottomSheetFragment(), LiveDataDelegate {
* Init data * Init data
*/ */
private fun initData() { private fun initData() {
val bottomSheetData = getData() val bottomSheetData = getData()
if (bottomSheetData.isNotEmpty() && bottomSheetData.first().data != null) { if (bottomSheetData.isNotEmpty() && bottomSheetData.first().data != null) {
this.realmData = bottomSheetData.first().data as RealmResults<*> this.realmData = bottomSheetData.first().data as RealmResults<*>

@ -0,0 +1,103 @@
package net.pokeranalytics.android.ui.fragment.components.bottomsheet
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import androidx.recyclerview.widget.LinearLayoutManager
import io.realm.RealmResults
import kotlinx.android.synthetic.main.bottom_sheet_game_list.*
import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.Game
import net.pokeranalytics.android.ui.adapter.LimitTypesAdapter
import net.pokeranalytics.android.ui.adapter.components.LiveDataAdapter
import net.pokeranalytics.android.ui.adapter.components.LiveDataDataSource
import net.pokeranalytics.android.ui.adapter.components.LiveDataDelegate
import timber.log.Timber
class BottomSheetListGameFragment : BottomSheetFragment(), LiveDataDelegate {
private var realmData: RealmResults<*>? = null
private lateinit var dataAdapter: LiveDataAdapter
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initData()
initUI()
}
override fun onResume() {
super.onResume()
dataAdapter.notifyDataSetChanged()
}
override fun data(position: Int): LiveDataDataSource {
realmData?.let {
return it[position] as LiveDataDataSource
}
//TODO: Change that
return Game()
}
override fun onRowSelected(position: Int) {
realmData?.let {
val selectedData = it[position]
selectedData?.let {data ->
bottomSheetDelegate.setValue(data, row)
dismiss()
}
}
}
override fun size(): Int {
Timber.d("Games: ${realmData?.size}")
return realmData?.size ?: 0
}
/**
* Init data
*/
private fun initData() {
val bottomSheetData = getData()
if (bottomSheetData.isNotEmpty() && bottomSheetData.size >= 2 && bottomSheetData[1].data != null) {
this.realmData = bottomSheetData[1].data as RealmResults<*>
}
}
/**
* Init UI
*/
private fun initUI() {
LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_game_list, view?.bottomSheetContainer, true)
val limits = ArrayList<String>()
limits.addAll(resources.getStringArray(R.array.limit_short_name))
val viewManager1 = LinearLayoutManager(requireContext())
val gameDataAdapter1 = LimitTypesAdapter(limits)
recyclerView1.apply {
setHasFixedSize(true)
layoutManager = viewManager1
adapter = gameDataAdapter1
isNestedScrollingEnabled = false
}
val viewManager2 = LinearLayoutManager(requireContext())
dataAdapter = LiveDataAdapter(this, R.layout.row_bottom_sheet_title)
recyclerView2.apply {
setHasFixedSize(true)
layoutManager = viewManager2
adapter = dataAdapter
}
}
}

@ -28,7 +28,7 @@ class BottomSheetSumFragment : BottomSheetFragment() {
editText1.requestFocus() editText1.requestFocus()
} }
override fun getValue(): Any { override fun getValue(): Any? {
return value return value
} }

@ -15,6 +15,7 @@ class BottomSheetTableSizeGridFragment : BottomSheetFragment() {
private var dataList: ArrayList<String> = ArrayList() private var dataList: ArrayList<String> = ArrayList()
private lateinit var dataAdapter: TableSizeGridAdapter private lateinit var dataAdapter: TableSizeGridAdapter
private var defaultSize: Int? = null
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
@ -27,11 +28,20 @@ class BottomSheetTableSizeGridFragment : BottomSheetFragment() {
dataAdapter.notifyDataSetChanged() dataAdapter.notifyDataSetChanged()
} }
override fun getValue(): Any? {
return defaultSize
}
/** /**
* Init data * Init data
*/ */
private fun initData() { private fun initData() {
val bottomSheetData = getData()
if (bottomSheetData.isNotEmpty() && bottomSheetData.first().defaultValue != null) {
defaultSize = bottomSheetData.first().defaultValue as Int?
}
dataList.add(getString(net.pokeranalytics.android.R.string.heads_up)) dataList.add(getString(net.pokeranalytics.android.R.string.heads_up))
for (i in 3..10) { for (i in 3..10) {
dataList.add("$i-max") dataList.add("$i-max")

@ -149,7 +149,8 @@ enum class SessionRow : RowRepresentable {
CASHED_OUT, BREAK_TIME -> BottomSheetType.EDIT_TEXT CASHED_OUT, BREAK_TIME -> BottomSheetType.EDIT_TEXT
BUY_IN, TIPS -> BottomSheetType.SUM BUY_IN, TIPS -> BottomSheetType.SUM
BLINDS -> BottomSheetType.DOUBLE_EDIT_TEXT BLINDS -> BottomSheetType.DOUBLE_EDIT_TEXT
GAME, LOCATION, BANKROLL -> BottomSheetType.LIST GAME -> BottomSheetType.LIST_GAME
LOCATION, BANKROLL -> BottomSheetType.LIST
TABLE_SIZE -> BottomSheetType.GRID TABLE_SIZE -> BottomSheetType.GRID
COMMENT -> BottomSheetType.EDIT_TEXT COMMENT -> BottomSheetType.EDIT_TEXT
else -> BottomSheetType.NONE else -> BottomSheetType.NONE

@ -1,19 +0,0 @@
<?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/reyclerView1"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:minHeight="200dp" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/reyclerView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="200dp" />
</LinearLayout>

@ -0,0 +1,25 @@
<?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="wrap_content"
android:orientation="horizontal">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView1"
android:layout_width="80dp"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView2"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/recyclerView1"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<array name="blind_structure">
<item>2</item>
<item>4</item>
<item>6</item>
<item>10</item>
<item>20</item>
<item>40</item>
<item>50</item>
<item>60</item>
<item>80</item>
<item>100</item>
<item>150</item>
<item>200</item>
<item>250</item>
<item>300</item>
<item>400</item>
<item>500</item>
<item>600</item>
<item>800</item>
<item>1000</item>
<item>1200</item>
<item>1600</item>
<item>2000</item>
<item>2500</item>
<item>3000</item>
<item>4000</item>
<item>5000</item>
<item>6000</item>
<item>8000</item>
<item>10000</item>
<item>12000</item>
<item>15000</item>
<item>20000</item>
<item>25000</item>
<item>30000</item>
<item>40000</item>
<item>50000</item>
<item>60000</item>
<item>80000</item>
<item>100000</item>
</array>
</resources>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="limit_name">
<item>No Limit</item>
<item>Pot Limit</item>
<item>Fixed Limit</item>
<item>Spread Limit</item>
<item>Mixed Limit</item>
</string-array>
<string-array name="limit_short_name">
<item>NL</item>
<item>PL</item>
<item>FL</item>
<item>SL</item>
<item>ML</item>
</string-array>
</resources>

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="game_name">
<item>Hold\'em</item>
<item>Omaha</item>
<item>Omaha Hi-Low</item>
<item>Seven Card Stud</item>
<item>Seven Card Stud Hi-Low</item>
<item>H.O.R.S.E.</item>
<item>Seven Card Razz</item>
</string-array>
<string-array name="game_short_name">
<item>HE</item>
<item>OH</item>
<item>OH8</item>
<item>7S</item>
<item>Stud8</item>
<item>HORSE</item>
<item>Razz</item>
</string-array>
</resources>

@ -18,7 +18,6 @@
<string name="standard_deviation_hourly">Standard deviation hourly</string> <string name="standard_deviation_hourly">Standard deviation hourly</string>
<string name="hands_played">Hands played</string> <string name="hands_played">Hands played</string>
<string name="save">Save</string>
<!-- <!--
<string name="bankroll">Bankroll</string> <string name="bankroll">Bankroll</string>
@ -730,4 +729,6 @@
<string name="bb_ante_option">Big Blind Ante</string> <string name="bb_ante_option">Big Blind Ante</string>
<string name="show_fullscreen">Show full screen</string> <string name="show_fullscreen">Show full screen</string>
<string name="save">Save</string>
</resources> </resources>

Loading…
Cancel
Save