From 726ba5cd72f522ceab0fe1dfaf37bffd832266e0 Mon Sep 17 00:00:00 2001 From: Laurent Date: Fri, 5 Apr 2019 10:36:31 +0200 Subject: [PATCH 1/5] Fixing issue with day formatting --- .../net/pokeranalytics/android/util/extensions/DateExtension.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/net/pokeranalytics/android/util/extensions/DateExtension.kt b/app/src/main/java/net/pokeranalytics/android/util/extensions/DateExtension.kt index 6ef27c60..34061212 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/extensions/DateExtension.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/extensions/DateExtension.kt @@ -77,7 +77,7 @@ fun Date.getDayNumber() : String { } // Return the 3 first letters of the date's day fun Date.getShortDayName() : String { - return SimpleDateFormat("EE", Locale.getDefault()).format(this).substring(0, 3) + return SimpleDateFormat("EEE", Locale.getDefault()).format(this) } // Return the month & year of the date fun Date.getMonthAndYear(): String { From b93dd5f9d15860e2c27764fe31e90a46429dc421 Mon Sep 17 00:00:00 2001 From: Laurent Date: Fri, 5 Apr 2019 10:36:51 +0200 Subject: [PATCH 2/5] bumping version for new build --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index c6cc3504..d5cc0e4b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -27,7 +27,7 @@ android { applicationId "net.pokeranalytics.android" minSdkVersion 23 targetSdkVersion 28 - versionCode 5 + versionCode 6 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } From b7bc88515748c61c838b6cae1fc78ea7729212e3 Mon Sep 17 00:00:00 2001 From: Laurent Date: Fri, 5 Apr 2019 10:49:29 +0200 Subject: [PATCH 3/5] Fixing crash when setting an end date before a start date --- .../android/model/realm/Session.kt | 179 +++++++++--------- .../android/model/utils/SessionSetManager.kt | 5 +- .../android/ui/fragment/SessionFragment.kt | 22 ++- app/src/main/res/values/strings.xml | 4 + 4 files changed, 113 insertions(+), 97 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 bf104448..f55b05e0 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 @@ -718,107 +718,110 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat } override fun updateValue(value: Any?, row: RowRepresentable) { - realm.beginTransaction() - when (row) { - SessionRow.BANKROLL -> bankroll = value as Bankroll? - SessionRow.BLINDS -> if (value is ArrayList<*>) { - cgSmallBlind = try { - (value[0] as String? ?: "0").toDouble() - } catch (e: Exception) { - null - } - - cgBigBlind = try { - (value[1] as String? ?: "0").toDouble() - } catch (e: Exception) { - null - } - - cgBigBlind?.let { - if (cgSmallBlind == null || cgSmallBlind == 0.0) { - cgSmallBlind = it / 2.0 - } - } - } else if (value == null) { - cgSmallBlind = null - cgBigBlind = null - } - SessionRow.BREAK_TIME -> { - this.breakDuration = if (value != null) (value as String).toLong() * 60 * 1000 else 0 - } - SessionRow.BUY_IN -> { - val localResult = if (this.result != null) this.result as Result else realm.createObject(Result::class.java) - localResult.buyin = value as Double? - this.result = localResult - this.updateRowRepresentation() - } - SessionRow.CASHED_OUT, SessionRow.PRIZE -> { - val localResult = if (this.result != null) this.result as Result else realm.createObject(Result::class.java) - - if (value == null) { - localResult.cashout = null - } else { - localResult.cashout = (value as String).toDouble() - } - - this.result = localResult - } - SessionRow.NET_RESULT -> { - this.result?.let { result -> - result.netResult = (value as String).toDouble() - } - } - SessionRow.COMMENT -> comment = value as String? ?: "" - SessionRow.END_DATE -> if (value is Date?) { - this.endDate = value + realm.executeTransaction { - } - SessionRow.GAME -> { - if (value is ArrayList<*>) { - limit = try { - (value[0] as Int?) + when (row) { + SessionRow.BANKROLL -> bankroll = value as Bankroll? + SessionRow.BLINDS -> if (value is ArrayList<*>) { + cgSmallBlind = try { + (value[0] as String? ?: "0").toDouble() } catch (e: Exception) { null } - game = try { - (value[1] as Game?) + + cgBigBlind = try { + (value[1] as String? ?: "0").toDouble() } catch (e: Exception) { null } - } else if (value is Game) { - game = value + + cgBigBlind?.let { + if (cgSmallBlind == null || cgSmallBlind == 0.0) { + cgSmallBlind = it / 2.0 + } + } } else if (value == null) { - limit = null - game = null + cgSmallBlind = null + cgBigBlind = null + } + SessionRow.BREAK_TIME -> { + this.breakDuration = if (value != null) (value as String).toLong() * 60 * 1000 else 0 + } + SessionRow.BUY_IN -> { + val localResult = if (this.result != null) this.result as Result else realm.createObject(Result::class.java) + localResult.buyin = value as Double? + this.result = localResult + this.updateRowRepresentation() + } + SessionRow.CASHED_OUT, SessionRow.PRIZE -> { + val localResult = if (this.result != null) this.result as Result else realm.createObject(Result::class.java) + + if (value == null) { + localResult.cashout = null + } else { + localResult.cashout = (value as String).toDouble() + } + this.result = localResult + } + SessionRow.NET_RESULT -> { + this.result?.let { result -> + result.netResult = (value as String).toDouble() + } + } + SessionRow.COMMENT -> comment = value as String? ?: "" + + SessionRow.END_DATE -> if (value is Date?) { + this.endDate = value + + } + SessionRow.GAME -> { + if (value is ArrayList<*>) { + limit = try { + (value[0] as Int?) + } catch (e: Exception) { + null + } + game = try { + (value[1] as Game?) + } catch (e: Exception) { + null + } + } else if (value is Game) { + game = value + } else if (value == null) { + limit = null + game = null + + } + } + SessionRow.INITIAL_BUY_IN -> tournamentEntryFee = if (value == null) null else (value as String).toDouble() + SessionRow.LOCATION -> location = value as Location? + SessionRow.PLAYERS -> tournamentNumberOfPlayers = if (value != null) (value as String).toInt() else null + SessionRow.POSITION -> { + val localResult = if (result != null) result as Result else realm.createObject(Result::class.java) + localResult.tournamentFinalPosition = if (value == null) null else (value as String).toInt() + result = localResult + } + SessionRow.START_DATE -> if (value is Date) { + this.startDate = value + } + SessionRow.TABLE_SIZE -> tableSize = value as Int? + SessionRow.TIPS -> { + val localResult = if (result != null) result as Result else realm.createObject(Result::class.java) + localResult.tips = value as Double? + result = localResult + } + SessionRow.TOURNAMENT_NAME -> tournamentName = value as TournamentName? + SessionRow.TOURNAMENT_TYPE -> tournamentType = value as Int? + SessionRow.TOURNAMENT_FEATURE -> value?.let { + tournamentFeatures = RealmList() + tournamentFeatures.addAll((it as ArrayList)) } - } - SessionRow.INITIAL_BUY_IN -> tournamentEntryFee = if (value == null) null else (value as String).toDouble() - SessionRow.LOCATION -> location = value as Location? - SessionRow.PLAYERS -> tournamentNumberOfPlayers = if (value != null) (value as String).toInt() else null - SessionRow.POSITION -> { - val localResult = if (result != null) result as Result else realm.createObject(Result::class.java) - localResult.tournamentFinalPosition = if (value == null) null else (value as String).toInt() - result = localResult - } - SessionRow.START_DATE -> if (value is Date) { - this.startDate = value - } - SessionRow.TABLE_SIZE -> tableSize = value as Int? - SessionRow.TIPS -> { - val localResult = if (result != null) result as Result else realm.createObject(Result::class.java) - localResult.tips = value as Double? - result = localResult - } - SessionRow.TOURNAMENT_NAME -> tournamentName = value as TournamentName? - SessionRow.TOURNAMENT_TYPE -> tournamentType = value as Int? - SessionRow.TOURNAMENT_FEATURE -> value?.let { - tournamentFeatures = RealmList() - tournamentFeatures.addAll((it as ArrayList)) } } - realm.commitTransaction() + } } diff --git a/app/src/main/java/net/pokeranalytics/android/model/utils/SessionSetManager.kt b/app/src/main/java/net/pokeranalytics/android/model/utils/SessionSetManager.kt index 611aa32c..c62b84c3 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/utils/SessionSetManager.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/utils/SessionSetManager.kt @@ -2,6 +2,7 @@ package net.pokeranalytics.android.model.utils import io.realm.RealmQuery import io.realm.RealmResults +import net.pokeranalytics.android.exceptions.ModelException import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.SessionSet import kotlin.math.max @@ -28,10 +29,10 @@ class SessionSetManager { } if (session.startDate == null) { - throw IllegalStateException("Start date should never be null here") + throw ModelException("Start date should never be null here") } if (session.endDate == null) { - throw IllegalStateException("End date should never be null here") + throw ModelException("End date should never be null here") } val endDate = session.endDate!! // tested above val startDate = session.startDate!! diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt index ddf62652..8bf03113 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt @@ -89,13 +89,21 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate { val data = currentSession.editDescriptors(row) when (row) { SessionRow.START_DATE -> DateTimePickerManager.create(requireContext(),row,this,currentSession.startDate) - SessionRow.END_DATE -> DateTimePickerManager.create( - requireContext(), - row, - this, - currentSession.endDate ?: currentSession.startDate ?: Date(), - currentSession.startDate - ) + SessionRow.END_DATE -> { + + if (this.currentSession.startDate == null) { + Toast.makeText(context, R.string.session_missing_start_date, Toast.LENGTH_SHORT).show() + } else { + DateTimePickerManager.create( + requireContext(), + row, + this, + currentSession.endDate ?: currentSession.startDate ?: Date(), + currentSession.startDate + ) + } + + } SessionRow.BANKROLL -> { BottomSheetFragment.create(fragmentManager, row, this, data, false, CurrencyUtils.getCurrency(currentSession.bankroll)) } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8da8384e..a3d7ff6b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2,6 +2,10 @@ Poker Analytics + Please set a start date for the session + + + Address Suggestions %s deleted From 03f471b3a81f9526bec2120f22af91debdecb430 Mon Sep 17 00:00:00 2001 From: Laurent Date: Fri, 5 Apr 2019 12:28:00 +0200 Subject: [PATCH 4/5] bumping version for new build --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index d5cc0e4b..61775d6f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -27,7 +27,7 @@ android { applicationId "net.pokeranalytics.android" minSdkVersion 23 targetSdkVersion 28 - versionCode 6 + versionCode 7 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } From ddec8c268d304e275c4bd0e796642e8d981bf662 Mon Sep 17 00:00:00 2001 From: Laurent Date: Fri, 5 Apr 2019 17:47:04 +0200 Subject: [PATCH 5/5] Fixes crash with empty strings --- .../net/pokeranalytics/android/model/realm/Bankroll.kt | 10 ++++++++-- .../android/ui/fragment/BankrollDataFragment.kt | 10 ++++++---- .../bottomsheet/BottomSheetEditTextFragment.kt | 7 ++++++- 3 files changed, 20 insertions(+), 7 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 b5ce8238..c5a3df93 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 @@ -6,8 +6,8 @@ import io.realm.RealmObject import io.realm.annotations.PrimaryKey import io.realm.kotlin.where import net.pokeranalytics.android.R -import net.pokeranalytics.android.model.interfaces.SaveValidityStatus import net.pokeranalytics.android.model.interfaces.NameManageable +import net.pokeranalytics.android.model.interfaces.SaveValidityStatus import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor @@ -70,7 +70,13 @@ open class Bankroll() : RealmObject(), NameManageable, StaticRowRepresentableDat } override fun editDescriptors(row: RowRepresentable): ArrayList? { - return row.editingDescriptors(mapOf("defaultValue" to this.name)) + return when (row) { + SimpleRow.NAME -> row.editingDescriptors(mapOf("defaultValue" to this.name)) + BankrollRow.RATE -> row.editingDescriptors(mapOf()) + else -> { + row.editingDescriptors(mapOf()) + } + } } override fun updateValue(value: Any?, row: RowRepresentable) { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt index 90831d09..586888cb 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt @@ -24,6 +24,8 @@ import retrofit2.Call import retrofit2.Response import java.util.* + + /** * Custom EditableDataFragment to manage the Bankroll data */ @@ -44,7 +46,7 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS private var isRefreshingRate = false private var lastRefreshRateCall = 0L - private val differentCurrency : Boolean + private val shouldShowCurrencyRate : Boolean get() { return bankroll.currency?.let { bankrollCurrency -> bankrollCurrency.code != defaultCurrency.currencyCode @@ -67,7 +69,7 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS data?.let { val currencyCode = it.getStringExtra(CurrenciesFragment.INTENT_CURRENCY_CODE) onRowValueChanged(currencyCode, BankrollRow.CURRENCY) - if (differentCurrency) { + if (shouldShowCurrencyRate) { refreshRate() } } @@ -119,7 +121,7 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS this.bankroll.currency?.rate?.let { rate -> row.editingDescriptors(mapOf("defaultValue" to CurrencyUtils.getCurrencyRateFormatter().format(rate))) } ?: run { - row.editingDescriptors(mapOf("defaultValue" to "")) + row.editingDescriptors(mapOf()) } } else -> null @@ -169,7 +171,7 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS rows.add(BankrollRow.LIVE) rows.add(CustomizableRowRepresentable(customViewType = RowViewType.HEADER_TITLE, resId = R.string.currency)) rows.add(BankrollRow.CURRENCY) - if (this.differentCurrency) { + if (this.shouldShowCurrencyRate) { rows.add(BankrollRow.RATE) rows.add(BankrollRow.REFRESH_RATE) } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt index 01226ad5..d742fbd0 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt @@ -29,7 +29,12 @@ class BottomSheetEditTextFragment : BottomSheetFragment() { override fun getValue(): Any? { this.value?.let { - return it.trim() + val value = it.trim() + if (value.isEmpty()) { // avoid returning empty strings + return null + } else { + return value + } } return null }