From e663e55f1fa946f80d99160f66416cd4daed477e Mon Sep 17 00:00:00 2001 From: Laurent Date: Tue, 16 Feb 2021 14:29:01 +0100 Subject: [PATCH] Adds hands count management --- app/src/main/AndroidManifest.xml | 2 +- .../pokeranalytics/android/calculus/Stat.kt | 2 +- .../migrations/PokerAnalyticsMigration.kt | 9 +- .../android/model/realm/Configuration.kt | 23 --- .../android/model/realm/Session.kt | 3 +- .../android/model/realm/UserConfig.kt | 28 +++ .../android/ui/fragment/SettingsFragment.kt | 2 + .../android/ui/fragment/StatisticsFragment.kt | 7 +- .../ui/fragment/components/RealmFragment.kt | 20 +- .../ui/modules/calendar/CalendarFragment.kt | 4 +- .../android/ui/modules/feed/FeedFragment.kt | 2 +- .../ui/modules/session/SessionFragment.kt | 5 + .../settings/DealtHandsPerHourActivity.kt | 27 +++ .../settings/DealtHandsPerHourFragment.kt | 84 ++++++++- .../ui/view/rows/SessionPropertiesRow.kt | 14 +- .../android/ui/view/rows/SettingsRow.kt | 4 +- .../ui/viewmodel/BottomSheetViewModel.kt | 5 +- .../layout/activity_dealt_hands_config.xml | 15 ++ .../layout/fragment_dealt_hands_config.xml | 173 +++++++++++------- .../res/menu/toolbar_dealt_hands_per_hour.xml | 11 ++ app/src/main/res/values/strings.xml | 2 + 21 files changed, 325 insertions(+), 117 deletions(-) delete mode 100644 app/src/main/java/net/pokeranalytics/android/model/realm/Configuration.kt create mode 100644 app/src/main/java/net/pokeranalytics/android/model/realm/UserConfig.kt create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/modules/settings/DealtHandsPerHourActivity.kt create mode 100644 app/src/main/res/layout/activity_dealt_hands_config.xml create mode 100644 app/src/main/res/menu/toolbar_dealt_hands_per_hour.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index dedeb749..d534f814 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -179,7 +179,7 @@ android:screenOrientation="portrait" /> diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt b/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt index 0b8316eb..8cad115d 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt @@ -242,7 +242,7 @@ enum class Stat(override var uniqueIdentifier: Int) : IntIdentifiable, RowRepres get() { return when (this) { HOURLY_DURATION, AVERAGE_HOURLY_DURATION, STANDARD_DEVIATION_BB, - STANDARD_DEVIATION, STANDARD_DEVIATION_HOURLY, + STANDARD_DEVIATION, STANDARD_DEVIATION_HOURLY, HANDS_PLAYED, STANDARD_DEVIATION_BB_PER_100_HANDS -> false else -> true } diff --git a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt index 3c884c1b..bae71be7 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt @@ -231,8 +231,15 @@ class PokerAnalyticsMigration : RealmMigration { // Migrate to version 10 if (currentVersion == 9) { schema.get("Session")?.addField("handsCount", Int::class.java) + ?.setRequired("handsCount", false) - val configSchema = schema.create("Configuration") + schema.get("Session")?.transform { obj -> // otherwise we get a 0 default value + obj.setNull("handsCount") + } + + val configSchema = schema.create("UserConfig") + configSchema.addField("id", String::class.java).setRequired("id", true) + configSchema.addPrimaryKey("id") configSchema.addField("liveDealtHandsPerHour", Int::class.java) configSchema.addField("onlineDealtHandsPerHour", Int::class.java) diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Configuration.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Configuration.kt deleted file mode 100644 index 6ff53f2c..00000000 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Configuration.kt +++ /dev/null @@ -1,23 +0,0 @@ -package net.pokeranalytics.android.model.realm - -import io.realm.Realm -import io.realm.RealmObject - -class Configuration : RealmObject() { - - companion object { - - fun getConfiguration(realm: Realm): Configuration { - realm.where(Configuration::class.java).findFirst()?.let { - return it - } - return Configuration() - } - - } - - var liveDealtHandsPerHour: Int = 250 - - var onlineDealtHandsPerHour: Int = 500 - -} \ No newline at end of file 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 ded20ea9..547e041e 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 @@ -459,7 +459,7 @@ open class Session : RealmObject(), Savable, RowUpdatable, RowRepresentable, Tim val numberOfHandsPerHour: Double get() { val tableSize = this.tableSize ?: 9 // 9 is the default table size if null - val config = Configuration.getConfiguration(this.realm) + val config = UserConfig.getConfiguration(this.realm) val playerHandsPerHour = if (this.isLive) config.liveDealtHandsPerHour else config.onlineDealtHandsPerHour return playerHandsPerHour / tableSize.toDouble() } @@ -813,6 +813,7 @@ open class Session : RealmObject(), Savable, RowUpdatable, RowRepresentable, Tim tournamentFeatures.removeAll(this.tournamentFeatures) } } + SessionPropertiesRow.HANDS_COUNT -> handsCount = (value as Double?)?.toInt() is CustomField -> { customFieldEntries.filter { it.customField?.id == row.id }.let { customFieldEntries.removeAll(it) diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/UserConfig.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/UserConfig.kt new file mode 100644 index 00000000..5b95e626 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/UserConfig.kt @@ -0,0 +1,28 @@ +package net.pokeranalytics.android.model.realm + +import io.realm.Realm +import io.realm.RealmObject +import io.realm.annotations.PrimaryKey +import java.util.* + +open class UserConfig : RealmObject() { + + companion object { + + fun getConfiguration(realm: Realm): UserConfig { + realm.where(UserConfig::class.java).findFirst()?.let { config -> + return config + } + return UserConfig() + } + + } + + @PrimaryKey + var id = UUID.randomUUID().toString() + + var liveDealtHandsPerHour: Int = 250 + + var onlineDealtHandsPerHour: Int = 500 + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt index 86c6b4f7..ceee25aa 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt @@ -33,6 +33,7 @@ import net.pokeranalytics.android.ui.extensions.openUrl import net.pokeranalytics.android.ui.fragment.components.RealmFragment import net.pokeranalytics.android.ui.modules.bankroll.BankrollActivity import net.pokeranalytics.android.ui.modules.datalist.DataListActivity +import net.pokeranalytics.android.ui.modules.settings.DealtHandsPerHourActivity import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.rows.SettingsRow import net.pokeranalytics.android.util.* @@ -174,6 +175,7 @@ class SettingsFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRep SettingsRow.CONTACT_US -> parentActivity?.openContactMail(R.string.contact) SettingsRow.BUG_REPORT -> parentActivity?.openContactMail(R.string.bug_report_subject, Realm.getDefaultInstance().path) SettingsRow.CURRENCY -> CurrenciesActivity.newInstanceForResult(this@SettingsFragment, RequestCode.CURRENCY.value) + SettingsRow.DEALT_HANDS_PER_HOUR -> DealtHandsPerHourActivity.newInstance(requireContext()) SettingsRow.EXPORT_CSV_SESSIONS -> this.sessionsCSVExport() SettingsRow.EXPORT_CSV_TRANSACTIONS -> this.transactionsCSVExport() SettingsRow.FOLLOW_US -> { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt index d34b9a41..3085cc7a 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt @@ -20,7 +20,7 @@ import net.pokeranalytics.android.exceptions.PAIllegalStateException import net.pokeranalytics.android.model.filter.Query import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.realm.ComputableResult -import net.pokeranalytics.android.model.realm.Configuration +import net.pokeranalytics.android.model.realm.UserConfig import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.ui.fragment.components.FilterableFragment import net.pokeranalytics.android.ui.fragment.components.RealmAsyncListener @@ -70,7 +70,7 @@ class StatisticsFragment : FilterableFragment(), RealmAsyncListener { this.currentFilterable = FilterableType.SESSION applyFilter() - addRealmChangeListener(this, Configuration::class.java) + addRealmChangeListener(this, UserConfig::class.java) addRealmChangeListener(this, ComputableResult::class.java) } @@ -190,7 +190,8 @@ class StatisticsFragment : FilterableFragment(), RealmAsyncListener { Stat.AVERAGE, Stat.NUMBER_OF_SETS, Stat.AVERAGE_HOURLY_DURATION, - Stat.HOURLY_DURATION + Stat.HOURLY_DURATION, + Stat.HANDS_PLAYED ) val query = filter?.query ?: Query() diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/RealmFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/RealmFragment.kt index e66dbc6b..a9de0bbb 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/RealmFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/RealmFragment.kt @@ -41,15 +41,15 @@ open class RealmFragment : BaseFragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { realm = Realm.getDefaultInstance() -// this.observedEntities.forEach { -// val realmResults = realm.where(it).findAll() -// -// realmResults.addChangeListener { t, _ -> -// this.entitiesChanged(it, t) -// } -// -// this.observedRealmResults.add(realmResults) -// } + this.observedEntities.forEach { + val realmResults = realm.where(it).findAll() + + realmResults.addChangeListener { t, _ -> + this.entitiesChanged(it, t) + } + + this.observedRealmResults.add(realmResults) + } return super.onCreateView(inflater, container, savedInstanceState) } @@ -102,7 +102,7 @@ open class RealmFragment : BaseFragment() { /** * A list of RealmModel classes to observe */ -// open val observedEntities: List> = listOf() + open val observedEntities: List> = listOf() /** * The method called when a change happened in any RealmResults diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/calendar/CalendarFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/calendar/CalendarFragment.kt index 1e40c533..68259f79 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/calendar/CalendarFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/calendar/CalendarFragment.kt @@ -19,7 +19,7 @@ import net.pokeranalytics.android.model.Criteria import net.pokeranalytics.android.model.combined import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.realm.ComputableResult -import net.pokeranalytics.android.model.realm.Configuration +import net.pokeranalytics.android.model.realm.UserConfig import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource @@ -88,7 +88,7 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable initData() initUI() - addRealmChangeListener(this, Configuration::class.java) + addRealmChangeListener(this, UserConfig::class.java) addRealmChangeListener(this, ComputableResult::class.java) } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/feed/FeedFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/feed/FeedFragment.kt index 0f17879c..ec3735a5 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/feed/FeedFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/feed/FeedFragment.kt @@ -271,7 +271,7 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate, PurchaseLis } this.view?.viewTreeObserver?.addOnGlobalLayoutListener { - Timber.d(">>> addOnGlobalLayoutListener called") +// Timber.d(">>> addOnGlobalLayoutListener called") retrieveLatestBlogPosts() // attempt to retrieve blog tips on display } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/session/SessionFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/session/SessionFragment.kt index 14e7db60..bc317e07 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/session/SessionFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/session/SessionFragment.kt @@ -621,6 +621,11 @@ class SessionFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRepr "defaultValue" to session.result?.tournamentFinalPosition ) ) + SessionPropertiesRow.HANDS_COUNT -> row.editingDescriptors( + mapOf( + "defaultValue" to session.handsCount + ) + ) SessionPropertiesRow.TIPS -> row.editingDescriptors( mapOf( "sb" to session.cgSmallBlind?.round(), diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/settings/DealtHandsPerHourActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/settings/DealtHandsPerHourActivity.kt new file mode 100644 index 00000000..cc13f05a --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/settings/DealtHandsPerHourActivity.kt @@ -0,0 +1,27 @@ +package net.pokeranalytics.android.ui.modules.settings + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import net.pokeranalytics.android.R +import net.pokeranalytics.android.ui.activity.CurrenciesActivity +import net.pokeranalytics.android.ui.activity.components.BaseActivity + +class DealtHandsPerHourActivity : BaseActivity() { + + companion object { + + fun newInstance(context: Context) { + val intent = Intent(context, DealtHandsPerHourActivity::class.java) + context.startActivity(intent) + + } + + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_dealt_hands_config) + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/settings/DealtHandsPerHourFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/settings/DealtHandsPerHourFragment.kt index 95468aaf..e313b01f 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/settings/DealtHandsPerHourFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/settings/DealtHandsPerHourFragment.kt @@ -1,11 +1,89 @@ package net.pokeranalytics.android.ui.modules.settings -import net.pokeranalytics.android.ui.fragment.components.BaseFragment +import android.app.Activity +import android.os.Bundle +import android.view.* +import android.view.inputmethod.InputMethodManager +import kotlinx.android.synthetic.main.fragment_dealt_hands_config.* +import net.pokeranalytics.android.R +import net.pokeranalytics.android.databinding.FragmentDealtHandsConfigBinding +import net.pokeranalytics.android.model.realm.ComputableResult +import net.pokeranalytics.android.model.realm.Session +import net.pokeranalytics.android.model.realm.UserConfig +import net.pokeranalytics.android.ui.fragment.components.RealmFragment -class DealtHandsPerHourFragment : BaseFragment() { - +class DealtHandsPerHourFragment : RealmFragment() { + private var _binding: FragmentDealtHandsConfigBinding? = null + private val binding get() = _binding!! + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + super.onCreateView(inflater, container, savedInstanceState) + _binding = FragmentDealtHandsConfigBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initUI() + } + + override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + menu.clear() + inflater.inflate(R.menu.toolbar_dealt_hands_per_hour, menu) + super.onCreateOptionsMenu(menu, inflater) + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + when (item.itemId) { + R.id.save -> save() + } + return true + } + + private fun initUI() { + + setDisplayHomeAsUpEnabled(true) + + val userConfig = UserConfig.getConfiguration(this.getRealm()) + this.liveValue.hint = "${userConfig.liveDealtHandsPerHour}" + this.onlineValue.hint = "${userConfig.onlineDealtHandsPerHour}" + + } + + private fun save() { + + getRealm().executeTransaction { realm -> + + val userConfig = UserConfig.getConfiguration(realm) + this.liveValue.text.toString().toIntOrNull()?.let { liveDealtHandsPerHour -> + userConfig.liveDealtHandsPerHour = liveDealtHandsPerHour + } + this.onlineValue.text.toString().toIntOrNull()?.let { onlineDealtHandsPerHour -> + userConfig.onlineDealtHandsPerHour = onlineDealtHandsPerHour + } + realm.copyToRealmOrUpdate(userConfig) + + // update all precomputed hand counts + realm.where(ComputableResult::class.java).findAll().forEach { cr -> + cr.session?.let { session -> + cr.estimatedHands = session.estimatedHands + } + } + } + + this.liveValue.clearFocus() + this.onlineValue.clearFocus() + + // Hides keyboard + val imm: InputMethodManager = + requireContext().getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager + imm.hideSoftInputFromWindow(view!!.windowToken, 0) + } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rows/SessionPropertiesRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rows/SessionPropertiesRow.kt index 296695f6..c945c930 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rows/SessionPropertiesRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rows/SessionPropertiesRow.kt @@ -48,9 +48,10 @@ enum class SessionPropertiesRow : RowRepresentable { * Return the rows to display for the current session state */ fun getRows(session: Session, resultCaptureType: ResultCaptureType?, context: Context): List { + val state = session.getState() when (session.type) { Session.Type.TOURNAMENT.ordinal -> { - return when (session.getState()) { + return when (state) { SessionState.PENDING, SessionState.PLANNED -> { arrayListOf( GAME, @@ -93,12 +94,15 @@ enum class SessionPropertiesRow : RowRepresentable { END_DATE, BREAK_TIME )) + if (state == SessionState.FINISHED) { + fields.add(HANDS_COUNT) + } fields } } } Session.Type.CASH_GAME.ordinal -> { - when (session.getState()) { + when (state) { SessionState.PENDING, SessionState.PLANNED -> { return arrayListOf(GAME, BLINDS, LOCATION, BANKROLL, TABLE_SIZE, START_DATE, END_DATE) } @@ -140,6 +144,9 @@ enum class SessionPropertiesRow : RowRepresentable { BREAK_TIME ) ) + if (state == SessionState.FINISHED) { + fields.add(HANDS_COUNT) + } return fields } } @@ -274,7 +281,8 @@ enum class SessionPropertiesRow : RowRepresentable { } HANDS_COUNT -> { arrayListOf( - RowRepresentableEditDescriptor(inputType = InputType.TYPE_CLASS_NUMBER) + RowRepresentableEditDescriptor(inputType = InputType.TYPE_CLASS_NUMBER + or InputType.TYPE_NUMBER_FLAG_SIGNED) ) } GAME -> { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rows/SettingsRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rows/SettingsRow.kt index 68f127f6..bb3b264d 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rows/SettingsRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rows/SettingsRow.kt @@ -35,6 +35,7 @@ enum class SettingsRow : RowRepresentable { // Preferences LANGUAGE, CURRENCY, + DEALT_HANDS_PER_HOUR, // Export EXPORT_CSV_SESSIONS, @@ -78,7 +79,7 @@ enum class SettingsRow : RowRepresentable { rows.addAll(arrayListOf(FOLLOW_US, DISCORD, BLOG_TIPS, SHOULD_SHOW_BLOG_TIPS)) rows.add(CustomizableRowRepresentable(customViewType = RowViewType.HEADER_TITLE, resId = R.string.preferences)) - rows.addAll(arrayListOf(CURRENCY)) + rows.addAll(arrayListOf(CURRENCY, DEALT_HANDS_PER_HOUR)) rows.add(CustomizableRowRepresentable(customViewType = RowViewType.HEADER_TITLE, resId = R.string.export)) rows.addAll(arrayListOf(EXPORT_CSV_SESSIONS, EXPORT_CSV_TRANSACTIONS)) @@ -127,6 +128,7 @@ enum class SettingsRow : RowRepresentable { GDPR -> R.string.gdpr POKER_RUMBLE -> R.string.poker_rumble DISCORD -> R.string.join_discord + DEALT_HANDS_PER_HOUR -> R.string.dealt_hands_per_hour else -> null } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/viewmodel/BottomSheetViewModel.kt b/app/src/main/java/net/pokeranalytics/android/ui/viewmodel/BottomSheetViewModel.kt index 75b8d1e5..10f0fb20 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/viewmodel/BottomSheetViewModel.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/viewmodel/BottomSheetViewModel.kt @@ -24,8 +24,6 @@ class BottomSheetViewModelFactory(var row: RowRepresentable, var delegate: RowRe class BottomSheetViewModel(var row: RowRepresentable) : ViewModel() { -// lateinit var row: RowRepresentable - var currentCurrency: Currency? = null var valueAsHint: Boolean = false var isClearable: Boolean = true @@ -49,7 +47,6 @@ class BottomSheetViewModel(var row: RowRepresentable) : ViewModel() { this.limit = 0 } - /** * Storage for a data that has been newly created */ @@ -164,7 +161,7 @@ class BottomSheetViewModel(var row: RowRepresentable) : ViewModel() { BottomSheetType.NUMERIC_TEXT -> { val bottomSheetData = this.rowRepresentableEditDescriptors - ?: throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found") + ?: throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found: $row") bottomSheetData[0].defaultValue?.let { this.doubleValue = it.toString().toDoubleOrNull() } diff --git a/app/src/main/res/layout/activity_dealt_hands_config.xml b/app/src/main/res/layout/activity_dealt_hands_config.xml new file mode 100644 index 00000000..056fb6e0 --- /dev/null +++ b/app/src/main/res/layout/activity_dealt_hands_config.xml @@ -0,0 +1,15 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_dealt_hands_config.xml b/app/src/main/res/layout/fragment_dealt_hands_config.xml index fd844d40..4716f6a0 100644 --- a/app/src/main/res/layout/fragment_dealt_hands_config.xml +++ b/app/src/main/res/layout/fragment_dealt_hands_config.xml @@ -1,76 +1,123 @@ - - - - - - - - - - + + + + + + + + + + + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/appBar"> + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/toolbar_dealt_hands_per_hour.xml b/app/src/main/res/menu/toolbar_dealt_hands_per_hour.xml new file mode 100644 index 00000000..808e2460 --- /dev/null +++ b/app/src/main/res/menu/toolbar_dealt_hands_per_hour.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f673ef0b..5072d042 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -814,5 +814,7 @@ ITM ratio Hands count estimated + You can change the DHPH (Dealt Hands Per Hour) values here. It corresponds to the total number of hands all players receives at a table in one hour. Example: Your local 10-max game deals 25 hands per hour, enter 10 x 25 = 250. + Dealt hands per hour