From 5b7d8ab2b99106c727f8cabf881ffd4f144646c3 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Thu, 6 Jun 2019 14:39:19 +0200 Subject: [PATCH 1/5] Merge Laurent updates --- .../net/pokeranalytics/android/model/realm/Filter.kt | 9 +++++---- .../android/ui/activity/NewDataMenuActivity.kt | 7 +++++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt index a65edf11..8fd1e6e9 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt @@ -48,12 +48,13 @@ open class Filter : RealmObject(), RowRepresentable, Editable, Deletable, Counta } inline fun queryOn(realm: Realm, query: Query, sortField: String? = null): RealmResults { - val realmQuery = realm.where() + val rootQuery = realm.where() + var realmQuery = query.queryWith(rootQuery) sortField?.let { - return query.queryWith(realmQuery).sort(it).findAll() - } ?: run { - return query.queryWith(realmQuery).findAll() + realmQuery = realmQuery.sort(it) } + val desc = realmQuery.description + return realmQuery.findAll() } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/NewDataMenuActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/NewDataMenuActivity.kt index 49b9b97b..8cc3dfcb 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/NewDataMenuActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/NewDataMenuActivity.kt @@ -4,6 +4,8 @@ import android.animation.Animator import android.animation.AnimatorListenerAdapter import android.content.Context import android.content.Intent +import android.content.pm.ActivityInfo +import android.os.Build import android.os.Bundle import android.view.View import android.view.ViewAnimationUtils @@ -36,6 +38,11 @@ class NewDataMenuActivity : PokerAnalyticsActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { // used to fix Oreo crash + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + } + setContentView(R.layout.activity_new_data) initUI() } From c1d271b495e86ec27b111ac505bdb9457b00e547 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Thu, 6 Jun 2019 17:27:15 +0200 Subject: [PATCH 2/5] Add Top 10 view --- app/src/main/AndroidManifest.xml | 5 + .../model/extensions/SessionExtensions.kt | 44 ++++- .../android/ui/activity/Top10Activity.kt | 33 ++++ .../android/ui/fragment/MoreFragment.kt | 2 + .../android/ui/fragment/Top10Fragment.kt | 154 ++++++++++++++++++ .../android/ui/view/RowViewType.kt | 47 ++++++ .../android/ui/view/SessionRowView.kt | 39 +---- .../ui/view/rowrepresentable/MoreTabRow.kt | 3 + app/src/main/res/drawable/ic_outline_star.xml | 5 + app/src/main/res/layout/activity_top_10.xml | 15 ++ app/src/main/res/layout/fragment_top_10.xml | 71 ++++++++ app/src/main/res/layout/row_top_10.xml | 71 ++++++++ app/src/main/res/values/styles.xml | 16 ++ 13 files changed, 467 insertions(+), 38 deletions(-) create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/activity/Top10Activity.kt create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/fragment/Top10Fragment.kt create mode 100644 app/src/main/res/drawable/ic_outline_star.xml create mode 100644 app/src/main/res/layout/activity_top_10.xml create mode 100644 app/src/main/res/layout/fragment_top_10.xml create mode 100644 app/src/main/res/layout/row_top_10.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8cf3f769..04c3d2ef 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -74,6 +74,11 @@ android:launchMode="singleTop" android:screenOrientation="portrait" /> + + () + if (isTournament()) { + + tournamentEntryFee?.let { + parameters.add(it.toCurrency(currency)) + } + + tournamentName?.let { + parameters.add(it.name) + } ?: run { + parameters.add(getFormattedGame()) + tournamentType?.let { type -> + parameters.add(TournamentType.values()[type].localizedTitle(context)) + } + } + if (parameters.size == 0) { + parameters.add(context.getString(R.string.tournament).capitalize()) + } + } else { + if (cgSmallBlind != null && cgBigBlind != null) { + parameters.add(getFormattedBlinds()) + } + game?.let { + parameters.add(getFormattedGame()) + } + + if (parameters.size == 0) { + parameters.add(context.getString(R.string.cash_game).capitalize()) + } + } + return parameters.joinToString(separator = " ") } val AbstractList.hourlyDuration: Double @@ -95,4 +137,4 @@ fun MutableList.update(timeInterval: TimeInterval): MutableList BankrollActivity.newInstance(requireContext()) + MoreTabRow.TOP_10 -> Top10Activity.newInstance(requireContext()) MoreTabRow.SETTINGS -> SettingsActivity.newInstance(requireContext()) } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/Top10Fragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/Top10Fragment.kt new file mode 100644 index 00000000..9dfc8361 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/Top10Fragment.kt @@ -0,0 +1,154 @@ +package net.pokeranalytics.android.ui.fragment + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.google.android.material.tabs.TabLayout +import io.realm.RealmModel +import io.realm.RealmResults +import io.realm.Sort +import io.realm.kotlin.where +import kotlinx.android.synthetic.main.fragment_feed.* +import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.realm.Session +import net.pokeranalytics.android.model.realm.Transaction +import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter +import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource +import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate +import net.pokeranalytics.android.ui.fragment.components.RealmFragment +import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.ui.view.RowViewType +import net.pokeranalytics.android.ui.view.SmoothScrollLinearLayoutManager + + +class Top10Fragment : RealmFragment(), RowRepresentableDataSource, RowRepresentableDelegate { + + private enum class Tab { + CASH_GAMES, + TOURNAMENTS + } + + companion object { + fun newInstance(): Top10Fragment { + val fragment = Top10Fragment() + val bundle = Bundle() + fragment.arguments = bundle + return fragment + } + } + + private lateinit var dataListAdapter: RowRepresentableAdapter + private lateinit var realmCashGames: RealmResults + private lateinit var realmTournaments: RealmResults + + private var currentTab: Tab = Tab.CASH_GAMES + + override val observedEntities: List> = listOf(Session::class.java, Transaction::class.java) + + override fun entitiesChanged(clazz: Class) { + super.entitiesChanged(clazz) + when (clazz.kotlin) { + Session::class -> { + this.dataListAdapter.notifyDataSetChanged() + } + } + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + super.onCreateView(inflater, container, savedInstanceState) + return inflater.inflate(R.layout.fragment_top_10, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initUI() + initData() + } + + override fun adapterRows(): List? { + return when (currentTab) { + Tab.CASH_GAMES -> realmCashGames + Tab.TOURNAMENTS -> realmTournaments + } + } + + override fun rowRepresentableForPosition(position: Int): RowRepresentable? { + return when (currentTab) { + Tab.CASH_GAMES -> realmCashGames[position] + Tab.TOURNAMENTS -> realmTournaments[position] + } + } + + override fun numberOfRows(): Int { + return when (currentTab) { + Tab.CASH_GAMES -> realmCashGames.size + Tab.TOURNAMENTS -> realmTournaments.size + } + } + + override fun viewTypeForPosition(position: Int): Int { + return RowViewType.ROW_TOP_10.ordinal + } + + /** + * Init UI + */ + private fun initUI() { + + setDisplayHomeAsUpEnabled(true) + + tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { + override fun onTabSelected(tab: TabLayout.Tab) { + when (tab.position) { + 0 -> { + currentTab = Tab.CASH_GAMES + dataListAdapter.notifyDataSetChanged() + } + 1 -> { + currentTab = Tab.TOURNAMENTS + } + } + dataListAdapter.notifyDataSetChanged() + } + + override fun onTabUnselected(tab: TabLayout.Tab) { + } + + override fun onTabReselected(tab: TabLayout.Tab) { + } + }) + + + val viewManager = SmoothScrollLinearLayoutManager(requireContext()) + recyclerView.apply { + setHasFixedSize(true) + layoutManager = viewManager + } + + } + + /** + * Init data + */ + private fun initData() { + + this.realmCashGames = getRealm().where() + .equalTo("type", Session.Type.CASH_GAME.ordinal) + .greaterThanOrEqualTo("result.net", 0.0) + .sort("result.net", Sort.DESCENDING) + .limit(10) + .findAll() + + this.realmTournaments = getRealm().where() + .equalTo("type", Session.Type.TOURNAMENT.ordinal) + .greaterThanOrEqualTo("result.net", 0.0) + .sort("result.net", Sort.DESCENDING) + .limit(10) + .findAll() + + dataListAdapter = RowRepresentableAdapter(this, this) + recyclerView.adapter = dataListAdapter + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt index 12ccaece..3ad02065 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt @@ -26,6 +26,7 @@ import net.pokeranalytics.android.R import net.pokeranalytics.android.calculus.ComputedStat import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.calculus.bankroll.BankrollReport +import net.pokeranalytics.android.model.extensions.getFormattedGameType import net.pokeranalytics.android.model.realm.CustomField import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.Transaction @@ -37,6 +38,7 @@ import net.pokeranalytics.android.ui.extensions.setTextFormat import net.pokeranalytics.android.ui.graph.AxisFormatting import net.pokeranalytics.android.ui.graph.setStyle import net.pokeranalytics.android.ui.view.rowrepresentable.* +import net.pokeranalytics.android.util.extensions.longDate /** * An interface used to factor the configuration of RecyclerView.ViewHolder @@ -78,6 +80,7 @@ enum class RowViewType(private var layoutRes: Int) { // Custom row ROW_SESSION(R.layout.row_feed_session), ROW_TRANSACTION(R.layout.row_transaction), + ROW_TOP_10(R.layout.row_top_10), ROW_BUTTON(R.layout.row_button), ROW_FOLLOW_US(R.layout.row_follow_us), STATS(R.layout.row_stats_title_value), @@ -110,6 +113,10 @@ enum class RowViewType(private var layoutRes: Int) { // Row Transaction ROW_TRANSACTION -> RowTransactionViewHolder(layout) + // Row Transaction + ROW_TOP_10 -> RowTop10ViewHolder(layout) + + // Row Button ROW_BUTTON -> RowButtonViewHolder(layout) @@ -513,6 +520,46 @@ enum class RowViewType(private var layoutRes: Int) { } } + + /** + * Display a top 10 row + */ + inner class RowTop10ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { + override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { + + if (row is Session) { + + itemView.findViewById(R.id.gameResult)?.let { gameResult -> + val result = row.result?.net ?: 0.0 + val formattedStat = ComputedStat(Stat.NET_RESULT, result, currency = row.currency).format() + gameResult.setTextFormat(formattedStat, itemView.context) + } + + itemView.findViewById(R.id.top10ResultPart1)?.let { part1 -> + part1.text = row.getFormattedGameType(itemView.context) + } + + itemView.findViewById(R.id.top10ResultPart2)?.let { part2 -> + var content = row.getFormattedDuration() + + if (!row.location?.name.isNullOrEmpty()) { + content += " - " + row.location?.name + } else if (!row.bankroll?.name.isNullOrEmpty()) { + content += " - " + row.bankroll?.name + } + + part2.text = content + } + + itemView.findViewById(R.id.top10ResultPart3)?.let { part3 -> + part3.text = row.creationDate.longDate() + } + } + + } + } + + /** * Display a separator */ diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt index 40db96da..69edd181 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt @@ -11,15 +11,14 @@ import net.pokeranalytics.android.R import net.pokeranalytics.android.calculus.ComputedStat import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.model.TableSize -import net.pokeranalytics.android.model.TournamentType import net.pokeranalytics.android.model.extensions.SessionState +import net.pokeranalytics.android.model.extensions.getFormattedGameType import net.pokeranalytics.android.model.extensions.getState import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.ui.extensions.setTextFormat import net.pokeranalytics.android.util.extensions.getDayNumber import net.pokeranalytics.android.util.extensions.getShortDayName import net.pokeranalytics.android.util.extensions.shortTime -import net.pokeranalytics.android.util.extensions.toCurrency /** * Display a row session @@ -65,41 +64,7 @@ class SessionRowView : FrameLayout { rowSession.dateNumber.text = date.getDayNumber() // Title / Game type - - var parameters = mutableListOf() - if (session.isTournament()) { - - session.tournamentEntryFee?.let { - parameters.add(it.toCurrency(session.currency)) - } - - session.tournamentName?.let { - parameters.add(it.name) - } ?: run { - parameters.add(session.getFormattedGame()) - session.tournamentType?.let { type -> - parameters.add(TournamentType.values()[type].localizedTitle(context)) - } - } - - if (parameters.size == 0) { - parameters.add(context.getString(R.string.tournament).capitalize()) - } - } else { - if (session.cgSmallBlind != null && session.cgBigBlind != null) { - parameters.add(session.getFormattedBlinds()) - } - session.game?.let { - parameters.add(session.getFormattedGame()) - } - - if (parameters.size == 0) { - parameters.add(context.getString(R.string.cash_game).capitalize()) - } - } - val title = parameters.joinToString(separator = " ") - - rowSession.sessionTitle.text = title + rowSession.sessionTitle.text = session.getFormattedGameType(context) // Duration rowSession.sessionInfoDurationValue.text = session.getFormattedDuration() diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/MoreTabRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/MoreTabRow.kt index 4e2fe8bc..3885a4a1 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/MoreTabRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/MoreTabRow.kt @@ -9,12 +9,14 @@ import net.pokeranalytics.android.ui.view.RowViewType */ enum class MoreTabRow : RowRepresentable { BANKROLL, + TOP_10, SETTINGS; override val resId: Int? get() { return when(this) { BANKROLL -> R.string.bankroll + TOP_10 -> R.string.top_10 SETTINGS -> R.string.services } } @@ -23,6 +25,7 @@ enum class MoreTabRow : RowRepresentable { get() { return when(this) { BANKROLL -> R.drawable.ic_outline_lock + TOP_10 -> R.drawable.ic_outline_star SETTINGS -> R.drawable.ic_outline_settings } } diff --git a/app/src/main/res/drawable/ic_outline_star.xml b/app/src/main/res/drawable/ic_outline_star.xml new file mode 100644 index 00000000..3fc251d1 --- /dev/null +++ b/app/src/main/res/drawable/ic_outline_star.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/activity_top_10.xml b/app/src/main/res/layout/activity_top_10.xml new file mode 100644 index 00000000..44318e12 --- /dev/null +++ b/app/src/main/res/layout/activity_top_10.xml @@ -0,0 +1,15 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_top_10.xml b/app/src/main/res/layout/fragment_top_10.xml new file mode 100644 index 00000000..07d841a5 --- /dev/null +++ b/app/src/main/res/layout/fragment_top_10.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/row_top_10.xml b/app/src/main/res/layout/row_top_10.xml new file mode 100644 index 00000000..6d143692 --- /dev/null +++ b/app/src/main/res/layout/row_top_10.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index eecdebee..43efcfbc 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -228,6 +228,22 @@ @color/green + + + + + + From d1136c317afa30a57267973c63bab38154bb1ea8 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Thu, 6 Jun 2019 18:10:46 +0200 Subject: [PATCH 3/5] Update Top 10 UI --- .../android/ui/view/RowViewType.kt | 29 ++++--- app/src/main/res/layout/row_top_10.xml | 80 +++++++++++++++++-- 2 files changed, 94 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt index 3ad02065..244e8674 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt @@ -539,18 +539,27 @@ enum class RowViewType(private var layoutRes: Int) { part1.text = row.getFormattedGameType(itemView.context) } - itemView.findViewById(R.id.top10ResultPart2)?.let { part2 -> - var content = row.getFormattedDuration() - - if (!row.location?.name.isNullOrEmpty()) { - content += " - " + row.location?.name - } else if (!row.bankroll?.name.isNullOrEmpty()) { - content += " - " + row.bankroll?.name - } - - part2.text = content + // Duration + val durationIcon = itemView.findViewById(R.id.sessionInfoDurationIcon) + val durationText = itemView.findViewById(R.id.sessionInfoDuration) + durationIcon?.isVisible = true + durationText?.isVisible = true + durationText?.text = row.getFormattedDuration() + + // Location + val locationIcon = itemView.findViewById(R.id.sessionInfoLocationIcon) + val locationText = itemView.findViewById(R.id.sessionInfoLocation) + + if (!row.location?.name.isNullOrEmpty()) { + locationIcon?.isVisible = true + locationText?.isVisible = true + locationText?.text = row.location?.name + } else { + locationIcon?.isVisible = false + locationText?.isVisible = false } + itemView.findViewById(R.id.top10ResultPart3)?.let { part3 -> part3.text = row.creationDate.longDate() } diff --git a/app/src/main/res/layout/row_top_10.xml b/app/src/main/res/layout/row_top_10.xml index 6d143692..157d62a2 100644 --- a/app/src/main/res/layout/row_top_10.xml +++ b/app/src/main/res/layout/row_top_10.xml @@ -13,8 +13,8 @@ android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginTop="8dp" - android:gravity="center" android:layout_marginEnd="16dp" + android:gravity="center" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" @@ -25,17 +25,87 @@ style="@style/PokerAnalyticsTheme.TextView.Top10Row" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginStart="16dp" + android:layout_marginStart="8dp" android:layout_marginTop="4dp" - android:layout_marginEnd="16dp" + android:layout_marginEnd="8dp" android:gravity="center" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/gameResult" app:layout_constraintVertical_chainStyle="packed" tools:text="$300 NL Hold'em" /> + + + + + + + + + + + Date: Mon, 24 Jun 2019 16:38:23 +0200 Subject: [PATCH 4/5] Improves fake session creation --- .../android/PokerAnalyticsApplication.kt | 2 +- .../android/util/FakeDataManager.kt | 30 +++++++++++++++---- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt index 35ea4536..1b81d955 100644 --- a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt +++ b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt @@ -60,7 +60,7 @@ class PokerAnalyticsApplication : Application() { if (BuildConfig.DEBUG) { Timber.d("UserPreferences.defaultCurrency: ${UserDefaults.currency.symbol}") -// this.createFakeSessions() + this.createFakeSessions() } Patcher.patchAll(this.applicationContext) diff --git a/app/src/main/java/net/pokeranalytics/android/util/FakeDataManager.kt b/app/src/main/java/net/pokeranalytics/android/util/FakeDataManager.kt index 604b19f7..9abac93c 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/FakeDataManager.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/FakeDataManager.kt @@ -5,7 +5,9 @@ import io.realm.kotlin.where import net.pokeranalytics.android.model.Limit import net.pokeranalytics.android.model.realm.Bankroll import net.pokeranalytics.android.model.realm.Game +import net.pokeranalytics.android.model.realm.Location import net.pokeranalytics.android.model.realm.Session +import net.pokeranalytics.android.util.extensions.getOrCreate import timber.log.Timber import java.util.* @@ -30,6 +32,15 @@ class FakeDataManager { val realm = Realm.getDefaultInstance() val games = realm.where().findAll() val bankroll = realm.where().findAll().firstOrNull() + val locations = realm.where().findAll() + + if (locations.size == 0) { + realm.executeTransaction { + listOf("Bellagio", "Aria", "Borgata").map { + realm.getOrCreate(it) + } + } + } // Test endedSessions @@ -47,11 +58,8 @@ class FakeDataManager { realm.beginTransaction() } - val session = Session.newInstance(realm, Math.random() > 0.5, bankroll) - - val bigBlind = arrayListOf(1.0, 2.0, 4.0).random() - session.cgBigBlind = bigBlind - session.cgSmallBlind = bigBlind / 2.0 + val isTournament = Math.random() > 0.5 + val session = Session.newInstance(realm, isTournament, bankroll) val calendar = Calendar.getInstance() val twoDaysBetweenEachSession: Long = (2 * numberOfSessions) * 24 * 60 * 60 * 1000L // approx! @@ -70,13 +78,23 @@ class FakeDataManager { session.limit = Limit.values().random().ordinal session.game = games.random() + session.location = locations.random() + session.tableSize = (2..10).random() + val buyin = buyinList.random() session.result?.let { result -> - val buyin = buyinList.random() result.buyin = buyinList.random() result.cashout = resultsList.random() + buyin } + if (isTournament) { + session.tournamentEntryFee = buyin + } else { + val bigBlind = arrayListOf(1.0, 2.0, 4.0).random() + session.cgBigBlind = bigBlind + session.cgSmallBlind = bigBlind / 2.0 + } + } realm.commitTransaction() From 9e1e2c1512f22b31e9e0bd2183951fdcfdd293d3 Mon Sep 17 00:00:00 2001 From: Laurent Date: Mon, 24 Jun 2019 17:06:11 +0200 Subject: [PATCH 5/5] Top 10 layout improvements --- .../android/ui/fragment/Top10Fragment.kt | 49 +++-- .../android/ui/view/RowViewType.kt | 18 +- app/src/main/res/layout/row_top_10.xml | 184 ++++++++---------- 3 files changed, 125 insertions(+), 126 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/Top10Fragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/Top10Fragment.kt index 9dfc8361..ca03dde0 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/Top10Fragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/Top10Fragment.kt @@ -12,7 +12,6 @@ import io.realm.kotlin.where import kotlinx.android.synthetic.main.fragment_feed.* import net.pokeranalytics.android.R import net.pokeranalytics.android.model.realm.Session -import net.pokeranalytics.android.model.realm.Transaction import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate @@ -44,7 +43,7 @@ class Top10Fragment : RealmFragment(), RowRepresentableDataSource, RowRepresenta private var currentTab: Tab = Tab.CASH_GAMES - override val observedEntities: List> = listOf(Session::class.java, Transaction::class.java) + override val observedEntities: List> = listOf(Session::class.java) override fun entitiesChanged(clazz: Class) { super.entitiesChanged(clazz) @@ -66,6 +65,29 @@ class Top10Fragment : RealmFragment(), RowRepresentableDataSource, RowRepresenta initData() } + /** + * Init data + */ + private fun initData() { + + this.realmCashGames = getRealm().where() + .equalTo("type", Session.Type.CASH_GAME.ordinal) + .greaterThanOrEqualTo("result.net", 0.0) + .sort("result.net", Sort.DESCENDING) + .limit(10) + .findAll() + + this.realmTournaments = getRealm().where() + .equalTo("type", Session.Type.TOURNAMENT.ordinal) + .greaterThanOrEqualTo("result.net", 0.0) + .sort("result.net", Sort.DESCENDING) + .limit(10) + .findAll() + + dataListAdapter = RowRepresentableAdapter(this, this) + recyclerView.adapter = dataListAdapter + } + override fun adapterRows(): List? { return when (currentTab) { Tab.CASH_GAMES -> realmCashGames @@ -128,27 +150,4 @@ class Top10Fragment : RealmFragment(), RowRepresentableDataSource, RowRepresenta } - /** - * Init data - */ - private fun initData() { - - this.realmCashGames = getRealm().where() - .equalTo("type", Session.Type.CASH_GAME.ordinal) - .greaterThanOrEqualTo("result.net", 0.0) - .sort("result.net", Sort.DESCENDING) - .limit(10) - .findAll() - - this.realmTournaments = getRealm().where() - .equalTo("type", Session.Type.TOURNAMENT.ordinal) - .greaterThanOrEqualTo("result.net", 0.0) - .sort("result.net", Sort.DESCENDING) - .limit(10) - .findAll() - - dataListAdapter = RowRepresentableAdapter(this, this) - recyclerView.adapter = dataListAdapter - } - } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt index 244e8674..a9120261 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt @@ -26,6 +26,7 @@ import net.pokeranalytics.android.R import net.pokeranalytics.android.calculus.ComputedStat import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.calculus.bankroll.BankrollReport +import net.pokeranalytics.android.model.TableSize import net.pokeranalytics.android.model.extensions.getFormattedGameType import net.pokeranalytics.android.model.realm.CustomField import net.pokeranalytics.android.model.realm.Session @@ -116,7 +117,6 @@ enum class RowViewType(private var layoutRes: Int) { // Row Transaction ROW_TOP_10 -> RowTop10ViewHolder(layout) - // Row Button ROW_BUTTON -> RowButtonViewHolder(layout) @@ -535,7 +535,7 @@ enum class RowViewType(private var layoutRes: Int) { gameResult.setTextFormat(formattedStat, itemView.context) } - itemView.findViewById(R.id.top10ResultPart1)?.let { part1 -> + itemView.findViewById(R.id.sessionGameType)?.let { part1 -> part1.text = row.getFormattedGameType(itemView.context) } @@ -559,8 +559,20 @@ enum class RowViewType(private var layoutRes: Int) { locationText?.isVisible = false } + // Table Size + val tableSizeIcon = itemView.findViewById(R.id.sessionInfoTableSizeIcon) + val tableSizeText = itemView.findViewById(R.id.sessionInfoTableSize) + + row.tableSize?.let { + tableSizeIcon?.isVisible = true + tableSizeText?.isVisible = true + tableSizeText?.text = TableSize(it).localizedTitle(itemView.context) + } ?: run { + tableSizeIcon?.isVisible = false + tableSizeText?.isVisible = false + } - itemView.findViewById(R.id.top10ResultPart3)?.let { part3 -> + itemView.findViewById(R.id.sessionDate)?.let { part3 -> part3.text = row.creationDate.longDate() } } diff --git a/app/src/main/res/layout/row_top_10.xml b/app/src/main/res/layout/row_top_10.xml index 157d62a2..88506205 100644 --- a/app/src/main/res/layout/row_top_10.xml +++ b/app/src/main/res/layout/row_top_10.xml @@ -21,121 +21,109 @@ tools:text="$ 1000" /> + + - + app:layout_constraintEnd_toEndOf="parent" + android:gravity="center"> - + - + + - + + - + - + \ No newline at end of file