diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt index 97b0fde8..1615b562 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)) .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/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..fcfc8db7 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/model/interfaces/CountableUsage.kt @@ -0,0 +1,10 @@ +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 } + 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 bf86aea3..b63f35e4 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 } 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..2604de61 --- /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) : 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/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 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