diff --git a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt index a97162e2..649f06a0 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt @@ -2,6 +2,7 @@ package net.pokeranalytics.android.model.migrations import io.realm.DynamicRealm import io.realm.RealmMigration +import net.pokeranalytics.android.model.realm.CustomField import net.pokeranalytics.android.model.realm.CustomFieldEntry import timber.log.Timber @@ -104,8 +105,9 @@ class PokerAnalyticsMigration : RealmMigration { } schema.create("CustomFieldEntry")?.let { it.addField("id", String::class.java).setRequired("id", true) - it.addField("value", String::class.java).setNullable("type", false) - it.addField("order", Integer::class.java).setNullable("type", false) + it.addField("value", String::class.java).setNullable("value", false) + it.addField("order", Integer::class.java).setNullable("order", false) + it.addField("customField", CustomField::class.java).setNullable("customField", false) } schema.get("CustomField")?.let { it.addField("type", Integer::class.java).setNullable("type", false) @@ -113,7 +115,6 @@ class PokerAnalyticsMigration : RealmMigration { it.addField("sortCondition", Integer::class.java) it.addRealmListField("entries", CustomFieldEntry::class.java) } - schema.get("ReportSetup")?.let { it.addRealmListField("statIds", Int::class.java) it.addRealmListField("criteriaIds", Int::class.java) @@ -122,10 +123,10 @@ class PokerAnalyticsMigration : RealmMigration { it.addRealmObjectField("filter", filterSchema) } } - schema.get("Session")?.let { it.addField("startDateHourMinuteComponent", Double::class.java).setNullable("startDateHourMinuteComponent", true) it.addField("endDateHourMinuteComponent", Double::class.java).setNullable("endDateHourMinuteComponent", true) + it.addRealmListField("customFieldEntries", CustomFieldEntry::class.java) } currentVersion++ } 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 a1876108..7620e2e2 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 @@ -1,6 +1,7 @@ package net.pokeranalytics.android.model.realm import android.content.Context +import android.text.InputType import io.realm.Realm import io.realm.RealmList import io.realm.RealmObject @@ -11,6 +12,7 @@ import net.pokeranalytics.android.model.interfaces.DeleteValidityStatus import net.pokeranalytics.android.model.interfaces.NameManageable import net.pokeranalytics.android.model.interfaces.SaveValidityStatus import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource +import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.RowViewType @@ -58,13 +60,16 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa updateRowRepresentation() } + override fun localizedTitle(context: Context): String { + return this.name + } override fun getDisplayName(context: Context): String { return this.name } @Ignore - override val viewType: Int = RowViewType.TITLE_VALUE_ARROW.ordinal + override var viewType: Int = RowViewType.TITLE_VALUE_ARROW.ordinal @Ignore private var rowRepresentation: List = mutableListOf() @@ -105,6 +110,14 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa return R.string.relationship_error } + override val bottomSheetType: BottomSheetType + get() { + return when (type) { + Type.LIST.uniqueIdentifier -> BottomSheetType.LIST_STATIC + else -> BottomSheetType.EDIT_TEXT + } + } + override fun editDescriptors(row: RowRepresentable): ArrayList? { return when (row) { is CustomFieldEntry -> row.editingDescriptors( @@ -116,6 +129,28 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa } } + override fun editingDescriptors(map: Map): ArrayList? { + return when (type) { + Type.LIST.uniqueIdentifier -> { + val defaultValue: Any? by map + val data: RealmList? by map + arrayListOf( + RowRepresentableEditDescriptor(defaultValue, staticData = data) + ) + } + else -> { + val defaultValue: String? by map + arrayListOf( + RowRepresentableEditDescriptor( + defaultValue, inputType = InputType.TYPE_CLASS_NUMBER + or InputType.TYPE_NUMBER_FLAG_DECIMAL + or InputType.TYPE_NUMBER_FLAG_SIGNED + ) + ) + } + } + } + /** * Update the row representation */ @@ -160,6 +195,7 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa */ fun addEntry(): CustomFieldEntry { val entry = CustomFieldEntry() + entry.customField = this entries.add(entry) sortEntries() updateRowRepresentation() @@ -175,5 +211,4 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa updateRowRepresentation() } - } \ No newline at end of file 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 6c17e556..314f2002 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 @@ -11,15 +11,20 @@ import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.util.NULL_TEXT +import net.pokeranalytics.android.util.extensions.toCurrency import java.util.* +import java.util.Currency open class CustomFieldEntry : RealmObject(), RowRepresentable { @PrimaryKey var id = UUID.randomUUID().toString() - var value: String = "" var order: Int = 0 + var customField: CustomField? = null + + var value: String = "" + @Ignore var isMovable: Boolean = false @@ -55,4 +60,22 @@ open class CustomFieldEntry : RealmObject(), RowRepresentable { ) } + /** + * Return the amount + */ + fun getFormattedValue(currency: Currency? = null): String { + return when (customField?.type) { + CustomField.Type.AMOUNT.uniqueIdentifier -> { + try { + value.toDouble().toCurrency(currency) + } catch (e: Exception) { + NULL_TEXT + } + } + else -> { + value + } + } + } + } \ No newline at end of file