Fixing import issues

csv
Laurent 7 years ago
parent 9af997c6a0
commit 136d1a55a7
  1. 14
      app/src/main/AndroidManifest.xml
  2. 13
      app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt
  3. 7
      app/src/main/java/net/pokeranalytics/android/model/interfaces/Timed.kt
  4. 5
      app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt
  5. 4
      app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt
  6. 4
      app/src/main/java/net/pokeranalytics/android/model/realm/CustomFieldEntry.kt
  7. 9
      app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt
  8. 5
      app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt
  9. 5
      app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt
  10. 4
      app/src/main/java/net/pokeranalytics/android/model/realm/ReportSetup.kt
  11. 11
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  12. 11
      app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt
  13. 5
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt
  14. 5
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentName.kt
  15. 5
      app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt
  16. 5
      app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt
  17. 26
      app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt
  18. 69
      app/src/main/java/net/pokeranalytics/android/ui/activity/ImportActivity.kt
  19. 14
      app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt
  20. 6
      app/src/main/java/net/pokeranalytics/android/ui/graph/GraphUnderlyingEntry.kt
  21. 5
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/CustomizableRowRepresentable.kt
  22. 29
      app/src/main/java/net/pokeranalytics/android/util/csv/CSVDescriptor.kt
  23. 22
      app/src/main/java/net/pokeranalytics/android/util/csv/CSVImporter.kt
  24. 6
      app/src/main/java/net/pokeranalytics/android/util/csv/SessionCSVDescriptor.kt

@ -32,6 +32,13 @@
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity>
<activity
android:name="net.pokeranalytics.android.ui.activity.ImportActivity"
android:screenOrientation="portrait"
android:launchMode="singleTop">
<intent-filter tools:ignore="AppLinkUrlError"> <intent-filter tools:ignore="AppLinkUrlError">
<action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />
@ -45,13 +52,6 @@
</activity> </activity>
<activity
android:name="net.pokeranalytics.android.ui.activity.ImportActivity"
android:screenOrientation="portrait"
android:launchMode="singleTop">
</activity>
<activity <activity
android:name="net.pokeranalytics.android.ui.activity.SessionActivity" android:name="net.pokeranalytics.android.ui.activity.SessionActivity"
android:launchMode="singleTop" android:launchMode="singleTop"

@ -45,8 +45,7 @@ interface NameManageable : Manageable {
} }
} }
class ObjectIdentifier(var id: String, var clazz: Class<out Identifiable>)
class Identificator(var id: String, var clazz: Class<out Identifiable>)
/** /**
* An interface associate a unique uniqueIdentifier to an object * An interface associate a unique uniqueIdentifier to an object
@ -58,11 +57,15 @@ interface Identifiable : RealmModel {
*/ */
var id: String var id: String
val identificator: Identificator /**
* required because "this.class" returns the proxy class, making where<class> queries crash
*/
val realmObjectClass: Class<out Identifiable>
val objectIdentifier: ObjectIdentifier
get() { get() {
return Identificator(this.id, this::class.java) return ObjectIdentifier(this.id, this.realmObjectClass)
} }
} }
/** /**

@ -1,14 +1,9 @@
package net.pokeranalytics.android.model.interfaces package net.pokeranalytics.android.model.interfaces
import net.pokeranalytics.android.ui.graph.GraphUnderlyingEntry import net.pokeranalytics.android.ui.graph.GraphUnderlyingEntry
import net.pokeranalytics.android.ui.graph.ObjectIdentifier
import java.util.* import java.util.*
interface GraphIdentifiableEntry : GraphUnderlyingEntry, Identifiable { interface GraphIdentifiableEntry : GraphUnderlyingEntry, Identifiable
val objectIdentifier : ObjectIdentifier
}
interface Timed : GraphIdentifiableEntry { interface Timed : GraphIdentifiableEntry {

@ -4,11 +4,13 @@ import android.content.Context
import io.realm.Realm import io.realm.Realm
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.RealmResults import io.realm.RealmResults
import io.realm.annotations.Ignore
import io.realm.annotations.LinkingObjects import io.realm.annotations.LinkingObjects
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import io.realm.kotlin.where import io.realm.kotlin.where
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.DeleteValidityStatus 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.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
@ -127,4 +129,7 @@ open class Bankroll : RealmObject(), NameManageable, RowRepresentable {
return UserDefaults.currency return UserDefaults.currency
} }
@Ignore
override val realmObjectClass: Class<out Identifiable> = Bankroll::class.java
} }

@ -11,6 +11,7 @@ import io.realm.kotlin.where
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.Criteria import net.pokeranalytics.android.model.Criteria
import net.pokeranalytics.android.model.interfaces.DeleteValidityStatus 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.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
@ -28,6 +29,9 @@ import kotlin.collections.ArrayList
open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDataSource, RowRepresentable { open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDataSource, RowRepresentable {
@Ignore
override val realmObjectClass: Class<out Identifiable> = CustomField::class.java
/** /**
* The custom field type: a list of items, a number or an amont * The custom field type: a list of items, a number or an amont
*/ */

@ -12,6 +12,7 @@ import io.realm.kotlin.where
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.ModelException import net.pokeranalytics.android.exceptions.ModelException
import net.pokeranalytics.android.model.interfaces.DeleteValidityStatus 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.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
@ -27,6 +28,9 @@ import java.util.Currency
open class CustomFieldEntry : RealmObject(), NameManageable, RowRepresentable { open class CustomFieldEntry : RealmObject(), NameManageable, RowRepresentable {
@Ignore
override val realmObjectClass: Class<out Identifiable> = CustomFieldEntry::class.java
@PrimaryKey @PrimaryKey
override var id = UUID.randomUUID().toString() override var id = UUID.randomUUID().toString()

@ -5,16 +5,14 @@ import io.realm.Realm
import io.realm.RealmList import io.realm.RealmList
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.RealmResults import io.realm.RealmResults
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
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.filter.Filterable import net.pokeranalytics.android.model.filter.Filterable
import net.pokeranalytics.android.model.filter.Query import net.pokeranalytics.android.model.filter.Query
import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.interfaces.CountableUsage import net.pokeranalytics.android.model.interfaces.*
import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.model.interfaces.DeleteValidityStatus
import net.pokeranalytics.android.model.interfaces.Editable
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.interfaces.FilterableType import net.pokeranalytics.android.ui.interfaces.FilterableType
import net.pokeranalytics.android.ui.view.ImageDecorator import net.pokeranalytics.android.ui.view.ImageDecorator
@ -32,6 +30,9 @@ import java.util.*
*/ */
open class Filter : RealmObject(), RowRepresentable, Editable, Deletable, CountableUsage, ImageDecorator { open class Filter : RealmObject(), RowRepresentable, Editable, Deletable, CountableUsage, ImageDecorator {
@Ignore
override val realmObjectClass: Class<out Identifiable> = Filter::class.java
companion object { companion object {
// Create a new instance // Create a new instance

@ -3,10 +3,12 @@ package net.pokeranalytics.android.model.realm
import android.content.Context import android.content.Context
import io.realm.Realm import io.realm.Realm
import io.realm.RealmObject import io.realm.RealmObject
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
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.CountableUsage 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.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
@ -20,6 +22,9 @@ import kotlin.collections.ArrayList
open class Game : RealmObject(), NameManageable, StaticRowRepresentableDataSource, RowRepresentable, CountableUsage { open class Game : RealmObject(), NameManageable, StaticRowRepresentableDataSource, RowRepresentable, CountableUsage {
@Ignore
override val realmObjectClass: Class<out Identifiable> = Game::class.java
companion object { companion object {
val rowRepresentation : List<RowRepresentable> by lazy { val rowRepresentation : List<RowRepresentable> by lazy {
val rows = ArrayList<RowRepresentable>() val rows = ArrayList<RowRepresentable>()

@ -4,9 +4,11 @@ import android.content.Context
import com.google.android.libraries.places.api.model.Place import com.google.android.libraries.places.api.model.Place
import io.realm.Realm import io.realm.Realm
import io.realm.RealmObject import io.realm.RealmObject
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
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.NameManageable import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
@ -16,6 +18,9 @@ import java.util.*
open class Location : RealmObject(), NameManageable, RowRepresentable { open class Location : RealmObject(), NameManageable, RowRepresentable {
@Ignore
override val realmObjectClass: Class<out Identifiable> = Location::class.java
@PrimaryKey @PrimaryKey
override var id = UUID.randomUUID().toString() override var id = UUID.randomUUID().toString()

@ -11,6 +11,7 @@ import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.Criteria import net.pokeranalytics.android.model.Criteria
import net.pokeranalytics.android.model.interfaces.Deletable import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.model.interfaces.DeleteValidityStatus import net.pokeranalytics.android.model.interfaces.DeleteValidityStatus
import net.pokeranalytics.android.model.interfaces.Identifiable
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 net.pokeranalytics.android.util.extensions.findById import net.pokeranalytics.android.util.extensions.findById
@ -19,6 +20,9 @@ import java.util.*
open class ReportSetup : RealmObject(), RowRepresentable, Deletable { open class ReportSetup : RealmObject(), RowRepresentable, Deletable {
@Ignore
override val realmObjectClass: Class<out Identifiable> = ReportSetup::class.java
@PrimaryKey @PrimaryKey
override var id = UUID.randomUUID().toString() override var id = UUID.randomUUID().toString()

@ -16,6 +16,7 @@ import net.pokeranalytics.android.calculus.ComputedStat
import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.calculus.StatFormattingException import net.pokeranalytics.android.calculus.StatFormattingException
import net.pokeranalytics.android.exceptions.ModelException import net.pokeranalytics.android.exceptions.ModelException
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.Limit import net.pokeranalytics.android.model.Limit
import net.pokeranalytics.android.model.TableSize import net.pokeranalytics.android.model.TableSize
import net.pokeranalytics.android.model.TournamentType import net.pokeranalytics.android.model.TournamentType
@ -29,7 +30,6 @@ import net.pokeranalytics.android.model.utils.SessionSetManager
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.UnmanagedRowRepresentableException import net.pokeranalytics.android.ui.adapter.UnmanagedRowRepresentableException
import net.pokeranalytics.android.ui.fragment.GraphFragment import net.pokeranalytics.android.ui.fragment.GraphFragment
import net.pokeranalytics.android.ui.graph.ObjectIdentifier
import net.pokeranalytics.android.ui.view.* import net.pokeranalytics.android.ui.view.*
import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.SeparatorRow import net.pokeranalytics.android.ui.view.rowrepresentable.SeparatorRow
@ -422,7 +422,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
this.computableResults?.forEachIndexed { index, computableResult -> this.computableResults?.forEachIndexed { index, computableResult ->
computableResult.updateWith(this) computableResult.updateWith(this)
if (index > 0) { if (index > 0) {
throw IllegalStateException("Session cannot have more than one computable result") throw PAIllegalStateException("Session cannot have more than one computable result")
} }
} }
this.sessionSet?.computeStats() this.sessionSet?.computeStats()
@ -1149,10 +1149,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
} }
// Timed @Ignore
override val realmObjectClass: Class<out Identifiable> = Session::class.java
override val objectIdentifier: ObjectIdentifier
get() = ObjectIdentifier(this.id, Session::class.java)
} }

@ -4,16 +4,17 @@ import android.content.Context
import io.realm.Realm import io.realm.Realm
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.RealmResults import io.realm.RealmResults
import io.realm.annotations.Ignore
import io.realm.annotations.LinkingObjects import io.realm.annotations.LinkingObjects
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.calculus.StatFormattingException import net.pokeranalytics.android.calculus.StatFormattingException
import net.pokeranalytics.android.util.TextFormat
import net.pokeranalytics.android.model.filter.Filterable import net.pokeranalytics.android.model.filter.Filterable
import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.Timed import net.pokeranalytics.android.model.interfaces.Timed
import net.pokeranalytics.android.ui.graph.ObjectIdentifier
import net.pokeranalytics.android.util.NULL_TEXT import net.pokeranalytics.android.util.NULL_TEXT
import net.pokeranalytics.android.util.TextFormat
import java.text.DateFormat import java.text.DateFormat
import java.util.* import java.util.*
@ -138,10 +139,8 @@ open class SessionSet() : RealmObject(), Timed, Filterable {
} }
} }
// Timed @Ignore
override val realmObjectClass: Class<out Identifiable> = SessionSet::class.java
override val objectIdentifier: ObjectIdentifier
get() = ObjectIdentifier(this.id, SessionSet::class.java)
} }

@ -3,10 +3,12 @@ package net.pokeranalytics.android.model.realm
import android.content.Context import android.content.Context
import io.realm.Realm import io.realm.Realm
import io.realm.RealmObject import io.realm.RealmObject
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
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.CountableUsage 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.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
@ -30,6 +32,9 @@ open class TournamentFeature : RealmObject(), NameManageable, StaticRowRepresent
} }
} }
@Ignore
override val realmObjectClass: Class<out Identifiable> = TournamentFeature::class.java
@PrimaryKey @PrimaryKey
override var id = UUID.randomUUID().toString() override var id = UUID.randomUUID().toString()

@ -3,9 +3,11 @@ package net.pokeranalytics.android.model.realm
import android.content.Context import android.content.Context
import io.realm.Realm import io.realm.Realm
import io.realm.RealmObject import io.realm.RealmObject
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
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.NameManageable import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
@ -28,6 +30,9 @@ open class TournamentName : RealmObject(), NameManageable, StaticRowRepresentabl
} }
} }
@Ignore
override val realmObjectClass: Class<out Identifiable> = TournamentName::class.java
@PrimaryKey @PrimaryKey
override var id = UUID.randomUUID().toString() override var id = UUID.randomUUID().toString()

@ -13,7 +13,6 @@ import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.interfaces.* import net.pokeranalytics.android.model.interfaces.*
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.fragment.GraphFragment import net.pokeranalytics.android.ui.fragment.GraphFragment
import net.pokeranalytics.android.ui.graph.ObjectIdentifier
import net.pokeranalytics.android.ui.view.DefaultLegendValues import net.pokeranalytics.android.ui.view.DefaultLegendValues
import net.pokeranalytics.android.ui.view.LegendContent import net.pokeranalytics.android.ui.view.LegendContent
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
@ -136,8 +135,8 @@ open class Transaction : RealmObject(), Manageable, StaticRowRepresentableDataSo
// GraphIdentifiableEntry // GraphIdentifiableEntry
override val objectIdentifier: ObjectIdentifier @Ignore
get() = ObjectIdentifier(this.id, Transaction::class.java) override val realmObjectClass: Class<out Identifiable> = Transaction::class.java
override fun entryTitle(context: Context): String { override fun entryTitle(context: Context): String {
return DateFormat.getDateInstance(DateFormat.SHORT).format(this.date) return DateFormat.getDateInstance(DateFormat.SHORT).format(this.date)

@ -3,9 +3,11 @@ package net.pokeranalytics.android.model.realm
import android.content.Context import android.content.Context
import io.realm.Realm import io.realm.Realm
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.DeleteValidityStatus 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.NameManageable
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.Localizable import net.pokeranalytics.android.ui.view.Localizable
@ -52,6 +54,9 @@ open class TransactionType : RealmObject(), NameManageable, StaticRowRepresentab
} }
@Ignore
override val realmObjectClass: Class<out Identifiable> = TransactionType::class.java
@PrimaryKey @PrimaryKey
override var id = UUID.randomUUID().toString() override var id = UUID.randomUUID().toString()

@ -11,6 +11,7 @@ import io.realm.RealmResults
import kotlinx.android.synthetic.main.activity_home.* import kotlinx.android.synthetic.main.activity_home.*
import net.pokeranalytics.android.BuildConfig import net.pokeranalytics.android.BuildConfig
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.realm.Currency import net.pokeranalytics.android.model.realm.Currency
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.activity.components.RequestCode import net.pokeranalytics.android.ui.activity.components.RequestCode
@ -83,6 +84,7 @@ class HomeActivity : PokerAnalyticsActivity() {
override fun onNewIntent(intent: Intent?) { override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent) super.onNewIntent(intent)
setIntent(intent)
intent?.let { intent?.let {
when (intent.action) { when (intent.action) {
@ -91,11 +93,11 @@ class HomeActivity : PokerAnalyticsActivity() {
if (data != null) { if (data != null) {
this.requestImportConfirmation(data) this.requestImportConfirmation(data)
} else { } else {
throw IllegalStateException("URI null on import") throw PAIllegalStateException("URI null on import")
} }
} }
else -> { else -> {
Timber.d("Intent ${intent.action} unmanaged") Timber.w("Intent ${intent.action} unmanaged")
} }
} }
} }
@ -114,6 +116,16 @@ class HomeActivity : PokerAnalyticsActivity() {
} }
} }
// Import
private fun requestImportConfirmation(uri: Uri) {
showAlertDialog(context = this, title = R.string.import_confirmation, showCancelButton = true, positiveAction = {
ImportActivity.newInstanceForResult(this, uri)
})
}
private fun observeRealmObjects() { private fun observeRealmObjects() {
val realm = getRealm() val realm = getRealm()
@ -164,14 +176,4 @@ class HomeActivity : PokerAnalyticsActivity() {
viewPager.setCurrentItem(index, false) viewPager.setCurrentItem(index, false)
} }
// Import
private fun requestImportConfirmation(uri: Uri) {
showAlertDialog(context = this, title = R.string.import_confirmation, showCancelButton = true, positiveAction = {
ImportActivity.newInstanceForResult(this, uri)
})
}
} }

@ -9,6 +9,8 @@ import io.realm.Realm
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.activity.components.RequestCode import net.pokeranalytics.android.ui.activity.components.RequestCode
import net.pokeranalytics.android.ui.activity.components.ResultCode
import net.pokeranalytics.android.ui.extensions.showAlertDialog
import net.pokeranalytics.android.ui.fragment.ImportFragment import net.pokeranalytics.android.ui.fragment.ImportFragment
import timber.log.Timber import timber.log.Timber
@ -39,11 +41,15 @@ class ImportActivity : PokerAnalyticsActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
this.fileURI = intent.getParcelableExtra(ImportActivity.IntentKey.URI.keyName) Timber.d("//////// data = ${intent?.data}")
setContentView(R.layout.activity_import) intent?.data?.let {
initUI() this.fileURI = it
}
setContentView(R.layout.activity_import)
// initUI()
requestImportConfirmation()
} }
override fun onStop() { override fun onStop() {
@ -51,7 +57,7 @@ class ImportActivity : PokerAnalyticsActivity() {
// Updates the main thread instance with newly inserted data // Updates the main thread instance with newly inserted data
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
realm.refresh() // realm.refresh()
realm.close() realm.close()
} }
@ -71,16 +77,57 @@ class ImportActivity : PokerAnalyticsActivity() {
} }
// private fun requestPermission() { // override fun onNewIntent(intent: Intent?) {
// if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) { // super.onNewIntent(intent)
// ActivityCompat.requestPermissions( //
// this, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE), PERMISSION_REQUEST_ACCESS_FINE_LOCATION // Timber.d("++++++ data = ${intent?.data}")
// ) //
// setIntent(intent)
// intent?.let {
//
// when (intent.action) {
// "android.intent.action.VIEW" -> { // import
// val data = it.data
// if (data != null) {
// this.requestImportConfirmation(data)
// } else {
// throw PAIllegalStateException("URI null on import")
// }
// }
// else -> {
// Timber.w("Intent ${intent.action} unmanaged")
// }
// } // }
// } // }
// //
// override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
// super.onRequestPermissionsResult(requestCode, permissions, grantResults)
// } // }
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
RequestCode.IMPORT.value -> {
if (resultCode == ResultCode.IMPORT_UNRECOGNIZED_FORMAT.value) {
showAlertDialog(context = this, message = R.string.unknown_import_format_popup_message, positiveAction = {
finish()
})
}
}
}
}
// Import
private fun requestImportConfirmation() {
showAlertDialog(context = this, title = R.string.import_confirmation, showCancelButton = true, positiveAction = {
initUI()
// newInstanceForResult(this, uri)
}, negativeAction = {
finish()
})
}
} }

@ -14,13 +14,14 @@ import com.github.mikephil.charting.listener.OnChartValueSelectedListener
import kotlinx.android.synthetic.main.fragment_graph.* import kotlinx.android.synthetic.main.fragment_graph.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.interfaces.ObjectIdentifier
import net.pokeranalytics.android.ui.fragment.components.RealmFragment import net.pokeranalytics.android.ui.fragment.components.RealmFragment
import net.pokeranalytics.android.ui.graph.AxisFormatting import net.pokeranalytics.android.ui.graph.AxisFormatting
import net.pokeranalytics.android.ui.graph.GraphUnderlyingEntry import net.pokeranalytics.android.ui.graph.GraphUnderlyingEntry
import net.pokeranalytics.android.ui.graph.ObjectIdentifier
import net.pokeranalytics.android.ui.graph.setStyle import net.pokeranalytics.android.ui.graph.setStyle
import net.pokeranalytics.android.ui.view.LegendView import net.pokeranalytics.android.ui.view.LegendView
import net.pokeranalytics.android.ui.view.MultiLineLegendView import net.pokeranalytics.android.ui.view.MultiLineLegendView
import timber.log.Timber
class GraphFragment : RealmFragment(), OnChartValueSelectedListener { class GraphFragment : RealmFragment(), OnChartValueSelectedListener {
@ -183,16 +184,21 @@ class GraphFragment : RealmFragment(), OnChartValueSelectedListener {
val identifier = entry.data as ObjectIdentifier val identifier = entry.data as ObjectIdentifier
getRealm().where(identifier.clazz).equalTo("id", identifier.id).findAll().firstOrNull() getRealm().where(identifier.clazz).equalTo("id", identifier.id).findAll().firstOrNull()
} }
is GraphUnderlyingEntry -> entry.data as GraphUnderlyingEntry? is GraphUnderlyingEntry -> entry.data
else -> null else -> null
} }
statEntry?.let { if (statEntry is GraphUnderlyingEntry) {
val groupName = dataSet?.label ?: "" val groupName = dataSet?.label ?: ""
val color = dataSet?.color val color = dataSet?.color
val legendValue = it.legendValues(stat, entry, this.style, groupName, requireContext()) val legendValue = statEntry.legendValues(stat, entry, this.style, groupName, requireContext())
this.legendView.setItemData(legendValue, color) this.legendView.setItemData(legendValue, color)
} else {
Timber.w("Data $statEntry should implement GraphUnderlyingEntry")
} }
} }
} }

@ -3,16 +3,12 @@ package net.pokeranalytics.android.ui.graph
import android.content.Context import android.content.Context
import com.github.mikephil.charting.data.Entry import com.github.mikephil.charting.data.Entry
import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.interfaces.GraphIdentifiableEntry import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.ui.fragment.GraphFragment import net.pokeranalytics.android.ui.fragment.GraphFragment
import net.pokeranalytics.android.ui.view.DefaultLegendValues import net.pokeranalytics.android.ui.view.DefaultLegendValues
import net.pokeranalytics.android.ui.view.LegendContent import net.pokeranalytics.android.ui.view.LegendContent
import net.pokeranalytics.android.util.TextFormat import net.pokeranalytics.android.util.TextFormat
class ObjectIdentifier(var id: String, var clazz: Class<out GraphIdentifiableEntry>) {
}
interface GraphUnderlyingEntry { interface GraphUnderlyingEntry {
fun entryTitle(context: Context): String fun entryTitle(context: Context): String

@ -2,7 +2,6 @@ package net.pokeranalytics.android.ui.view.rowrepresentable
import android.content.Context import android.content.Context
import net.pokeranalytics.android.calculus.ComputedStat import net.pokeranalytics.android.calculus.ComputedStat
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.ui.fragment.BankrollRowRepresentable import net.pokeranalytics.android.ui.fragment.BankrollRowRepresentable
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
@ -27,7 +26,7 @@ class CustomizableRowRepresentable(
var value: String? = null, var value: String? = null,
var computedStat: ComputedStat? = null, var computedStat: ComputedStat? = null,
var isSelectable: Boolean? = false var isSelectable: Boolean? = false
) : RowRepresentable, Identifiable { ) : RowRepresentable {
override fun localizedTitle(context: Context): String { override fun localizedTitle(context: Context): String {
@ -42,5 +41,5 @@ class CustomizableRowRepresentable(
override val viewType: Int = customViewType?.ordinal ?: RowViewType.HEADER_TITLE.ordinal override val viewType: Int = customViewType?.ordinal ?: RowViewType.HEADER_TITLE.ordinal
override var id: String = "" // override var id: String = ""
} }

@ -3,7 +3,8 @@ package net.pokeranalytics.android.util.csv
import io.realm.Realm import io.realm.Realm
import io.realm.kotlin.deleteFromRealm import io.realm.kotlin.deleteFromRealm
import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.Identificator import net.pokeranalytics.android.model.interfaces.ObjectIdentifier
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.util.extensions.findById import net.pokeranalytics.android.util.extensions.findById
import org.apache.commons.csv.CSVRecord import org.apache.commons.csv.CSVRecord
import timber.log.Timber import timber.log.Timber
@ -25,7 +26,7 @@ abstract class DataCSVDescriptor<T : Identifiable>(source: DataSource, vararg el
/** /**
* List of Realm object identificators * List of Realm object identificators
*/ */
val realmModelIds = mutableListOf<Identificator>() val realmModelIds = mutableListOf<ObjectIdentifier>()
abstract fun parseData(realm: Realm, record: CSVRecord): T? abstract fun parseData(realm: Realm, record: CSVRecord): T?
@ -33,17 +34,31 @@ abstract class DataCSVDescriptor<T : Identifiable>(source: DataSource, vararg el
val data = this.parseData(realm, record) val data = this.parseData(realm, record)
data?.let { data?.let {
this.realmModelIds.add(it.identificator) Timber.d(">>>>>>> identifier added: ${it.id}")
this.realmModelIds.add(it.objectIdentifier)
} }
return if (data != null) 1 else 0 return if (data != null) 1 else 0
} }
override fun cancel(realm: Realm) { override fun cancel(realm: Realm) {
Timber.d(">>>>>>> Start delete of ${realmModelIds.size}")
realm.executeTransaction { realm.executeTransaction {
this.realmModelIds.forEach { identificator -> this.realmModelIds.forEach { identifier ->
realm.findById(identificator.clazz, identificator.id)?.deleteFromRealm() val data = realm.findById(identifier.clazz, identifier.id)
if (data is Session) {
data.cleanup()
}
data?.deleteFromRealm()
}
this.realmModelIds.clear()
} }
} }
override fun save(realm: Realm) {
super.save(realm)
this.realmModelIds.clear()
} }
} }
@ -84,6 +99,10 @@ abstract class CSVDescriptor(var source: DataSource, vararg elements: CSVField)
*/ */
abstract fun parse(realm: Realm, record: CSVRecord): Int abstract fun parse(realm: Realm, record: CSVRecord): Int
open fun save(realm: Realm) {
}
open fun cancel(realm: Realm) { open fun cancel(realm: Realm) {
} }

@ -186,21 +186,19 @@ open class CSVImporter(istream: InputStream) {
return null return null
} }
// fun save(realm: Realm) { fun save(realm: Realm) {
// this.parser.close()
// this.usedDescriptors.forEach { descriptor -> // realm.refresh()
//
// if (descriptor is DataCSVDescriptor<*>) { this.currentDescriptor?.save(realm)
// realm.executeTransaction { this.usedDescriptors.forEach { descriptor ->
// realm.copyToRealm(descriptor.realmModels) descriptor.save(realm)
// } }
// } }
// }
// }
fun cancel(realm: Realm) { fun cancel(realm: Realm) {
this.parser.close() this.parser.close()
realm.refresh() // realm.refresh()
this.currentDescriptor?.cancel(realm) this.currentDescriptor?.cancel(realm)
this.usedDescriptors.forEach { descriptor -> this.usedDescriptors.forEach { descriptor ->

@ -115,8 +115,6 @@ class SessionCSVDescriptor(source: DataSource, private var isTournament: Boolean
val session = Session.newInstance(realm, this.isTournament) val session = Session.newInstance(realm, this.isTournament)
var isLive = true var isLive = true
var bankrollName: String? = null var bankrollName: String? = null
var currencyCode: String? = null var currencyCode: String? = null
@ -209,7 +207,8 @@ class SessionCSVDescriptor(source: DataSource, private var isTournament: Boolean
} }
if (startDate != null && endDate != null && net != null) { // valid session if (startDate != null && endDate != null && net != null) { // valid session
if (DataUtils.sessionCount(realm, startDate, endDate, net) == 1) { // session already in realm, we'd love not put it in Realm before doing the check // session already in realm, we'd love not put it in Realm before doing the check
if (DataUtils.sessionCount(realm, startDate, endDate, net) == 1) {
return session return session
} else { } else {
Timber.d("Session already exists") Timber.d("Session already exists")
@ -218,6 +217,7 @@ class SessionCSVDescriptor(source: DataSource, private var isTournament: Boolean
Timber.d("Can't import session: sd=$startDate, ed=$endDate, net=$net") Timber.d("Can't import session: sd=$startDate, ed=$endDate, net=$net")
} }
session.cleanup()
session.deleteFromRealm() session.deleteFromRealm()
return null return null
} }

Loading…
Cancel
Save