Merge branch 'master' of gitlab.com:stax-river/poker-analytics

feature/top10
Aurelien Hubert 7 years ago
commit e49d360fb1
  1. 64
      app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt
  2. 26
      app/src/main/java/net/pokeranalytics/android/model/LiveData.kt
  3. 10
      app/src/main/java/net/pokeranalytics/android/model/interfaces/CountableUsage.kt
  4. 1
      app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt
  5. 11
      app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt
  6. 1
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  7. 7
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt
  8. 55
      app/src/main/java/net/pokeranalytics/android/model/utils/Seed.kt
  9. 18
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetMultiSelectionFragment.kt
  10. 17
      app/src/main/res/values/array_limit.xml
  11. 13
      app/src/main/res/values/array_seed_games.xml
  12. 8
      app/src/main/res/values/array_seed_tournament_features.xml
  13. 8
      app/src/main/res/values/array_tournament_fake_name.xml
  14. 21
      app/src/main/res/values/array_variant.xml

@ -8,6 +8,7 @@ import io.realm.kotlin.where
import net.pokeranalytics.android.model.Limit import net.pokeranalytics.android.model.Limit
import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.model.realm.*
import net.pokeranalytics.android.model.realm.Currency 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.PokerAnalyticsLogs
import net.pokeranalytics.android.util.Preferences import net.pokeranalytics.android.util.Preferences
import timber.log.Timber import timber.log.Timber
@ -40,6 +41,7 @@ class PokerAnalyticsApplication : Application() {
val realmConfiguration = RealmConfiguration.Builder() val realmConfiguration = RealmConfiguration.Builder()
.name(Realm.DEFAULT_REALM_NAME) .name(Realm.DEFAULT_REALM_NAME)
.deleteRealmIfMigrationNeeded() .deleteRealmIfMigrationNeeded()
.initialData(Seed(this))
.build() .build()
Realm.setDefaultConfiguration(realmConfiguration) Realm.setDefaultConfiguration(realmConfiguration)
@ -61,74 +63,12 @@ class PokerAnalyticsApplication : Application() {
//Fabric.with(this, Crashlytics()) //Fabric.with(this, Crashlytics())
} }
this.createDefaultData()
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {
// this.createFakeSessions() // 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<Game>().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<TournamentName>().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<Currency>().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<Bankroll>().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<Currency>().equalTo("code", localeCurrency.currencyCode).findFirst()
realm.copyToRealmOrUpdate(bankroll)
}
}
realm.close()
}
private fun createFakeSessions() { private fun createFakeSessions() {
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()

@ -5,10 +5,14 @@ import io.realm.Realm
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.RealmResults import io.realm.RealmResults
import io.realm.Sort import io.realm.Sort
import io.realm.kotlin.where
import net.pokeranalytics.android.R 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.Manageable
import net.pokeranalytics.android.model.interfaces.Timed
import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.model.realm.*
import net.pokeranalytics.android.ui.view.Localizable import net.pokeranalytics.android.ui.view.Localizable
import timber.log.Timber
/** /**
* An enum managing the business objects related to a realm results * An enum managing the business objects related to a realm results
@ -22,8 +26,26 @@ enum class LiveData : Localizable {
TRANSACTION_TYPE; TRANSACTION_TYPE;
fun items(realm: Realm, fieldName: String? = null, sortOrder: Sort? = null): RealmResults<*> { fun items(realm: Realm, fieldName: String? = null, sortOrder: Sort? = null): RealmResults<*> {
return realm.where(this.relatedEntity).findAll() var results = realm.where(this.relatedEntity).findAll().sort(fieldName ?: this.sortingFieldName, sortOrder ?: this.sorting)
.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<Session>().equalTo(
"${relatedEntity.simpleName.toLowerCase()}.id",
countableUsage.uniqueIdentifier()
).count().toInt()
}
}
} }
/** /**

@ -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) {}
}

@ -17,7 +17,6 @@ interface Identifiable {
* A unique identifier getter * A unique identifier getter
*/ */
fun uniqueIdentifier(): String fun uniqueIdentifier(): String
} }
/** /**

@ -1,18 +1,24 @@
package net.pokeranalytics.android.model.realm package net.pokeranalytics.android.model.realm
import io.realm.Realm
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.RealmResults
import io.realm.Sort
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import io.realm.kotlin.where
import net.pokeranalytics.android.R 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.Manageable
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.rowrepresentable.GameRow import net.pokeranalytics.android.ui.view.rowrepresentable.GameRow
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import timber.log.Timber
import java.util.* import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
open class Game : RealmObject(), Manageable, StaticRowRepresentableDataSource, RowRepresentable { open class Game : RealmObject(), Manageable, StaticRowRepresentableDataSource, RowRepresentable, CountableUsage {
@PrimaryKey @PrimaryKey
var id = UUID.randomUUID().toString() var id = UUID.randomUUID().toString()
@ -23,6 +29,9 @@ open class Game : RealmObject(), Manageable, StaticRowRepresentableDataSource, R
// A shorter name for the game // A shorter name for the game
var shortName: String? = null var shortName: String? = null
// CountableUsage
override var useCount: Int = 0
override fun getDisplayName(): String { override fun getDisplayName(): String {
return this.name return this.name
} }

@ -5,6 +5,7 @@ import android.text.InputType
import io.realm.Realm import io.realm.Realm
import io.realm.RealmList import io.realm.RealmList
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.Sort
import io.realm.annotations.Ignore import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import io.realm.kotlin.where import io.realm.kotlin.where

@ -3,6 +3,7 @@ package net.pokeranalytics.android.model.realm
import android.text.InputType import android.text.InputType
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.model.interfaces.CountableUsage
import net.pokeranalytics.android.model.interfaces.Manageable import net.pokeranalytics.android.model.interfaces.Manageable
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
@ -12,7 +13,8 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.TournamentFeatureRow
import java.util.* import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
open class TournamentFeature : RealmObject(), Manageable, StaticRowRepresentableDataSource, RowRepresentable { open class TournamentFeature : RealmObject(), Manageable, StaticRowRepresentableDataSource, RowRepresentable,
CountableUsage {
@PrimaryKey @PrimaryKey
var id = UUID.randomUUID().toString() var id = UUID.randomUUID().toString()
@ -20,6 +22,9 @@ open class TournamentFeature : RealmObject(), Manageable, StaticRowRepresentable
// The name of the feature // The name of the feature
var name: String = "" var name: String = ""
// CountableUsage
override var useCount: Int = 0
override fun getDisplayName(): String { override fun getDisplayName(): String {
return this.name return this.name
} }

@ -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<Currency>().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)
}
}
}

@ -1,8 +1,14 @@
package net.pokeranalytics.android.ui.fragment.components.bottomsheet package net.pokeranalytics.android.ui.fragment.components.bottomsheet
import android.app.Activity
import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import io.realm.RealmList 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.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.RowViewType
import timber.log.Timber import timber.log.Timber
@ -18,6 +24,18 @@ open class BottomSheetMultiSelectionFragment : BottomSheetListFragment() {
return RowViewType.TITLE_CHECK.ordinal 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 //TODO: Set the correct values
override fun getValue(): Any? { override fun getValue(): Any? {
return selectedRows return selectedRows

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="limit_name">
<item>No Limit</item>
<item>Pot Limit</item>
<item>Fixed Limit</item>
<item>Spread Limit</item>
<item>Mixed Limit</item>
</string-array>
<string-array name="limit_short_name">
<item>NL</item>
<item>PL</item>
<item>FL</item>
<item>SL</item>
<item>ML</item>
</string-array>
</resources>

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="seed_games">
<item>Hold\'em</item>
<item>Omaha</item>
<item>Omaha Hi-Low</item>
</string-array>
<string-array name="seed_games_short_name">
<item>HE</item>
<item>OH</item>
<item>OH8</item>
</string-array>
</resources>

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="seed_tournament_features">
<item>Knockout</item>
<item>Shootout</item>
<item>Turbo</item>
</string-array>
</resources>

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="tournament_fake_name">
<item>LA FIEVRE</item>
<item>NITRO</item>
<item>WCOOP EVENT #1</item>
</string-array>
</resources>

@ -1,21 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="game_name">
<item>Hold\'em</item>
<item>Omaha</item>
<item>Omaha Hi-Low</item>
<item>Seven Card Stud</item>
<item>Seven Card Stud Hi-Low</item>
<item>H.O.R.S.E.</item>
<item>Seven Card Razz</item>
</string-array>
<string-array name="game_short_name">
<item>HE</item>
<item>OH</item>
<item>OH8</item>
<item>7S</item>
<item>Stud8</item>
<item>HORSE</item>
<item>Razz</item>
</string-array>
</resources>
Loading…
Cancel
Save