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