From 89ba7c3312711b0275d39347f6a6d2e7604127be Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Mon, 18 Feb 2019 10:37:52 +0100 Subject: [PATCH 1/6] fix issue with settings data creation --- .../android/model/realm/Game.kt | 11 ++- .../adapter/components/DynamicRowInterface.kt | 14 +++- .../ui/fragment/EditableDataFragment.kt | 25 +++--- .../res/layout/fragment_editable_data.xml | 83 ++++++++----------- app/src/main/res/values/strings.xml | 5 ++ 5 files changed, 76 insertions(+), 62 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt index 4bd8134e..28ce2521 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt @@ -2,10 +2,13 @@ package net.pokeranalytics.android.model.realm import io.realm.RealmObject import io.realm.annotations.PrimaryKey +import net.pokeranalytics.android.ui.adapter.components.BankrollRow 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 java.util.* -open class Game : RealmObject(), DisplayableDataSource { +open class Game : RealmObject(), DynamicRowDelegate, DisplayableDataSource { @PrimaryKey var id = UUID.randomUUID().toString() @@ -20,4 +23,10 @@ open class Game : RealmObject(), DisplayableDataSource { get() { return name } + + override fun adapterRows(): ArrayList { + val rows = ArrayList() + rows.addAll(BankrollRow.values()) + return rows + } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt index c12a4886..087ffe96 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt @@ -62,15 +62,21 @@ enum class SessionRow(val resId: Int) : DynamicRowInterface { } enum class BankrollRow(val resId: Int) : DynamicRowInterface { - NAME(R.string.app_name), - LIVE(R.string.app_name), - CURRENCY(R.string.app_name); + NAME(R.string.name), + LIVE(R.string.live), + CURRENCY(R.string.currency); override fun localizedTitle(context: Context): String { return context.getString(this.resId) } - override var viewType: Int = 1 + 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) { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt index 9aedd133..c782b4db 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt @@ -8,11 +8,12 @@ import android.widget.Toast import androidx.recyclerview.widget.LinearLayoutManager import io.realm.Realm 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 net.pokeranalytics.android.R -import net.pokeranalytics.android.ui.adapter.components.DynamicRowCallback -import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface -import net.pokeranalytics.android.ui.adapter.components.SettingRow +import net.pokeranalytics.android.model.realm.Bankroll +import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity +import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.fragment.components.BottomSheetDelegate import net.pokeranalytics.android.ui.fragment.components.BottomSheetFragment import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment @@ -23,9 +24,8 @@ class EditableDataFragment : PokerAnalyticsFragment(), DynamicRowCallback, Botto private lateinit var item: RealmObject private var dataType: SettingRow = SettingRow.BANKROLL - 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?) { @@ -44,12 +44,15 @@ class EditableDataFragment : PokerAnalyticsFragment(), DynamicRowCallback, Botto } private fun initData() { - } + } /** * Init UI */ private fun initUI() { + val activity = activity as PokerAnalyticsActivity + activity.setSupportActionBar(toolbar) + activity.supportActionBar?.setDisplayHomeAsUpEnabled(true) val viewManager = LinearLayoutManager(requireContext()) @@ -63,6 +66,7 @@ class EditableDataFragment : PokerAnalyticsFragment(), DynamicRowCallback, Botto * Set fragment data */ fun setData(dataType: Int, primaryKey: String?) { + this.dataType = SettingRow.values()[dataType] val realm = Realm.getDefaultInstance() var _item : RealmObject? = null @@ -77,12 +81,13 @@ class EditableDataFragment : PokerAnalyticsFragment(), DynamicRowCallback, Botto _item?.let { this.item = realm.copyFromRealm(it) } ?: run { - this.item = realm.createObject(this.dataType.clazz(), UUID.randomUUID().toString()) + this.item = realm.createObject(Bankroll::class.java, UUID.randomUUID().toString()) } realm.commitTransaction() //TODO: Crash happens here - //val dynamicListAdapter = DynamicListAdapter((this.item as DynamicRowDelegate), this) - //this.recyclerView.adapter = dynamicListAdapter + val dynamicListAdapter = DynamicListAdapter((this.item as DynamicRowDelegate), this) + this.recyclerView.adapter = dynamicListAdapter + } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_editable_data.xml b/app/src/main/res/layout/fragment_editable_data.xml index 76e12a6b..d072701e 100644 --- a/app/src/main/res/layout/fragment_editable_data.xml +++ b/app/src/main/res/layout/fragment_editable_data.xml @@ -1,68 +1,57 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent"> - - + android:layout_height="match_parent" + android:fillViewport="true" + app:layout_behavior="@string/appbar_scrolling_view_behavior"> - + + android:id="@+id/recyclerView" + android:layout_width="0dp" + android:layout_height="0dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + android:id="@+id/appBar" + android:layout_width="match_parent" + android:layout_height="128dp" + android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> + android:id="@+id/collapsingToolbar" + android:layout_width="match_parent" + android:layout_height="match_parent" + app:contentScrim="?attr/colorPrimary" + app:expandedTitleGravity="bottom" + app:expandedTitleMarginStart="72dp" + app:expandedTitleTextAppearance="@style/PokerAnalyticsTheme.Toolbar.ExpandedTitleAppearance" + app:collapsedTitleTextAppearance="@style/PokerAnalyticsTheme.Toolbar.CollapsedTitleAppearance" + app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"> + android:id="@+id/toolbar" + android:layout_width="match_parent" + android:layout_height="?attr/actionBarSize" + app:title="Poker Analytics" + app:titleTextColor="@color/white" + app:layout_collapseMode="pin" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0afe7cc7..ba4cfea3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -12,4 +12,9 @@ Tournament Type Transaction Type + Name + Live + Currency + + From 1c651e6ebeb7638eb68b286100f7fecd4abea080 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Mon, 18 Feb 2019 10:59:10 +0100 Subject: [PATCH 2/6] cleanup EditableDataFragment --- .../android/ui/adapter/components/DynamicRowInterface.kt | 6 +++--- .../android/ui/fragment/EditableDataFragment.kt | 8 +++----- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt index 0bd7764f..5f811a14 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt @@ -80,9 +80,9 @@ enum class BankrollRow(val resId: Int) : DynamicRowInterface { override var bottomSheetType: BottomSheetType = BottomSheetType.NONE get() { return when (this) { - NAME -> BottomSheetType.DATE - LIVE -> BottomSheetType.DATE - CURRENCY -> BottomSheetType.DATE + NAME -> BottomSheetType.EDIT_TEXT + LIVE -> BottomSheetType.NONE + CURRENCY -> BottomSheetType.LIST } } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt index c782b4db..217e5716 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt @@ -69,23 +69,21 @@ class EditableDataFragment : PokerAnalyticsFragment(), DynamicRowCallback, Botto this.dataType = SettingRow.values()[dataType] val realm = Realm.getDefaultInstance() - var _item : RealmObject? = null + var proxyItem : RealmObject? = null primaryKey?.let { val t = realm.where(this.dataType.clazz()).equalTo("id", it).findFirst() t?.let { - _item = t + proxyItem = t } } realm.beginTransaction() - _item?.let { + proxyItem?.let { this.item = realm.copyFromRealm(it) } ?: run { this.item = realm.createObject(Bankroll::class.java, UUID.randomUUID().toString()) } realm.commitTransaction() - - //TODO: Crash happens here val dynamicListAdapter = DynamicListAdapter((this.item as DynamicRowDelegate), this) this.recyclerView.adapter = dynamicListAdapter From a3b5efdbcfc95f81975609e2dde46f9d6811b489 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Mon, 18 Feb 2019 14:22:05 +0100 Subject: [PATCH 3/6] Working on bottom sheet management --- .../android/model/realm/Session.kt | 351 ++++++++++-------- .../ui/adapter/components/DataListAdapter.kt | 5 + .../adapter/components/DynamicRowInterface.kt | 1 + .../ui/fragment/EditableDataFragment.kt | 2 +- .../android/ui/fragment/NewSessionFragment.kt | 6 +- .../ui/fragment/components/BottomSheetData.kt | 12 + .../BottomSheetDoubleEditTextFragment.kt | 36 +- .../components/BottomSheetEditTextFragment.kt | 48 +++ .../components/BottomSheetFragment.kt | 8 +- .../layout/bottom_sheet_double_edit_text.xml | 14 +- .../res/layout/bottom_sheet_edit_text.xml | 42 +++ 11 files changed, 328 insertions(+), 197 deletions(-) create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetData.kt create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetEditTextFragment.kt create mode 100644 app/src/main/res/layout/bottom_sheet_edit_text.xml diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt index 74c482ea..9e41130e 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt @@ -1,158 +1,179 @@ package net.pokeranalytics.android.model.realm +import android.text.InputType import io.realm.* import io.realm.annotations.Ignore import io.realm.annotations.PrimaryKey import net.pokeranalytics.android.calculus.SessionInterface -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.SessionRow +import net.pokeranalytics.android.ui.adapter.components.* +import net.pokeranalytics.android.ui.fragment.components.BottomSheetData import net.pokeranalytics.android.util.data.sessionDao import java.util.* import kotlin.collections.ArrayList -open class Session : RealmObject(), SessionInterface, DynamicRowDelegate, DisplayableDataSource { +open class Session : RealmObject(), SessionInterface, DynamicRowDelegate, DisplayableDataSource, EditableDataSource { - @PrimaryKey - var id = UUID.randomUUID().toString() + @PrimaryKey + var id = UUID.randomUUID().toString() - // The result of the main user - var result: Result? = null + // The result of the main user + var result: Result? = null - // The time frame of the Session, i.e. the start & end date - var timeFrame: TimeFrame? = null + // The time frame of the Session, i.e. the start & end date + var timeFrame: TimeFrame? = null - // The time frame sessionGroup, which can contain multiple sessions - override var sessionSet: SessionSet? = null + // The time frame sessionGroup, which can contain multiple sessions + override var sessionSet: SessionSet? = null - // the date of creation of the app - var creationDate: Date = Date() + // the date of creation of the app + var creationDate: Date = Date() - // The bankroll hosting the results - var bankroll: Bankroll? = null + // The bankroll hosting the results + var bankroll: Bankroll? = null - // The limit type: NL, PL... - var limit: Int? = null + // The limit type: NL, PL... + var limit: Int? = null - // The game played during the Session - var game: Game? = null + // The game played during the Session + var game: Game? = null - // The number of players at the table - var tableSize: Int? = null + // The number of players at the table + var tableSize: Int? = null - // the location where the session is played - var location: Location? = null + // the location where the session is played + var location: Location? = null - // The number of tables played at the same time - var numberOfTables: Int = 1 + // The number of tables played at the same time + var numberOfTables: Int = 1 - // The hands list associated with the Session - var hands: RealmList = RealmList() + // The hands list associated with the Session + var hands: RealmList = RealmList() - // The list of opponents who participated to the session - var opponents: RealmList = RealmList() + // The list of opponents who participated to the session + var opponents: RealmList = RealmList() - // A comment written by the user - var comment: String = "" + // A comment written by the user + var comment: String = "" - // Cash Game + // Cash Game - // The small blind value - var cgSmallBlind: Double? = null + // The small blind value + var cgSmallBlind: Double? = null - // The big blind value - var cgBigBlind: Double? = null + // The big blind value + var cgBigBlind: Double? = null - // Tournament + // Tournament - // The entry fee of the tournament - var tournamentEntryFee: Double? = null + // The entry fee of the tournament + var tournamentEntryFee: Double? = null - // The total number of players who participated in the tournament - var tournamentNumberOfPlayers: Int? = null + // The total number of players who participated in the tournament + var tournamentNumberOfPlayers: Int? = null - // The name of the tournament - var tournamentType: TournamentName? = null + // The name of the tournament + var tournamentType: TournamentName? = null - // The kind of the tournament, MTT or SnG - var tournamentKind: Int? = null + // The kind of the tournament, MTT or SnG + var tournamentKind: Int? = null - // The features of the tournament, like Knockout, Shootout, Turbo... - var tournamentFeatures: RealmList = RealmList() + // The features of the tournament, like Knockout, Shootout, Turbo... + var tournamentFeatures: RealmList = RealmList() - companion object { + companion object { - fun newInstance(): Session { - var session: Session = Session() - session.result = Result() - session.timeFrame = TimeFrame() - return session - } + fun newInstance(): Session { + var session: Session = Session() + session.result = Result() + session.timeFrame = TimeFrame() + return session + } - } + } - @Ignore // SessionInterface value - override var value: Double = 0.0 - get() { - return this.result?.net ?: 0.0 - } + @Ignore // SessionInterface value + override var value: Double = 0.0 + get() { + return this.result?.net ?: 0.0 + } - @Ignore - override var estimatedHands: Double = 0.0 + @Ignore + override var estimatedHands: Double = 0.0 - @Ignore - override var bbNetResult: Double = 0.0 - get() { - this.cgBigBlind?.let { bb -> - this.result?.let { result -> - return result.net / bb - } - } - return 0.0 - } + @Ignore + override var bbNetResult: Double = 0.0 + get() { + this.cgBigBlind?.let { bb -> + this.result?.let { result -> + return result.net / bb + } + } + return 0.0 + } - @Ignore - override var bigBlindSessionCount: Int = if (this.cgBigBlind != null) 1 else 0 + @Ignore + override var bigBlindSessionCount: Int = if (this.cgBigBlind != null) 1 else 0 - @Ignore - override var buyin: Double = 0.0 - get() { - this.result?.let { - it.buyin?.let { - return it - } - } - return 0.0 - } + @Ignore + override var buyin: Double = 0.0 + get() { + this.result?.let { + it.buyin?.let { + return it + } + } + return 0.0 + } - override fun adapterRows(): ArrayList { - val rows = ArrayList() - rows.addAll(SessionRow.values()) - return rows - } - - override fun boolForRow(row: DynamicRowInterface): Boolean { - return false - } - - override fun stringForRow(row: DynamicRowInterface): String { - return when (row) { - SessionRow.BLINDS -> "Blinds" - SessionRow.GAME -> "Game" - SessionRow.DATE -> "Date" - else -> "--" - } - } - - override var title: String = "Change that: $creationDate" + override fun adapterRows(): ArrayList { + val rows = ArrayList() + rows.addAll(SessionRow.values()) + return rows + } + + override fun boolForRow(row: DynamicRowInterface): Boolean { + return false + } + + override fun stringForRow(row: DynamicRowInterface): String { + return when (row) { + SessionRow.BLINDS -> "Blinds" + SessionRow.GAME -> "Game" + SessionRow.DATE -> "Date" + else -> "--" + } + } + + override var title: String = "Change that: $creationDate" + + override fun getBottomSheetData(row: DynamicRowInterface): ArrayList { + + val data = ArrayList() + + // Todo: Localize & set real data + when (row) { + SessionRow.GAME -> { + data.add(BottomSheetData("Game", game, "", 0, arrayListOf(Game(), Game(), Game()))) + } + SessionRow.DATE -> { + data.add(BottomSheetData("Date", timeFrame?.startDate, "Start date")) + data.add(BottomSheetData("Date", timeFrame?.endDate, "End date")) + } + SessionRow.BLINDS -> { + data.add(BottomSheetData("Blind", cgSmallBlind, "Small blind", InputType.TYPE_CLASS_NUMBER)) + data.add(BottomSheetData("Blind", cgBigBlind, "Big blind", InputType.TYPE_CLASS_NUMBER)) + } + } + + return data + } } enum class TournamentKind { - MTT, - SNG + MTT, + SNG } @@ -161,63 +182,63 @@ enum class TournamentKind { */ class SessionDao(realmDb: Realm) { - var realm: Realm = realmDb - - /** - * Create or update session - */ - fun createOrUpdateSession(session: Session): Session { - realm.beginTransaction() - val sessionToSave = realm.copyToRealmOrUpdate(session) - realm.commitTransaction() - return realm.copyFromRealm(sessionToSave) - } - - /** - * Create or update sessions - */ - fun createOrUpdateSessions(sessions: List): List { - - realm.beginTransaction() - - // Update - val sessionsToSave = realm.copyToRealmOrUpdate(sessions) - realm.commitTransaction() - - return realm.copyFromRealm(sessionsToSave) - } - - /** - * Find all sessions - */ - fun findAllSessions(): RealmResults { - return realm.where(Session::class.java).findAll().sort("creationDate", Sort.DESCENDING) - } - - /** - * Find session by id - */ - fun findSessionById(sessionId: Int): Session? { - return realm.copyFromRealm(realm.where(Session::class.java).equalTo("id", sessionId).findFirst()) - } - - /** - * Delete session - */ - fun deleteSession(sessionId: Int) { - realm.beginTransaction() - realm.sessionDao().findSessionById(sessionId)?.deleteFromRealm() - realm.commitTransaction() - } - - /** - * Delete all sessions - */ - fun deleteAllSessions() { - realm.beginTransaction() - realm.sessionDao().findAllSessions().deleteAllFromRealm() - realm.commitTransaction() - } + var realm: Realm = realmDb + + /** + * Create or update session + */ + fun createOrUpdateSession(session: Session): Session { + realm.beginTransaction() + val sessionToSave = realm.copyToRealmOrUpdate(session) + realm.commitTransaction() + return realm.copyFromRealm(sessionToSave) + } + + /** + * Create or update sessions + */ + fun createOrUpdateSessions(sessions: List): List { + + realm.beginTransaction() + + // Update + val sessionsToSave = realm.copyToRealmOrUpdate(sessions) + realm.commitTransaction() + + return realm.copyFromRealm(sessionsToSave) + } + + /** + * Find all sessions + */ + fun findAllSessions(): RealmResults { + return realm.where(Session::class.java).findAll().sort("creationDate", Sort.DESCENDING) + } + + /** + * Find session by id + */ + fun findSessionById(sessionId: Int): Session? { + return realm.copyFromRealm(realm.where(Session::class.java).equalTo("id", sessionId).findFirst()) + } + + /** + * Delete session + */ + fun deleteSession(sessionId: Int) { + realm.beginTransaction() + realm.sessionDao().findSessionById(sessionId)?.deleteFromRealm() + realm.commitTransaction() + } + + /** + * Delete all sessions + */ + fun deleteAllSessions() { + realm.beginTransaction() + realm.sessionDao().findAllSessions().deleteAllFromRealm() + realm.commitTransaction() + } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DataListAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DataListAdapter.kt index 404a15e1..ea3def8b 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DataListAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DataListAdapter.kt @@ -7,6 +7,7 @@ import androidx.appcompat.widget.AppCompatTextView import androidx.constraintlayout.widget.ConstraintLayout import androidx.recyclerview.widget.RecyclerView import net.pokeranalytics.android.R +import net.pokeranalytics.android.ui.fragment.components.BottomSheetData interface DisplayableDelegate { fun data(position: Int) : DisplayableDataSource @@ -18,6 +19,10 @@ interface DisplayableDataSource { var title: String } +interface EditableDataSource { + fun getBottomSheetData(row: DynamicRowInterface): ArrayList +} + class DataListAdapter(var delegate: DisplayableDelegate, var layout: Int? = null) : RecyclerView.Adapter() { inner class DataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt index 5f811a14..1c3f1aa1 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt @@ -59,6 +59,7 @@ enum class SessionRow(val resId: Int) : DynamicRowInterface { DATE -> BottomSheetType.DATE } } + } enum class BankrollRow(val resId: Int) : DynamicRowInterface { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt index 217e5716..3819da10 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt @@ -36,7 +36,7 @@ class EditableDataFragment : PokerAnalyticsFragment(), DynamicRowCallback, Botto override fun onRowSelected(row: DynamicRowInterface) { val data = item - BottomSheetFragment.create(fragmentManager, row, this, data) + BottomSheetFragment.create(fragmentManager, row, this, ArrayList()) } override fun setValue(value: Any, row: DynamicRowInterface) { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/NewSessionFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/NewSessionFragment.kt index 582775d4..3f3f27f9 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/NewSessionFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/NewSessionFragment.kt @@ -32,16 +32,16 @@ class NewSessionFragment : PokerAnalyticsFragment(), DynamicRowCallback, BottomS } override fun onRowSelected(row: DynamicRowInterface) { - + /* val data = when (row.bottomSheetType) { - /* BottomSheetType.BLINDS -> newSession BottomSheetType.DATE -> newSession.timeFrame BottomSheetType.GAME -> newSession.game - */ else -> Any() } + */ + val data = newSession.getBottomSheetData(row) BottomSheetFragment.create(fragmentManager, row, this, data) } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetData.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetData.kt new file mode 100644 index 00000000..e73fccc8 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetData.kt @@ -0,0 +1,12 @@ +package net.pokeranalytics.android.ui.fragment.components + +import android.text.InputType +import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource + +class BottomSheetData( + var title: String? = "", + var defaultValue: Any? = null, + var hint: String? = "", + var inputType: Int? = InputType.TYPE_CLASS_TEXT, + var data: ArrayList? = ArrayList() +) \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDoubleEditTextFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDoubleEditTextFragment.kt index b9a07d76..bba204c5 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDoubleEditTextFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDoubleEditTextFragment.kt @@ -1,17 +1,15 @@ package net.pokeranalytics.android.ui.fragment.components import android.os.Bundle +import android.text.InputType import android.view.LayoutInflater import android.view.View import kotlinx.android.synthetic.main.bottom_sheet_double_edit_text.* 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.DisplayableDataSource -import net.pokeranalytics.android.ui.adapter.components.DisplayableDelegate -class BottomSheetDoubleEditTextFragment : BottomSheetFragment(), DisplayableDelegate { +class BottomSheetDoubleEditTextFragment : BottomSheetFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -27,25 +25,13 @@ class BottomSheetDoubleEditTextFragment : BottomSheetFragment(), DisplayableDele override fun onStart() { super.onStart() - smallBlind.requestFocus() - } - - override fun data(position: Int): DisplayableDataSource { - return Game() - } - - override fun onRowSelected(position: Int) { - } - - override fun size(): Int { - return 0 + editText1.requestFocus() } /** * Init data */ private fun initData() { - val data = getData() } /** @@ -53,8 +39,24 @@ class BottomSheetDoubleEditTextFragment : BottomSheetFragment(), DisplayableDele */ private fun initUI() { + val data = getData() + LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_double_edit_text, view?.bottomSheetContainer, true) + if (data.size == 2) { + + title.text = data[0].title + 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 + } + + + } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetEditTextFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetEditTextFragment.kt new file mode 100644 index 00000000..1120a2b6 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetEditTextFragment.kt @@ -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) + + + + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetFragment.kt index a88045e3..57d85fb2 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetFragment.kt @@ -38,14 +38,14 @@ open class BottomSheetFragment : BottomSheetDialogFragment(), BottomSheetInterfa lateinit var row: DynamicRowInterface lateinit var valueDelegate: BottomSheetDelegate - private var data: Any? = null + private var data: ArrayList = ArrayList() companion object { fun create( fragmentManager: FragmentManager?, row: DynamicRowInterface, valueDelegate: BottomSheetDelegate, - data: Any? + data: ArrayList ): BottomSheetFragment { val bottomSheetFragment = when (row.bottomSheetType) { @@ -123,9 +123,9 @@ open class BottomSheetFragment : BottomSheetDialogFragment(), BottomSheetInterfa } /** - * Return the data object + * Return the data list */ - fun getData(): Any? { + fun getData(): ArrayList { return data } diff --git a/app/src/main/res/layout/bottom_sheet_double_edit_text.xml b/app/src/main/res/layout/bottom_sheet_double_edit_text.xml index 08fb4cb2..e5a70e50 100644 --- a/app/src/main/res/layout/bottom_sheet_double_edit_text.xml +++ b/app/src/main/res/layout/bottom_sheet_double_edit_text.xml @@ -8,23 +8,23 @@ tools:background="@color/gray_darker"> + app:layout_constraintTop_toTopOf="parent" + tools:text="Blinds" /> + + + + + + + \ No newline at end of file From b8e1e698c4ee3da6337702c636f174fef2fc78bd Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Mon, 18 Feb 2019 14:44:29 +0100 Subject: [PATCH 4/6] add settings object management and refresh list --- .../android/model/realm/Bankroll.kt | 19 +++- .../android/model/realm/Game.kt | 21 +++-- .../android/model/realm/Location.kt | 22 ++++- .../android/model/realm/Session.kt | 3 +- .../android/model/realm/TournamentFeature.kt | 21 ++++- .../android/model/realm/TransactionType.kt | 21 ++++- .../ui/adapter/components/DataListAdapter.kt | 8 +- .../adapter/components/DynamicRowInterface.kt | 88 +++++++++++++++++++ .../android/ui/fragment/DataListFragment.kt | 10 ++- .../ui/fragment/EditableDataFragment.kt | 11 ++- .../main/res/layout/fragment_data_list.xml | 3 +- 11 files changed, 203 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt index 921206c9..002417dc 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt @@ -38,11 +38,28 @@ open class Bankroll(name: String = "") : RealmObject(), DynamicRowDelegate, Disp // @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 { val rows = ArrayList() rows.addAll(BankrollRow.values()) 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) + } + } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt index 28ce2521..c3488443 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt @@ -2,10 +2,7 @@ package net.pokeranalytics.android.model.realm import io.realm.RealmObject import io.realm.annotations.PrimaryKey -import net.pokeranalytics.android.ui.adapter.components.BankrollRow -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.* import java.util.* open class Game : RealmObject(), DynamicRowDelegate, DisplayableDataSource { @@ -19,14 +16,20 @@ open class Game : RealmObject(), DynamicRowDelegate, DisplayableDataSource { // A shorter name for the game var shortName: String? = null - override var title: String = "" - get() { - return name - } + override val title: String get() = this.id + override val primaryKey: String get() = this.id override fun adapterRows(): ArrayList { val rows = ArrayList() - rows.addAll(BankrollRow.values()) + rows.addAll(GameRow.values()) return rows } + + override fun stringForRow(row: DynamicRowInterface): String { + return when (row) { + GameRow.NAME -> this.id + else -> return super.stringForRow(row) + } + } + } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt index e066b8f4..e9fd9a0e 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt @@ -2,10 +2,14 @@ package net.pokeranalytics.android.model.realm import io.realm.RealmObject 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.* -open class Location : RealmObject() { +open class Location : RealmObject(), DynamicRowDelegate, DisplayableDataSource { @PrimaryKey var id = UUID.randomUUID().toString() @@ -19,4 +23,20 @@ open class Location : RealmObject() { // the latitude of the location var latitude: Double? = null + override val title: String get() = this.id + override val primaryKey: String get() = this.id + + override fun adapterRows(): ArrayList { + val rows = ArrayList() + rows.addAll(LocationRow.values()) + return rows + } + + override fun stringForRow(row: DynamicRowInterface): String { + return when (row) { + LocationRow.NAME -> this.id + else -> return super.stringForRow(row) + } + } + } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt index 74c482ea..612e9123 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt @@ -147,7 +147,8 @@ open class Session : RealmObject(), SessionInterface, DynamicRowDelegate, Displa } } - override var title: String = "Change that: $creationDate" + override val title: String get() = "Change that: $creationDate" + override val primaryKey: String get() = this.id } enum class TournamentKind { diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt index cb4dfdf0..ac36b4aa 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt @@ -2,9 +2,13 @@ package net.pokeranalytics.android.model.realm import io.realm.RealmObject 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.* -open class TournamentFeature : RealmObject() { +open class TournamentFeature : RealmObject(), DynamicRowDelegate, DisplayableDataSource { @PrimaryKey var id = UUID.randomUUID().toString() @@ -12,4 +16,19 @@ open class TournamentFeature : RealmObject() { // The name of the feature var name: String = "" + override val title: String get() = this.id + override val primaryKey: String get() = this.id + + override fun adapterRows(): ArrayList { + val rows = ArrayList() + rows.addAll(TournamentFeatureRow.values()) + return rows + } + + override fun stringForRow(row: DynamicRowInterface): String { + return when (row) { + TournamentFeatureRow.NAME -> this.id + else -> return super.stringForRow(row) + } + } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt index 0ac2fc0c..b9b98cc0 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt @@ -2,10 +2,14 @@ package net.pokeranalytics.android.model.realm import io.realm.RealmObject 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.* -open class TransactionType : RealmObject() { +open class TransactionType : RealmObject(), DynamicRowDelegate, DisplayableDataSource { @PrimaryKey var id = UUID.randomUUID().toString() @@ -22,6 +26,21 @@ open class TransactionType : RealmObject() { // The predefined kind, if necessary, like: Withdrawal, deposit, or tips var kind: Int? = null + override val title: String get() = this.id + override val primaryKey: String get() = this.id + + override fun adapterRows(): ArrayList { + val rows = ArrayList() + 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 { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DataListAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DataListAdapter.kt index 404a15e1..eec33ebf 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DataListAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DataListAdapter.kt @@ -6,6 +6,7 @@ import android.view.ViewGroup import androidx.appcompat.widget.AppCompatTextView import androidx.constraintlayout.widget.ConstraintLayout import androidx.recyclerview.widget.RecyclerView +import kotlinx.android.synthetic.main.fragment_data_list.view.* import net.pokeranalytics.android.R interface DisplayableDelegate { @@ -15,16 +16,14 @@ interface DisplayableDelegate { } interface DisplayableDataSource { - var title: String + val title: String + val primaryKey: String } class DataListAdapter(var delegate: DisplayableDelegate, var layout: Int? = null) : RecyclerView.Adapter() { inner class DataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { fun bind(row: DisplayableDataSource, listener: View.OnClickListener) { - //itemView.title.text = row.title - //itemView.container.setOnClickListener(listener) - try { itemView.findViewById(R.id.title).text = row.title itemView.findViewById(R.id.container).setOnClickListener(listener) @@ -54,5 +53,4 @@ class DataListAdapter(var delegate: DisplayableDelegate, var layout: Int? = null } (holder as DataViewHolder).bind(this.delegate.data(position), listener) } - } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt index 5f811a14..6f3e8705 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt @@ -87,6 +87,94 @@ enum class BankrollRow(val resId: Int) : DynamicRowInterface { } } +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 { + 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 SettingRow(val resId: Int) : DynamicRowInterface, DynamicValues { BANKROLL(R.string.bankroll), GAME(R.string.game), diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt index 2fe055ff..da5070ad 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt @@ -6,12 +6,14 @@ import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager import io.realm.Realm +import io.realm.RealmChangeListener import io.realm.RealmResults import kotlinx.android.synthetic.main.fragment_data_list.* import net.pokeranalytics.android.R import net.pokeranalytics.android.ui.activity.EditableDataActivity import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment +import timber.log.Timber class DataListFragment : PokerAnalyticsFragment(), DisplayableDelegate { @@ -34,7 +36,7 @@ class DataListFragment : PokerAnalyticsFragment(), DisplayableDelegate { } 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 { @@ -70,7 +72,13 @@ class DataListFragment : PokerAnalyticsFragment(), DisplayableDelegate { */ fun setData(dataType: Int) { this.dataType = SettingRow.values()[dataType] + this.title.text = this.dataType.name.toLowerCase().capitalize() val realm = Realm.getDefaultInstance() this.items = this.dataType.items(realm) + this.items.addChangeListener { newItems -> + Timber.d("newItems: ${newItems.size}") + realm.refresh() + this.recyclerView.adapter?.notifyDataSetChanged() + } } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt index 217e5716..a7f33237 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt @@ -10,6 +10,7 @@ import io.realm.Realm import io.realm.RealmObject 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.model.realm.Bankroll import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity @@ -77,13 +78,17 @@ class EditableDataFragment : PokerAnalyticsFragment(), DynamicRowCallback, Botto } } - realm.beginTransaction() proxyItem?.let { this.item = realm.copyFromRealm(it) + this.appBar.toolbar.title = "Update ${this.dataType.name.toLowerCase().capitalize()}" } ?: run { - this.item = realm.createObject(Bankroll::class.java, 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() + val dynamicListAdapter = DynamicListAdapter((this.item as DynamicRowDelegate), this) this.recyclerView.adapter = dynamicListAdapter diff --git a/app/src/main/res/layout/fragment_data_list.xml b/app/src/main/res/layout/fragment_data_list.xml index 3eaf9bf9..49a6b1a3 100644 --- a/app/src/main/res/layout/fragment_data_list.xml +++ b/app/src/main/res/layout/fragment_data_list.xml @@ -12,7 +12,7 @@ android:layout_marginStart="8dp" android:layout_marginTop="8dp" android:layout_marginEnd="8dp" - android:text="Data List" + tools:text="Data List" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -38,4 +38,5 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" /> + \ No newline at end of file From 3a8cf0c0d1bd8ad01d9afec580b0ce95dc817832 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Mon, 18 Feb 2019 15:05:14 +0100 Subject: [PATCH 5/6] Improve Bottom Sheet management --- .../android/model/realm/Session.kt | 16 +++--- .../adapter/components/DynamicRowInterface.kt | 6 +-- .../ui/fragment/components/BottomSheetData.kt | 1 - .../BottomSheetDoubleEditTextFragment.kt | 1 - .../components/BottomSheetFragment.kt | 29 ++++++----- .../layout/bottom_sheet_double_edit_text.xml | 50 +++++++------------ .../res/layout/bottom_sheet_edit_text.xml | 7 +-- .../main/res/layout/fragment_bottom_sheet.xml | 3 +- app/src/main/res/menu/bottom_sheet_menu.xml | 6 +-- app/src/main/res/values/colors.xml | 1 + app/src/main/res/values/strings.xml | 5 ++ app/src/main/res/values/styles.xml | 16 ++++-- 12 files changed, 74 insertions(+), 67 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt index 9e41130e..ae952946 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt @@ -139,9 +139,9 @@ open class Session : RealmObject(), SessionInterface, DynamicRowDelegate, Displa override fun stringForRow(row: DynamicRowInterface): String { return when (row) { - SessionRow.BLINDS -> "Blinds" - SessionRow.GAME -> "Game" - SessionRow.DATE -> "Date" + SessionRow.BLINDS -> if (cgSmallBlind != null && cgBigBlind != null) "$cgSmallBlind / $cgBigBlind" else "--" + SessionRow.GAME -> game?.title ?: "--" + SessionRow.DATE -> if (timeFrame != null) timeFrame?.startDate.toString() else "--" else -> "--" } } @@ -155,15 +155,15 @@ open class Session : RealmObject(), SessionInterface, DynamicRowDelegate, Displa // Todo: Localize & set real data when (row) { SessionRow.GAME -> { - data.add(BottomSheetData("Game", game, "", 0, arrayListOf(Game(), Game(), Game()))) + data.add(BottomSheetData(game, "", 0, arrayListOf(Game(), Game(), Game()))) } SessionRow.DATE -> { - data.add(BottomSheetData("Date", timeFrame?.startDate, "Start date")) - data.add(BottomSheetData("Date", timeFrame?.endDate, "End date")) + data.add(BottomSheetData(timeFrame?.startDate, "Start date")) + data.add(BottomSheetData(timeFrame?.endDate, "End date")) } SessionRow.BLINDS -> { - data.add(BottomSheetData("Blind", cgSmallBlind, "Small blind", InputType.TYPE_CLASS_NUMBER)) - data.add(BottomSheetData("Blind", cgBigBlind, "Big blind", InputType.TYPE_CLASS_NUMBER)) + data.add(BottomSheetData(cgSmallBlind, "Small blind", InputType.TYPE_CLASS_NUMBER)) + data.add(BottomSheetData(cgBigBlind, "Big blind", InputType.TYPE_CLASS_NUMBER)) } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt index 1c3f1aa1..1dc41ce1 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt @@ -36,9 +36,9 @@ class SectionRow(stringRes: Int) : DynamicRowInterface { } 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.blinds), + GAME(R.string.game), + DATE(R.string.date); override fun localizedTitle(context: Context): String { return context.getString(this.resId) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetData.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetData.kt index e73fccc8..a55494f0 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetData.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetData.kt @@ -4,7 +4,6 @@ import android.text.InputType import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource class BottomSheetData( - var title: String? = "", var defaultValue: Any? = null, var hint: String? = "", var inputType: Int? = InputType.TYPE_CLASS_TEXT, diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDoubleEditTextFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDoubleEditTextFragment.kt index bba204c5..c2af5fa6 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDoubleEditTextFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDoubleEditTextFragment.kt @@ -45,7 +45,6 @@ class BottomSheetDoubleEditTextFragment : BottomSheetFragment() { if (data.size == 2) { - title.text = data[0].title editText1.hint = data[0].hint editText1.setText((data[0].defaultValue ?: "").toString()) editText1.inputType = data[0].inputType ?: InputType.TYPE_CLASS_TEXT diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetFragment.kt index 57d85fb2..b1b974dc 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetFragment.kt @@ -99,27 +99,30 @@ open class BottomSheetFragment : BottomSheetDialogFragment(), BottomSheetInterfa * Init UI */ private fun initUI() { + row.let { bottomSheetToolbar.title = row.localizedTitle(requireContext()) bottomSheetToolbar.inflateMenu(net.pokeranalytics.android.R.menu.bottom_sheet_menu) bottomSheetToolbar.setOnMenuItemClickListener { false } - } - // Menu - bottomSheetToolbar.menu.findItem(R.id.actionClear).setOnMenuItemClickListener { - clickOnClear() - true - } - bottomSheetToolbar.menu.findItem(R.id.actionAdd).setOnMenuItemClickListener { - clickOnAdd() - true - } - bottomSheetToolbar.menu.findItem(R.id.actionCheck).setOnMenuItemClickListener { - clickOnCheck() - true + // Menu + bottomSheetToolbar.menu.findItem(R.id.actionClear).setOnMenuItemClickListener { + clickOnClear() + true + } + bottomSheetToolbar.menu.findItem(R.id.actionAdd).setOnMenuItemClickListener { + clickOnAdd() + true + } + bottomSheetToolbar.menu.findItem(R.id.actionCheck).setOnMenuItemClickListener { + clickOnCheck() + true + } + } + } /** diff --git a/app/src/main/res/layout/bottom_sheet_double_edit_text.xml b/app/src/main/res/layout/bottom_sheet_double_edit_text.xml index e5a70e50..21005821 100644 --- a/app/src/main/res/layout/bottom_sheet_double_edit_text.xml +++ b/app/src/main/res/layout/bottom_sheet_double_edit_text.xml @@ -7,53 +7,41 @@ android:orientation="vertical" tools:background="@color/gray_darker"> - - - - + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintHorizontal_chainStyle="packed" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:text="10" /> + 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" /> \ No newline at end of file diff --git a/app/src/main/res/layout/bottom_sheet_edit_text.xml b/app/src/main/res/layout/bottom_sheet_edit_text.xml index a84fbe9e..108f9885 100644 --- a/app/src/main/res/layout/bottom_sheet_edit_text.xml +++ b/app/src/main/res/layout/bottom_sheet_edit_text.xml @@ -15,13 +15,13 @@ android:layout_marginTop="16dp" android:layout_marginEnd="8dp" android:layout_marginBottom="16dp" - tools:text="Blinds" 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" /> + app:layout_constraintTop_toTopOf="parent" + tools:text="Blinds" /> + app:layout_constraintTop_toTopOf="parent" + tools:hint="Test" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_bottom_sheet.xml b/app/src/main/res/layout/fragment_bottom_sheet.xml index 5db274df..73b79a38 100644 --- a/app/src/main/res/layout/fragment_bottom_sheet.xml +++ b/app/src/main/res/layout/fragment_bottom_sheet.xml @@ -4,11 +4,12 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="#222222"> + android:background="@color/gray_dark"> \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 81e23bbd..388b4188 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -6,6 +6,7 @@ #000000 #FFFFFF + #30FFFFFF #6AFFFFFF #141414 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ba4cfea3..5ddb57d2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -6,7 +6,9 @@ Settings Bankroll + Blinds Game + Date Location Session Tournament Type @@ -16,5 +18,8 @@ Live Currency + Clear + Add + Done diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 94ee8611..e5a1711d 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -11,6 +11,7 @@ @style/PokerAnalyticsTheme.BottomNavigationView @style/PokerAnalyticsTheme.Toolbar + @style/PokerAnalyticsTheme.EditText @style/PokerAnalyticsTheme.TextView @@ -54,26 +55,35 @@ @font/roboto - - - + + + From f817c9c8314bc82fdb59ca08d8541ef0b825c98d Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Mon, 18 Feb 2019 15:11:32 +0100 Subject: [PATCH 6/6] remove the call on realm.refresh in DataListFragment --- .../net/pokeranalytics/android/ui/fragment/DataListFragment.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt index da5070ad..c401d67e 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt @@ -77,7 +77,6 @@ class DataListFragment : PokerAnalyticsFragment(), DisplayableDelegate { this.items = this.dataType.items(realm) this.items.addChangeListener { newItems -> Timber.d("newItems: ${newItems.size}") - realm.refresh() this.recyclerView.adapter?.notifyDataSetChanged() } }