Start working on bankroll data fragment

feature/top10
Aurelien Hubert 7 years ago
parent 1fdd11ad8d
commit b7aa27cada
  1. 9
      app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt
  2. 2
      app/src/main/java/net/pokeranalytics/android/ui/activity/EditableDataActivity.kt
  3. 150
      app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt
  4. 19
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/BankrollRow.kt

@ -9,14 +9,15 @@ import net.pokeranalytics.android.model.interfaces.Manageable
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rowrepresentable.BankrollRow import net.pokeranalytics.android.ui.view.rowrepresentable.BankrollRow
import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import net.pokeranalytics.android.util.NULL_TEXT import net.pokeranalytics.android.util.NULL_TEXT
import java.util.* import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
open class Bankroll(name: String = "") : RealmObject(), Manageable, open class Bankroll(name: String = "") : RealmObject(), Manageable, StaticRowRepresentableDataSource, RowRepresentable {
StaticRowRepresentableDataSource, RowRepresentable {
companion object { companion object {
fun newInstance() : Bankroll { fun newInstance() : Bankroll {
@ -27,7 +28,9 @@ open class Bankroll(name: String = "") : RealmObject(), Manageable,
val rowRepresentation : List<RowRepresentable> by lazy { val rowRepresentation : List<RowRepresentable> by lazy {
val rows = ArrayList<RowRepresentable>() val rows = ArrayList<RowRepresentable>()
rows.add(SimpleRow.NAME) rows.add(SimpleRow.NAME)
rows.addAll(BankrollRow.values()) rows.add(BankrollRow.LIVE)
rows.add(CustomizableRowRepresentable(customViewType = RowViewType.HEADER_TITLE, resId = R.string.currency))
rows.add(BankrollRow.CURRENCY)
rows rows
} }
} }

@ -7,6 +7,7 @@ import androidx.fragment.app.Fragment
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.fragment.BankrollDataFragment
import net.pokeranalytics.android.ui.fragment.EditableDataFragment import net.pokeranalytics.android.ui.fragment.EditableDataFragment
import net.pokeranalytics.android.ui.fragment.LocationDataFragment import net.pokeranalytics.android.ui.fragment.LocationDataFragment
@ -60,6 +61,7 @@ class EditableDataActivity : PokerAnalyticsActivity() {
val fragmentManager = supportFragmentManager val fragmentManager = supportFragmentManager
val fragmentTransaction = fragmentManager.beginTransaction() val fragmentTransaction = fragmentManager.beginTransaction()
val fragment: EditableDataFragment = when (dataType) { val fragment: EditableDataFragment = when (dataType) {
LiveData.BANKROLL.ordinal -> BankrollDataFragment()
LiveData.LOCATION.ordinal -> LocationDataFragment() LiveData.LOCATION.ordinal -> LocationDataFragment()
else -> EditableDataFragment() else -> EditableDataFragment()
} }

@ -0,0 +1,150 @@
package net.pokeranalytics.android.ui.fragment
import android.os.Bundle
import android.view.View
import io.realm.kotlin.where
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.Bankroll
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
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.ui.view.rowrepresentable.BankrollRow
import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import net.pokeranalytics.android.util.NULL_TEXT
import net.pokeranalytics.android.util.Preferences
import net.pokeranalytics.android.util.extensions.round
import java.util.*
/**
* Custom EditableDataFragment to manage the Bankroll data
*/
class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataSource {
// Return the item as a Bankroll object
private val bankroll: Bankroll
get() {
return this.item as Bankroll
}
private lateinit var defaultCurrency: Currency
val rows = ArrayList<RowRepresentable>()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
shouldOpenKeyboard = false
initData()
refreshRows()
updateAdapterUI()
}
override fun getDataSource(): RowRepresentableDataSource {
return this
}
override fun adapterRows(): List<RowRepresentable>? {
return rows
}
override fun stringForRow(row: RowRepresentable): String {
return when (row) {
SimpleRow.NAME -> if (bankroll.name.isNotEmpty()) bankroll.name else NULL_TEXT
BankrollRow.CURRENCY -> {
bankroll.currency?.let {
Currency.getInstance(it.code).currencyCode
} ?: run {
NULL_TEXT
}
}
BankrollRow.RATE -> {
bankroll.currency?.let {
(it.rate ?: 1.0).round()
} ?: run {
1.0.round()
}
}
else -> super.stringForRow(row)
}
}
override fun editDescriptors(row: RowRepresentable): ArrayList<RowRepresentableEditDescriptor>? {
return when (row) {
SimpleRow.NAME -> row.editingDescriptors(mapOf("defaultValue" to this.bankroll.name))
BankrollRow.RATE -> {
row.editingDescriptors(mapOf("defaultValue" to (this.bankroll.currency?.rate ?: 1.0).round()))
}
else -> null
}
}
override fun boolForRow(row: RowRepresentable): Boolean {
return super.boolForRow(row)
}
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
super.onRowSelected(position, row, fromAction)
}
override fun onRowValueChanged(value: Any?, row: RowRepresentable) {
super.onRowValueChanged(value, row)
}
private fun initData() {
defaultCurrency = Currency.getInstance(Preferences.getCurrencyLocale(this.parentActivity))
if (bankroll.currency == null) {
val realm = getRealm()
val currency = realm.where<net.pokeranalytics.android.model.realm.Currency>().equalTo("code", defaultCurrency.currencyCode).findFirst()
bankroll.currency = currency
}
}
/**
* Refresh rows
*/
private fun refreshRows() {
rows.clear()
rows.add(SimpleRow.NAME)
rows.add(BankrollRow.LIVE)
rows.add(CustomizableRowRepresentable(customViewType = RowViewType.HEADER_TITLE, resId = R.string.currency))
rows.add(BankrollRow.CURRENCY)
val defaultCurrency = Currency.getInstance(Preferences.getCurrencyLocale(this.parentActivity))
var differentCurrency = false
bankroll.currency?.let {bankrollCurrency ->
differentCurrency = bankrollCurrency.code != defaultCurrency.currencyCode
}
differentCurrency = true
if (differentCurrency) {
rows.add(BankrollRow.RATE)
rows.add(BankrollRow.REFRESH_RATE)
}
}
/**
* Update UI adapter
*/
private fun updateAdapterUI() {
val currentRowsSize = rows.size
refreshRows()
val newRowsSize = rows.size
if (currentRowsSize < newRowsSize) {
rowRepresentableAdapter.notifyItemRangeInserted(currentRowsSize, newRowsSize - currentRowsSize)
} else {
rowRepresentableAdapter.notifyItemRangeRemoved(newRowsSize, currentRowsSize - newRowsSize)
}
}
}

@ -4,16 +4,23 @@ import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.view.DefaultEditable import net.pokeranalytics.android.ui.view.DefaultEditable
import net.pokeranalytics.android.ui.view.RowRepresentable 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.ui.view.RowViewType
enum class BankrollRow : RowRepresentable, DefaultEditable { enum class BankrollRow : RowRepresentable, DefaultEditable {
LIVE; LIVE,
CURRENCY,
RATE,
REFRESH_RATE;
override val resId: Int? override val resId: Int?
get() { get() {
return when (this) { return when (this) {
LIVE -> R.string.online LIVE -> R.string.online
CURRENCY -> R.string.currency
RATE -> R.string.rate
REFRESH_RATE -> R.string.refresh_rate
} }
} }
@ -21,6 +28,9 @@ enum class BankrollRow : RowRepresentable, DefaultEditable {
get() { get() {
return when (this) { return when (this) {
LIVE -> RowViewType.TITLE_SWITCH.ordinal LIVE -> RowViewType.TITLE_SWITCH.ordinal
CURRENCY -> RowViewType.TITLE_VALUE_ARROW.ordinal
RATE -> RowViewType.TITLE_VALUE.ordinal
REFRESH_RATE -> RowViewType.ROW_BUTTON.ordinal
} }
} }
@ -28,7 +38,14 @@ enum class BankrollRow : RowRepresentable, DefaultEditable {
get() { get() {
return when (this) { return when (this) {
LIVE -> BottomSheetType.NONE LIVE -> BottomSheetType.NONE
CURRENCY -> BottomSheetType.NONE
RATE -> BottomSheetType.EDIT_TEXT
REFRESH_RATE -> BottomSheetType.NONE
} }
} }
override fun editingDescriptors(map: Map<String, Any?>): ArrayList<RowRepresentableEditDescriptor>? {
return super<RowRepresentable>.editingDescriptors(map)
}
} }
Loading…
Cancel
Save