diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b9ef5ab9..b7e5f47c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -32,6 +32,13 @@
+
+
+
+
@@ -45,13 +52,6 @@
-
-
-
-
)
+class ObjectIdentifier(var id: String, var clazz: Class)
/**
* An interface associate a unique uniqueIdentifier to an object
@@ -58,11 +57,15 @@ interface Identifiable : RealmModel {
*/
var id: String
- val identificator: Identificator
+ /**
+ * required because "this.class" returns the proxy class, making where queries crash
+ */
+ val realmObjectClass: Class
+
+ val objectIdentifier: ObjectIdentifier
get() {
- return Identificator(this.id, this::class.java)
+ return ObjectIdentifier(this.id, this.realmObjectClass)
}
-
}
/**
diff --git a/app/src/main/java/net/pokeranalytics/android/model/interfaces/Timed.kt b/app/src/main/java/net/pokeranalytics/android/model/interfaces/Timed.kt
index 31ca5fe9..4b4c752f 100644
--- a/app/src/main/java/net/pokeranalytics/android/model/interfaces/Timed.kt
+++ b/app/src/main/java/net/pokeranalytics/android/model/interfaces/Timed.kt
@@ -1,14 +1,9 @@
package net.pokeranalytics.android.model.interfaces
import net.pokeranalytics.android.ui.graph.GraphUnderlyingEntry
-import net.pokeranalytics.android.ui.graph.ObjectIdentifier
import java.util.*
-interface GraphIdentifiableEntry : GraphUnderlyingEntry, Identifiable {
-
- val objectIdentifier : ObjectIdentifier
-
-}
+interface GraphIdentifiableEntry : GraphUnderlyingEntry, Identifiable
interface Timed : GraphIdentifiableEntry {
diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt
index 00af3d42..3a5910ef 100644
--- a/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt
+++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt
@@ -4,11 +4,13 @@ import android.content.Context
import io.realm.Realm
import io.realm.RealmObject
import io.realm.RealmResults
+import io.realm.annotations.Ignore
import io.realm.annotations.LinkingObjects
import io.realm.annotations.PrimaryKey
import io.realm.kotlin.where
import net.pokeranalytics.android.R
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.ui.view.RowRepresentable
@@ -127,4 +129,7 @@ open class Bankroll : RealmObject(), NameManageable, RowRepresentable {
return UserDefaults.currency
}
+ @Ignore
+ override val realmObjectClass: Class = Bankroll::class.java
+
}
\ No newline at end of file
diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt
index 2b03ba11..98266561 100644
--- a/app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt
+++ b/app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt
@@ -11,6 +11,7 @@ import io.realm.kotlin.where
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.Criteria
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.ui.adapter.StaticRowRepresentableDataSource
@@ -28,6 +29,9 @@ import kotlin.collections.ArrayList
open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDataSource, RowRepresentable {
+ @Ignore
+ override val realmObjectClass: Class = CustomField::class.java
+
/**
* The custom field type: a list of items, a number or an amont
*/
diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/CustomFieldEntry.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/CustomFieldEntry.kt
index f4716084..9a98cfc1 100644
--- a/app/src/main/java/net/pokeranalytics/android/model/realm/CustomFieldEntry.kt
+++ b/app/src/main/java/net/pokeranalytics/android/model/realm/CustomFieldEntry.kt
@@ -12,6 +12,7 @@ import io.realm.kotlin.where
import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.ModelException
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.ui.fragment.components.bottomsheet.BottomSheetType
@@ -27,6 +28,9 @@ import java.util.Currency
open class CustomFieldEntry : RealmObject(), NameManageable, RowRepresentable {
+ @Ignore
+ override val realmObjectClass: Class = CustomFieldEntry::class.java
+
@PrimaryKey
override var id = UUID.randomUUID().toString()
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 3a506826..25059c97 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
@@ -5,16 +5,14 @@ import io.realm.Realm
import io.realm.RealmList
import io.realm.RealmObject
import io.realm.RealmResults
+import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey
import io.realm.kotlin.where
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.filter.Filterable
import net.pokeranalytics.android.model.filter.Query
import net.pokeranalytics.android.model.filter.QueryCondition
-import net.pokeranalytics.android.model.interfaces.CountableUsage
-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.model.interfaces.*
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.interfaces.FilterableType
import net.pokeranalytics.android.ui.view.ImageDecorator
@@ -32,6 +30,9 @@ import java.util.*
*/
open class Filter : RealmObject(), RowRepresentable, Editable, Deletable, CountableUsage, ImageDecorator {
+ @Ignore
+ override val realmObjectClass: Class = Filter::class.java
+
companion object {
// Create a new instance
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 2334baa0..9ee4dcc6 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
@@ -3,10 +3,12 @@ package net.pokeranalytics.android.model.realm
import android.content.Context
import io.realm.Realm
import io.realm.RealmObject
+import io.realm.annotations.Ignore
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.Identifiable
import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
@@ -20,6 +22,9 @@ import kotlin.collections.ArrayList
open class Game : RealmObject(), NameManageable, StaticRowRepresentableDataSource, RowRepresentable, CountableUsage {
+ @Ignore
+ override val realmObjectClass: Class = Game::class.java
+
companion object {
val rowRepresentation : List by lazy {
val rows = ArrayList()
diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt
index df4136e4..9f64f7fb 100644
--- a/app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt
+++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt
@@ -4,9 +4,11 @@ import android.content.Context
import com.google.android.libraries.places.api.model.Place
import io.realm.Realm
import io.realm.RealmObject
+import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey
import io.realm.kotlin.where
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.SaveValidityStatus
import net.pokeranalytics.android.ui.view.RowRepresentable
@@ -16,6 +18,9 @@ import java.util.*
open class Location : RealmObject(), NameManageable, RowRepresentable {
+ @Ignore
+ override val realmObjectClass: Class = Location::class.java
+
@PrimaryKey
override var id = UUID.randomUUID().toString()
diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/ReportSetup.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/ReportSetup.kt
index 2db6f02e..f813dd75 100644
--- a/app/src/main/java/net/pokeranalytics/android/model/realm/ReportSetup.kt
+++ b/app/src/main/java/net/pokeranalytics/android/model/realm/ReportSetup.kt
@@ -11,6 +11,7 @@ import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.Criteria
import net.pokeranalytics.android.model.interfaces.Deletable
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.RowViewType
import net.pokeranalytics.android.util.extensions.findById
@@ -19,6 +20,9 @@ import java.util.*
open class ReportSetup : RealmObject(), RowRepresentable, Deletable {
+ @Ignore
+ override val realmObjectClass: Class = ReportSetup::class.java
+
@PrimaryKey
override var id = UUID.randomUUID().toString()
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 25651110..99e5ed52 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
@@ -16,6 +16,7 @@ import net.pokeranalytics.android.calculus.ComputedStat
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.calculus.StatFormattingException
import net.pokeranalytics.android.exceptions.ModelException
+import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.Limit
import net.pokeranalytics.android.model.TableSize
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.UnmanagedRowRepresentableException
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.rowrepresentable.CustomizableRowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.SeparatorRow
@@ -422,7 +422,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
this.computableResults?.forEachIndexed { index, computableResult ->
computableResult.updateWith(this)
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()
@@ -1149,10 +1149,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
}
- // Timed
-
- override val objectIdentifier: ObjectIdentifier
- get() = ObjectIdentifier(this.id, Session::class.java)
-
+ @Ignore
+ override val realmObjectClass: Class = Session::class.java
}
diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt
index da9976b6..c447de69 100644
--- a/app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt
+++ b/app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt
@@ -4,16 +4,17 @@ import android.content.Context
import io.realm.Realm
import io.realm.RealmObject
import io.realm.RealmResults
+import io.realm.annotations.Ignore
import io.realm.annotations.LinkingObjects
import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.calculus.Stat
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.QueryCondition
+import net.pokeranalytics.android.model.interfaces.Identifiable
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.TextFormat
import java.text.DateFormat
import java.util.*
@@ -138,10 +139,8 @@ open class SessionSet() : RealmObject(), Timed, Filterable {
}
}
- // Timed
-
- override val objectIdentifier: ObjectIdentifier
- get() = ObjectIdentifier(this.id, SessionSet::class.java)
+ @Ignore
+ override val realmObjectClass: Class = SessionSet::class.java
}
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 f11f0e73..5a51c448 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,10 +3,12 @@ package net.pokeranalytics.android.model.realm
import android.content.Context
import io.realm.Realm
import io.realm.RealmObject
+import io.realm.annotations.Ignore
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.Identifiable
import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
@@ -30,6 +32,9 @@ open class TournamentFeature : RealmObject(), NameManageable, StaticRowRepresent
}
}
+ @Ignore
+ override val realmObjectClass: Class = TournamentFeature::class.java
+
@PrimaryKey
override var id = UUID.randomUUID().toString()
diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentName.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentName.kt
index cad45445..dadbfa2f 100644
--- a/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentName.kt
+++ b/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentName.kt
@@ -3,9 +3,11 @@ package net.pokeranalytics.android.model.realm
import android.content.Context
import io.realm.Realm
import io.realm.RealmObject
+import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey
import io.realm.kotlin.where
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.SaveValidityStatus
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
@@ -28,6 +30,9 @@ open class TournamentName : RealmObject(), NameManageable, StaticRowRepresentabl
}
}
+ @Ignore
+ override val realmObjectClass: Class = TournamentName::class.java
+
@PrimaryKey
override var id = UUID.randomUUID().toString()
diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt
index a3ef5368..bbf95d07 100644
--- a/app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt
+++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt
@@ -13,7 +13,6 @@ import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.interfaces.*
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
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.LegendContent
import net.pokeranalytics.android.ui.view.RowRepresentable
@@ -136,8 +135,8 @@ open class Transaction : RealmObject(), Manageable, StaticRowRepresentableDataSo
// GraphIdentifiableEntry
- override val objectIdentifier: ObjectIdentifier
- get() = ObjectIdentifier(this.id, Transaction::class.java)
+ @Ignore
+ override val realmObjectClass: Class = Transaction::class.java
override fun entryTitle(context: Context): String {
return DateFormat.getDateInstance(DateFormat.SHORT).format(this.date)
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 6c038aa3..92edb9bd 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
@@ -3,9 +3,11 @@ package net.pokeranalytics.android.model.realm
import android.content.Context
import io.realm.Realm
import io.realm.RealmObject
+import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.R
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.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.Localizable
@@ -52,6 +54,9 @@ open class TransactionType : RealmObject(), NameManageable, StaticRowRepresentab
}
+ @Ignore
+ override val realmObjectClass: Class = TransactionType::class.java
+
@PrimaryKey
override var id = UUID.randomUUID().toString()
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt
index e9a540db..5edbd95b 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt
@@ -11,6 +11,7 @@ import io.realm.RealmResults
import kotlinx.android.synthetic.main.activity_home.*
import net.pokeranalytics.android.BuildConfig
import net.pokeranalytics.android.R
+import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.realm.Currency
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.activity.components.RequestCode
@@ -83,6 +84,7 @@ class HomeActivity : PokerAnalyticsActivity() {
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
+ setIntent(intent)
intent?.let {
when (intent.action) {
@@ -91,11 +93,11 @@ class HomeActivity : PokerAnalyticsActivity() {
if (data != null) {
this.requestImportConfirmation(data)
} else {
- throw IllegalStateException("URI null on import")
+ throw PAIllegalStateException("URI null on import")
}
}
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() {
val realm = getRealm()
@@ -164,14 +176,4 @@ class HomeActivity : PokerAnalyticsActivity() {
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)
- })
-
- }
-
}
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/ImportActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/ImportActivity.kt
index fd9fef8c..44427c9d 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/activity/ImportActivity.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/ImportActivity.kt
@@ -9,6 +9,8 @@ import io.realm.Realm
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
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 timber.log.Timber
@@ -39,11 +41,15 @@ class ImportActivity : PokerAnalyticsActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- this.fileURI = intent.getParcelableExtra(ImportActivity.IntentKey.URI.keyName)
+ Timber.d("//////// data = ${intent?.data}")
- setContentView(R.layout.activity_import)
- initUI()
+ intent?.data?.let {
+ this.fileURI = it
+ }
+ setContentView(R.layout.activity_import)
+// initUI()
+ requestImportConfirmation()
}
override fun onStop() {
@@ -51,7 +57,7 @@ class ImportActivity : PokerAnalyticsActivity() {
// Updates the main thread instance with newly inserted data
val realm = Realm.getDefaultInstance()
- realm.refresh()
+// realm.refresh()
realm.close()
}
@@ -71,16 +77,57 @@ class ImportActivity : PokerAnalyticsActivity() {
}
-// private fun requestPermission() {
-// if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {
-// ActivityCompat.requestPermissions(
-// this, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE), PERMISSION_REQUEST_ACCESS_FINE_LOCATION
-// )
+// override fun onNewIntent(intent: Intent?) {
+// super.onNewIntent(intent)
+//
+// 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, 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()
+ })
+
+ }
+
+
}
\ No newline at end of file
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt
index 9570c9cb..18b926a4 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt
@@ -14,13 +14,14 @@ import com.github.mikephil.charting.listener.OnChartValueSelectedListener
import kotlinx.android.synthetic.main.fragment_graph.*
import net.pokeranalytics.android.R
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.graph.AxisFormatting
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.view.LegendView
import net.pokeranalytics.android.ui.view.MultiLineLegendView
+import timber.log.Timber
class GraphFragment : RealmFragment(), OnChartValueSelectedListener {
@@ -183,16 +184,21 @@ class GraphFragment : RealmFragment(), OnChartValueSelectedListener {
val identifier = entry.data as ObjectIdentifier
getRealm().where(identifier.clazz).equalTo("id", identifier.id).findAll().firstOrNull()
}
- is GraphUnderlyingEntry -> entry.data as GraphUnderlyingEntry?
+ is GraphUnderlyingEntry -> entry.data
else -> null
}
- statEntry?.let {
+ if (statEntry is GraphUnderlyingEntry) {
+
val groupName = dataSet?.label ?: ""
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)
+
+ } else {
+ Timber.w("Data $statEntry should implement GraphUnderlyingEntry")
}
+
}
}
\ No newline at end of file
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/graph/GraphUnderlyingEntry.kt b/app/src/main/java/net/pokeranalytics/android/ui/graph/GraphUnderlyingEntry.kt
index 01d9ead9..e1b0a5a7 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/graph/GraphUnderlyingEntry.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/graph/GraphUnderlyingEntry.kt
@@ -3,16 +3,12 @@ package net.pokeranalytics.android.ui.graph
import android.content.Context
import com.github.mikephil.charting.data.Entry
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.view.DefaultLegendValues
import net.pokeranalytics.android.ui.view.LegendContent
import net.pokeranalytics.android.util.TextFormat
-class ObjectIdentifier(var id: String, var clazz: Class) {
-
-}
-
interface GraphUnderlyingEntry {
fun entryTitle(context: Context): String
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/CustomizableRowRepresentable.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/CustomizableRowRepresentable.kt
index 84d223f6..47255dde 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/CustomizableRowRepresentable.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/CustomizableRowRepresentable.kt
@@ -2,7 +2,6 @@ package net.pokeranalytics.android.ui.view.rowrepresentable
import android.content.Context
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.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
@@ -27,7 +26,7 @@ class CustomizableRowRepresentable(
var value: String? = null,
var computedStat: ComputedStat? = null,
var isSelectable: Boolean? = false
- ) : RowRepresentable, Identifiable {
+ ) : RowRepresentable {
override fun localizedTitle(context: Context): String {
@@ -42,5 +41,5 @@ class CustomizableRowRepresentable(
override val viewType: Int = customViewType?.ordinal ?: RowViewType.HEADER_TITLE.ordinal
- override var id: String = ""
+// override var id: String = ""
}
diff --git a/app/src/main/java/net/pokeranalytics/android/util/csv/CSVDescriptor.kt b/app/src/main/java/net/pokeranalytics/android/util/csv/CSVDescriptor.kt
index 847a775c..b462c377 100644
--- a/app/src/main/java/net/pokeranalytics/android/util/csv/CSVDescriptor.kt
+++ b/app/src/main/java/net/pokeranalytics/android/util/csv/CSVDescriptor.kt
@@ -3,7 +3,8 @@ package net.pokeranalytics.android.util.csv
import io.realm.Realm
import io.realm.kotlin.deleteFromRealm
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 org.apache.commons.csv.CSVRecord
import timber.log.Timber
@@ -25,7 +26,7 @@ abstract class DataCSVDescriptor(source: DataSource, vararg el
/**
* List of Realm object identificators
*/
- val realmModelIds = mutableListOf()
+ val realmModelIds = mutableListOf()
abstract fun parseData(realm: Realm, record: CSVRecord): T?
@@ -33,19 +34,33 @@ abstract class DataCSVDescriptor(source: DataSource, vararg el
val data = this.parseData(realm, record)
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
}
override fun cancel(realm: Realm) {
+
+ Timber.d(">>>>>>> Start delete of ${realmModelIds.size}")
+
realm.executeTransaction {
- this.realmModelIds.forEach { identificator ->
- realm.findById(identificator.clazz, identificator.id)?.deleteFromRealm()
+ this.realmModelIds.forEach { identifier ->
+ 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
+ open fun save(realm: Realm) {
+
+ }
+
open fun cancel(realm: Realm) {
}
diff --git a/app/src/main/java/net/pokeranalytics/android/util/csv/CSVImporter.kt b/app/src/main/java/net/pokeranalytics/android/util/csv/CSVImporter.kt
index 17476360..24d36530 100644
--- a/app/src/main/java/net/pokeranalytics/android/util/csv/CSVImporter.kt
+++ b/app/src/main/java/net/pokeranalytics/android/util/csv/CSVImporter.kt
@@ -186,21 +186,19 @@ open class CSVImporter(istream: InputStream) {
return null
}
-// fun save(realm: Realm) {
-//
-// this.usedDescriptors.forEach { descriptor ->
-//
-// if (descriptor is DataCSVDescriptor<*>) {
-// realm.executeTransaction {
-// realm.copyToRealm(descriptor.realmModels)
-// }
-// }
-// }
-// }
+ fun save(realm: Realm) {
+ this.parser.close()
+// realm.refresh()
+
+ this.currentDescriptor?.save(realm)
+ this.usedDescriptors.forEach { descriptor ->
+ descriptor.save(realm)
+ }
+ }
fun cancel(realm: Realm) {
this.parser.close()
- realm.refresh()
+// realm.refresh()
this.currentDescriptor?.cancel(realm)
this.usedDescriptors.forEach { descriptor ->
diff --git a/app/src/main/java/net/pokeranalytics/android/util/csv/SessionCSVDescriptor.kt b/app/src/main/java/net/pokeranalytics/android/util/csv/SessionCSVDescriptor.kt
index 54dda264..dda5c860 100644
--- a/app/src/main/java/net/pokeranalytics/android/util/csv/SessionCSVDescriptor.kt
+++ b/app/src/main/java/net/pokeranalytics/android/util/csv/SessionCSVDescriptor.kt
@@ -115,8 +115,6 @@ class SessionCSVDescriptor(source: DataSource, private var isTournament: Boolean
val session = Session.newInstance(realm, this.isTournament)
-
-
var isLive = true
var bankrollName: 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 (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
} else {
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")
}
+ session.cleanup()
session.deleteFromRealm()
return null
}