wip refactoring editDescriptor

dev^2
Razmig Sarkissian 6 years ago
parent 20494c7849
commit 63d6c9b5b9
  1. 1
      app/src/main/java/net/pokeranalytics/android/exceptions/Exceptions.kt
  2. 8
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  3. 24
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt
  4. 37
      app/src/main/java/net/pokeranalytics/android/ui/helpers/DateTimePickerManager.kt
  5. 6
      app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt
  6. 13
      app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentableEditDescriptor.kt
  7. 99
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SessionRow.kt

@ -21,6 +21,7 @@ sealed class PokerAnalyticsException(message: String) : Exception(message) {
object QueryTypeUnhandled: PokerAnalyticsException(message = "queryWith type not handled")
object QueryValueMapUnexpectedValue: PokerAnalyticsException(message = "valueMap null not expected")
object FilterElementExpectedValueMissing : PokerAnalyticsException(message = "queryWith is empty or null")
object BottomSheetException : PokerAnalyticsException(message = "Issue when creating a bottomsheet")
data class FilterElementTypeMissing(val filterElementRow: FilterElementRow) : PokerAnalyticsException(message = "queryWith element '$filterElementRow' type is missing")
data class QueryValueMapMissingKeys(val missingKeys: List<String>) : PokerAnalyticsException(message = "valueMap does not contain $missingKeys")
data class UnknownQueryTypeForRow(val filterElementRow: FilterElementRow) : PokerAnalyticsException(message = "no queryWith type for $filterElementRow")

@ -872,17 +872,11 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
"defaultValue" to this.tournamentType
)
)
SessionRow.TABLE_SIZE -> row.editingDescriptors(
SessionRow.TABLE_SIZE -> row.editingDescriptors(
mapOf(
"defaultValue" to this.tableSize
)
)
SessionRow.BLINDS -> row.editingDescriptors(
mapOf(
"sb" to cgSmallBlind?.round(),
"bb" to cgBigBlind?.round()
)
)
SessionRow.BUY_IN -> row.editingDescriptors(
mapOf(
"bb" to cgBigBlind,

@ -10,17 +10,20 @@ import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import androidx.appcompat.view.ContextThemeWrapper
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import io.realm.RealmModel
import kotlinx.android.synthetic.main.fragment_bottom_sheet.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.exceptions.PokerAnalyticsException
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditData
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.rowrepresentable.SessionRow
import net.pokeranalytics.android.ui.view.rowrepresentable.TransactionRow
@ -62,6 +65,27 @@ open class BottomSheetFragment(val row: RowRepresentable) : BottomSheetDialogFra
bottomSheetFragment.currentCurrency = currentCurrency
return bottomSheetFragment
}
fun newCreate(
row: RowRepresentable,
delegate: RowRepresentableDelegate,
dataSource: RowRepresentableEditData?,
isDeletable: Boolean? = false,
valueHasPlaceholder: Boolean? = null
): BottomSheetFragment {
if (delegate !is Fragment) throw PokerAnalyticsException.BottomSheetException
val bottomSheetFragment = row.bottomSheetType.newInstance(row)
bottomSheetFragment.show(delegate.fragmentManager, "bottomSheet")
bottomSheetFragment.delegate = delegate
bottomSheetFragment.rowRepresentableEditDescriptors = dataSource?.descriptors
bottomSheetFragment.isClearable = row.valueCanBeClearedWhenEditing
bottomSheetFragment.isDeletable = isDeletable ?: true
bottomSheetFragment.valueHasPlaceholder = valueHasPlaceholder ?: true
bottomSheetFragment.currentCurrency = dataSource?.currency
return bottomSheetFragment
}
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {

@ -59,7 +59,42 @@ class DateTimePickerManager : DatePickerDialog.OnDateSetListener,
return dateTimePickerManager
}
}
fun newCreate(
context: Context,
row: RowRepresentable,
delegate: RowRepresentableDelegate,
date: Date?,
minimumDate: Date? = null,
onlyDate: Boolean? = false,
onlyTime: Boolean? = false,
isClearable: Boolean? = true
): DateTimePickerManager {
val calendar = Calendar.getInstance()
calendar.time = date ?: Date()
val dateTimePickerManager = DateTimePickerManager()
dateTimePickerManager.context = context
dateTimePickerManager.row = row
dateTimePickerManager.delegate = delegate
dateTimePickerManager.calendar = calendar
dateTimePickerManager.minimumDate = minimumDate
dateTimePickerManager.onlyDate = onlyDate ?: false
dateTimePickerManager.onlyTime = onlyTime ?: false
dateTimePickerManager.isClearable = isClearable ?: true
if (dateTimePickerManager.onlyTime) {
dateTimePickerManager.showTimePicker()
} else {
dateTimePickerManager.showDatePicker()
}
return dateTimePickerManager
}
}
override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
calendar.set(Calendar.YEAR, year)

@ -22,8 +22,10 @@ interface EditDataSource {
return null
}
fun startEditing(dataSource:Any?, parent:Fragment?) {
}
fun startEditing(dataSource:Any?, parent:Fragment?) {}
val valueCanBeClearedWhenEditing: Boolean
get() { return true }
}
interface DefaultEditDataSource : EditDataSource, Localizable {

@ -1,6 +1,9 @@
package net.pokeranalytics.android.ui.view
import io.realm.RealmResults
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
@ -11,4 +14,12 @@ class RowRepresentableEditDescriptor(
var inputType: Int? = null,
var data: RealmResults<RowRepresentable>? = null,
var staticData: List<RowRepresentable>? = null
)
)
class RowRepresentableEditData(val currency: Currency = UserDefaults.currency) {
var descriptors = ArrayList<RowRepresentableEditDescriptor>()
fun append(defaultValue: Any? = null, hint: Int? = null, inputType: Int? = null, data: RealmResults<RowRepresentable>? = null, staticData: List<RowRepresentable>? = null) {
descriptors.add(RowRepresentableEditDescriptor(defaultValue, hint, inputType, data, staticData))
}
}

@ -8,13 +8,13 @@ import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.TournamentType
import net.pokeranalytics.android.model.extensions.SessionState
import net.pokeranalytics.android.model.extensions.getState
import net.pokeranalytics.android.model.realm.Bankroll
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.model.realm.*
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetFragment
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.helpers.DateTimePickerManager
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditData
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.util.extensions.round
@ -193,7 +193,6 @@ enum class SessionRow : RowRepresentable {
when (this) {
START_DATE -> DateTimePickerManager.create(parent.requireContext(), this, parent, dataSource.startDate)
END_DATE -> {
if (dataSource.startDate == null) {
Toast.makeText(parent.context, R.string.session_missing_start_date, Toast.LENGTH_SHORT).show()
} else {
@ -205,30 +204,74 @@ enum class SessionRow : RowRepresentable {
dataSource.startDate
)
}
}
BANKROLL -> {
BottomSheetFragment.create(parent.fragmentManager, this, parent, this.editingData(dataSource), false, dataSource.currency)
}
else -> BottomSheetFragment.create(
parent.fragmentManager,
this,
parent,
this.editingData(dataSource),
currentCurrency = dataSource.currency
)
else -> BottomSheetFragment.newCreate(this, parent, this.editingData(dataSource))
}
}
private fun editingData(session:Session): ArrayList<RowRepresentableEditDescriptor>? {
return when (this) {
BANKROLL -> {
arrayListOf(
RowRepresentableEditDescriptor(session.bankroll, data = session.realm.sorted<Bankroll>() as RealmResults<RowRepresentable>)
)
override val valueCanBeClearedWhenEditing: Boolean
get() {
return when (this) {
BANKROLL -> false
else -> true
}
}
private fun editingData(session:Session): RowRepresentableEditData? {
val data = RowRepresentableEditData(session.currency)
when (this) {
BANKROLL -> data.append(session.bankroll, data = session.realm.sorted<Bankroll>() as RealmResults<RowRepresentable>)
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)
}
else -> null
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>() as RealmResults<RowRepresentable>)
}
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>() as RealmResults<RowRepresentable>)
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>() as RealmResults<RowRepresentable>)
TOURNAMENT_FEATURE -> data.append(session.tournamentFeatures, data = session.realm.sorted<TournamentFeature>() as RealmResults<RowRepresentable>)
BREAK_TIME -> data.append(hint = R.string.in_minutes, inputType = InputType.TYPE_CLASS_NUMBER)
COMMENT -> data.append(session.comment, R.string.comment)
else -> {}
}
return data
}
@ -343,20 +386,6 @@ enum class SessionRow : RowRepresentable {
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
arrayListOf(
RowRepresentableEditDescriptor(sb ?: 0.0),
RowRepresentableEditDescriptor(bb ?: 0.0),
RowRepresentableEditDescriptor(tips ?: 0.0),
RowRepresentableEditDescriptor("", inputType = InputType.TYPE_CLASS_NUMBER),
RowRepresentableEditDescriptor("", inputType = InputType.TYPE_CLASS_NUMBER)
)
}
TOURNAMENT_TYPE -> {
val defaultValue: Any? by map
arrayListOf(

Loading…
Cancel
Save