From 41cf2ac730cd68cba0a4a81f02169e911d638f4a Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Mon, 11 Mar 2019 16:12:07 +0100 Subject: [PATCH 1/5] fix crash when adding a new feature --- .../BottomSheetMultiSelectionFragment.kt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetMultiSelectionFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetMultiSelectionFragment.kt index 4d957fd2..717a7654 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetMultiSelectionFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetMultiSelectionFragment.kt @@ -1,8 +1,14 @@ package net.pokeranalytics.android.ui.fragment.components.bottomsheet +import android.app.Activity +import android.content.Intent import android.os.Bundle import android.view.View import io.realm.RealmList +import io.realm.RealmObject +import net.pokeranalytics.android.model.LiveData +import net.pokeranalytics.android.ui.activity.EditableDataActivity +import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType import timber.log.Timber @@ -18,6 +24,18 @@ open class BottomSheetMultiSelectionFragment : BottomSheetListFragment() { return RowViewType.TITLE_CHECK.ordinal } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + if (requestCode == REQUEST_CODE_ADD_NEW_OBJECT && resultCode == Activity.RESULT_OK && data != null) { + val dataType = data.getIntExtra(EditableDataActivity.IntentKey.DATA_TYPE.keyName, 0) + val primaryKey = data.getStringExtra(EditableDataActivity.IntentKey.PRIMARY_KEY.keyName) + val pokerAnalyticsActivity = activity as PokerAnalyticsActivity + val liveDataType = LiveData.values()[dataType] + val proxyItem: RealmObject? = liveDataType.getData(pokerAnalyticsActivity.getRealm(), primaryKey) + selectedRows.add(proxyItem as RowRepresentable) + dataAdapter.refreshRow(proxyItem as RowRepresentable) + } + } + //TODO: Set the correct values override fun getValue(): Any? { return selectedRows From 146ca69bb654e32448ef2d5460e0f913e8eafa56 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Mon, 11 Mar 2019 18:54:06 +0100 Subject: [PATCH 2/5] add a new CountableUsage interface --- .../pokeranalytics/android/model/LiveData.kt | 26 +++++++++++++++++-- .../model/interfaces/CountableUsage.kt | 7 +++++ .../android/model/interfaces/Manageable.kt | 1 - .../android/model/realm/Game.kt | 11 +++++++- .../android/model/realm/Session.kt | 1 + .../android/model/realm/TournamentFeature.kt | 7 ++++- 6 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/net/pokeranalytics/android/model/interfaces/CountableUsage.kt diff --git a/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt b/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt index 027dc856..6cf7c826 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt @@ -5,10 +5,14 @@ import io.realm.Realm import io.realm.RealmObject import io.realm.RealmResults import io.realm.Sort +import io.realm.kotlin.where import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.interfaces.CountableUsage import net.pokeranalytics.android.model.interfaces.Manageable +import net.pokeranalytics.android.model.interfaces.Timed import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.ui.view.Localizable +import timber.log.Timber /** * An enum managing the business objects related to a realm results @@ -22,8 +26,26 @@ enum class LiveData : Localizable { TRANSACTION_TYPE; fun items(realm: Realm, fieldName: String? = null, sortOrder: Sort? = null): RealmResults<*> { - return realm.where(this.relatedEntity).findAll() - .sort(fieldName ?: this.sortingFieldName, sortOrder ?: this.sorting) + var results = realm.where(this.relatedEntity).findAll().sort(fieldName ?: this.sortingFieldName, sortOrder ?: this.sorting) + + if (results.size > 0) { + if (results.first() is CountableUsage) { + this.setUseCount(realm, results) + return results.sort("useCount", Sort.DESCENDING) + } + } + return results + } + + fun setUseCount(realm: Realm, realmResults: RealmResults<*>) { + realm.executeTransaction { + realmResults.forEach { countableUsage -> + (countableUsage as CountableUsage).useCount = it.where().equalTo( + "${relatedEntity.simpleName.toLowerCase()}.id", + countableUsage.uniqueIdentifier() + ).count().toInt() + } + } } /** diff --git a/app/src/main/java/net/pokeranalytics/android/model/interfaces/CountableUsage.kt b/app/src/main/java/net/pokeranalytics/android/model/interfaces/CountableUsage.kt new file mode 100644 index 00000000..b6e1e820 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/model/interfaces/CountableUsage.kt @@ -0,0 +1,7 @@ +package net.pokeranalytics.android.model.interfaces + +interface CountableUsage : Identifiable { + var useCount: Int + get() { return 0 } + set(newValue) {} +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt b/app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt index 24ca10e7..fa848ab3 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt @@ -17,7 +17,6 @@ interface Identifiable { * A unique identifier getter */ fun uniqueIdentifier(): String - } /** 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 b74c2d50..1bd28aa7 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 @@ -1,18 +1,24 @@ package net.pokeranalytics.android.model.realm +import io.realm.Realm import io.realm.RealmObject +import io.realm.RealmResults +import io.realm.Sort import io.realm.annotations.PrimaryKey +import io.realm.kotlin.where import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.interfaces.CountableUsage import net.pokeranalytics.android.model.interfaces.Manageable import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.rowrepresentable.GameRow import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow +import timber.log.Timber import java.util.* import kotlin.collections.ArrayList -open class Game : RealmObject(), Manageable, StaticRowRepresentableDataSource, RowRepresentable { +open class Game : RealmObject(), Manageable, StaticRowRepresentableDataSource, RowRepresentable, CountableUsage { @PrimaryKey var id = UUID.randomUUID().toString() @@ -23,6 +29,9 @@ open class Game : RealmObject(), Manageable, StaticRowRepresentableDataSource, R // A shorter name for the game var shortName: String? = null + // CountableUsage + override var useCount: Int = 0 + override fun getDisplayName(): String { return this.name } 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 42d91b9d..5902c670 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 @@ -5,6 +5,7 @@ import android.text.InputType import io.realm.Realm import io.realm.RealmList import io.realm.RealmObject +import io.realm.Sort import io.realm.annotations.Ignore import io.realm.annotations.PrimaryKey import io.realm.kotlin.where 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 7373bddd..a21a156e 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 @@ -3,6 +3,7 @@ package net.pokeranalytics.android.model.realm import android.text.InputType import io.realm.RealmObject import io.realm.annotations.PrimaryKey +import net.pokeranalytics.android.model.interfaces.CountableUsage import net.pokeranalytics.android.model.interfaces.Manageable import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.view.RowRepresentable @@ -12,7 +13,8 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.TournamentFeatureRow import java.util.* import kotlin.collections.ArrayList -open class TournamentFeature : RealmObject(), Manageable, StaticRowRepresentableDataSource, RowRepresentable { +open class TournamentFeature : RealmObject(), Manageable, StaticRowRepresentableDataSource, RowRepresentable, + CountableUsage { @PrimaryKey var id = UUID.randomUUID().toString() @@ -20,6 +22,9 @@ open class TournamentFeature : RealmObject(), Manageable, StaticRowRepresentable // The name of the feature var name: String = "" + // CountableUsage + override var useCount: Int = 0 + override fun getDisplayName(): String { return this.name } From b220e961bb9e81bbffc6519b8f1bd9964f1c61cd Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Mon, 11 Mar 2019 18:55:23 +0100 Subject: [PATCH 3/5] add comment --- .../pokeranalytics/android/model/interfaces/CountableUsage.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/net/pokeranalytics/android/model/interfaces/CountableUsage.kt b/app/src/main/java/net/pokeranalytics/android/model/interfaces/CountableUsage.kt index b6e1e820..fcfc8db7 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/interfaces/CountableUsage.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/interfaces/CountableUsage.kt @@ -1,5 +1,8 @@ package net.pokeranalytics.android.model.interfaces +/** + * An interface to be able to track the usage of an object + */ interface CountableUsage : Identifiable { var useCount: Int get() { return 0 } From 9846c0d0f1632fecc31cec2e56546bff1bc2918d Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Tue, 12 Mar 2019 09:49:20 +0100 Subject: [PATCH 4/5] implement realm seeding --- .../android/PokerAnalyticsApplication.kt | 64 +------------------ .../android/model/utils/Seed.kt | 55 ++++++++++++++++ app/src/main/res/values/array_limit.xml | 17 ----- app/src/main/res/values/array_seed_games.xml | 13 ++++ .../values/array_seed_tournament_features.xml | 8 +++ .../res/values/array_tournament_fake_name.xml | 8 --- app/src/main/res/values/array_variant.xml | 21 ------ 7 files changed, 78 insertions(+), 108 deletions(-) create mode 100644 app/src/main/java/net/pokeranalytics/android/model/utils/Seed.kt delete mode 100644 app/src/main/res/values/array_limit.xml create mode 100644 app/src/main/res/values/array_seed_games.xml create mode 100644 app/src/main/res/values/array_seed_tournament_features.xml delete mode 100644 app/src/main/res/values/array_tournament_fake_name.xml delete mode 100644 app/src/main/res/values/array_variant.xml diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt index 97b0fde8..d09c0209 100644 --- a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt +++ b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt @@ -8,6 +8,7 @@ import io.realm.kotlin.where import net.pokeranalytics.android.model.Limit import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.model.realm.Currency +import net.pokeranalytics.android.model.utils.Seed import net.pokeranalytics.android.util.PokerAnalyticsLogs import net.pokeranalytics.android.util.Preferences import timber.log.Timber @@ -40,6 +41,7 @@ class PokerAnalyticsApplication : Application() { val realmConfiguration = RealmConfiguration.Builder() .name(Realm.DEFAULT_REALM_NAME) .deleteRealmIfMigrationNeeded() + .initialData(Seed(this, true)) .build() Realm.setDefaultConfiguration(realmConfiguration) @@ -61,74 +63,12 @@ class PokerAnalyticsApplication : Application() { //Fabric.with(this, Crashlytics()) } - this.createDefaultData() if (BuildConfig.DEBUG) { // this.createFakeSessions() // debug } } - /** - * Create default data - */ - private fun createDefaultData() { - - val realm = Realm.getDefaultInstance() - - // Games - val gamesName = resources.getStringArray(R.array.game_name) - val gamesShortName = resources.getStringArray(R.array.game_short_name) - if (realm.where().findAll().isEmpty()) { - realm.executeTransaction { - for ((index, name) in gamesName.withIndex()) { - val game = Game() - game.id = UUID.randomUUID().toString() - game.name = name - game.shortName = gamesShortName[index] - realm.copyToRealmOrUpdate(game) - } - } - } - - // Tournament types - val tournamentFakeName = resources.getStringArray(R.array.tournament_fake_name) - if (realm.where().findAll().isEmpty()) { - realm.executeTransaction { - for (type in tournamentFakeName) { - val tournament = TournamentName() - tournament.id = UUID.randomUUID().toString() - tournament.name = type - realm.copyToRealmOrUpdate(tournament) - } - } - } - - // Currency - if (realm.where().findAll().isEmpty()) { - realm.executeTransaction { - val localeCurrency = java.util.Currency.getInstance(Locale.getDefault()) - val defaultCurrency = Currency() - defaultCurrency.code = localeCurrency.currencyCode - realm.copyToRealmOrUpdate(defaultCurrency) - } - } - - // Bankroll - if (realm.where().findAll().isEmpty()) { - realm.executeTransaction { - val localeCurrency = java.util.Currency.getInstance(Preferences.getCurrencyLocale(this)) - val bankroll = Bankroll() - bankroll.name = "Live" - bankroll.live = true - bankroll.currency = realm.where().equalTo("code", localeCurrency.currencyCode).findFirst() - realm.copyToRealmOrUpdate(bankroll) - } - } - - realm.close() - - } - private fun createFakeSessions() { val realm = Realm.getDefaultInstance() diff --git a/app/src/main/java/net/pokeranalytics/android/model/utils/Seed.kt b/app/src/main/java/net/pokeranalytics/android/model/utils/Seed.kt new file mode 100644 index 00000000..578449cd --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/model/utils/Seed.kt @@ -0,0 +1,55 @@ +package net.pokeranalytics.android.model.utils + +import android.content.Context +import io.realm.Realm +import io.realm.kotlin.where +import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.realm.* +import net.pokeranalytics.android.model.realm.Currency +import net.pokeranalytics.android.util.Preferences +import java.util.* + +class Seed(var context:Context, var fake:Boolean = false) : Realm.Transaction { + + override fun execute(realm: Realm) { + this.createDefaultGames(realm) + this.createDefaultTournamentFeatures(realm) + this.createDefaultCurrencyAndBankroll(realm) + } + + private fun createDefaultTournamentFeatures(realm: Realm) { + context.resources.getStringArray(R.array.seed_tournament_features).forEach { + val tournamentFeature = TournamentFeature() + tournamentFeature.id = UUID.randomUUID().toString() + tournamentFeature.name = it + realm.insertOrUpdate(tournamentFeature) + } + } + + private fun createDefaultCurrencyAndBankroll(realm: Realm) { + // Currency + val localeCurrency = java.util.Currency.getInstance(Locale.getDefault()) + val defaultCurrency = Currency() + defaultCurrency.code = localeCurrency.currencyCode + realm.insertOrUpdate(defaultCurrency) + + // Bankroll + val bankroll = Bankroll() + bankroll.name = context.resources.getString(R.string.live) + bankroll.live = true + bankroll.currency = realm.where().equalTo("code", localeCurrency.currencyCode).findFirst() + realm.insertOrUpdate(bankroll) + } + + private fun createDefaultGames(realm: Realm) { + val gamesName = context.resources.getStringArray(R.array.seed_games) + val gamesShortName = context.resources.getStringArray(R.array.seed_games_short_name) + for ((index, name) in gamesName.withIndex()) { + val game = Game() + game.id = UUID.randomUUID().toString() + game.name = name + game.shortName = gamesShortName[index] + realm.insertOrUpdate(game) + } + } +} \ No newline at end of file diff --git a/app/src/main/res/values/array_limit.xml b/app/src/main/res/values/array_limit.xml deleted file mode 100644 index 096fef29..00000000 --- a/app/src/main/res/values/array_limit.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - No Limit - Pot Limit - Fixed Limit - Spread Limit - Mixed Limit - - - NL - PL - FL - SL - ML - - \ No newline at end of file diff --git a/app/src/main/res/values/array_seed_games.xml b/app/src/main/res/values/array_seed_games.xml new file mode 100644 index 00000000..ee47faa5 --- /dev/null +++ b/app/src/main/res/values/array_seed_games.xml @@ -0,0 +1,13 @@ + + + + Hold\'em + Omaha + Omaha Hi-Low + + + HE + OH + OH8 + + \ No newline at end of file diff --git a/app/src/main/res/values/array_seed_tournament_features.xml b/app/src/main/res/values/array_seed_tournament_features.xml new file mode 100644 index 00000000..290417b0 --- /dev/null +++ b/app/src/main/res/values/array_seed_tournament_features.xml @@ -0,0 +1,8 @@ + + + + Knockout + Shootout + Turbo + + \ No newline at end of file diff --git a/app/src/main/res/values/array_tournament_fake_name.xml b/app/src/main/res/values/array_tournament_fake_name.xml deleted file mode 100644 index 12e55876..00000000 --- a/app/src/main/res/values/array_tournament_fake_name.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - LA FIEVRE - NITRO - WCOOP EVENT #1 - - \ No newline at end of file diff --git a/app/src/main/res/values/array_variant.xml b/app/src/main/res/values/array_variant.xml deleted file mode 100644 index 3f6dd1b0..00000000 --- a/app/src/main/res/values/array_variant.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - Hold\'em - Omaha - Omaha Hi-Low - Seven Card Stud - Seven Card Stud Hi-Low - H.O.R.S.E. - Seven Card Razz - - - HE - OH - OH8 - 7S - Stud8 - HORSE - Razz - - \ No newline at end of file From 51e1a1f0e443a690aa66a3513f98e0415f9fd28c Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Tue, 12 Mar 2019 09:50:05 +0100 Subject: [PATCH 5/5] remove fake data option --- .../net/pokeranalytics/android/PokerAnalyticsApplication.kt | 2 +- .../main/java/net/pokeranalytics/android/model/utils/Seed.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt index d09c0209..1615b562 100644 --- a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt +++ b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt @@ -41,7 +41,7 @@ class PokerAnalyticsApplication : Application() { val realmConfiguration = RealmConfiguration.Builder() .name(Realm.DEFAULT_REALM_NAME) .deleteRealmIfMigrationNeeded() - .initialData(Seed(this, true)) + .initialData(Seed(this)) .build() Realm.setDefaultConfiguration(realmConfiguration) diff --git a/app/src/main/java/net/pokeranalytics/android/model/utils/Seed.kt b/app/src/main/java/net/pokeranalytics/android/model/utils/Seed.kt index 578449cd..2604de61 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/utils/Seed.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/utils/Seed.kt @@ -9,7 +9,7 @@ import net.pokeranalytics.android.model.realm.Currency import net.pokeranalytics.android.util.Preferences import java.util.* -class Seed(var context:Context, var fake:Boolean = false) : Realm.Transaction { +class Seed(var context:Context) : Realm.Transaction { override fun execute(realm: Realm) { this.createDefaultGames(realm)