feature/top10
Laurent 7 years ago
commit 45dab3b992
  1. 50
      app/src/androidTest/java/net/pokeranalytics/android/unitTests/DeleteInstrumentedUnitTest.kt
  2. 4
      app/src/main/java/net/pokeranalytics/android/model/LiveData.kt
  3. 37
      app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt
  4. 19
      app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt
  5. 22
      app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt
  6. 21
      app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt
  7. 16
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  8. 20
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt
  9. 20
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentName.kt
  10. 9
      app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt
  11. 3
      app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt
  12. 14
      app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt
  13. 24
      app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt
  14. 4
      app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt
  15. 9
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt
  16. 5
      app/src/main/res/values/strings.xml

@ -0,0 +1,50 @@
package net.pokeranalytics.android.unitTests
import net.pokeranalytics.android.components.RealmInstrumentedUnitTest
import net.pokeranalytics.android.model.realm.Bankroll
import net.pokeranalytics.android.model.realm.Currency
import org.junit.Assert
import org.junit.Test
class DeleteInstrumentedUnitTest : RealmInstrumentedUnitTest() {
@Test
fun testDeleteValidation() {
val realm = this.mockRealm
realm.beginTransaction()
val s1 = newSessionInstance(realm)
val s2 = newSessionInstance(realm)
val br1 = realm.createObject(Bankroll::class.java, "1")
val br2 = realm.createObject(Bankroll::class.java, "2")
val c1 = realm.createObject(Currency::class.java, "1")
val c2 = realm.createObject(Currency::class.java, "2")
c1.rate = 0.1
c2.rate = 2.0
br1.currency = c1
br2.currency = c2
s1.bankroll = br1
s2.bankroll = br2
s1.result?.netResult = 100.0
s2.result?.netResult = 200.0
realm.commitTransaction()
var isValidForDelete = br1.isValidForDelete(realm)
Assert.assertEquals(false, isValidForDelete)
realm.where(Bankroll::class.java).equalTo("id", "1").findFirst()?.let {
isValidForDelete = it.isValidForDelete(realm)
Assert.assertEquals(false, isValidForDelete)
isValidForDelete = realm.copyFromRealm(it).isValidForDelete(realm)
Assert.assertEquals(false, isValidForDelete)
}
}
}

@ -8,7 +8,7 @@ import io.realm.Sort
import io.realm.kotlin.where
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.CountableUsage
import net.pokeranalytics.android.model.interfaces.Manageable
import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.model.realm.*
import net.pokeranalytics.android.ui.view.Localizable
@ -104,7 +104,7 @@ enum class LiveData : Localizable {
}
}
fun deleteData(realm: Realm, data: Manageable) {
fun deleteData(realm: Realm, data: Deletable) {
realm.where(this.relatedEntity).equalTo("id", data.id).findAll().deleteAllFromRealm()
}

@ -1,12 +1,12 @@
package net.pokeranalytics.android.model.interfaces
import io.realm.Realm
import io.realm.RealmModel
import io.realm.RealmObject
import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.ModelException
import net.pokeranalytics.android.ui.view.RowRepresentable
enum class ManageableStatus {
enum class SaveValidityStatus {
VALID,
ALREADY_EXISTS,
DATA_INVALID;
@ -24,19 +24,16 @@ interface NameManageable: Manageable {
return this.name.isNotEmpty()
}
override fun alreadyExists(): Boolean {
if (this is RealmObject && this.realm != null) {
return (this as RealmObject).realm.where(this::class.java).equalTo("name", this.name).findAll().isNotEmpty()
}
return false
override fun alreadyExists(realm: Realm): Boolean {
return realm.where(this::class.java).equalTo("name", this.name).and().notEqualTo("id", this.id).findAll().isNotEmpty()
}
override fun getFailedSaveMessage(status: ManageableStatus): Int {
return when (status) {
ManageableStatus.ALREADY_EXISTS -> R.string.duplicate_bankroll_name_error
ManageableStatus.DATA_INVALID -> R.string.empty_name_for_br_error
else -> throw ModelException("object should be savable")
override fun getFailedSaveMessage(status: SaveValidityStatus): Int {
throw ModelException("${this::class.java} getFailedSaveMessage for $status not handled")
}
override fun getFailedDeleteMessage(): Int {
return R.string.relationship_error
}
}
@ -69,28 +66,28 @@ interface Editable : Identifiable {
interface Savable : Identifiable {
fun isValidForSave(): Boolean
fun alreadyExists(): Boolean
fun alreadyExists(realm: Realm): Boolean
/**
* A method to define if an object is safe for saving in database
*/
fun saveStatus(): ManageableStatus {
fun getSaveValidityStatus(realm: Realm): SaveValidityStatus {
if (!isValidForSave()) {
return ManageableStatus.DATA_INVALID
return SaveValidityStatus.DATA_INVALID
}
if (alreadyExists()) {
return ManageableStatus.ALREADY_EXISTS
if (alreadyExists(realm)) {
return SaveValidityStatus.ALREADY_EXISTS
}
return ManageableStatus.VALID
return SaveValidityStatus.VALID
}
/**
* A method to get the reason why the object can't be saved
*/
fun getFailedSaveMessage(status:ManageableStatus): Int
fun getFailedSaveMessage(status:SaveValidityStatus): Int
}
@ -102,7 +99,7 @@ interface Deletable : Identifiable {
/**
* A method to define if an object is safe for deletion in database
*/
fun isValidForDelete(): Boolean
fun isValidForDelete(realm: Realm): Boolean
/**
* A method to get the reason why the object can't be deleted

@ -1,11 +1,12 @@
package net.pokeranalytics.android.model.realm
import io.realm.Realm
import io.realm.RealmList
import io.realm.RealmObject
import io.realm.annotations.PrimaryKey
import io.realm.kotlin.where
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.ManageableStatus
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
@ -91,17 +92,19 @@ open class Bankroll() : RealmObject(), NameManageable, StaticRowRepresentableDat
}
}
override fun isValidForDelete(): Boolean {
return this.realm.where<Session>().equalTo("bankroll.id", id).findAll().isEmpty()
override fun isValidForDelete(realm: Realm): Boolean {
return realm.where<Session>().equalTo("bankroll.id", id).findAll().isEmpty()
}
override fun getFailedDeleteMessage(): Int {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
return R.string.bankroll_relationship_error
}
override fun getFailedSaveMessage(status: ManageableStatus): Int {
if (status == ManageableStatus.DATA_INVALID) R.string.empty_name_for_br_error
else if (status == ManageableStatus.ALREADY_EXISTS) R.string.duplicate_bankroll_name_error
return super.getFailedSaveMessage(status)
override fun getFailedSaveMessage(status: SaveValidityStatus): Int {
return when (status) {
SaveValidityStatus.DATA_INVALID -> R.string.empty_name_for_br_error
SaveValidityStatus.ALREADY_EXISTS -> R.string.duplicate_bankroll_name_error
else -> super.getFailedSaveMessage(status)
}
}
}

@ -1,11 +1,12 @@
package net.pokeranalytics.android.model.realm
import io.realm.Realm
import io.realm.RealmObject
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.ManageableStatus
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
@ -74,24 +75,19 @@ open class Game : RealmObject(), NameManageable, StaticRowRepresentableDataSourc
return name.isNotEmpty() && !shortName.isNullOrEmpty()
}
override fun getFailedSaveMessage(status: ManageableStatus): Int {
if (status == ManageableStatus.DATA_INVALID) {
return if (name.isEmpty()) {
override fun getFailedSaveMessage(status: SaveValidityStatus): Int {
return when (status) {
SaveValidityStatus.DATA_INVALID -> if (name.isEmpty()) {
R.string.variant_empty_name_error
} else {
R.string.variant_empty_shortname_error
}
SaveValidityStatus.ALREADY_EXISTS -> R.string.duplicate_variant_error
else -> super.getFailedSaveMessage(status)
}
else if (status == ManageableStatus.ALREADY_EXISTS) return R.string.duplicate_variant_error
return super.getFailedSaveMessage(status)
}
override fun isValidForDelete(): Boolean {
return this.realm.where<Session>().equalTo("game.id", id).findAll().isEmpty()
}
override fun getFailedDeleteMessage(): Int {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
override fun isValidForDelete(realm: Realm): Boolean {
return realm.where<Session>().equalTo("game.id", id).findAll().isEmpty()
}
}

@ -1,11 +1,12 @@
package net.pokeranalytics.android.model.realm
import com.google.android.libraries.places.api.model.Place
import io.realm.Realm
import io.realm.RealmObject
import io.realm.annotations.PrimaryKey
import io.realm.kotlin.where
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.ManageableStatus
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
@ -21,7 +22,7 @@ open class Location : RealmObject(), NameManageable, RowRepresentable {
override var name: String = ""
// The readable address of the location
private var address: String = ""
private var address: String? = null
// the longitude of the location
var longitude: Double? = null
@ -49,17 +50,15 @@ open class Location : RealmObject(), NameManageable, RowRepresentable {
this.longitude = place.latLng?.longitude
}
override fun getFailedSaveMessage(status: ManageableStatus): Int {
if (status == ManageableStatus.DATA_INVALID) R.string.location_empty_field_error
else if (status == ManageableStatus.ALREADY_EXISTS) R.string.duplicate_location_error
return super.getFailedSaveMessage(status)
override fun getFailedSaveMessage(status: SaveValidityStatus): Int {
return when (status) {
SaveValidityStatus.DATA_INVALID -> R.string.location_empty_field_error
SaveValidityStatus.ALREADY_EXISTS -> R.string.duplicate_location_error
else -> super.getFailedSaveMessage(status)
}
override fun isValidForDelete(): Boolean {
return this.realm.where<Session>().equalTo("location.id", id).findAll().isEmpty()
}
override fun getFailedDeleteMessage(): Int {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
override fun isValidForDelete(realm: Realm): Boolean {
return realm.where<Session>().equalTo("location.id", id).findAll().isEmpty()
}
}

@ -40,7 +40,7 @@ import java.util.*
import java.util.Currency
import kotlin.collections.ArrayList
open class Session : RealmObject(), Identifiable, Manageable, StaticRowRepresentableDataSource, RowRepresentable, Timed,
open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDataSource, RowRepresentable, Timed,
TimeFilterable {
enum class Type {
@ -372,20 +372,12 @@ open class Session : RealmObject(), Identifiable, Manageable, StaticRowRepresent
return this.bankroll != null
}
override fun alreadyExists(): Boolean {
override fun alreadyExists(realm: Realm): Boolean {
return false
}
override fun getFailedSaveMessage(status: ManageableStatus): Int {
return 0 // @todo
}
override fun isValidForDelete(): Boolean {
return true
}
override fun getFailedDeleteMessage(): Int {
return 0 // @todo
override fun getFailedSaveMessage(status: SaveValidityStatus): Int {
return R.string.no_br_popup_message
}
// States

@ -1,10 +1,12 @@
package net.pokeranalytics.android.model.realm
import io.realm.Realm
import io.realm.RealmObject
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.ManageableStatus
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
@ -62,17 +64,15 @@ open class TournamentFeature : RealmObject(), NameManageable, StaticRowRepresent
}
}
override fun getFailedSaveMessage(status: ManageableStatus): Int {
//TODO if (status == ManageableStatus.DATA_INVALID) R.string.tournament_feature_empty_field_error
//TODO else if (status == ManageableStatus.ALREADY_EXISTS) R.string.duplicate_tournament_feature_error
return super.getFailedSaveMessage(status)
override fun getFailedSaveMessage(status: SaveValidityStatus): Int {
return when (status) {
SaveValidityStatus.DATA_INVALID -> R.string.tournament_feature_empty_field_error
SaveValidityStatus.ALREADY_EXISTS -> R.string.duplicate_tournament_feature_error
else -> super.getFailedSaveMessage(status)
}
override fun isValidForDelete(): Boolean {
return this.realm.where<Session>().equalTo("tournamentFeatures.id", id).findAll().isEmpty()
}
override fun getFailedDeleteMessage(): Int {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
override fun isValidForDelete(realm: Realm): Boolean {
return realm.where<Session>().equalTo("tournamentFeatures.id", id).findAll().isEmpty()
}
}

@ -1,9 +1,11 @@
package net.pokeranalytics.android.model.realm
import io.realm.Realm
import io.realm.RealmObject
import io.realm.annotations.PrimaryKey
import io.realm.kotlin.where
import net.pokeranalytics.android.model.interfaces.ManageableStatus
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
@ -56,17 +58,15 @@ open class TournamentName : RealmObject(), NameManageable, StaticRowRepresentabl
return row.editingDescriptors(mapOf("defaultValue" to this.name))
}
override fun getFailedSaveMessage(status: ManageableStatus): Int {
//TODO if (status == ManageableStatus.DATA_INVALID) R.string.tournament_name_empty_field_error
//TODO else if (status == ManageableStatus.ALREADY_EXISTS) R.string.duplicate_tournament_name_error
return super.getFailedSaveMessage(status)
override fun getFailedSaveMessage(status: SaveValidityStatus): Int {
return when (status) {
SaveValidityStatus.DATA_INVALID -> R.string.tournament_name_empty_field_error
SaveValidityStatus.ALREADY_EXISTS -> R.string.duplicate_tournament_name_error
else -> super.getFailedSaveMessage(status)
}
override fun isValidForDelete(): Boolean {
return this.realm.where<Session>().equalTo("tournamentName.id", id).findAll().isEmpty()
}
override fun getFailedDeleteMessage(): Int {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
override fun isValidForDelete(realm: Realm): Boolean {
return realm.where<Session>().equalTo("tournamentName.id", id).findAll().isEmpty()
}
}

@ -1,11 +1,12 @@
package net.pokeranalytics.android.model.realm
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.Manageable
import net.pokeranalytics.android.model.interfaces.ManageableStatus
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
@ -63,11 +64,11 @@ open class Transaction : RealmObject(), Manageable, StaticRowRepresentableDataSo
return bankroll != null && type != null && amount != 0.0
}
override fun alreadyExists(): Boolean {
override fun alreadyExists(realm: Realm): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun getFailedSaveMessage(status: ManageableStatus): Int {
override fun getFailedSaveMessage(status: SaveValidityStatus): Int {
return if (bankroll == null) {
R.string.no_br_popup_message
} else if (type == null || amount == 0.0) {
@ -77,7 +78,7 @@ open class Transaction : RealmObject(), Manageable, StaticRowRepresentableDataSo
}
}
override fun isValidForDelete(): Boolean {
override fun isValidForDelete(realm: Realm): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}

@ -1,5 +1,6 @@
package net.pokeranalytics.android.model.realm
import io.realm.Realm
import io.realm.RealmObject
import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.model.interfaces.NameManageable
@ -62,7 +63,7 @@ open class TransactionType : RealmObject(), NameManageable, StaticRowRepresentab
}
}
override fun isValidForDelete(): Boolean {
override fun isValidForDelete(realm: Realm): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}

@ -4,6 +4,7 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AlertDialog
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.snackbar.Snackbar
@ -11,7 +12,8 @@ import io.realm.RealmObject
import io.realm.RealmResults
import kotlinx.android.synthetic.main.fragment_data_list.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.Manageable
import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.LiveRowRepresentableDataSource
@ -22,7 +24,6 @@ import net.pokeranalytics.android.ui.helpers.SwipeToDeleteCallback
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rowrepresentable.SettingRow
import net.pokeranalytics.android.util.extensions.showAlertDialog
class DataListFragment : PokerAnalyticsFragment(), LiveRowRepresentableDataSource, RowRepresentableDelegate {
@ -70,7 +71,7 @@ class DataListFragment : PokerAnalyticsFragment(), LiveRowRepresentableDataSourc
EditableDataActivity.newInstance(
requireContext(),
it.ordinal,
(row as Manageable).id
(row as Identifiable).id
)
}
}
@ -101,7 +102,7 @@ class DataListFragment : PokerAnalyticsFragment(), LiveRowRepresentableDataSourc
if (mRecentlyDeletedItem is RealmObject) {
// Check if the object is valid for the deletion
if ((mRecentlyDeletedItem as Manageable).isValidForDelete()) {
if ((mRecentlyDeletedItem as Deletable).isValidForDelete(this.getRealm())) {
deletedItem = getRealm().copyFromRealm(mRecentlyDeletedItem)
getRealm().executeTransaction {
mRecentlyDeletedItem.deleteFromRealm()
@ -110,7 +111,10 @@ class DataListFragment : PokerAnalyticsFragment(), LiveRowRepresentableDataSourc
showUndoSnackBar()
} else {
dataListAdapter.notifyItemChanged(position)
showAlertDialog(R.string.warning, (mRecentlyDeletedItem as Manageable).getFailedDeleteMessage())
val builder = AlertDialog.Builder(requireContext())
.setMessage((mRecentlyDeletedItem as Deletable).getFailedDeleteMessage())
.setNegativeButton(R.string.ok, null)
builder.show()
}
}
}

@ -12,10 +12,7 @@ import kotlinx.android.synthetic.main.fragment_editable_data.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.ConfigurationException
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.interfaces.Editable
import net.pokeranalytics.android.model.interfaces.Manageable
import net.pokeranalytics.android.model.interfaces.ManageableStatus
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.model.interfaces.*
import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
@ -147,9 +144,9 @@ open class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDele
val savable = this.item
when (savable) {
is Savable -> {
val status = savable.saveStatus()
val status = savable.getSaveValidityStatus(realm = this.getRealm())
when (status) {
ManageableStatus.VALID -> {
SaveValidityStatus.VALID -> {
this.getRealm().executeTransaction {
val managedItem = it.copyToRealmOrUpdate(this.item)
if (managedItem is Savable) {
@ -190,11 +187,20 @@ open class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDele
.setMessage(R.string.are_you_sure_you_want_to_do_that_)
.setNegativeButton(R.string.no, null)
.setPositiveButton(R.string.yes) { _, _ ->
//TODO: Maybe update this code, does the object need to be managed?
this.getRealm().executeTransaction {
this.liveDataType.deleteData(it, (this.item as Manageable))
val deletable = this.item as Deletable
val realm = this.getRealm()
if (deletable.isValidForDelete(realm)) {
realm.executeTransaction {
this.liveDataType.deleteData(it, deletable)
}
this.activity?.finish()
} else {
val message = deletable.getFailedDeleteMessage()
val builder = AlertDialog.Builder(requireContext())
.setMessage(message)
.setNegativeButton(R.string.ok, null)
builder.show()
}
}
builder.show()
}

@ -10,7 +10,7 @@ import io.realm.Sort
import io.realm.kotlin.where
import kotlinx.android.synthetic.main.fragment_history.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.Manageable
import net.pokeranalytics.android.model.interfaces.Editable
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.ui.activity.SessionActivity
import net.pokeranalytics.android.ui.adapter.HistorySessionRowRepresentableAdapter
@ -126,6 +126,6 @@ class HistoryFragment : PokerAnalyticsFragment(), LiveRowRepresentableDataSource
}
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
SessionActivity.newInstance(requireContext(), sessionId = (row as Manageable).id)
SessionActivity.newInstance(requireContext(), sessionId = (row as Editable).id)
}
}

@ -5,6 +5,7 @@ import android.os.Handler
import android.view.*
import android.view.animation.OvershootInterpolator
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.core.content.ContextCompat
import androidx.interpolator.view.animation.FastOutSlowInInterpolator
import androidx.recyclerview.widget.DiffUtil
@ -13,6 +14,7 @@ import kotlinx.android.synthetic.main.fragment_session.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.extensions.SessionState
import net.pokeranalytics.android.model.extensions.getState
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.model.realm.Location
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.model.utils.FavoriteSessionFinder
@ -133,8 +135,15 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate {
}
floatingActionButton.setOnClickListener {
if (this.currentSession.isValidForSave()) {
sessionHasBeenCustomized = true
manageSessionState()
} else {
val builder = AlertDialog.Builder(requireContext())
.setMessage(this.currentSession.getFailedSaveMessage(SaveValidityStatus.DATA_INVALID))
.setNegativeButton(R.string.ok, null)
builder.show()
}
}
}

@ -12,7 +12,10 @@
<string name="pending">Pending</string>
<string name="disclaimer">Poker Analytics is a poker tracking app. We’re currently on our way to reproduce the iOS app and you’re currently using a lighter version. The app will work with a US$29.99 yearly subscription for an unlimited usage, but will be free until reaching the appropriate feature coverage.</string>
<string name="iunderstand">I understand</string>
<string name="tournament_feature_empty_field_error">You need to give a name to this tournament feature</string>
<string name="duplicate_tournament_feature_error">A tournament feature with the same name already exists.</string>
<string name="tournament_name_empty_field_error">A tournament name can not be empty.</string>
<string name="duplicate_tournament_name_error">This name already exists.</string>
<!-- Translated -->

Loading…
Cancel
Save