Compare commits
16 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
b1fce6a99d | 6 years ago |
|
|
7abf6fd268 | 6 years ago |
|
|
7474b33a7e | 6 years ago |
|
|
7653ea86ce | 6 years ago |
|
|
c025f35d43 | 6 years ago |
|
|
e8f83ba08b | 6 years ago |
|
|
8835a7d4d6 | 6 years ago |
|
|
5882fd8cd6 | 6 years ago |
|
|
63d6c9b5b9 | 6 years ago |
|
|
20494c7849 | 6 years ago |
|
|
5689b8dfe4 | 6 years ago |
|
|
a2e9b8309c | 6 years ago |
|
|
ac2000ea8c | 6 years ago |
|
|
86a2f3bb1b | 6 years ago |
|
|
fa5e098b31 | 6 years ago |
|
|
fcb69f5711 | 7 years ago |
@ -1,50 +0,0 @@ |
|||||||
package net.pokeranalytics.android.ui.fragment.components.bottomsheet |
|
||||||
|
|
||||||
import net.pokeranalytics.android.ui.view.RowRepresentable |
|
||||||
|
|
||||||
enum class BottomSheetType { |
|
||||||
NONE, |
|
||||||
LIST, |
|
||||||
LIST_STATIC, |
|
||||||
LIST_GAME, |
|
||||||
DOUBLE_LIST, |
|
||||||
MULTI_SELECTION, |
|
||||||
GRID, |
|
||||||
EDIT_TEXT, |
|
||||||
EDIT_TEXT_MULTI_LINES, |
|
||||||
DOUBLE_EDIT_TEXT, |
|
||||||
NUMERIC_TEXT, |
|
||||||
SUM; |
|
||||||
|
|
||||||
fun newInstance(row: RowRepresentable): BottomSheetFragment { |
|
||||||
return when (this) { |
|
||||||
NONE -> BottomSheetFragment(row) |
|
||||||
LIST -> BottomSheetListFragment(row) |
|
||||||
LIST_STATIC -> BottomSheetStaticListFragment(row) |
|
||||||
LIST_GAME -> BottomSheetListGameFragment(row) |
|
||||||
DOUBLE_LIST -> BottomSheetListGameFragment(row) |
|
||||||
MULTI_SELECTION -> BottomSheetMultiSelectionFragment(row) |
|
||||||
GRID -> BottomSheetTableSizeGridFragment(row) |
|
||||||
EDIT_TEXT -> BottomSheetEditTextFragment(row) |
|
||||||
EDIT_TEXT_MULTI_LINES -> BottomSheetEditTextMultiLinesFragment(row) |
|
||||||
DOUBLE_EDIT_TEXT -> BottomSheetDoubleEditTextFragment(row) |
|
||||||
NUMERIC_TEXT -> BottomSheetNumericTextFragment(row) |
|
||||||
SUM -> BottomSheetSumFragment(row) |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
val validationRequired: Boolean |
|
||||||
get() = when (this) { |
|
||||||
LIST, LIST_GAME, LIST_STATIC, GRID, DOUBLE_LIST -> false |
|
||||||
else -> true |
|
||||||
} |
|
||||||
|
|
||||||
val clearRequired: Boolean |
|
||||||
get() = true |
|
||||||
|
|
||||||
val addRequired: Boolean |
|
||||||
get() = when (this) { |
|
||||||
EDIT_TEXT, NUMERIC_TEXT, DOUBLE_EDIT_TEXT, EDIT_TEXT_MULTI_LINES, GRID, LIST_STATIC, SUM -> false |
|
||||||
else -> true |
|
||||||
} |
|
||||||
} |
|
||||||
@ -0,0 +1,50 @@ |
|||||||
|
package net.pokeranalytics.android.ui.fragment.components.input |
||||||
|
|
||||||
|
import net.pokeranalytics.android.ui.view.RowRepresentable |
||||||
|
|
||||||
|
enum class InputFragmentType { |
||||||
|
NONE, |
||||||
|
LIST, |
||||||
|
LIST_STATIC, |
||||||
|
LIST_GAME, |
||||||
|
DOUBLE_LIST, |
||||||
|
MULTI_SELECTION, |
||||||
|
GRID, |
||||||
|
EDIT_TEXT, |
||||||
|
EDIT_TEXT_MULTI_LINES, |
||||||
|
DOUBLE_EDIT_TEXT, |
||||||
|
NUMERIC_TEXT, |
||||||
|
SUM; |
||||||
|
|
||||||
|
fun newInstance(row: RowRepresentable): InputFragment { |
||||||
|
return when (this) { |
||||||
|
NONE -> InputFragment(row) |
||||||
|
LIST -> InputListFragment(row) |
||||||
|
LIST_STATIC -> InputStaticListFragment(row) |
||||||
|
LIST_GAME -> InputListGameFragment(row) |
||||||
|
DOUBLE_LIST -> InputListGameFragment(row) |
||||||
|
MULTI_SELECTION -> InputMultiSelectionFragment(row) |
||||||
|
GRID -> InputTableSizeGridFragment(row) |
||||||
|
EDIT_TEXT -> InputEditTextFragment(row) |
||||||
|
EDIT_TEXT_MULTI_LINES -> InputEditTextMultiLinesFragment(row) |
||||||
|
DOUBLE_EDIT_TEXT -> InputDoubleEditTextFragment(row) |
||||||
|
NUMERIC_TEXT -> InputNumericTextFragment(row) |
||||||
|
SUM -> InputSumFragment(row) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
val validationRequired: Boolean |
||||||
|
get() = when (this) { |
||||||
|
LIST, LIST_GAME, LIST_STATIC, GRID, DOUBLE_LIST -> false |
||||||
|
else -> true |
||||||
|
} |
||||||
|
|
||||||
|
val clearRequired: Boolean |
||||||
|
get() = true |
||||||
|
|
||||||
|
val addRequired: Boolean |
||||||
|
get() = when (this) { |
||||||
|
EDIT_TEXT, NUMERIC_TEXT, DOUBLE_EDIT_TEXT, EDIT_TEXT_MULTI_LINES, GRID, LIST_STATIC, SUM -> false |
||||||
|
else -> true |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,93 @@ |
|||||||
|
package net.pokeranalytics.android.ui.view |
||||||
|
|
||||||
|
import io.realm.RealmResults |
||||||
|
import net.pokeranalytics.android.exceptions.PokerAnalyticsException |
||||||
|
import net.pokeranalytics.android.exceptions.RowRepresentableEditDescriptorException |
||||||
|
import net.pokeranalytics.android.util.UserDefaults |
||||||
|
import java.util.* |
||||||
|
import kotlin.collections.ArrayList |
||||||
|
|
||||||
|
/** |
||||||
|
* An container class to describe the way an field of an object will be edited |
||||||
|
*/ |
||||||
|
|
||||||
|
enum class RowEditableDescriptorType { |
||||||
|
DATE, |
||||||
|
DATA, |
||||||
|
STATIC, |
||||||
|
DEFAULT |
||||||
|
} |
||||||
|
|
||||||
|
open class RowEditableDescriptor(var defaultValue: Any? = null, |
||||||
|
var hint: Int? = null, |
||||||
|
var inputType: Int? = null) |
||||||
|
|
||||||
|
class DateRowEditableDescriptor(date: Date? = null, |
||||||
|
val minimumDate: Date? = null, |
||||||
|
var onlyDate: Boolean = false, |
||||||
|
var onlyTime: Boolean = false): RowEditableDescriptor(defaultValue = date) { |
||||||
|
val date: Date? |
||||||
|
get() { |
||||||
|
return defaultValue as Date? |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
class DataRowEditableDescriptor( |
||||||
|
defaultValue: Any? = null, |
||||||
|
hint: Int? = null, |
||||||
|
inputType: Int? = null, |
||||||
|
data: RealmResults<*>? = null): RowEditableDescriptor(defaultValue, hint, inputType) { |
||||||
|
|
||||||
|
var data: RealmResults<RowRepresentable>? = null |
||||||
|
|
||||||
|
init { |
||||||
|
if (data != null && data.count() > 0) { |
||||||
|
if (data.first() is RowRepresentable) { |
||||||
|
this.data = data as RealmResults<RowRepresentable>? |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
class StaticDataRowEditableDescriptor( |
||||||
|
defaultValue: Any? = null, |
||||||
|
hint: Int? = null, |
||||||
|
inputType: Int? = null, |
||||||
|
var staticData: List<RowRepresentable>? = null): RowEditableDescriptor(defaultValue, hint, inputType) { |
||||||
|
} |
||||||
|
|
||||||
|
class RowEditableDataSource(customCurrency: Currency? = null) { |
||||||
|
var currency: Currency = UserDefaults.currency |
||||||
|
|
||||||
|
init { |
||||||
|
customCurrency?.let { currency = it } |
||||||
|
} |
||||||
|
|
||||||
|
var descriptors = ArrayList<RowEditableDescriptor>() |
||||||
|
|
||||||
|
fun append(defaultValue: Any? = null, hint: Int? = null, inputType: Int? = null, data: RealmResults<*>? = null, staticData: List<RowRepresentable>? = null) { |
||||||
|
when { |
||||||
|
data != null -> descriptors.add(DataRowEditableDescriptor(defaultValue, hint, inputType, data)) |
||||||
|
staticData != null -> descriptors.add(StaticDataRowEditableDescriptor(defaultValue, hint, inputType, staticData)) |
||||||
|
else -> descriptors.add(RowEditableDescriptor(defaultValue, hint, inputType)) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
fun appendDateDescriptor(date:Date?= null, |
||||||
|
minimumDate: Date? = null, |
||||||
|
onlyDate: Boolean = false, |
||||||
|
onlyTime: Boolean = false) { |
||||||
|
descriptors.add(DateRowEditableDescriptor(date, minimumDate, onlyDate, onlyTime)) |
||||||
|
} |
||||||
|
|
||||||
|
val descriptorType: RowEditableDescriptorType |
||||||
|
get() { |
||||||
|
return when (descriptors.firstOrNull()) { |
||||||
|
null -> throw RowRepresentableEditDescriptorException("RowEditableDescriptor inconsistency") |
||||||
|
is DateRowEditableDescriptor -> RowEditableDescriptorType.DATE |
||||||
|
is DataRowEditableDescriptor -> RowEditableDescriptorType.DATA |
||||||
|
is StaticDataRowEditableDescriptor -> RowEditableDescriptorType.STATIC |
||||||
|
else -> RowEditableDescriptorType.DEFAULT |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -1,14 +0,0 @@ |
|||||||
package net.pokeranalytics.android.ui.view |
|
||||||
|
|
||||||
import io.realm.RealmResults |
|
||||||
|
|
||||||
/** |
|
||||||
* An container class to describe the way an field of an object will be edited |
|
||||||
*/ |
|
||||||
class RowRepresentableEditDescriptor( |
|
||||||
var defaultValue: Any? = null, |
|
||||||
var hint: Int? = null, |
|
||||||
var inputType: Int? = null, |
|
||||||
var data: RealmResults<RowRepresentable>? = null, |
|
||||||
var staticData: List<RowRepresentable>? = null |
|
||||||
) |
|
||||||
@ -1,315 +1,286 @@ |
|||||||
package net.pokeranalytics.android.ui.view.rowrepresentable |
package net.pokeranalytics.android.ui.view.rowrepresentable |
||||||
|
|
||||||
import android.text.InputType |
import android.text.InputType |
||||||
import io.realm.RealmResults |
import android.widget.Toast |
||||||
|
import androidx.fragment.app.Fragment |
||||||
import net.pokeranalytics.android.R |
import net.pokeranalytics.android.R |
||||||
import net.pokeranalytics.android.model.TournamentType |
import net.pokeranalytics.android.model.TournamentType |
||||||
import net.pokeranalytics.android.model.extensions.SessionState |
import net.pokeranalytics.android.model.extensions.SessionState |
||||||
import net.pokeranalytics.android.model.extensions.getState |
import net.pokeranalytics.android.model.extensions.getState |
||||||
import net.pokeranalytics.android.model.realm.Session |
import net.pokeranalytics.android.model.realm.* |
||||||
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType |
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate |
||||||
|
import net.pokeranalytics.android.ui.fragment.components.input.InputFragment |
||||||
|
import net.pokeranalytics.android.ui.fragment.components.input.InputFragmentType |
||||||
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.RowEditableDataSource |
||||||
import net.pokeranalytics.android.ui.view.RowViewType |
import net.pokeranalytics.android.ui.view.RowViewType |
||||||
import net.pokeranalytics.android.util.extensions.round |
import net.pokeranalytics.android.util.extensions.round |
||||||
|
import net.pokeranalytics.android.util.extensions.sorted |
||||||
|
import java.util.* |
||||||
|
|
||||||
|
|
||||||
enum class SessionRow : RowRepresentable { |
enum class SessionRow : RowRepresentable { |
||||||
|
|
||||||
PRIZE, |
PRIZE, |
||||||
CASHED_OUT, |
CASHED_OUT, |
||||||
NET_RESULT, |
NET_RESULT, |
||||||
INITIAL_BUY_IN, |
INITIAL_BUY_IN, |
||||||
BUY_IN, |
BUY_IN, |
||||||
POSITION, |
POSITION, |
||||||
PLAYERS, |
PLAYERS, |
||||||
TIPS, |
TIPS, |
||||||
|
|
||||||
GAME, |
GAME, |
||||||
BLINDS, |
BLINDS, |
||||||
LOCATION, |
LOCATION, |
||||||
BANKROLL, |
BANKROLL, |
||||||
TABLE_SIZE, |
TABLE_SIZE, |
||||||
TOURNAMENT_TYPE, |
TOURNAMENT_TYPE, |
||||||
TOURNAMENT_NAME, |
TOURNAMENT_NAME, |
||||||
TOURNAMENT_FEATURE, |
TOURNAMENT_FEATURE, |
||||||
START_DATE, |
START_DATE, |
||||||
END_DATE, |
END_DATE, |
||||||
|
|
||||||
BREAK_TIME, |
BREAK_TIME, |
||||||
COMMENT; |
COMMENT; |
||||||
|
|
||||||
companion object { |
companion object { |
||||||
/** |
/** |
||||||
* Return the rows to display for the current session state |
* Return the rows to display for the current session state |
||||||
*/ |
*/ |
||||||
fun getRows(session: Session): List<RowRepresentable> { |
fun getRows(session: Session): List<RowRepresentable> { |
||||||
when (session.type) { |
when (session.type) { |
||||||
Session.Type.TOURNAMENT.ordinal -> { |
Session.Type.TOURNAMENT.ordinal -> { |
||||||
return when (session.getState()) { |
return when (session.getState()) { |
||||||
SessionState.PENDING, SessionState.PLANNED -> { |
SessionState.PENDING, SessionState.PLANNED -> { |
||||||
arrayListOf( |
arrayListOf( |
||||||
GAME, |
GAME, |
||||||
INITIAL_BUY_IN, |
INITIAL_BUY_IN, |
||||||
LOCATION, |
LOCATION, |
||||||
BANKROLL, |
BANKROLL, |
||||||
TABLE_SIZE, |
TABLE_SIZE, |
||||||
TOURNAMENT_TYPE, |
TOURNAMENT_TYPE, |
||||||
TOURNAMENT_NAME, |
TOURNAMENT_NAME, |
||||||
TOURNAMENT_FEATURE, |
TOURNAMENT_FEATURE, |
||||||
START_DATE, |
START_DATE, |
||||||
END_DATE |
END_DATE |
||||||
) |
) |
||||||
} |
} |
||||||
SessionState.STARTED, SessionState.PAUSED, SessionState.FINISHED -> { |
SessionState.STARTED, SessionState.PAUSED, SessionState.FINISHED -> { |
||||||
arrayListOf( |
arrayListOf( |
||||||
PRIZE, |
PRIZE, |
||||||
BUY_IN, |
BUY_IN, |
||||||
POSITION, |
POSITION, |
||||||
PLAYERS, |
PLAYERS, |
||||||
TIPS, |
TIPS, |
||||||
COMMENT, |
COMMENT, |
||||||
SeparatorRow(), |
SeparatorRow(), |
||||||
GAME, |
GAME, |
||||||
INITIAL_BUY_IN, |
INITIAL_BUY_IN, |
||||||
LOCATION, |
LOCATION, |
||||||
BANKROLL, |
BANKROLL, |
||||||
TABLE_SIZE, |
TABLE_SIZE, |
||||||
TOURNAMENT_TYPE, |
TOURNAMENT_TYPE, |
||||||
TOURNAMENT_NAME, |
TOURNAMENT_NAME, |
||||||
TOURNAMENT_FEATURE, |
TOURNAMENT_FEATURE, |
||||||
SeparatorRow(), |
SeparatorRow(), |
||||||
START_DATE, |
START_DATE, |
||||||
END_DATE, |
END_DATE, |
||||||
BREAK_TIME |
BREAK_TIME |
||||||
) |
) |
||||||
} |
} |
||||||
} |
} |
||||||
} |
} |
||||||
Session.Type.CASH_GAME.ordinal -> { |
Session.Type.CASH_GAME.ordinal -> { |
||||||
when (session.getState()) { |
when (session.getState()) { |
||||||
SessionState.PENDING, SessionState.PLANNED -> { |
SessionState.PENDING, SessionState.PLANNED -> { |
||||||
return arrayListOf(GAME, BLINDS, LOCATION, BANKROLL, TABLE_SIZE, START_DATE, END_DATE) |
return arrayListOf(GAME, BLINDS, LOCATION, BANKROLL, TABLE_SIZE, START_DATE, END_DATE) |
||||||
} |
} |
||||||
SessionState.STARTED, SessionState.PAUSED, SessionState.FINISHED -> { |
SessionState.STARTED, SessionState.PAUSED, SessionState.FINISHED -> { |
||||||
|
|
||||||
val fields = mutableListOf<RowRepresentable>() |
val fields = mutableListOf<RowRepresentable>() |
||||||
when { |
when { |
||||||
session.hasBuyin -> fields.addAll(listOf(CASHED_OUT, BUY_IN, TIPS)) |
session.hasBuyin -> fields.addAll(listOf(CASHED_OUT, BUY_IN, TIPS)) |
||||||
session.hasNetResult -> fields.add(NET_RESULT) |
session.hasNetResult -> fields.add(NET_RESULT) |
||||||
session.isLive -> fields.addAll(listOf(CASHED_OUT, BUY_IN, TIPS)) |
session.isLive -> fields.addAll(listOf(CASHED_OUT, BUY_IN, TIPS)) |
||||||
else -> fields.add(NET_RESULT) |
else -> fields.add(NET_RESULT) |
||||||
} |
} |
||||||
fields.add(COMMENT) |
fields.add(COMMENT) |
||||||
fields.add(SeparatorRow()) |
fields.add(SeparatorRow()) |
||||||
fields.addAll(listOf( |
fields.addAll( |
||||||
GAME, |
listOf( |
||||||
BLINDS, |
GAME, |
||||||
LOCATION, |
BLINDS, |
||||||
BANKROLL, |
LOCATION, |
||||||
TABLE_SIZE, |
BANKROLL, |
||||||
START_DATE, |
TABLE_SIZE, |
||||||
END_DATE, |
START_DATE, |
||||||
BREAK_TIME |
END_DATE, |
||||||
|
BREAK_TIME |
||||||
|
|
||||||
) |
) |
||||||
) |
) |
||||||
return fields |
return fields |
||||||
} |
} |
||||||
} |
} |
||||||
} |
} |
||||||
} |
} |
||||||
return arrayListOf() |
return arrayListOf() |
||||||
} |
} |
||||||
} |
} |
||||||
|
|
||||||
override val resId: Int? |
override val resId: Int? |
||||||
get() { |
get() { |
||||||
return when (this) { |
return when (this) { |
||||||
NET_RESULT -> R.string.net_result |
NET_RESULT -> R.string.net_result |
||||||
PRIZE -> R.string.prize |
PRIZE -> R.string.prize |
||||||
POSITION -> R.string.position |
POSITION -> R.string.position |
||||||
PLAYERS -> R.string.players |
PLAYERS -> R.string.players |
||||||
CASHED_OUT -> R.string.cashed_out |
CASHED_OUT -> R.string.cashed_out |
||||||
INITIAL_BUY_IN -> R.string.initial_stack |
INITIAL_BUY_IN -> R.string.initial_stack |
||||||
BUY_IN -> R.string.buyin |
BUY_IN -> R.string.buyin |
||||||
TIPS -> R.string.tips |
TIPS -> R.string.tips |
||||||
GAME -> R.string.game |
GAME -> R.string.game |
||||||
BLINDS -> R.string.blinds |
BLINDS -> R.string.blinds |
||||||
LOCATION -> R.string.location |
LOCATION -> R.string.location |
||||||
BANKROLL -> R.string.bankroll |
BANKROLL -> R.string.bankroll |
||||||
TABLE_SIZE -> R.string.table_size |
TABLE_SIZE -> R.string.table_size |
||||||
TOURNAMENT_TYPE -> R.string.tournament_type |
TOURNAMENT_TYPE -> R.string.tournament_type |
||||||
TOURNAMENT_NAME -> R.string.tournament_name |
TOURNAMENT_NAME -> R.string.tournament_name |
||||||
TOURNAMENT_FEATURE -> R.string.tournament_feature |
TOURNAMENT_FEATURE -> R.string.tournament_feature |
||||||
START_DATE -> R.string.start_date |
START_DATE -> R.string.start_date |
||||||
END_DATE -> R.string.end_date |
END_DATE -> R.string.end_date |
||||||
BREAK_TIME -> R.string.break_time |
BREAK_TIME -> R.string.break_time |
||||||
COMMENT -> R.string.comment |
COMMENT -> R.string.comment |
||||||
} |
} |
||||||
} |
} |
||||||
|
|
||||||
override val viewType: Int |
override val viewType: Int |
||||||
get() { |
get() { |
||||||
return when (this) { |
return when (this) { |
||||||
NET_RESULT, PRIZE, POSITION, PLAYERS, CASHED_OUT, INITIAL_BUY_IN, BUY_IN, TIPS, |
NET_RESULT, PRIZE, POSITION, PLAYERS, CASHED_OUT, INITIAL_BUY_IN, BUY_IN, TIPS, |
||||||
GAME, BLINDS, LOCATION, BANKROLL, TABLE_SIZE, COMMENT, |
GAME, BLINDS, LOCATION, BANKROLL, TABLE_SIZE, COMMENT, |
||||||
TOURNAMENT_TYPE, TOURNAMENT_NAME, TOURNAMENT_FEATURE, START_DATE, END_DATE, BREAK_TIME -> RowViewType.TITLE_VALUE.ordinal |
TOURNAMENT_TYPE, TOURNAMENT_NAME, TOURNAMENT_FEATURE, START_DATE, END_DATE, BREAK_TIME -> RowViewType.TITLE_VALUE.ordinal |
||||||
} |
} |
||||||
} |
} |
||||||
|
|
||||||
override val bottomSheetType: BottomSheetType |
override val inputFragmentType: InputFragmentType |
||||||
get() { |
get() { |
||||||
return when (this) { |
return when (this) { |
||||||
NET_RESULT, CASHED_OUT, INITIAL_BUY_IN, BREAK_TIME, POSITION, PLAYERS, PRIZE -> BottomSheetType.NUMERIC_TEXT |
NET_RESULT, CASHED_OUT, INITIAL_BUY_IN, BREAK_TIME, POSITION, PLAYERS, PRIZE -> InputFragmentType.NUMERIC_TEXT |
||||||
BUY_IN, TIPS -> BottomSheetType.SUM |
BUY_IN, TIPS -> InputFragmentType.SUM |
||||||
BLINDS -> BottomSheetType.DOUBLE_EDIT_TEXT |
BLINDS -> InputFragmentType.DOUBLE_EDIT_TEXT |
||||||
GAME -> BottomSheetType.LIST_GAME |
GAME -> InputFragmentType.LIST_GAME |
||||||
TOURNAMENT_TYPE -> BottomSheetType.LIST_STATIC |
TOURNAMENT_TYPE -> InputFragmentType.LIST_STATIC |
||||||
LOCATION, BANKROLL, TOURNAMENT_NAME -> BottomSheetType.LIST |
LOCATION, BANKROLL, TOURNAMENT_NAME -> InputFragmentType.LIST |
||||||
TOURNAMENT_FEATURE -> BottomSheetType.MULTI_SELECTION |
TOURNAMENT_FEATURE -> InputFragmentType.MULTI_SELECTION |
||||||
TABLE_SIZE -> BottomSheetType.GRID |
TABLE_SIZE -> InputFragmentType.GRID |
||||||
COMMENT -> BottomSheetType.EDIT_TEXT_MULTI_LINES |
COMMENT -> InputFragmentType.EDIT_TEXT_MULTI_LINES |
||||||
else -> BottomSheetType.NONE |
else -> InputFragmentType.NONE |
||||||
} |
} |
||||||
} |
} |
||||||
|
|
||||||
|
|
||||||
override fun editingDescriptors(map: Map<String, Any?>): ArrayList<RowRepresentableEditDescriptor>? { |
override fun startEditing(dataSource: Any?, parent: Fragment?) { |
||||||
return when (this) { |
if (dataSource == null) return |
||||||
BLINDS -> { |
if (dataSource !is Session) return |
||||||
val sb: String? by map |
if (parent == null) return |
||||||
val bb: String? by map |
if (parent !is RowRepresentableDelegate) return |
||||||
arrayListOf( |
|
||||||
RowRepresentableEditDescriptor( |
|
||||||
sb, R.string.smallblind, InputType.TYPE_CLASS_NUMBER |
|
||||||
or InputType.TYPE_NUMBER_FLAG_DECIMAL |
|
||||||
), |
|
||||||
RowRepresentableEditDescriptor( |
|
||||||
bb, R.string.bigblind, InputType.TYPE_CLASS_NUMBER |
|
||||||
or InputType.TYPE_NUMBER_FLAG_DECIMAL |
|
||||||
) |
|
||||||
) |
|
||||||
} |
|
||||||
BUY_IN -> { |
|
||||||
val bb: Double? by map |
|
||||||
val fee: Double? by map |
|
||||||
val ratedBuyin: Double? by map |
|
||||||
val data = arrayListOf<RowRepresentableEditDescriptor>() |
|
||||||
if (bb != null) { |
|
||||||
data.add(RowRepresentableEditDescriptor(100.0 * (bb ?: 0.0))) |
|
||||||
data.add(RowRepresentableEditDescriptor(200.0 * (bb ?: 0.0))) |
|
||||||
} else if (fee != null) { |
|
||||||
data.add(RowRepresentableEditDescriptor((fee ?: 0.0) * 1.0)) |
|
||||||
data.add(RowRepresentableEditDescriptor((fee ?: 0.0) * 2.0)) |
|
||||||
} else { |
|
||||||
data.add(RowRepresentableEditDescriptor(0)) |
|
||||||
data.add(RowRepresentableEditDescriptor(0)) |
|
||||||
} |
|
||||||
|
|
||||||
data.add(RowRepresentableEditDescriptor(ratedBuyin)) |
val session: Session = dataSource |
||||||
data.add( |
|
||||||
RowRepresentableEditDescriptor( |
|
||||||
inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL |
|
||||||
) |
|
||||||
) |
|
||||||
data.add( |
|
||||||
RowRepresentableEditDescriptor( |
|
||||||
inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL |
|
||||||
) |
|
||||||
) |
|
||||||
data |
|
||||||
} |
|
||||||
CASHED_OUT, PRIZE, NET_RESULT -> { |
|
||||||
val defaultValue: Double? by map |
|
||||||
arrayListOf( |
|
||||||
RowRepresentableEditDescriptor( |
|
||||||
defaultValue, |
|
||||||
inputType = InputType.TYPE_CLASS_NUMBER |
|
||||||
or InputType.TYPE_NUMBER_FLAG_DECIMAL |
|
||||||
or InputType.TYPE_NUMBER_FLAG_SIGNED |
|
||||||
) |
|
||||||
) |
|
||||||
} |
|
||||||
COMMENT -> { |
|
||||||
val defaultValue: String? by map |
|
||||||
arrayListOf(RowRepresentableEditDescriptor(defaultValue, R.string.comment)) |
|
||||||
} |
|
||||||
BREAK_TIME -> { |
|
||||||
arrayListOf( |
|
||||||
RowRepresentableEditDescriptor( |
|
||||||
hint = R.string.in_minutes, inputType = InputType.TYPE_CLASS_NUMBER |
|
||||||
) |
|
||||||
) |
|
||||||
} |
|
||||||
GAME -> { |
|
||||||
val limit: Int? by map |
|
||||||
val defaultValue: Any? by map |
|
||||||
val data: RealmResults<RowRepresentable>? by map |
|
||||||
arrayListOf( |
|
||||||
RowRepresentableEditDescriptor(limit), |
|
||||||
RowRepresentableEditDescriptor(defaultValue, data = data) |
|
||||||
) |
|
||||||
} |
|
||||||
INITIAL_BUY_IN -> { |
|
||||||
val defaultValue: Double? by map |
|
||||||
arrayListOf( |
|
||||||
RowRepresentableEditDescriptor(defaultValue?.round(), inputType = InputType.TYPE_CLASS_NUMBER) |
|
||||||
) |
|
||||||
} |
|
||||||
BANKROLL, LOCATION, TOURNAMENT_FEATURE, TOURNAMENT_NAME -> { |
|
||||||
val defaultValue: Any? by map |
|
||||||
val data: RealmResults<RowRepresentable>? by map |
|
||||||
arrayListOf( |
|
||||||
RowRepresentableEditDescriptor(defaultValue, data = data) |
|
||||||
) |
|
||||||
} |
|
||||||
PLAYERS -> { |
|
||||||
val defaultValue: Int? by map |
|
||||||
arrayListOf( |
|
||||||
RowRepresentableEditDescriptor( |
|
||||||
defaultValue?.toString(), |
|
||||||
inputType = InputType.TYPE_CLASS_NUMBER |
|
||||||
) |
|
||||||
) |
|
||||||
} |
|
||||||
POSITION -> { |
|
||||||
val defaultValue: Int? by map |
|
||||||
arrayListOf( |
|
||||||
RowRepresentableEditDescriptor( |
|
||||||
defaultValue, |
|
||||||
inputType = InputType.TYPE_CLASS_NUMBER |
|
||||||
) |
|
||||||
) |
|
||||||
} |
|
||||||
TABLE_SIZE -> { |
|
||||||
val defaultValue: Int? by map |
|
||||||
arrayListOf(RowRepresentableEditDescriptor(defaultValue)) |
|
||||||
} |
|
||||||
TIPS -> { |
|
||||||
val sb: String? by map |
|
||||||
val bb: String? by map |
|
||||||
val tips: Double? by map |
|
||||||
|
|
||||||
// Disable the buttons with value = 0, add current value & set the 2 edit texts |
val data = RowEditableDataSource(session.currency) |
||||||
arrayListOf( |
when (this) { |
||||||
RowRepresentableEditDescriptor(sb ?: 0.0), |
START_DATE -> { |
||||||
RowRepresentableEditDescriptor(bb ?: 0.0), |
data.appendDateDescriptor(session.startDate) |
||||||
RowRepresentableEditDescriptor(tips ?: 0.0), |
} |
||||||
RowRepresentableEditDescriptor("", inputType = InputType.TYPE_CLASS_NUMBER), |
END_DATE -> { |
||||||
RowRepresentableEditDescriptor("", inputType = InputType.TYPE_CLASS_NUMBER) |
if (session.startDate == null) { |
||||||
) |
Toast.makeText(parent.context, R.string.session_missing_start_date, Toast.LENGTH_SHORT).show() |
||||||
} |
return |
||||||
TOURNAMENT_TYPE -> { |
} else { |
||||||
val defaultValue: Any? by map |
data.appendDateDescriptor(session.endDate ?: session.startDate ?: Date(), session.startDate) |
||||||
arrayListOf( |
} |
||||||
RowRepresentableEditDescriptor(defaultValue, staticData = TournamentType.values().map { |
} |
||||||
it |
|
||||||
}) |
|
||||||
) |
|
||||||
} |
|
||||||
else -> null |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
BANKROLL -> data.append(session.bankroll, data = session.realm.sorted<Bankroll>()) |
||||||
|
CASHED_OUT, PRIZE -> data.append( |
||||||
|
session.result?.cashout, |
||||||
|
inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL or InputType.TYPE_NUMBER_FLAG_SIGNED |
||||||
|
) |
||||||
|
NET_RESULT -> data.append( |
||||||
|
session.result?.netResult, |
||||||
|
inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL or InputType.TYPE_NUMBER_FLAG_SIGNED |
||||||
|
) |
||||||
|
INITIAL_BUY_IN -> data.append(session.tournamentEntryFee?.round(), inputType = InputType.TYPE_CLASS_NUMBER) |
||||||
|
BUY_IN -> { |
||||||
|
val bb: Double? = session.cgBigBlind |
||||||
|
val fee: Double? = session.tournamentEntryFee |
||||||
|
val ratedBuyin: Double? = session.result?.buyin |
||||||
|
if (bb != null) { |
||||||
|
data.append(100.0 * bb) |
||||||
|
data.append(200.0 * bb) |
||||||
|
} else if (fee != null) { |
||||||
|
data.append(fee) |
||||||
|
data.append(fee * 2.0) |
||||||
|
} else { |
||||||
|
data.append(0) |
||||||
|
data.append(0) |
||||||
|
} |
||||||
|
data.append(ratedBuyin) |
||||||
|
data.append(inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL) |
||||||
|
data.append(inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL) |
||||||
|
} |
||||||
|
POSITION -> data.append(session.result?.tournamentFinalPosition, inputType = InputType.TYPE_CLASS_NUMBER) |
||||||
|
PLAYERS -> data.append( |
||||||
|
session.tournamentNumberOfPlayers.toString(), |
||||||
|
inputType = InputType.TYPE_CLASS_NUMBER |
||||||
|
) |
||||||
|
TIPS -> { |
||||||
|
val sb: String? = session.cgSmallBlind?.round() |
||||||
|
val bb: String? = session.cgBigBlind?.round() |
||||||
|
val tips: Double? = session.result?.tips |
||||||
|
data.append(sb ?: 0.0) |
||||||
|
data.append(bb ?: 0.0) |
||||||
|
data.append(tips ?: 0.0) |
||||||
|
data.append("", inputType = InputType.TYPE_CLASS_NUMBER) |
||||||
|
data.append("", inputType = InputType.TYPE_CLASS_NUMBER) |
||||||
|
} |
||||||
|
GAME -> { |
||||||
|
data.append(session.limit) |
||||||
|
data.append(session.game, data = session.realm.sorted<Game>()) |
||||||
|
} |
||||||
|
BLINDS -> { |
||||||
|
data.append( |
||||||
|
session.cgSmallBlind?.round(), |
||||||
|
R.string.smallblind, |
||||||
|
InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL |
||||||
|
) |
||||||
|
data.append( |
||||||
|
session.cgBigBlind?.round(), |
||||||
|
R.string.bigblind, |
||||||
|
InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL |
||||||
|
) |
||||||
|
} |
||||||
|
LOCATION -> data.append(session.location, data = session.realm.sorted<Location>()) |
||||||
|
TABLE_SIZE -> data.append(session.tableSize) |
||||||
|
TOURNAMENT_TYPE -> data.append(session.tournamentType, staticData = TournamentType.values().map { it }) |
||||||
|
TOURNAMENT_NAME -> data.append(session.tournamentName, data = session.realm.sorted<TournamentName>()) |
||||||
|
TOURNAMENT_FEATURE -> data.append( |
||||||
|
session.tournamentFeatures, |
||||||
|
data = session.realm.sorted<TournamentFeature>() |
||||||
|
) |
||||||
|
BREAK_TIME -> data.append(hint = R.string.in_minutes, inputType = InputType.TYPE_CLASS_NUMBER) |
||||||
|
COMMENT -> data.append(session.comment, R.string.comment) |
||||||
|
} |
||||||
|
InputFragment.buildAndShow(this, parent, data) |
||||||
|
} |
||||||
|
|
||||||
|
override val valueCanBeClearedWhenEditing: Boolean |
||||||
|
get() { |
||||||
|
return when (this) { |
||||||
|
BANKROLL -> false |
||||||
|
else -> true |
||||||
|
} |
||||||
|
} |
||||||
} |
} |
||||||
@ -1,16 +1,15 @@ |
|||||||
package net.pokeranalytics.android.ui.view.rowrepresentable |
package net.pokeranalytics.android.ui.view.rowrepresentable |
||||||
|
|
||||||
import net.pokeranalytics.android.R |
import net.pokeranalytics.android.R |
||||||
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType |
import net.pokeranalytics.android.ui.fragment.components.input.InputFragmentType |
||||||
import net.pokeranalytics.android.ui.view.DefaultEditDataSource |
|
||||||
import net.pokeranalytics.android.ui.view.RowRepresentable |
import net.pokeranalytics.android.ui.view.RowRepresentable |
||||||
import net.pokeranalytics.android.ui.view.RowViewType |
import net.pokeranalytics.android.ui.view.RowViewType |
||||||
|
|
||||||
|
|
||||||
enum class SimpleRow : RowRepresentable, DefaultEditDataSource { |
enum class SimpleRow : RowRepresentable { |
||||||
NAME; |
NAME; |
||||||
|
|
||||||
override val resId: Int? = R.string.name |
override val resId: Int? = R.string.name |
||||||
override val viewType: Int = RowViewType.TITLE_VALUE.ordinal |
override val viewType: Int = RowViewType.TITLE_VALUE.ordinal |
||||||
override val bottomSheetType: BottomSheetType = BottomSheetType.EDIT_TEXT |
override val inputFragmentType: InputFragmentType = InputFragmentType.EDIT_TEXT |
||||||
} |
} |
||||||
@ -1,6 +1,49 @@ |
|||||||
package net.pokeranalytics.android.ui.view.rowrepresentable |
package net.pokeranalytics.android.ui.view.rowrepresentable |
||||||
|
|
||||||
import net.pokeranalytics.android.ui.view.DefaultEditDataSource |
import androidx.fragment.app.Fragment |
||||||
|
import net.pokeranalytics.android.R |
||||||
|
import net.pokeranalytics.android.model.realm.TournamentFeature |
||||||
|
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate |
||||||
|
import net.pokeranalytics.android.ui.fragment.components.input.InputFragment |
||||||
|
import net.pokeranalytics.android.ui.fragment.components.input.InputFragmentType |
||||||
import net.pokeranalytics.android.ui.view.RowRepresentable |
import net.pokeranalytics.android.ui.view.RowRepresentable |
||||||
|
import net.pokeranalytics.android.ui.view.RowEditableDataSource |
||||||
|
import net.pokeranalytics.android.ui.view.RowViewType |
||||||
|
|
||||||
enum class TournamentFeatureRow : RowRepresentable, DefaultEditDataSource |
enum class TournamentFeatureRow : RowRepresentable { |
||||||
|
NAME; |
||||||
|
|
||||||
|
override val resId: Int? |
||||||
|
get() { |
||||||
|
return when (this) { |
||||||
|
NAME -> R.string.name |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
override val viewType: Int |
||||||
|
get() { |
||||||
|
return when (this) { |
||||||
|
NAME -> RowViewType.TITLE_VALUE.ordinal |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
override val inputFragmentType: InputFragmentType |
||||||
|
get() { |
||||||
|
return when (this) { |
||||||
|
NAME -> InputFragmentType.EDIT_TEXT |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
override fun startEditing(dataSource: Any?, parent: Fragment?) { |
||||||
|
if (dataSource == null) return |
||||||
|
if (dataSource !is TournamentFeature) return |
||||||
|
if (parent == null) return |
||||||
|
if (parent !is RowRepresentableDelegate) return |
||||||
|
val data = RowEditableDataSource() |
||||||
|
when (this) { |
||||||
|
NAME -> data.append(dataSource.name) |
||||||
|
} |
||||||
|
InputFragment.buildAndShow(this, parent, data) |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|||||||
@ -1,6 +1,49 @@ |
|||||||
package net.pokeranalytics.android.ui.view.rowrepresentable |
package net.pokeranalytics.android.ui.view.rowrepresentable |
||||||
|
|
||||||
import net.pokeranalytics.android.ui.view.DefaultEditDataSource |
import androidx.fragment.app.Fragment |
||||||
|
import net.pokeranalytics.android.R |
||||||
|
import net.pokeranalytics.android.model.realm.TournamentName |
||||||
|
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate |
||||||
|
import net.pokeranalytics.android.ui.fragment.components.input.InputFragment |
||||||
|
import net.pokeranalytics.android.ui.fragment.components.input.InputFragmentType |
||||||
import net.pokeranalytics.android.ui.view.RowRepresentable |
import net.pokeranalytics.android.ui.view.RowRepresentable |
||||||
|
import net.pokeranalytics.android.ui.view.RowEditableDataSource |
||||||
|
import net.pokeranalytics.android.ui.view.RowViewType |
||||||
|
|
||||||
enum class TournamentNameRow : RowRepresentable, DefaultEditDataSource |
enum class TournamentNameRow : RowRepresentable { |
||||||
|
NAME; |
||||||
|
|
||||||
|
override val resId: Int? |
||||||
|
get() { |
||||||
|
return when (this) { |
||||||
|
NAME -> R.string.name |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
override val viewType: Int |
||||||
|
get() { |
||||||
|
return when (this) { |
||||||
|
NAME -> RowViewType.TITLE_VALUE.ordinal |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
override val inputFragmentType: InputFragmentType |
||||||
|
get() { |
||||||
|
return when (this) { |
||||||
|
NAME -> InputFragmentType.EDIT_TEXT |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
override fun startEditing(dataSource: Any?, parent: Fragment?) { |
||||||
|
if (dataSource == null) return |
||||||
|
if (dataSource !is TournamentName) return |
||||||
|
if (parent == null) return |
||||||
|
if (parent !is RowRepresentableDelegate) return |
||||||
|
val data = RowEditableDataSource() |
||||||
|
when (this) { |
||||||
|
NAME -> data.append(dataSource.name) |
||||||
|
} |
||||||
|
InputFragment.buildAndShow(this, parent, data) |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -1,36 +0,0 @@ |
|||||||
package net.pokeranalytics.android.util |
|
||||||
|
|
||||||
import android.content.Context |
|
||||||
import java.util.* |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class LocaleUtils { |
|
||||||
|
|
||||||
companion object { |
|
||||||
|
|
||||||
/** |
|
||||||
* Return the current locale |
|
||||||
*/ |
|
||||||
fun getCurrentLocale(context: Context) : Locale { |
|
||||||
val defaultLocaleCode = Preferences.getString(Preferences.Keys.LOCALE_CODE, context) |
|
||||||
var locale = Locale.getDefault() |
|
||||||
if (defaultLocaleCode != null) { |
|
||||||
locale = Locale(defaultLocaleCode) |
|
||||||
Locale.setDefault(locale) |
|
||||||
} |
|
||||||
return locale |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* |
|
||||||
*/ |
|
||||||
fun setCurrentLocale(context: Context, language: String) { |
|
||||||
Preferences.setString(Preferences.Keys.LOCALE_CODE, language, context) |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
Loading…
Reference in new issue