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 }