Showing only editable transaction types + changing the legend label according to the type in the BR graph

dev
Laurent 7 years ago
parent 601427f8c2
commit 9d78e30a26
  1. 20
      app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollReport.kt
  2. 18
      app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt
  3. 9
      app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt
  4. 7
      app/src/main/java/net/pokeranalytics/android/ui/graph/GraphUnderlyingEntry.kt
  5. 12
      app/src/main/java/net/pokeranalytics/android/ui/view/LegendView.kt
  6. 24
      app/src/main/java/net/pokeranalytics/android/util/extensions/RealmExtensions.kt

@ -88,7 +88,7 @@ class BankrollReport(var setup: BankrollReportSetup) : RowRepresentable {
/**
* Computes the bankroll total
*/
fun computeBankrollTotal() {
private fun computeBankrollTotal() {
this.total = this.initial + this.netResult + this.transactionsNet
}
@ -143,13 +143,12 @@ class BankrollReport(var setup: BankrollReportSetup) : RowRepresentable {
/**
* The list of bankroll graph points
*/
var evolutionPoints: MutableList<BRGraphPoint> = mutableListOf()
private var evolutionPoints: MutableList<BRGraphPoint> = mutableListOf()
/**
* The list of dated items used for the graph
*/
var evolutionItems: MutableList<DatedValue> = mutableListOf()
private set
private var evolutionItems: MutableList<DatedValue> = mutableListOf()
override val viewType: Int
get() {
@ -185,7 +184,7 @@ class BankrollReport(var setup: BankrollReportSetup) : RowRepresentable {
bucket.addTransaction(transaction)
} ?: run {
throw Exception("Transaction has no type")
throw IllegalStateException("Transaction has no type")
}
}
@ -279,11 +278,15 @@ class BankrollReportSetup(val bankroll: Bankroll? = null, val from: Date? = null
*/
class TransactionBucket(useRate: Boolean = false) {
/**
* Whether the bankroll rate should be used
*/
private var useRate: Boolean = useRate
/**
* A list of _transactions
*/
private var _transactions: MutableList<Transaction> = mutableListOf()
private set
val transactions: List<Transaction>
get() {
@ -296,11 +299,6 @@ class TransactionBucket(useRate: Boolean = false) {
var total: Double = 0.0
private set
/**
* Whether the bankroll rate should be used
*/
var useRate: Boolean = useRate
private set
fun addTransaction(transaction: Transaction) {

@ -1,6 +1,7 @@
package net.pokeranalytics.android.model.realm
import android.content.Context
import com.github.mikephil.charting.data.Entry
import io.realm.Realm
import io.realm.RealmObject
import io.realm.annotations.Ignore
@ -11,7 +12,10 @@ import net.pokeranalytics.android.model.filter.Filterable
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.GraphUnderlyingEntry
import net.pokeranalytics.android.ui.view.DefaultLegendValues
import net.pokeranalytics.android.ui.view.LegendContent
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rowrepresentable.TransactionRow
@ -140,4 +144,18 @@ open class Transaction : RealmObject(), Manageable, StaticRowRepresentableDataSo
return stat.format(this.amount)
}
override fun legendValues(
stat: Stat,
entry: Entry,
style: GraphFragment.Style,
groupName: String,
context: Context
): LegendContent {
val entryValue = this.formattedValue(stat)
val totalStatValue = stat.format(entry.y.toDouble(), currency = null)
val leftName = context.getString(R.string.value)
return DefaultLegendValues(this.entryTitle(context), entryValue, totalStatValue, leftName = leftName)
}
}

@ -9,6 +9,7 @@ import android.view.ViewGroup
import androidx.core.view.isVisible
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
import io.realm.Realm
import io.realm.RealmResults
import kotlinx.android.synthetic.main.fragment_data_list.*
import net.pokeranalytics.android.R
@ -28,7 +29,7 @@ import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.util.extensions.sorted
class DataListFragment : DeletableItemFragment(), LiveRowRepresentableDataSource, RowRepresentableDelegate {
open class DataListFragment : DeletableItemFragment(), LiveRowRepresentableDataSource, RowRepresentableDelegate {
companion object {
const val REQUEST_CODE_DETAILS = 1000
@ -48,9 +49,11 @@ class DataListFragment : DeletableItemFragment(), LiveRowRepresentableDataSource
this.identifiableClass = this.dataType.relatedEntity
setToolbarTitle(this.dataType.pluralLocalizedTitle(requireContext()))
val realm = getRealm()
this.items = realm.sorted(this.identifiableClass)
this.items = this.retrieveItems(getRealm())
}
open fun retrieveItems(realm: Realm): RealmResults<out Deletable> {
return realm.sorted(this.identifiableClass, editableOnly = true)
}
override fun deletableItems() : List<Deletable> {

@ -3,11 +3,11 @@ 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.util.TextFormat
import net.pokeranalytics.android.model.interfaces.Timed
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<out Timed>) {
@ -26,15 +26,16 @@ interface GraphUnderlyingEntry {
context: Context
): LegendContent {
val leftName = stat.localizedTitle(context)
return when (stat) {
Stat.NUMBER_OF_SETS, Stat.NUMBER_OF_GAMES, Stat.WIN_RATIO, Stat.HOURLY_DURATION, Stat.AVERAGE_HOURLY_DURATION -> {
val totalStatValue = stat.format(entry.y.toDouble(), currency = null)
DefaultLegendValues(this.entryTitle(context), totalStatValue)
DefaultLegendValues(this.entryTitle(context), totalStatValue, leftName = leftName)
}
else -> {
val entryValue = this.formattedValue(stat)
val totalStatValue = stat.format(entry.y.toDouble(), currency = null)
DefaultLegendValues(this.entryTitle(context), entryValue, totalStatValue)
DefaultLegendValues(this.entryTitle(context), entryValue, totalStatValue, leftName = leftName)
}
}

@ -9,16 +9,17 @@ import androidx.core.view.isVisible
import kotlinx.android.synthetic.main.layout_legend_default.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.util.TextFormat
import net.pokeranalytics.android.ui.extensions.setTextFormat
import net.pokeranalytics.android.ui.fragment.GraphFragment
import net.pokeranalytics.android.util.TextFormat
interface LegendContent
data class DefaultLegendValues(
var title: String,
var leftFormat: TextFormat,
var rightFormat: TextFormat? = null
var rightFormat: TextFormat? = null,
var leftName: String? = null
) : LegendContent
/**
@ -51,7 +52,7 @@ open class LegendView : FrameLayout {
init()
}
open protected fun getResourceLayout(): Int {
protected open fun getResourceLayout(): Int {
return R.layout.layout_legend_default
}
@ -86,7 +87,7 @@ open class LegendView : FrameLayout {
}
counter?.let {
val counterText = "$it ${context.getString(R.string.sessions)}"
val counterText = "$it ${context.getString(R.string.points)}"
this.counter.text = counterText
this.counter.isVisible = stat.graphShouldShowNumberOfSessions
}
@ -110,6 +111,9 @@ open class LegendView : FrameLayout {
content.rightFormat?.let {
this.stat2Value.setTextFormat(it, context)
}
content.leftName?.let { name ->
this.stat1Name.text = name
}
}

@ -8,10 +8,7 @@ import io.realm.kotlin.where
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.realm.Filter
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.model.realm.TournamentFeature
import net.pokeranalytics.android.model.realm.Transaction
import net.pokeranalytics.android.model.realm.*
fun <T : Identifiable> Realm.findById(clazz: Class<T>, id: String) : T? {
return this.where(clazz).equalTo("id", id).findFirst()
@ -38,9 +35,20 @@ inline fun <reified T: NameManageable> Realm.getOrCreate(name: String) : T {
/**
* Returns all entities of the [clazz] sorted with their default sorting
* Set [editableOnly] to true to only receive entities that can be edited
*/
fun < T : RealmModel> Realm.sorted(clazz: Class<T>) : RealmResults<T> {
val items = this.where(clazz).findAll()
fun < T : RealmModel> Realm.sorted(clazz: Class<T>, editableOnly: Boolean = false) : RealmResults<T> {
val query = this.where(clazz)
if (editableOnly) {
when (clazz.kotlin) {
TransactionType::class -> {
query.equalTo("lock", false)
}
}
}
val items = query.findAll()
var sortField = arrayOf("name")
var resultSort = arrayOf(Sort.ASCENDING)
@ -65,8 +73,8 @@ fun < T : RealmModel> Realm.sorted(clazz: Class<T>) : RealmResults<T> {
/**
* Returns all entities of the [C] class sorted with their default sorting
*/
inline fun <reified C : RealmModel> Realm.sorted() : RealmResults<C> {
return this.sorted(C::class.java)
inline fun <reified C : RealmModel> Realm.sorted(editableOnly: Boolean = false) : RealmResults<C> {
return this.sorted(C::class.java, editableOnly)
}
/**

Loading…
Cancel
Save