Fix Session conflict

dev_raz_wip
Laurent 7 years ago
commit 120e352bca
  1. 19
      app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt
  2. 22
      app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt
  3. 22
      app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt
  4. 355
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  5. 21
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt
  6. 21
      app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt
  7. 13
      app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DataListAdapter.kt
  8. 115
      app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt
  9. 9
      app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt
  10. 42
      app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt
  11. 6
      app/src/main/java/net/pokeranalytics/android/ui/fragment/NewSessionFragment.kt
  12. 11
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetData.kt
  13. 35
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDoubleEditTextFragment.kt
  14. 48
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetEditTextFragment.kt
  15. 37
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetFragment.kt
  16. 54
      app/src/main/res/layout/bottom_sheet_double_edit_text.xml
  17. 43
      app/src/main/res/layout/bottom_sheet_edit_text.xml
  18. 3
      app/src/main/res/layout/fragment_bottom_sheet.xml
  19. 3
      app/src/main/res/layout/fragment_data_list.xml
  20. 83
      app/src/main/res/layout/fragment_editable_data.xml
  21. 6
      app/src/main/res/menu/bottom_sheet_menu.xml
  22. 1
      app/src/main/res/values/colors.xml
  23. 10
      app/src/main/res/values/strings.xml
  24. 16
      app/src/main/res/values/styles.xml

@ -38,11 +38,28 @@ open class Bankroll(name: String = "") : RealmObject(), DynamicRowDelegate, Disp
// @todo rate management // @todo rate management
override var title: String = this.name override val title: String get() = this.id
override val primaryKey: String get() = this.id
override fun adapterRows(): ArrayList<DynamicRowInterface> { override fun adapterRows(): ArrayList<DynamicRowInterface> {
val rows = ArrayList<DynamicRowInterface>() val rows = ArrayList<DynamicRowInterface>()
rows.addAll(BankrollRow.values()) rows.addAll(BankrollRow.values())
return rows return rows
} }
override fun stringForRow(row: DynamicRowInterface): String {
return when (row) {
BankrollRow.NAME -> this.id
BankrollRow.LIVE -> if (this.live) "live" else "online"
BankrollRow.CURRENCY -> this.currency?.code?: ""
else -> return super.stringForRow(row)
}
}
override fun boolForRow(row: DynamicRowInterface): Boolean {
when (row) {
BankrollRow.LIVE -> return true
else -> return super.boolForRow(row)
}
}
} }

@ -2,10 +2,10 @@ package net.pokeranalytics.android.model.realm
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource import net.pokeranalytics.android.ui.adapter.components.*
import java.util.* import java.util.*
open class Game : RealmObject(), DisplayableDataSource { open class Game : RealmObject(), DynamicRowDelegate, DisplayableDataSource {
@PrimaryKey @PrimaryKey
var id = UUID.randomUUID().toString() var id = UUID.randomUUID().toString()
@ -16,8 +16,20 @@ open class Game : RealmObject(), DisplayableDataSource {
// A shorter name for the game // A shorter name for the game
var shortName: String? = null var shortName: String? = null
override var title: String = "" override val title: String get() = this.id
get() { override val primaryKey: String get() = this.id
return name
override fun adapterRows(): ArrayList<DynamicRowInterface> {
val rows = ArrayList<DynamicRowInterface>()
rows.addAll(GameRow.values())
return rows
}
override fun stringForRow(row: DynamicRowInterface): String {
return when (row) {
GameRow.NAME -> this.id
else -> return super.stringForRow(row)
} }
}
} }

@ -2,10 +2,14 @@ package net.pokeranalytics.android.model.realm
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource
import net.pokeranalytics.android.ui.adapter.components.DynamicRowDelegate
import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface
import net.pokeranalytics.android.ui.adapter.components.LocationRow
import java.util.* import java.util.*
open class Location : RealmObject() { open class Location : RealmObject(), DynamicRowDelegate, DisplayableDataSource {
@PrimaryKey @PrimaryKey
var id = UUID.randomUUID().toString() var id = UUID.randomUUID().toString()
@ -19,4 +23,20 @@ open class Location : RealmObject() {
// the latitude of the location // the latitude of the location
var latitude: Double? = null var latitude: Double? = null
override val title: String get() = this.id
override val primaryKey: String get() = this.id
override fun adapterRows(): ArrayList<DynamicRowInterface> {
val rows = ArrayList<DynamicRowInterface>()
rows.addAll(LocationRow.values())
return rows
}
override fun stringForRow(row: DynamicRowInterface): String {
return when (row) {
LocationRow.NAME -> this.id
else -> return super.stringForRow(row)
}
}
} }

@ -1,157 +1,178 @@
package net.pokeranalytics.android.model.realm package net.pokeranalytics.android.model.realm
import android.text.InputType
import io.realm.* import io.realm.*
import io.realm.annotations.Ignore import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.calculus.SessionInterface import net.pokeranalytics.android.calculus.SessionInterface
import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource import net.pokeranalytics.android.ui.adapter.components.*
import net.pokeranalytics.android.ui.adapter.components.DynamicRowDelegate import net.pokeranalytics.android.ui.fragment.components.BottomSheetData
import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface
import net.pokeranalytics.android.ui.adapter.components.SessionRow
import net.pokeranalytics.android.util.data.sessionDao import net.pokeranalytics.android.util.data.sessionDao
import java.util.* import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
open class Session : RealmObject(), SessionInterface, DynamicRowDelegate, DisplayableDataSource { open class Session : RealmObject(), SessionInterface, DynamicRowDelegate, DisplayableDataSource, EditableDataSource {
@PrimaryKey @PrimaryKey
var id = UUID.randomUUID().toString() var id = UUID.randomUUID().toString()
// The result of the main user // The result of the main user
var result: Result? = null var result: Result? = null
// The time frame of the Session, i.e. the start & end date // The time frame of the Session, i.e. the start & end date
var timeFrame: TimeFrame? = null var timeFrame: TimeFrame? = null
// The time frame sessionGroup, which can contain multiple sessions // The time frame sessionGroup, which can contain multiple sessions
override var sessionSet: SessionSet? = null override var sessionSet: SessionSet? = null
// the date of creation of the app // the date of creation of the app
var creationDate: Date = Date() var creationDate: Date = Date()
// The bankroll hosting the results // The bankroll hosting the results
var bankroll: Bankroll? = null var bankroll: Bankroll? = null
// The limit type: NL, PL... // The limit type: NL, PL...
var limit: Int? = null var limit: Int? = null
// The game played during the Session // The game played during the Session
var game: Game? = null var game: Game? = null
// The number of players at the table // The number of players at the table
var tableSize: Int? = null var tableSize: Int? = null
// the location where the session is played // the location where the session is played
var location: Location? = null var location: Location? = null
// The number of tables played at the same time // The number of tables played at the same time
var numberOfTables: Int = 1 var numberOfTables: Int = 1
// The hands list associated with the Session // The hands list associated with the Session
var hands: RealmList<HandHistory> = RealmList() var hands: RealmList<HandHistory> = RealmList()
// The list of opponents who participated to the session // The list of opponents who participated to the session
var opponents: RealmList<Player> = RealmList() var opponents: RealmList<Player> = RealmList()
// A comment written by the user // A comment written by the user
var comment: String = "" var comment: String = ""
// Cash Game // Cash Game
// The small blind value // The small blind value
var cgSmallBlind: Double? = null var cgSmallBlind: Double? = null
// The big blind value // The big blind value
var cgBigBlind: Double? = null var cgBigBlind: Double? = null
// Tournament // Tournament
// The entry fee of the tournament // The entry fee of the tournament
var tournamentEntryFee: Double? = null var tournamentEntryFee: Double? = null
// The total number of players who participated in the tournament // The total number of players who participated in the tournament
var tournamentNumberOfPlayers: Int? = null var tournamentNumberOfPlayers: Int? = null
// The name of the tournament // The name of the tournament
var tournamentType: TournamentName? = null var tournamentType: TournamentName? = null
// The kind of the tournament, MTT or SnG // The kind of the tournament, MTT or SnG
var tournamentKind: Int? = null var tournamentKind: Int? = null
// The features of the tournament, like Knockout, Shootout, Turbo... // The features of the tournament, like Knockout, Shootout, Turbo...
var tournamentFeatures: RealmList<TournamentFeature> = RealmList() var tournamentFeatures: RealmList<TournamentFeature> = RealmList()
companion object { companion object {
fun newInstance(): Session { fun newInstance(): Session {
var session: Session = Session() var session: Session = Session()
session.result = Result() session.result = Result()
session.timeFrame = TimeFrame() session.timeFrame = TimeFrame()
return session return session
} }
} }
@Ignore // SessionInterface value @Ignore // SessionInterface value
override var value: Double = 0.0 override var value: Double = 0.0
get() { get() {
return this.result?.net ?: 0.0 return this.result?.net ?: 0.0
} }
@Ignore @Ignore
override var estimatedHands: Double = 0.0 override var estimatedHands: Double = 0.0
@Ignore @Ignore
override var bbNetResult: Double = 0.0 override var bbNetResult: Double = 0.0
get() { get() {
this.cgBigBlind?.let { bb -> this.cgBigBlind?.let { bb ->
this.result?.let { result -> this.result?.let { result ->
return result.net / bb return result.net / bb
} }
} }
return 0.0 return 0.0
} }
@Ignore @Ignore
override var bigBlindSessionCount: Int = if (this.cgBigBlind != null) 1 else 0 override var bigBlindSessionCount: Int = if (this.cgBigBlind != null) 1 else 0
@Ignore @Ignore
override var buyin: Double = 0.0 override var buyin: Double = 0.0
get() { get() {
this.result?.let { this.result?.let {
it.buyin?.let { it.buyin?.let {
return it return it
} }
} }
return 0.0 return 0.0
} }
override fun adapterRows(): ArrayList<DynamicRowInterface> {
override fun adapterRows(): ArrayList<DynamicRowInterface> { val rows = ArrayList<DynamicRowInterface>()
val rows = ArrayList<DynamicRowInterface>() rows.addAll(SessionRow.values())
rows.addAll(SessionRow.values()) return rows
return rows }
}
override fun boolForRow(row: DynamicRowInterface): Boolean {
override fun boolForRow(row: DynamicRowInterface): Boolean { return false
return false }
}
override fun stringForRow(row: DynamicRowInterface): String {
override fun stringForRow(row: DynamicRowInterface): String { return when (row) {
return when (row) { SessionRow.BLINDS -> if (cgSmallBlind != null && cgBigBlind != null) "$cgSmallBlind / $cgBigBlind" else "--"
SessionRow.BLINDS -> "Blinds" SessionRow.GAME -> game?.title ?: "--"
SessionRow.GAME -> "Game" SessionRow.DATE -> if (timeFrame != null) timeFrame?.startDate.toString() else "--"
SessionRow.DATE -> "Date" else -> "--"
else -> "--" }
} }
}
override var title: String = "Change that: $creationDate"
override var title: String = "Change that: $creationDate" override val primaryKey: String get() = this.id
override fun getBottomSheetData(row: DynamicRowInterface): ArrayList<BottomSheetData> {
val data = ArrayList<BottomSheetData>()
// Todo: Localize & set real data
when (row) {
SessionRow.GAME -> {
data.add(BottomSheetData(game, "", 0, arrayListOf(Game(), Game(), Game())))
}
SessionRow.DATE -> {
data.add(BottomSheetData(timeFrame?.startDate, "Start date"))
data.add(BottomSheetData(timeFrame?.endDate, "End date"))
}
SessionRow.BLINDS -> {
data.add(BottomSheetData(cgSmallBlind, "Small blind", InputType.TYPE_CLASS_NUMBER))
data.add(BottomSheetData(cgBigBlind, "Big blind", InputType.TYPE_CLASS_NUMBER))
}
}
return data
}
} }
enum class TournamentKind { enum class TournamentKind {
MTT, MTT,
SNG SNG
} }
@ -160,63 +181,63 @@ enum class TournamentKind {
*/ */
class SessionDao(realmDb: Realm) { class SessionDao(realmDb: Realm) {
var realm: Realm = realmDb var realm: Realm = realmDb
/** /**
* Create or update session * Create or update session
*/ */
fun createOrUpdateSession(session: Session): Session { fun createOrUpdateSession(session: Session): Session {
realm.beginTransaction() realm.beginTransaction()
val sessionToSave = realm.copyToRealmOrUpdate(session) val sessionToSave = realm.copyToRealmOrUpdate(session)
realm.commitTransaction() realm.commitTransaction()
return realm.copyFromRealm(sessionToSave) return realm.copyFromRealm(sessionToSave)
} }
/** /**
* Create or update sessions * Create or update sessions
*/ */
fun createOrUpdateSessions(sessions: List<Session>): List<Session> { fun createOrUpdateSessions(sessions: List<Session>): List<Session> {
realm.beginTransaction() realm.beginTransaction()
// Update // Update
val sessionsToSave = realm.copyToRealmOrUpdate(sessions) val sessionsToSave = realm.copyToRealmOrUpdate(sessions)
realm.commitTransaction() realm.commitTransaction()
return realm.copyFromRealm(sessionsToSave) return realm.copyFromRealm(sessionsToSave)
} }
/** /**
* Find all sessions * Find all sessions
*/ */
fun findAllSessions(): RealmResults<Session> { fun findAllSessions(): RealmResults<Session> {
return realm.where(Session::class.java).findAll().sort("creationDate", Sort.DESCENDING) return realm.where(Session::class.java).findAll().sort("creationDate", Sort.DESCENDING)
} }
/** /**
* Find session by id * Find session by id
*/ */
fun findSessionById(sessionId: Int): Session? { fun findSessionById(sessionId: Int): Session? {
return realm.copyFromRealm(realm.where(Session::class.java).equalTo("id", sessionId).findFirst()) return realm.copyFromRealm(realm.where(Session::class.java).equalTo("id", sessionId).findFirst())
} }
/** /**
* Delete session * Delete session
*/ */
fun deleteSession(sessionId: Int) { fun deleteSession(sessionId: Int) {
realm.beginTransaction() realm.beginTransaction()
realm.sessionDao().findSessionById(sessionId)?.deleteFromRealm() realm.sessionDao().findSessionById(sessionId)?.deleteFromRealm()
realm.commitTransaction() realm.commitTransaction()
} }
/** /**
* Delete all sessions * Delete all sessions
*/ */
fun deleteAllSessions() { fun deleteAllSessions() {
realm.beginTransaction() realm.beginTransaction()
realm.sessionDao().findAllSessions().deleteAllFromRealm() realm.sessionDao().findAllSessions().deleteAllFromRealm()
realm.commitTransaction() realm.commitTransaction()
} }
} }

@ -2,9 +2,13 @@ package net.pokeranalytics.android.model.realm
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource
import net.pokeranalytics.android.ui.adapter.components.DynamicRowDelegate
import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface
import net.pokeranalytics.android.ui.adapter.components.TournamentFeatureRow
import java.util.* import java.util.*
open class TournamentFeature : RealmObject() { open class TournamentFeature : RealmObject(), DynamicRowDelegate, DisplayableDataSource {
@PrimaryKey @PrimaryKey
var id = UUID.randomUUID().toString() var id = UUID.randomUUID().toString()
@ -12,4 +16,19 @@ open class TournamentFeature : RealmObject() {
// The name of the feature // The name of the feature
var name: String = "" var name: String = ""
override val title: String get() = this.id
override val primaryKey: String get() = this.id
override fun adapterRows(): ArrayList<DynamicRowInterface> {
val rows = ArrayList<DynamicRowInterface>()
rows.addAll(TournamentFeatureRow.values())
return rows
}
override fun stringForRow(row: DynamicRowInterface): String {
return when (row) {
TournamentFeatureRow.NAME -> this.id
else -> return super.stringForRow(row)
}
}
} }

@ -2,10 +2,14 @@ package net.pokeranalytics.android.model.realm
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource
import net.pokeranalytics.android.ui.adapter.components.DynamicRowDelegate
import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface
import net.pokeranalytics.android.ui.adapter.components.TransactionTypeRow
import java.util.* import java.util.*
open class TransactionType : RealmObject() { open class TransactionType : RealmObject(), DynamicRowDelegate, DisplayableDataSource {
@PrimaryKey @PrimaryKey
var id = UUID.randomUUID().toString() var id = UUID.randomUUID().toString()
@ -22,6 +26,21 @@ open class TransactionType : RealmObject() {
// The predefined kind, if necessary, like: Withdrawal, deposit, or tips // The predefined kind, if necessary, like: Withdrawal, deposit, or tips
var kind: Int? = null var kind: Int? = null
override val title: String get() = this.id
override val primaryKey: String get() = this.id
override fun adapterRows(): ArrayList<DynamicRowInterface> {
val rows = ArrayList<DynamicRowInterface>()
rows.addAll(TransactionTypeRow.values())
return rows
}
override fun stringForRow(row: DynamicRowInterface): String {
return when (row) {
TransactionTypeRow.NAME -> this.id
else -> return super.stringForRow(row)
}
}
} }
enum class TransactionKind { enum class TransactionKind {

@ -6,7 +6,9 @@ import android.view.ViewGroup
import androidx.appcompat.widget.AppCompatTextView import androidx.appcompat.widget.AppCompatTextView
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.fragment_data_list.view.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.fragment.components.BottomSheetData
interface DisplayableDelegate { interface DisplayableDelegate {
fun data(position: Int) : DisplayableDataSource fun data(position: Int) : DisplayableDataSource
@ -15,16 +17,18 @@ interface DisplayableDelegate {
} }
interface DisplayableDataSource { interface DisplayableDataSource {
var title: String val title: String
val primaryKey: String
}
interface EditableDataSource {
fun getBottomSheetData(row: DynamicRowInterface): ArrayList<BottomSheetData>
} }
class DataListAdapter(var delegate: DisplayableDelegate, var layout: Int? = null) : RecyclerView.Adapter<RecyclerView.ViewHolder>() { class DataListAdapter(var delegate: DisplayableDelegate, var layout: Int? = null) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
inner class DataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { inner class DataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(row: DisplayableDataSource, listener: View.OnClickListener) { fun bind(row: DisplayableDataSource, listener: View.OnClickListener) {
//itemView.title.text = row.title
//itemView.container.setOnClickListener(listener)
try { try {
itemView.findViewById<AppCompatTextView>(R.id.title).text = row.title itemView.findViewById<AppCompatTextView>(R.id.title).text = row.title
itemView.findViewById<ConstraintLayout>(R.id.container).setOnClickListener(listener) itemView.findViewById<ConstraintLayout>(R.id.container).setOnClickListener(listener)
@ -54,5 +58,4 @@ class DataListAdapter(var delegate: DisplayableDelegate, var layout: Int? = null
} }
(holder as DataViewHolder).bind(this.delegate.data(position), listener) (holder as DataViewHolder).bind(this.delegate.data(position), listener)
} }
} }

@ -36,9 +36,9 @@ class SectionRow(stringRes: Int) : DynamicRowInterface {
} }
enum class SessionRow(val resId: Int) : DynamicRowInterface { enum class SessionRow(val resId: Int) : DynamicRowInterface {
BLINDS(R.string.app_name), BLINDS(R.string.blinds),
GAME(R.string.title_history), GAME(R.string.game),
DATE(R.string.title_settings); DATE(R.string.date);
override fun localizedTitle(context: Context): String { override fun localizedTitle(context: Context): String {
return context.getString(this.resId) return context.getString(this.resId)
@ -59,24 +59,119 @@ enum class SessionRow(val resId: Int) : DynamicRowInterface {
DATE -> BottomSheetType.DATE DATE -> BottomSheetType.DATE
} }
} }
} }
enum class BankrollRow(val resId: Int) : DynamicRowInterface { enum class BankrollRow(val resId: Int) : DynamicRowInterface {
NAME(R.string.app_name), NAME(R.string.name),
LIVE(R.string.app_name), LIVE(R.string.live),
CURRENCY(R.string.app_name); CURRENCY(R.string.currency);
override fun localizedTitle(context: Context): String {
return context.getString(this.resId)
}
override var viewType: Int = RowViewType.HEADER.ordinal
get() {
return when (this) {
NAME, LIVE, CURRENCY -> RowViewType.TITLE_VALUE.ordinal
}
}
override var bottomSheetType: BottomSheetType = BottomSheetType.NONE
get() {
return when (this) {
NAME -> BottomSheetType.EDIT_TEXT
LIVE -> BottomSheetType.NONE
CURRENCY -> BottomSheetType.LIST
}
}
}
enum class GameRow(val resId: Int) : DynamicRowInterface {
NAME(R.string.name);
override fun localizedTitle(context: Context): String {
return context.getString(this.resId)
}
override var viewType: Int = RowViewType.HEADER.ordinal
get() {
return when (this) {
NAME -> RowViewType.TITLE_VALUE.ordinal
}
}
override var bottomSheetType: BottomSheetType = BottomSheetType.NONE
get() {
return when (this) {
NAME -> BottomSheetType.EDIT_TEXT
}
}
}
enum class LocationRow(val resId: Int) : DynamicRowInterface {
NAME(R.string.name);
override fun localizedTitle(context: Context): String {
return context.getString(this.resId)
}
override var viewType: Int = RowViewType.HEADER.ordinal
get() {
return when (this) {
NAME -> RowViewType.TITLE_VALUE.ordinal
}
}
override var bottomSheetType: BottomSheetType = BottomSheetType.NONE
get() {
return when (this) {
NAME -> BottomSheetType.EDIT_TEXT
}
}
}
enum class TransactionTypeRow(val resId: Int) : DynamicRowInterface {
NAME(R.string.name);
override fun localizedTitle(context: Context): String {
return context.getString(this.resId)
}
override var viewType: Int = RowViewType.HEADER.ordinal
get() {
return when (this) {
NAME -> RowViewType.TITLE_VALUE.ordinal
}
}
override var bottomSheetType: BottomSheetType = BottomSheetType.NONE
get() {
return when (this) {
NAME -> BottomSheetType.EDIT_TEXT
}
}
}
enum class TournamentFeatureRow(val resId: Int) : DynamicRowInterface {
NAME(R.string.name);
override fun localizedTitle(context: Context): String { override fun localizedTitle(context: Context): String {
return context.getString(this.resId) return context.getString(this.resId)
} }
override var viewType: Int = 1 override var viewType: Int = RowViewType.HEADER.ordinal
get() {
return when (this) {
NAME -> RowViewType.TITLE_VALUE.ordinal
}
}
override var bottomSheetType: BottomSheetType = BottomSheetType.NONE override var bottomSheetType: BottomSheetType = BottomSheetType.NONE
get() { get() {
return when (this) { return when (this) {
NAME -> BottomSheetType.DATE NAME -> BottomSheetType.EDIT_TEXT
LIVE -> BottomSheetType.DATE
CURRENCY -> BottomSheetType.DATE
} }
} }
} }

@ -6,12 +6,14 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import io.realm.Realm import io.realm.Realm
import io.realm.RealmChangeListener
import io.realm.RealmResults import io.realm.RealmResults
import kotlinx.android.synthetic.main.fragment_data_list.* import kotlinx.android.synthetic.main.fragment_data_list.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.activity.EditableDataActivity import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.adapter.components.*
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
import timber.log.Timber
class DataListFragment : PokerAnalyticsFragment(), DisplayableDelegate { class DataListFragment : PokerAnalyticsFragment(), DisplayableDelegate {
@ -34,7 +36,7 @@ class DataListFragment : PokerAnalyticsFragment(), DisplayableDelegate {
} }
override fun onRowSelected(position: Int) { override fun onRowSelected(position: Int) {
EditableDataActivity.newInstance(requireContext(), this.dataType.ordinal, null) EditableDataActivity.newInstance(requireContext(), this.dataType.ordinal, this.data(position).primaryKey)
} }
override fun size(): Int { override fun size(): Int {
@ -70,7 +72,12 @@ class DataListFragment : PokerAnalyticsFragment(), DisplayableDelegate {
*/ */
fun setData(dataType: Int) { fun setData(dataType: Int) {
this.dataType = SettingRow.values()[dataType] this.dataType = SettingRow.values()[dataType]
this.title.text = this.dataType.name.toLowerCase().capitalize()
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
this.items = this.dataType.items(realm) this.items = this.dataType.items(realm)
this.items.addChangeListener { newItems ->
Timber.d("newItems: ${newItems.size}")
this.recyclerView.adapter?.notifyDataSetChanged()
}
} }
} }

@ -8,11 +8,13 @@ import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import io.realm.Realm import io.realm.Realm
import io.realm.RealmObject import io.realm.RealmObject
import kotlinx.android.synthetic.main.fragment_new_session.* import kotlinx.android.synthetic.main.bottom_sheet_bankroll.*
import kotlinx.android.synthetic.main.fragment_editable_data.*
import kotlinx.android.synthetic.main.fragment_editable_data.view.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.adapter.components.DynamicRowCallback import net.pokeranalytics.android.model.realm.Bankroll
import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.components.SettingRow import net.pokeranalytics.android.ui.adapter.components.*
import net.pokeranalytics.android.ui.fragment.components.BottomSheetDelegate import net.pokeranalytics.android.ui.fragment.components.BottomSheetDelegate
import net.pokeranalytics.android.ui.fragment.components.BottomSheetFragment import net.pokeranalytics.android.ui.fragment.components.BottomSheetFragment
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
@ -23,9 +25,8 @@ class EditableDataFragment : PokerAnalyticsFragment(), DynamicRowCallback, Botto
private lateinit var item: RealmObject private lateinit var item: RealmObject
private var dataType: SettingRow = SettingRow.BANKROLL private var dataType: SettingRow = SettingRow.BANKROLL
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_data_list, container, false) return inflater.inflate(R.layout.fragment_editable_data, container, false)
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -36,7 +37,7 @@ class EditableDataFragment : PokerAnalyticsFragment(), DynamicRowCallback, Botto
override fun onRowSelected(row: DynamicRowInterface) { override fun onRowSelected(row: DynamicRowInterface) {
val data = item val data = item
BottomSheetFragment.create(fragmentManager, row, this, data) BottomSheetFragment.create(fragmentManager, row, this, ArrayList())
} }
override fun setValue(value: Any, row: DynamicRowInterface) { override fun setValue(value: Any, row: DynamicRowInterface) {
@ -44,12 +45,15 @@ class EditableDataFragment : PokerAnalyticsFragment(), DynamicRowCallback, Botto
} }
private fun initData() { private fun initData() {
} }
/** /**
* Init UI * Init UI
*/ */
private fun initUI() { private fun initUI() {
val activity = activity as PokerAnalyticsActivity
activity.setSupportActionBar(toolbar)
activity.supportActionBar?.setDisplayHomeAsUpEnabled(true)
val viewManager = LinearLayoutManager(requireContext()) val viewManager = LinearLayoutManager(requireContext())
@ -63,26 +67,30 @@ class EditableDataFragment : PokerAnalyticsFragment(), DynamicRowCallback, Botto
* Set fragment data * Set fragment data
*/ */
fun setData(dataType: Int, primaryKey: String?) { fun setData(dataType: Int, primaryKey: String?) {
this.dataType = SettingRow.values()[dataType] this.dataType = SettingRow.values()[dataType]
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
var _item : RealmObject? = null var proxyItem : RealmObject? = null
primaryKey?.let { primaryKey?.let {
val t = realm.where(this.dataType.clazz()).equalTo("id", it).findFirst() val t = realm.where(this.dataType.clazz()).equalTo("id", it).findFirst()
t?.let { t?.let {
_item = t proxyItem = t
} }
} }
realm.beginTransaction() proxyItem?.let {
_item?.let {
this.item = realm.copyFromRealm(it) this.item = realm.copyFromRealm(it)
this.appBar.toolbar.title = "Update ${this.dataType.name.toLowerCase().capitalize()}"
} ?: run { } ?: run {
this.item = realm.createObject(this.dataType.clazz(), UUID.randomUUID().toString()) realm.beginTransaction()
val t = realm.createObject(this.dataType.clazz(), UUID.randomUUID().toString())
realm.commitTransaction()
this.item = realm.copyFromRealm(t)
this.appBar.toolbar.title = "New ${this.dataType.name.toLowerCase().capitalize()}"
} }
realm.commitTransaction()
//TODO: Crash happens here val dynamicListAdapter = DynamicListAdapter((this.item as DynamicRowDelegate), this)
//val dynamicListAdapter = DynamicListAdapter((this.item as DynamicRowDelegate), this) this.recyclerView.adapter = dynamicListAdapter
//this.recyclerView.adapter = dynamicListAdapter
} }
} }

@ -32,16 +32,16 @@ class NewSessionFragment : PokerAnalyticsFragment(), DynamicRowCallback, BottomS
} }
override fun onRowSelected(row: DynamicRowInterface) { override fun onRowSelected(row: DynamicRowInterface) {
/*
val data = when (row.bottomSheetType) { val data = when (row.bottomSheetType) {
/*
BottomSheetType.BLINDS -> newSession BottomSheetType.BLINDS -> newSession
BottomSheetType.DATE -> newSession.timeFrame BottomSheetType.DATE -> newSession.timeFrame
BottomSheetType.GAME -> newSession.game BottomSheetType.GAME -> newSession.game
*/
else -> Any() else -> Any()
} }
*/
val data = newSession.getBottomSheetData(row)
BottomSheetFragment.create(fragmentManager, row, this, data) BottomSheetFragment.create(fragmentManager, row, this, data)
} }

@ -0,0 +1,11 @@
package net.pokeranalytics.android.ui.fragment.components
import android.text.InputType
import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource
class BottomSheetData(
var defaultValue: Any? = null,
var hint: String? = "",
var inputType: Int? = InputType.TYPE_CLASS_TEXT,
var data: ArrayList<DisplayableDataSource>? = ArrayList()
)

@ -1,17 +1,15 @@
package net.pokeranalytics.android.ui.fragment.components package net.pokeranalytics.android.ui.fragment.components
import android.os.Bundle import android.os.Bundle
import android.text.InputType
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import kotlinx.android.synthetic.main.bottom_sheet_double_edit_text.* import kotlinx.android.synthetic.main.bottom_sheet_double_edit_text.*
import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.* import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.Game
import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource
import net.pokeranalytics.android.ui.adapter.components.DisplayableDelegate
class BottomSheetDoubleEditTextFragment : BottomSheetFragment(), DisplayableDelegate { class BottomSheetDoubleEditTextFragment : BottomSheetFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
@ -27,25 +25,13 @@ class BottomSheetDoubleEditTextFragment : BottomSheetFragment(), DisplayableDele
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
smallBlind.requestFocus() editText1.requestFocus()
}
override fun data(position: Int): DisplayableDataSource {
return Game()
}
override fun onRowSelected(position: Int) {
}
override fun size(): Int {
return 0
} }
/** /**
* Init data * Init data
*/ */
private fun initData() { private fun initData() {
val data = getData()
} }
/** /**
@ -53,8 +39,23 @@ class BottomSheetDoubleEditTextFragment : BottomSheetFragment(), DisplayableDele
*/ */
private fun initUI() { private fun initUI() {
val data = getData()
LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_double_edit_text, view?.bottomSheetContainer, true) LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_double_edit_text, view?.bottomSheetContainer, true)
if (data.size == 2) {
editText1.hint = data[0].hint
editText1.setText((data[0].defaultValue ?: "").toString())
editText1.inputType = data[0].inputType ?: InputType.TYPE_CLASS_TEXT
editText2.hint = data[1].hint
editText2.setText((data[1].defaultValue ?: "").toString())
editText2.inputType = data[1].inputType ?: InputType.TYPE_CLASS_TEXT
}
} }
} }

@ -0,0 +1,48 @@
package net.pokeranalytics.android.ui.fragment.components
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import kotlinx.android.synthetic.main.bottom_sheet_edit_text.*
import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.*
import net.pokeranalytics.android.R
class BottomSheetEditTextFragment : BottomSheetFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initData()
initUI()
}
override fun clickOnCheck() {
super.clickOnCheck()
valueDelegate.setValue("", row)
dismiss()
}
override fun onStart() {
super.onStart()
editText1.requestFocus()
}
/**
* Init data
*/
private fun initData() {
val data = getData()
}
/**
* Init UI
*/
private fun initUI() {
LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_edit_text, view?.bottomSheetContainer, true)
}
}

@ -38,14 +38,14 @@ open class BottomSheetFragment : BottomSheetDialogFragment(), BottomSheetInterfa
lateinit var row: DynamicRowInterface lateinit var row: DynamicRowInterface
lateinit var valueDelegate: BottomSheetDelegate lateinit var valueDelegate: BottomSheetDelegate
private var data: Any? = null private var data: ArrayList<BottomSheetData> = ArrayList()
companion object { companion object {
fun create( fun create(
fragmentManager: FragmentManager?, fragmentManager: FragmentManager?,
row: DynamicRowInterface, row: DynamicRowInterface,
valueDelegate: BottomSheetDelegate, valueDelegate: BottomSheetDelegate,
data: Any? data: ArrayList<BottomSheetData>
): BottomSheetFragment { ): BottomSheetFragment {
val bottomSheetFragment = when (row.bottomSheetType) { val bottomSheetFragment = when (row.bottomSheetType) {
@ -99,33 +99,36 @@ open class BottomSheetFragment : BottomSheetDialogFragment(), BottomSheetInterfa
* Init UI * Init UI
*/ */
private fun initUI() { private fun initUI() {
row.let { row.let {
bottomSheetToolbar.title = row.localizedTitle(requireContext()) bottomSheetToolbar.title = row.localizedTitle(requireContext())
bottomSheetToolbar.inflateMenu(net.pokeranalytics.android.R.menu.bottom_sheet_menu) bottomSheetToolbar.inflateMenu(net.pokeranalytics.android.R.menu.bottom_sheet_menu)
bottomSheetToolbar.setOnMenuItemClickListener { bottomSheetToolbar.setOnMenuItemClickListener {
false false
} }
}
// Menu // Menu
bottomSheetToolbar.menu.findItem(R.id.actionClear).setOnMenuItemClickListener { bottomSheetToolbar.menu.findItem(R.id.actionClear).setOnMenuItemClickListener {
clickOnClear() clickOnClear()
true true
} }
bottomSheetToolbar.menu.findItem(R.id.actionAdd).setOnMenuItemClickListener { bottomSheetToolbar.menu.findItem(R.id.actionAdd).setOnMenuItemClickListener {
clickOnAdd() clickOnAdd()
true true
} }
bottomSheetToolbar.menu.findItem(R.id.actionCheck).setOnMenuItemClickListener { bottomSheetToolbar.menu.findItem(R.id.actionCheck).setOnMenuItemClickListener {
clickOnCheck() clickOnCheck()
true true
}
} }
} }
/** /**
* Return the data object * Return the data list
*/ */
fun getData(): Any? { fun getData(): ArrayList<BottomSheetData> {
return data return data
} }

@ -7,53 +7,41 @@
android:orientation="vertical" android:orientation="vertical"
tools:background="@color/gray_darker"> tools:background="@color/gray_darker">
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatEditText
android:id="@+id/appCompatTextView" android:id="@+id/editText1"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:layout_marginEnd="8dp" android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp" android:layout_marginBottom="16dp"
android:text="Blinds" android:gravity="center"
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:imeOptions="actionNext"
android:inputType="numberDecimal"
android:lines="1" android:lines="1"
android:textColor="@color/white"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/bigBlind" app:layout_constraintEnd_toStartOf="@+id/editText2"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="10" />
<androidx.appcompat.widget.AppCompatEditText <androidx.appcompat.widget.AppCompatEditText
android:id="@+id/bigBlind" android:id="@+id/editText2"
android:layout_width="96dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="8dp" android:layout_marginTop="16dp"
android:layout_marginEnd="8dp" android:layout_marginEnd="16dp"
android:layout_marginBottom="8dp" android:layout_marginBottom="16dp"
android:gravity="end|center_vertical" android:gravity="center"
android:imeOptions="actionDone" android:imeOptions="actionDone"
android:inputType="numberDecimal"
android:lines="1" android:lines="1"
android:textColor="@color/white"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/editText1"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0"
tools:text="20" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

@ -0,0 +1,43 @@
<?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_darker">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title"
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:textColor="@color/white"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/editText1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Blinds" />
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/editText1"
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"
tools:hint="Test" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -4,11 +4,12 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="#222222"> android:background="@color/gray_dark">
<androidx.appcompat.widget.Toolbar <androidx.appcompat.widget.Toolbar
android:id="@+id/bottomSheetToolbar" android:id="@+id/bottomSheetToolbar"
android:layout_width="0dp" android:layout_width="0dp"
style="@style/PokerAnalyticsTheme.Toolbar"
android:layout_height="?actionBarSize" android:layout_height="?actionBarSize"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"

@ -12,7 +12,7 @@
android:layout_marginStart="8dp" android:layout_marginStart="8dp"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:text="Data List" tools:text="Data List"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
@ -38,4 +38,5 @@
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" /> app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

@ -1,68 +1,57 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<androidx.core.widget.NestedScrollView <androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="400dp"> android:layout_height="match_parent"
android:fillViewport="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<androidx.appcompat.widget.AppCompatTextView <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/title" android:layout_width="match_parent"
style="@style/PokerAnalyticsTheme.TextView.Title" android:layout_height="wrap_content">
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:text="Edit Data"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView" android:id="@+id/recyclerView"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_marginTop="8dp" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toBottomOf="@+id/title" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView> </androidx.core.widget.NestedScrollView>
<com.google.android.material.appbar.AppBarLayout <com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBar" android:id="@+id/appBar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="128dp" android:layout_height="128dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<com.google.android.material.appbar.CollapsingToolbarLayout <com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/collapsingToolbar" android:id="@+id/collapsingToolbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
app:contentScrim="?attr/colorPrimary" app:contentScrim="?attr/colorPrimary"
app:expandedTitleGravity="bottom" app:expandedTitleGravity="bottom"
app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"> app:expandedTitleMarginStart="72dp"
app:expandedTitleTextAppearance="@style/PokerAnalyticsTheme.Toolbar.ExpandedTitleAppearance"
app:collapsedTitleTextAppearance="@style/PokerAnalyticsTheme.Toolbar.CollapsedTitleAppearance"
app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">
<androidx.appcompat.widget.Toolbar <androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar" android:id="@+id/toolbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" android:layout_height="?attr/actionBarSize"
app:title="Poker Analytics" app:title="Poker Analytics"
app:titleTextColor="@color/white" app:titleTextColor="@color/white"
app:layout_collapseMode="pin" /> app:layout_collapseMode="pin" />
</com.google.android.material.appbar.CollapsingToolbarLayout> </com.google.android.material.appbar.CollapsingToolbarLayout>

@ -5,19 +5,19 @@
<item <item
android:id="@+id/actionClear" android:id="@+id/actionClear"
android:orderInCategory="100" android:orderInCategory="100"
android:title="@string/app_name" android:title="@string/clear"
android:icon="@drawable/ic_close_white_24dp" android:icon="@drawable/ic_close_white_24dp"
app:showAsAction="always" /> app:showAsAction="always" />
<item <item
android:id="@+id/actionAdd" android:id="@+id/actionAdd"
android:icon="@drawable/ic_add_white_24dp" android:icon="@drawable/ic_add_white_24dp"
android:orderInCategory="200" android:orderInCategory="200"
android:title="Search" android:title="@string/add"
app:showAsAction="ifRoom" /> app:showAsAction="ifRoom" />
<item <item
android:id="@+id/actionCheck" android:id="@+id/actionCheck"
android:icon="@drawable/ic_check_white_24dp" android:icon="@drawable/ic_check_white_24dp"
android:orderInCategory="300" android:orderInCategory="300"
android:title="User" android:title="@string/done"
app:showAsAction="ifRoom" /> app:showAsAction="ifRoom" />
</menu> </menu>

@ -6,6 +6,7 @@
<color name="black">#000000</color> <color name="black">#000000</color>
<color name="white">#FFFFFF</color> <color name="white">#FFFFFF</color>
<color name="white_transparent">#30FFFFFF</color>
<color name="gray_light">#6AFFFFFF</color> <color name="gray_light">#6AFFFFFF</color>
<color name="gray_darker">#141414</color> <color name="gray_darker">#141414</color>

@ -6,10 +6,20 @@
<string name="title_settings">Settings</string> <string name="title_settings">Settings</string>
<string name="bankroll">Bankroll</string> <string name="bankroll">Bankroll</string>
<string name="blinds">Blinds</string>
<string name="game">Game</string> <string name="game">Game</string>
<string name="date">Date</string>
<string name="location">Location</string> <string name="location">Location</string>
<string name="session">Session</string> <string name="session">Session</string>
<string name="tournament_type">Tournament Type</string> <string name="tournament_type">Tournament Type</string>
<string name="transaction_type">Transaction Type</string> <string name="transaction_type">Transaction Type</string>
<string name="name">Name</string>
<string name="live">Live</string>
<string name="currency">Currency</string>
<string name="clear">Clear</string>
<string name="add">Add</string>
<string name="done">Done</string>
</resources> </resources>

@ -11,6 +11,7 @@
<item name="bottomNavigationStyle">@style/PokerAnalyticsTheme.BottomNavigationView</item> <item name="bottomNavigationStyle">@style/PokerAnalyticsTheme.BottomNavigationView</item>
<item name="toolbarStyle">@style/PokerAnalyticsTheme.Toolbar</item> <item name="toolbarStyle">@style/PokerAnalyticsTheme.Toolbar</item>
<item name="editTextStyle">@style/PokerAnalyticsTheme.EditText</item>
<item name="android:textViewStyle">@style/PokerAnalyticsTheme.TextView</item> <item name="android:textViewStyle">@style/PokerAnalyticsTheme.TextView</item>
</style> </style>
@ -54,26 +55,35 @@
<item name="android:fontFamily">@font/roboto</item> <item name="android:fontFamily">@font/roboto</item>
</style> </style>
<style name="PokerAnalyticsTheme.TextView.Title" parent="PokerAnalyticsTheme"> <style name="PokerAnalyticsTheme.TextView.Title">
<item name="android:textSize">22sp</item> <item name="android:textSize">22sp</item>
<item name="android:textColor">@color/white</item> <item name="android:textColor">@color/white</item>
<item name="android:fontFamily">@font/roboto_bold</item> <item name="android:fontFamily">@font/roboto_bold</item>
<item name="android:paddingTop">8dp</item> <item name="android:paddingTop">8dp</item>
</style> </style>
<style name="PokerAnalyticsTheme.TextView.Header" parent="PokerAnalyticsTheme"> <style name="PokerAnalyticsTheme.TextView.Header">
<item name="android:textSize">22sp</item> <item name="android:textSize">22sp</item>
<item name="android:textColor">@color/gray_darker</item> <item name="android:textColor">@color/gray_darker</item>
<item name="android:fontFamily">@font/roboto_bold</item> <item name="android:fontFamily">@font/roboto_bold</item>
<item name="android:paddingTop">8dp</item> <item name="android:paddingTop">8dp</item>
</style> </style>
<style name="PokerAnalyticsTheme.TextView.TitleRow" parent="PokerAnalyticsTheme"> <style name="PokerAnalyticsTheme.TextView.TitleRow">
<item name="android:textSize">16sp</item> <item name="android:textSize">16sp</item>
<item name="android:textColor">@color/gray_darker</item> <item name="android:textColor">@color/gray_darker</item>
<item name="android:fontFamily">@font/roboto</item> <item name="android:fontFamily">@font/roboto</item>
<item name="android:paddingTop">8dp</item> <item name="android:paddingTop">8dp</item>
</style> </style>
<!-- EditText -->
<style name="PokerAnalyticsTheme.EditText" parent="Widget.AppCompat.EditText">
<item name="android:textColor">@color/white</item>
<item name="android:fontFamily">@font/roboto</item>
<item name="android:textColorHint">@color/white_transparent</item>
<item name="android:textSize">22sp</item>
<item name="android:padding">16dp</item>
</style>
</resources> </resources>

Loading…
Cancel
Save