diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt index 1b81d955..ba3e26ba 100644 --- a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt +++ b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt @@ -33,7 +33,7 @@ class PokerAnalyticsApplication : Application() { Realm.init(this) val realmConfiguration = RealmConfiguration.Builder() .name(Realm.DEFAULT_REALM_NAME) - .schemaVersion(6) + .schemaVersion(7) .migration(PokerAnalyticsMigration()) .initialData(Seed(this)) .build() 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 3d03abdb..10a5137b 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,7 @@ package net.pokeranalytics.android.model.interfaces +import io.realm.RealmModel + /** * An interface to be able to track the usage of an object */ @@ -7,4 +9,6 @@ interface CountableUsage : Identifiable { var useCount: Int get() { return 0 } set(_) {} + + val ownerClass: Class } \ No newline at end of file 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 996f6da0..687fff28 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 @@ -144,6 +144,13 @@ class PokerAnalyticsMigration : RealmMigration { schema.get("Filter")?.removeField("usageCount") currentVersion++ } + + // Migrate to version 7 + if (currentVersion == 6) { + Timber.d("*** Running migration ${currentVersion + 1}") + schema.get("TransactionType")?.addField("useCount", Int::class.java) + currentVersion++ + } } override fun equals(other: Any?): Boolean { diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt index cf729205..00f9ff51 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt @@ -75,6 +75,9 @@ open class Filter : RealmObject(), RowRepresentable, Editable, Deletable, Counta override var useCount: Int = 0 + @Ignore + override val ownerClass: Class = Session::class.java + var filterConditions: RealmList = RealmList() private set 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 9ee4dcc6..da713f05 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 @@ -2,6 +2,7 @@ package net.pokeranalytics.android.model.realm import android.content.Context import io.realm.Realm +import io.realm.RealmModel import io.realm.RealmObject import io.realm.annotations.Ignore import io.realm.annotations.PrimaryKey @@ -46,6 +47,9 @@ open class Game : RealmObject(), NameManageable, StaticRowRepresentableDataSourc // CountableUsage override var useCount: Int = 0 + @Ignore + override val ownerClass: Class = Session::class.java + fun getNotNullShortName() : String { this.shortName?.let { return it 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 5a51c448..d0f937e2 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 @@ -2,6 +2,7 @@ package net.pokeranalytics.android.model.realm import android.content.Context import io.realm.Realm +import io.realm.RealmModel import io.realm.RealmObject import io.realm.annotations.Ignore import io.realm.annotations.PrimaryKey @@ -44,6 +45,9 @@ open class TournamentFeature : RealmObject(), NameManageable, StaticRowRepresent // CountableUsage override var useCount: Int = 0 + @Ignore + override val ownerClass: Class = Session::class.java + override fun getDisplayName(context: Context): String { return this.name } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt index 6886b576..53437792 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt @@ -2,15 +2,13 @@ package net.pokeranalytics.android.model.realm import android.content.Context import io.realm.Realm +import io.realm.RealmModel import io.realm.RealmObject import io.realm.annotations.Ignore import io.realm.annotations.PrimaryKey import net.pokeranalytics.android.R import net.pokeranalytics.android.exceptions.PAIllegalStateException -import net.pokeranalytics.android.model.interfaces.DeleteValidityStatus -import net.pokeranalytics.android.model.interfaces.Identifiable -import net.pokeranalytics.android.model.interfaces.NameManageable -import net.pokeranalytics.android.model.interfaces.SaveValidityStatus +import net.pokeranalytics.android.model.interfaces.* import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.view.Localizable import net.pokeranalytics.android.ui.view.RowRepresentable @@ -23,7 +21,8 @@ import java.util.* import kotlin.collections.ArrayList -open class TransactionType : RealmObject(), NameManageable, StaticRowRepresentableDataSource, RowRepresentable { +open class TransactionType : RealmObject(), NameManageable, StaticRowRepresentableDataSource, RowRepresentable, + CountableUsage { enum class Value(override var uniqueIdentifier: Int, val additive: Boolean) : IntIdentifiable, Localizable { @@ -69,21 +68,6 @@ open class TransactionType : RealmObject(), NameManageable, StaticRowRepresentab throw PAIllegalStateException("Transaction type ${value.name} should exist in database!") } - fun getOrCreateByValue(realm: Realm, context: Context, value: Value): TransactionType { - val type = realm.where(TransactionType::class.java).equalTo("kind", value.uniqueIdentifier).findFirst() - type?.let { - return it - } - - val tt = TransactionType() - tt.name = value.localizedTitle(context) - tt.additive = value.additive - tt.kind = value.uniqueIdentifier - tt.lock = true - - return tt - } - } @Ignore @@ -109,6 +93,11 @@ open class TransactionType : RealmObject(), NameManageable, StaticRowRepresentab // The predefined kind, if necessary, like: Withdrawal, deposit, or tips var kind: Int? = null + override var useCount: Int = 0 + + @Ignore + override val ownerClass: Class = Transaction::class.java + override fun getDisplayName(context: Context): String { return this.name } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/FeedSessionRowRepresentableAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/FeedSessionRowRepresentableAdapter.kt index 7f145e79..1838ec85 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/FeedSessionRowRepresentableAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/FeedSessionRowRepresentableAdapter.kt @@ -61,9 +61,11 @@ class FeedSessionRowRepresentableAdapter( // listeners this.startedSessions.addChangeListener { _, _ -> + Timber.d("---> started session change") refreshData() } this.pendingSessions.addChangeListener { _, _ -> + Timber.d("---> pending session change") refreshData() } @@ -187,11 +189,12 @@ class FeedSessionRowRepresentableAdapter( /** * Refresh headers positions */ - fun refreshData() { + private fun refreshData() { allSessions.clear() allSessions.addAll(this.pendingSessions) allSessions.addAll(this.startedSessions) + Timber.d("All sessions count = ${allSessions.size}") val headersPositions = HashMap() @@ -232,4 +235,9 @@ class FeedSessionRowRepresentableAdapter( return currentCalendar.get(Calendar.YEAR) == previousYear && currentCalendar.get(Calendar.MONTH) < previousMonth || (currentCalendar.get(Calendar.YEAR) < previousYear) } + fun destroy() { + this.startedSessions.removeAllChangeListeners() + this.pendingSessions.removeAllChangeListeners() + } + } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt index 3131ba49..3e009bc3 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt @@ -145,6 +145,7 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { override fun onDestroyView() { super.onDestroyView() + feedSessionAdapter.destroy() realmTransactions.removeAllChangeListeners() } @@ -191,6 +192,7 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { messageBox.isVisible = false } + // Add button addButton.setOnClickListener { activity?.let { val options = ActivityOptionsCompat.makeSceneTransitionAnimation(it) @@ -199,6 +201,7 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { } } + // Tabs tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { override fun onTabSelected(tab: TabLayout.Tab) { when (tab.position) { @@ -279,13 +282,11 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { */ private fun createNewSession(isTournament: Boolean, sessionId: String? = null, duplicate: Boolean = false) { -// if (!BuildConfig.DEBUG) { - val sessionCount = getRealm().count(Session::class.java) - if (!AppGuard.isProUser && sessionCount >= AppGuard.MAX_SESSIONS_BEFORE_REQUESTING_SUBSCRIPTION) { // && !BuildConfig.DEBUG - BillingActivity.newInstanceForResult(this, true) - return - } -// } + val sessionCount = getRealm().count(Session::class.java) + if (!AppGuard.isProUser && sessionCount >= AppGuard.MAX_SESSIONS_BEFORE_REQUESTING_SUBSCRIPTION) { // && !BuildConfig.DEBUG + BillingActivity.newInstanceForResult(this, true) + return + } // Keep commented code for special versions // if (Date().after(betaLimitDate)) { diff --git a/app/src/main/java/net/pokeranalytics/android/util/extensions/RealmExtensions.kt b/app/src/main/java/net/pokeranalytics/android/util/extensions/RealmExtensions.kt index 817a9a43..7a2b5687 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/extensions/RealmExtensions.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/extensions/RealmExtensions.kt @@ -4,14 +4,16 @@ import io.realm.Realm import io.realm.RealmModel import io.realm.RealmResults import io.realm.Sort -import io.realm.kotlin.where import net.pokeranalytics.android.model.interfaces.CountableUsage import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.model.interfaces.NameManageable -import net.pokeranalytics.android.model.realm.* +import net.pokeranalytics.android.model.realm.Filter +import net.pokeranalytics.android.model.realm.TournamentFeature +import net.pokeranalytics.android.model.realm.Transaction +import net.pokeranalytics.android.model.realm.TransactionType -fun Realm.count(clazz: Class) : Int { - return this.where(clazz).findAll().size +fun Realm.count(clazz: Class) : Long { + return this.where(clazz).count() } fun Realm.findById(clazz: Class, id: String) : T? { @@ -96,10 +98,11 @@ fun Realm.updateUsageCount(clazz: Class) { val countable = (countableUsage as CountableUsage) val fieldName = when (clazz.kotlin) { + TransactionType::class -> "type.id" TournamentFeature::class -> "tournamentFeatures.id" else -> "${clazz.simpleName.decapitalize()}.id" } - val count = it.where().contains(fieldName, countable.id).count().toInt() + val count = it.where(countable.ownerClass).contains(fieldName, countable.id).count().toInt() countable.useCount = count } }