parent
1fdd11ad8d
commit
b7aa27cada
@ -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) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
Loading…
Reference in new issue