Refactoring of bottom sheet to introduce the use of a ViewModel

od
Laurent 6 years ago
parent daf567e716
commit ea99385835
  1. 57
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt
  2. 33
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt
  3. 20
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextMultiLinesFragment.kt
  4. 128
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt
  5. 50
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt
  6. 42
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListGameFragment.kt
  7. 36
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetMultiSelectionFragment.kt
  8. 25
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetNumericTextFragment.kt
  9. 32
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetStaticListFragment.kt
  10. 53
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetSumFragment.kt
  11. 30
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt
  12. 251
      app/src/main/java/net/pokeranalytics/android/ui/viewmodel/BottomSheetViewModel.kt

@ -10,15 +10,11 @@ import kotlinx.android.synthetic.main.bottom_sheet_double_edit_text.*
import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.RowRepresentableEditDescriptorException
import net.pokeranalytics.android.ui.view.rowrepresentable.SessionRow
import net.pokeranalytics.android.util.extensions.round
class BottomSheetDoubleEditTextFragment : BottomSheetFragment() {
private val values = ArrayList<String>()
private var isEditingBlinds: Boolean = false
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initData()
@ -27,66 +23,72 @@ class BottomSheetDoubleEditTextFragment : BottomSheetFragment() {
override fun onStart() {
super.onStart()
if (isEditingBlinds) {
if (this.viewModel.isEditingBlinds) {
editText2.requestFocus()
} else {
editText.requestFocus()
}
}
override fun getValue(): Any? {
if (values.isEmpty()) { return null }
if (values.all { it.isEmpty() }) { return null }
return values
}
/**
* Init data
*/
private fun initData() {
isEditingBlinds = row == SessionRow.BLINDS
// this.viewModel.isEditingBlinds = this.viewModel.row == SessionRow.BLINDS
}
/**
* Init UI
*/
private fun initUI() {
val data = getData()?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
val data = getDescriptors()?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
if (data.size != 2) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
values.add(0, "")
values.add(1, "")
// values.add(0, "")
// values.add(1, "")
LayoutInflater.from(requireContext())
.inflate(R.layout.bottom_sheet_double_edit_text, view?.bottomSheetContainer, true)
values[0] = (data[0].defaultValue ?: "").toString()
values[1] = (data[1].defaultValue ?: "").toString()
// values[0] = (data[0].defaultValue ?: "").toString()
// values[1] = (data[1].defaultValue ?: "").toString()
data[0].hint?.let { editText.hint = getString(it) }
editText.inputType = data[0].inputType ?: InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_SENTENCES
data[1].hint?.let { editText2.hint = getString(it) }
editText2.inputType = data[1].inputType ?: InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_SENTENCES
if (valueHasPlaceholder) {
if (values[0].isNotBlank()) { editText.hint = values[0] }
if (values[1].isNotBlank()) { editText2.hint = values[1] }
if (this.viewModel.valueAsPlaceholder) {
this.viewModel.stringValue?.let {
if (it.isNotBlank()) {
editText.hint = it
}
}
this.viewModel.secondStringValue?.let {
if (it.isNotBlank()) {
editText2.hint = it
}
}
// if (this.viewModel.stringValue?.isNotBlank()) { editText.hint = values[0] }
// if (values[1].isNotBlank()) { editText2.hint = values[1] }
} else {
editText.setText(values[0])
editText2.setText(values[1])
editText.setText(this.viewModel.stringValue)
editText2.setText(this.viewModel.secondStringValue)
}
editText.addTextChangedListener {
values[0] = it?.toString() ?: ""
this.viewModel.stringValue = it?.toString()
}
editText2.addTextChangedListener {
values[1] = it?.toString() ?: ""
if (isEditingBlinds) {
this.viewModel.secondStringValue = it?.toString()
if (this.viewModel.isEditingBlinds) {
try {
val bigBlind = values[1].toDouble()
val bigBlind = this.viewModel.secondStringValue?.toDouble() ?: 0.0
editText.setText((bigBlind / 2.0).round())
} catch (e: Exception) {
editText.setText("")
@ -97,7 +99,8 @@ class BottomSheetDoubleEditTextFragment : BottomSheetFragment() {
editText2.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
this.delegate.onRowValueChanged(values, row)
this.viewModel.onRowValueChanged()
// this.delegate.onRowValueChanged(values, row)
dismiss()
true
} else {

@ -10,16 +10,12 @@ import kotlinx.android.synthetic.main.bottom_sheet_edit_text.*
import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.RowRepresentableEditDescriptorException
import net.pokeranalytics.android.ui.view.RowRepresentable
class BottomSheetEditTextFragment : BottomSheetFragment() {
private var value: String? = null
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initData()
initUI()
}
@ -28,30 +24,12 @@ class BottomSheetEditTextFragment : BottomSheetFragment() {
editText.requestFocus()
}
override fun getValue(): Any? {
this.value?.let {
val value = it.trim()
if (value.isEmpty()) { // avoid returning empty strings
return null
} else {
return value
}
}
return null
}
/**
* Init data
*/
private fun initData() {
}
/**
* Init UI
*/
private fun initUI() {
val data = getData()?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
val data = getDescriptors() ?: throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
if (data.size != 1) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
@ -61,11 +39,11 @@ class BottomSheetEditTextFragment : BottomSheetFragment() {
data[0].hint?.let { editText.hint = getString(it) }
editText.inputType = data[0].inputType ?: InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_SENTENCES
editText.addTextChangedListener {
this.value = it?.toString()
this.viewModel.stringValue = it?.toString()
}
data[0].defaultValue?.let {
if (valueHasPlaceholder) {
this.value = it.toString()
if (this.viewModel.valueAsPlaceholder) {
this.viewModel.stringValue = it.toString()
editText.hint = it.toString()
} else {
editText.setText(it.toString())
@ -74,7 +52,8 @@ class BottomSheetEditTextFragment : BottomSheetFragment() {
editText.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
delegate.onRowValueChanged(getValue(), row)
this.viewModel.onRowValueChanged()
// delegate.onRowValueChanged(getValue(), row)
dismiss()
true
} else {

@ -12,11 +12,8 @@ import net.pokeranalytics.android.exceptions.RowRepresentableEditDescriptorExcep
class BottomSheetEditTextMultiLinesFragment : BottomSheetFragment() {
private var value: String? = null
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initData()
initUI()
}
@ -25,24 +22,11 @@ class BottomSheetEditTextMultiLinesFragment : BottomSheetFragment() {
editText.requestFocus()
}
override fun getValue(): Any? {
this.value?.let {
return it.trim()
}
return null
}
/**
* Init data
*/
private fun initData() {
}
/**
* Init UI
*/
private fun initUI() {
val data = getData()?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
val data = getDescriptors()?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
if (data.size != 1) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
@ -51,7 +35,7 @@ class BottomSheetEditTextMultiLinesFragment : BottomSheetFragment() {
data[0].hint?.let { editText.hint = getString(it) }
editText.inputType = data[0].inputType ?: InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_MULTI_LINE or InputType.TYPE_TEXT_FLAG_CAP_SENTENCES
editText.addTextChangedListener { this.value = it?.toString() }
editText.addTextChangedListener { this.viewModel.stringValue = it?.toString() }
data[0].defaultValue?.let {
editText.setText(it.toString())
}

@ -11,9 +11,8 @@ import android.view.ViewGroup
import android.view.WindowManager
import androidx.appcompat.view.ContextThemeWrapper
import androidx.fragment.app.FragmentManager
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProviders
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
@ -25,65 +24,32 @@ import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.rowrepresentable.SessionRow
import net.pokeranalytics.android.ui.view.rowrepresentable.TransactionRow
import net.pokeranalytics.android.ui.viewmodel.BottomSheetViewModel
import java.util.*
class BottomSheetViewModel(var row: RowRepresentable,
var delegate: RowRepresentableDelegate,
var currentCurrency: Currency? = null,
var valueHasPlaceholder: Boolean = false,
var isClearable: Boolean = true,
var isDeletable: Boolean = false,
var rowRepresentableEditDescriptors: ArrayList<RowRepresentableEditDescriptor>? = null)
: ViewModel() {
}
open class BottomSheetFragment : BottomSheetDialogFragment() {
lateinit var row: RowRepresentable
/**
* A view model used to store potential bottom sheet values
*/
protected val viewModel: BottomSheetViewModel by lazy {
ViewModelProviders.of(this).get(BottomSheetViewModel::class.java)
}
lateinit var delegate: RowRepresentableDelegate
var row: RowRepresentable? = null
var delegate: RowRepresentableDelegate? = null
var currentCurrency: Currency? = null
var valueHasPlaceholder: Boolean = false
var valueAsPlaceholder: Boolean = false
private var isClearable: Boolean = true
private var isDeletable: Boolean = false
private var rowRepresentableEditDescriptors: ArrayList<RowRepresentableEditDescriptor>? = null
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
}
companion object {
const val REQUEST_CODE_ADD_NEW_OBJECT = 100
private fun newInstance(bottomSheetType: BottomSheetType): BottomSheetFragment {
return when (bottomSheetType) {
BottomSheetType.NONE -> BottomSheetFragment()
BottomSheetType.LIST -> BottomSheetListFragment()
BottomSheetType.LIST_STATIC -> BottomSheetStaticListFragment()
BottomSheetType.LIST_GAME -> BottomSheetListGameFragment()
BottomSheetType.DOUBLE_LIST -> BottomSheetListGameFragment()
BottomSheetType.MULTI_SELECTION -> BottomSheetMultiSelectionFragment()
BottomSheetType.GRID -> BottomSheetTableSizeGridFragment()
BottomSheetType.EDIT_TEXT -> BottomSheetEditTextFragment()
BottomSheetType.EDIT_TEXT_MULTI_LINES -> BottomSheetEditTextMultiLinesFragment()
BottomSheetType.DOUBLE_EDIT_TEXT -> BottomSheetDoubleEditTextFragment()
BottomSheetType.NUMERIC_TEXT -> BottomSheetNumericTextFragment()
BottomSheetType.SUM -> BottomSheetSumFragment()
}
}
fun create(
fragmentManager: FragmentManager?,
row: RowRepresentable,
@ -96,15 +62,52 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
): BottomSheetFragment {
val bottomSheetFragment = newInstance(row.bottomSheetType)
bottomSheetFragment.show(fragmentManager, "bottomSheet")
// bottomSheetFragment.configure(row, delegate, rowRepresentableEditDescriptors, isClearable, currentCurrency, isDeletable, valueHasPlaceholder)
bottomSheetFragment.row = row
bottomSheetFragment.delegate = delegate
bottomSheetFragment.rowRepresentableEditDescriptors = rowRepresentableEditDescriptors
bottomSheetFragment.isClearable = isClearable ?: true
bottomSheetFragment.isDeletable = isDeletable ?: true
bottomSheetFragment.valueHasPlaceholder = valueHasPlaceholder ?: true
bottomSheetFragment.valueAsPlaceholder = valueHasPlaceholder ?: true
bottomSheetFragment.currentCurrency = currentCurrency
return bottomSheetFragment
}
private fun newInstance(bottomSheetType: BottomSheetType): BottomSheetFragment {
return when (bottomSheetType) {
BottomSheetType.NONE -> BottomSheetFragment()
BottomSheetType.LIST -> BottomSheetListFragment()
BottomSheetType.LIST_STATIC -> BottomSheetStaticListFragment()
BottomSheetType.LIST_GAME -> BottomSheetListGameFragment()
BottomSheetType.DOUBLE_LIST -> BottomSheetListGameFragment()
BottomSheetType.MULTI_SELECTION -> BottomSheetMultiSelectionFragment()
BottomSheetType.GRID -> BottomSheetTableSizeGridFragment()
BottomSheetType.EDIT_TEXT -> BottomSheetEditTextFragment()
BottomSheetType.EDIT_TEXT_MULTI_LINES -> BottomSheetEditTextMultiLinesFragment()
BottomSheetType.DOUBLE_EDIT_TEXT -> BottomSheetDoubleEditTextFragment()
BottomSheetType.NUMERIC_TEXT -> BottomSheetNumericTextFragment()
BottomSheetType.SUM -> BottomSheetSumFragment()
}
}
}
private fun configure(row: RowRepresentable,
delegate: RowRepresentableDelegate,
rowRepresentableEditDescriptors: ArrayList<RowRepresentableEditDescriptor>?,
isClearable: Boolean? = true,
currentCurrency: Currency? = null,
isDeletable: Boolean? = false,
valueHasPlaceholder: Boolean? = null) {
this.viewModel.row = row
this.viewModel.delegate = delegate
this.viewModel.rowRepresentableEditDescriptors = rowRepresentableEditDescriptors
this.viewModel.isClearable = isClearable ?: true
this.viewModel.currentCurrency = currentCurrency
this.viewModel.isDeletable = isDeletable ?: false
this.viewModel.valueAsPlaceholder = valueHasPlaceholder ?: false
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
@ -115,21 +118,24 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
this.configure(this.row!!, this.delegate!!, this.rowRepresentableEditDescriptors, this.isClearable, this.currentCurrency, this.isDeletable, this.valueAsPlaceholder)
this.viewModel.load()
initUI()
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
// If we come from a creation of an object an everything is okay, we call
// If we come from a creation of an object and everything is okay, we call
// the delegate onRowValueChanged with the newly created object
if (requestCode == REQUEST_CODE_ADD_NEW_OBJECT && resultCode == RESULT_OK && data != null) {
val dataType = data.getIntExtra(EditableDataActivity.IntentKey.DATA_TYPE.keyName, 0)
val primaryKey = data.getStringExtra(EditableDataActivity.IntentKey.PRIMARY_KEY.keyName)
val pokerAnalyticsActivity = activity as PokerAnalyticsActivity
val liveDataType = LiveData.values()[dataType]
val proxyItem: RealmModel? = liveDataType.getData(pokerAnalyticsActivity.getRealm(), primaryKey)
this.delegate.onRowValueChanged(proxyItem, this.row)
this.viewModel.addedData = liveDataType.getData(pokerAnalyticsActivity.getRealm(), primaryKey)
this.viewModel.onRowValueChanged()
// this.delegate.onRowValueChanged(proxyItem, this.row)
dismiss()
}
}
@ -145,6 +151,7 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
*/
private fun initUI() {
val row = this.viewModel.row
bottomSheetToolbar.title = row.localizedTitle(requireContext())
bottomSheetToolbar.inflateMenu(R.menu.toolbar_bottom_sheet)
bottomSheetToolbar.setOnMenuItemClickListener {
@ -156,13 +163,15 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
// Menu
bottomSheetToolbar.menu.findItem(R.id.actionClear).setOnMenuItemClickListener {
delegate.onRowValueChanged(null, row)
this.viewModel.onClear()
// delegate.onRowValueChanged(null, row)
dismiss()
true
}
bottomSheetToolbar.menu.findItem(R.id.actionDelete).setOnMenuItemClickListener {
delegate.onRowDeleted(row)
this.viewModel.onRowDeleted()
// delegate.onRowDeleted(row)
dismiss()
true
}
@ -175,7 +184,7 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
SessionRow.TOURNAMENT_NAME -> LiveData.TOURNAMENT_NAME
SessionRow.TOURNAMENT_FEATURE -> LiveData.TOURNAMENT_FEATURE
TransactionRow.TYPE -> LiveData.TRANSACTION_TYPE
else -> throw PAIllegalStateException("row $row does not have an associated LiveData value")
else -> throw PAIllegalStateException("row $it does not have an associated LiveData value")
}
EditableDataActivity.newInstanceForResult(
@ -187,25 +196,26 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
true
}
bottomSheetToolbar.menu.findItem(R.id.actionCheck).setOnMenuItemClickListener {
this.delegate.onRowValueChanged(getValue(), row)
this.viewModel.onRowValueChanged()
// this.delegate.onRowValueChanged(getValue(), row)
dismiss()
true
}
bottomSheetToolbar.menu.findItem(R.id.actionClear).isVisible = isClearable
bottomSheetToolbar.menu.findItem(R.id.actionDelete).isVisible = isDeletable
bottomSheetToolbar.menu.findItem(R.id.actionClear).isVisible = this.viewModel.isClearable
bottomSheetToolbar.menu.findItem(R.id.actionDelete).isVisible = this.viewModel.isDeletable
}
/**
* Return the data list
*/
fun getData(): ArrayList<RowRepresentableEditDescriptor>? {
return this.rowRepresentableEditDescriptors
fun getDescriptors(): ArrayList<RowRepresentableEditDescriptor>? {
return this.viewModel.rowRepresentableEditDescriptors
}
open fun getValue(): Any? {
return null
private fun getValue(): Any? {
return this.viewModel.getValue()
}
}

@ -4,12 +4,10 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import androidx.recyclerview.widget.LinearLayoutManager
import io.realm.RealmResults
import kotlinx.android.synthetic.main.bottom_sheet_list.*
import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.exceptions.RowRepresentableEditDescriptorException
import net.pokeranalytics.android.ui.adapter.LiveRowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
@ -18,11 +16,8 @@ import net.pokeranalytics.android.ui.view.RowViewType
open class BottomSheetListFragment : BottomSheetFragment(), LiveRowRepresentableDataSource, RowRepresentableDelegate {
lateinit var dataAdapter: RowRepresentableAdapter
var realmData: RealmResults<RowRepresentable>? = null
override fun adapterRows(): List<RowRepresentable>? {
return this.realmData
return this.viewModel.realmData
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -33,18 +28,18 @@ open class BottomSheetListFragment : BottomSheetFragment(), LiveRowRepresentable
override fun onResume() {
super.onResume()
dataAdapter.notifyDataSetChanged()
this.viewModel.notifyDataSetChanged()
}
override fun rowRepresentableForPosition(position: Int): RowRepresentable? {
realmData?.let {
this.viewModel.realmData?.let {
return it[position] as RowRepresentable
}
throw PAIllegalStateException("Need to implement Data Source")
}
override fun numberOfRows(): Int {
realmData?.let {
this.viewModel.realmData?.let {
return it.size
}
throw PAIllegalStateException("Need to implement Data Source")
@ -55,13 +50,17 @@ open class BottomSheetListFragment : BottomSheetFragment(), LiveRowRepresentable
}
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
realmData?.let {
val selectedData = it[position]
selectedData?.let {data ->
this.delegate.onRowValueChanged(data, this.row)
dismiss()
}
}
this.viewModel.onRowSelected(position)
dismiss()
// this.viewModel.realmData?.let {
// val selectedData = it[position]
// selectedData?.let {data ->
// this.viewModel.onRowValueChanged(data)
//// this.delegate.onRowValueChanged(data, this.row)
// dismiss()
// }
// }
super.onRowSelected(position, row, fromAction)
}
@ -69,14 +68,14 @@ open class BottomSheetListFragment : BottomSheetFragment(), LiveRowRepresentable
* Init data
*/
open fun initData() {
val bottomSheetData = getData()?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
if (bottomSheetData.size != 1) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
if (bottomSheetData.first().data == null) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
this.realmData = bottomSheetData.first().data as RealmResults<RowRepresentable>
// val bottomSheetData = getDescriptors() ?: throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
// if (bottomSheetData.size != 1) {
// throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
// }
// if (bottomSheetData.first().data == null) {
// throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
// }
// this.viewModel.realmData = bottomSheetData.first().data as RealmResults<RowRepresentable>
}
/**
@ -86,7 +85,8 @@ open class BottomSheetListFragment : BottomSheetFragment(), LiveRowRepresentable
LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_list, view?.bottomSheetContainer, true)
val viewManager = LinearLayoutManager(requireContext())
dataAdapter = RowRepresentableAdapter(this, this)
val dataAdapter = RowRepresentableAdapter(this, this)
this.viewModel.dataAdapter = dataAdapter
reyclerView.apply {
setHasFixedSize(true)

@ -9,7 +9,6 @@ import com.google.android.material.chip.Chip
import kotlinx.android.synthetic.main.bottom_sheet_game_list.*
import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.RowRepresentableEditDescriptorException
import net.pokeranalytics.android.model.Limit
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.extensions.px
@ -21,53 +20,33 @@ import net.pokeranalytics.android.ui.view.RowRepresentable
*/
class BottomSheetListGameFragment : BottomSheetListFragment() {
private var limit: Int? = 0
private val values = ArrayList<Any?>()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initData()
initUI()
}
override fun getValue(): Any? {
return values
}
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
realmData?.let {
this.viewModel.realmData?.let {
val selectedData = it[position]
selectedData?.let { data ->
values[1] = data
this.delegate.onRowValueChanged(values, this.row)
this.viewModel.someValues[1] = data
this.viewModel.onRowValueChanged()
// this.delegate.onRowValueChanged(values, this.row)
dismiss()
}
}
}
/**
* Init data
*/
override fun initData() {
val bottomSheetData = getData()?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
if (bottomSheetData.size != 2) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
if (bottomSheetData[1].data == null) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
this.limit = bottomSheetData[0].defaultValue as Int?
this.realmData = bottomSheetData[1].data
}
/**
* Init UI
*/
override fun initUI() {
LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_game_list, view?.bottomSheetContainer, true)
values.add(0, limit)
values.add(1, null)
val limit = this.viewModel.limit
this.viewModel.someValues.add(0, limit)
this.viewModel.someValues.add(1, null)
chipGroup.removeAllViews()
Limit.values().forEach {
@ -81,7 +60,7 @@ class BottomSheetListGameFragment : BottomSheetListFragment() {
}
chipGroup.setOnCheckedChangeListener { _, i ->
values[0] = i
this.viewModel.someValues[0] = i
}
if (limit == null) {
@ -89,7 +68,8 @@ class BottomSheetListGameFragment : BottomSheetListFragment() {
}
val viewManager2 = LinearLayoutManager(requireContext())
dataAdapter = RowRepresentableAdapter(this, this)
val dataAdapter = RowRepresentableAdapter(this, this)
this.viewModel.dataAdapter = dataAdapter
recyclerView2.apply {
setHasFixedSize(true)

@ -2,9 +2,7 @@ package net.pokeranalytics.android.ui.fragment.components.bottomsheet
import android.app.Activity
import android.content.Intent
import io.realm.RealmList
import io.realm.RealmModel
import net.pokeranalytics.android.exceptions.RowRepresentableEditDescriptorException
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
@ -16,8 +14,6 @@ import net.pokeranalytics.android.ui.view.RowViewType
*/
open class BottomSheetMultiSelectionFragment : BottomSheetListFragment() {
private val selectedRows: ArrayList<RowRepresentable> = ArrayList()
override fun viewTypeForPosition(position: Int): Int {
return RowViewType.TITLE_CHECK.ordinal
}
@ -29,39 +25,19 @@ open class BottomSheetMultiSelectionFragment : BottomSheetListFragment() {
val pokerAnalyticsActivity = activity as PokerAnalyticsActivity
val liveDataType = LiveData.values()[dataType]
val proxyItem: RealmModel? = liveDataType.getData(pokerAnalyticsActivity.getRealm(), primaryKey)
selectedRows.add(proxyItem as RowRepresentable)
dataAdapter.refreshRow(proxyItem as RowRepresentable)
this.viewModel.selectedRows.add(proxyItem as RowRepresentable)
this.viewModel.refreshRow(proxyItem as RowRepresentable)
// dataAdapter.refreshRow(proxyItem as RowRepresentable)
}
}
override fun getValue(): Any? {
return selectedRows
}
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
if (selectedRows.contains(row)) {
selectedRows.remove(row)
} else {
selectedRows.add(row)
}
dataAdapter.refreshRow(row)
this.viewModel.onRowSelected(row)
}
override fun isSelected(row: RowRepresentable): Boolean {
return selectedRows.contains(row)
return this.viewModel.isSelected(row)
// return selectedRows.contains(row)
}
override fun initData() {
super.initData()
val bottomSheetData =
getData() ?: throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
if (bottomSheetData.size != 1) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
bottomSheetData.first().defaultValue?.let {
(it as RealmList<*>).forEach { row ->
this.selectedRows.add(row as RowRepresentable)
}
}
}
}

@ -15,11 +15,8 @@ import java.text.NumberFormat
class BottomSheetNumericTextFragment : BottomSheetFragment() {
private var value: Double? = null
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initData()
initUI()
}
@ -28,21 +25,11 @@ class BottomSheetNumericTextFragment : BottomSheetFragment() {
editText.requestFocus()
}
override fun getValue(): Any? {
return this.value
}
/**
* Init data
*/
private fun initData() {
}
/**
* Init UI
*/
private fun initUI() {
val data = getData()?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
val data = getDescriptors()?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
if (data.size != 1) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
@ -50,10 +37,11 @@ class BottomSheetNumericTextFragment : BottomSheetFragment() {
LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_edit_text, view?.bottomSheetContainer, true)
data[0].hint?.let { editText.hint = getString(it) }
editText.inputType = data[0].inputType ?: InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_SENTENCES
editText.addTextChangedListener {
this.value = try {
this.viewModel.doubleValue = try {
editText.text.toString().toDouble()
} catch (e: Exception) {
null
@ -70,8 +58,8 @@ class BottomSheetNumericTextFragment : BottomSheetFragment() {
it.toString()
}
if (valueHasPlaceholder) {
this.value = it.toString().toDoubleOrNull()
if (this.viewModel.valueAsPlaceholder) {
// this.viewModel.doubleValue = it.toString().toDoubleOrNull()
editText.hint = valueString
} else {
editText.setText(valueString)
@ -80,7 +68,8 @@ class BottomSheetNumericTextFragment : BottomSheetFragment() {
editText.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
delegate.onRowValueChanged(getValue(), row)
this.viewModel.onRowValueChanged()
// delegate.onRowValueChanged(getValue(), row)
dismiss()
true
} else {

@ -7,7 +7,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.bottom_sheet_list.*
import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.RowRepresentableEditDescriptorException
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
@ -16,44 +15,32 @@ import net.pokeranalytics.android.ui.view.RowRepresentable
class BottomSheetStaticListFragment : BottomSheetFragment(), StaticRowRepresentableDataSource,
RowRepresentableDelegate {
private var staticRows: List<RowRepresentable> = emptyList()
private lateinit var dataAdapter: RowRepresentableAdapter
// private var staticRows: List<RowRepresentable> = emptyList()
// private lateinit var dataAdapter: RowRepresentableAdapter
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initData()
initUI()
}
override fun onResume() {
super.onResume()
dataAdapter.notifyDataSetChanged()
this.viewModel.notifyDataSetChanged()
// dataAdapter.notifyDataSetChanged()
}
override fun adapterRows(): List<RowRepresentable>? {
return this.staticRows
return this.viewModel.staticRows
}
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
this.delegate.onRowValueChanged(row, this.row)
this.viewModel.selectedRows.add(row)
this.viewModel.onRowValueChanged()
// this.delegate.onRowValueChanged(row, this.row)
dismiss()
super.onRowSelected(position, row, fromAction)
}
/**
* Init data
*/
private fun initData() {
val bottomSheetData = getData()?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
if (bottomSheetData.size != 1) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
if (bottomSheetData.first().staticData == null) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
this.staticRows = bottomSheetData.first().staticData as List<RowRepresentable>
}
/**
* Init UI
*/
@ -61,7 +48,8 @@ class BottomSheetStaticListFragment : BottomSheetFragment(), StaticRowRepresenta
LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_list, view?.bottomSheetContainer, true)
val viewManager = LinearLayoutManager(requireContext())
dataAdapter = RowRepresentableAdapter(this, this)
val dataAdapter = RowRepresentableAdapter(this, this)
this.viewModel.dataAdapter = dataAdapter
reyclerView.apply {
setHasFixedSize(true)

@ -17,12 +17,8 @@ import java.text.NumberFormat
class BottomSheetSumFragment : BottomSheetFragment() {
private var value = 0.0
private var currentDefaultValue = 0.0
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initData()
initUI()
}
@ -31,25 +27,12 @@ class BottomSheetSumFragment : BottomSheetFragment() {
editText.requestFocus()
}
override fun getValue(): Any? {
val editText2Value = editText2.text ?: ""
if (editText2Value.isEmpty()) {
return currentDefaultValue
}
return value
}
/**
* Init data
*/
private fun initData() {
}
/**
* Init UI
*/
private fun initUI() {
val data = getData()?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
val data = getDescriptors()?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
if (data.size != 5) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
@ -58,16 +41,16 @@ class BottomSheetSumFragment : BottomSheetFragment() {
if (data.size == 5) {
// Default value for the sum
currentDefaultValue = try {
data[2].defaultValue as Double
} catch (e: Exception) {
0.0
}
// this.viewModel.currentDefaultValue = try {
// data[2].defaultValue as Double
// } catch (e: Exception) {
// 0.0
// }
val formatter = NumberFormat.getNumberInstance()
formatter.maximumFractionDigits = 6
formatter.isGroupingUsed = false
currentValue.text = formatter.format(currentDefaultValue)
currentValue.text = formatter.format(this.viewModel.currentDefaultValue)
// First value
val defaultValue1 = try {
@ -76,10 +59,14 @@ class BottomSheetSumFragment : BottomSheetFragment() {
0.0
}
button1.text = "+ ${defaultValue1.toCurrency(currentCurrency)}"
val formattedValue1 = "+ ${defaultValue1.toCurrency(this.viewModel.currentCurrency)}"
button1.text = formattedValue1
button1.visibility = if (defaultValue1 > 0) View.VISIBLE else View.GONE
button1.setOnClickListener {
this.delegate.onRowValueChanged(currentDefaultValue + defaultValue1, row)
// val newValue = this.viewModel.currentDefaultValue + defaultValue1
this.viewModel.doubleValue = this.viewModel.currentDefaultValue + defaultValue1
this.viewModel.onRowValueChanged()
// this.delegate.onRowValueChanged(currentDefaultValue + defaultValue1, row)
dismiss()
}
@ -90,10 +77,13 @@ class BottomSheetSumFragment : BottomSheetFragment() {
0.0
}
button2.text = "+ ${defaultValue2.toCurrency(currentCurrency)}"
val formattedValue2 = "+ ${defaultValue2.toCurrency(this.viewModel.currentCurrency)}"
button2.text = formattedValue2
button2.visibility = if (defaultValue2 > 0) View.VISIBLE else View.GONE
button2.setOnClickListener {
this.delegate.onRowValueChanged(currentDefaultValue + defaultValue2, row)
this.viewModel.doubleValue = this.viewModel.currentDefaultValue + defaultValue2
this.viewModel.onRowValueChanged()
// this.delegate.onRowValueChanged(currentDefaultValue + defaultValue2, row)
dismiss()
}
@ -106,7 +96,7 @@ class BottomSheetSumFragment : BottomSheetFragment() {
} catch (e: Exception) {
0.0
}
editText2.setText((currentDefaultValue + valueToAdd).round())
editText2.setText((this.viewModel.currentDefaultValue + valueToAdd).round())
}
@ -114,7 +104,7 @@ class BottomSheetSumFragment : BottomSheetFragment() {
data[4].hint?.let { editText2.hint = getString(it) }
editText2.inputType = data[4].inputType ?: InputType.TYPE_CLASS_TEXT
editText2.addTextChangedListener {
value = try {
this.viewModel.doubleValue = try {
it.toString().toDouble()
} catch (e: Exception) {
0.0
@ -123,7 +113,8 @@ class BottomSheetSumFragment : BottomSheetFragment() {
editText2.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
this.delegate.onRowValueChanged(value, row)
this.viewModel.onRowValueChanged()
// this.delegate.onRowValueChanged(value, row)
dismiss()
true
} else {

@ -6,7 +6,6 @@ import android.view.View
import androidx.recyclerview.widget.GridLayoutManager
import kotlinx.android.synthetic.main.bottom_sheet_grid.*
import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.*
import net.pokeranalytics.android.exceptions.RowRepresentableEditDescriptorException
import net.pokeranalytics.android.model.TableSize
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
@ -17,33 +16,17 @@ import net.pokeranalytics.android.ui.view.RowRepresentable
class BottomSheetTableSizeGridFragment : BottomSheetFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate {
private lateinit var dataAdapter: RowRepresentableAdapter
private var defaultSize: Int? = null
// private lateinit var dataAdapter: RowRepresentableAdapter
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initData()
initUI()
}
override fun onResume() {
super.onResume()
dataAdapter.notifyDataSetChanged()
}
override fun getValue(): Any? {
return defaultSize
}
/**
* Init data
*/
private fun initData() {
val bottomSheetData = getData()?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
if (bottomSheetData.size != 1) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
defaultSize = bottomSheetData.first().defaultValue as Int?
this.viewModel.notifyDataSetChanged()
// dataAdapter.notifyDataSetChanged()
}
/**
@ -54,7 +37,8 @@ class BottomSheetTableSizeGridFragment : BottomSheetFragment(), StaticRowReprese
.inflate(net.pokeranalytics.android.R.layout.bottom_sheet_grid, view?.bottomSheetContainer, true)
val viewManager = GridLayoutManager(requireContext(), 3)
dataAdapter = RowRepresentableAdapter(this, this)
val dataAdapter = RowRepresentableAdapter(this, this)
this.viewModel.dataAdapter = dataAdapter
val spanCount = 3
val spacing = 2.px
@ -73,7 +57,9 @@ class BottomSheetTableSizeGridFragment : BottomSheetFragment(), StaticRowReprese
}
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
this.delegate.onRowValueChanged((row as TableSize).numberOfPlayer, this.row)
this.viewModel.defaultSize = (row as TableSize).numberOfPlayer
this.viewModel.onRowValueChanged()
// this.delegate.onRowValueChanged((row as TableSize).numberOfPlayer, this.row)
dismiss()
}

@ -0,0 +1,251 @@
package net.pokeranalytics.android.ui.viewmodel
import androidx.lifecycle.ViewModel
import io.realm.RealmList
import io.realm.RealmResults
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.exceptions.RowRepresentableEditDescriptorException
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.rowrepresentable.SessionRow
import java.util.*
class BottomSheetViewModel : ViewModel() {
lateinit var row: RowRepresentable
lateinit var delegate: RowRepresentableDelegate
var currentCurrency: Currency? = null
var valueAsPlaceholder: Boolean = false
var isClearable: Boolean = true
var isDeletable: Boolean = false
var rowRepresentableEditDescriptors: ArrayList<RowRepresentableEditDescriptor>? = null
/**
* Storage for a data that has been newly created
*/
var addedData: Any? = null
/**
* String storage
*/
var stringValue: String? = null
var secondStringValue: String? = null
/**
Double Edit Text
*/
val values = ArrayList<String>()
var isEditingBlinds: Boolean = false
/**
* Lists, dynamic or static
*/
lateinit var dataAdapter: RowRepresentableAdapter
var realmData: RealmResults<RowRepresentable>? = null
var staticRows: List<RowRepresentable> = emptyList()
/**
* Sum
*/
var doubleValue: Double? = 0.0
var currentDefaultValue = 0.0
/**
* Table Size
*/
var defaultSize: Int? = null
/**
* Multiselection
*/
val selectedRows: ArrayList<RowRepresentable> = ArrayList()
/**
* Limit and Game
*/
var limit: Int? = 0
val someValues = ArrayList<Any?>()
fun load() {
when(this.row.bottomSheetType) {
BottomSheetType.DOUBLE_EDIT_TEXT -> {
val descriptors = this.rowRepresentableEditDescriptors ?: throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
if (descriptors.size != 2) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
this.isEditingBlinds = this.row == SessionRow.BLINDS
this.stringValue = descriptors[0].defaultValue as? String
this.secondStringValue = descriptors[1].defaultValue as? String
}
BottomSheetType.SUM -> {
val descriptors = this.rowRepresentableEditDescriptors ?: throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
if (descriptors.size != 5) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
this.currentDefaultValue = try {
descriptors[2].defaultValue as Double
} catch (e: Exception) {
0.0
}
}
BottomSheetType.LIST -> {
val bottomSheetData = this.rowRepresentableEditDescriptors ?: throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
if (bottomSheetData.size != 1) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
if (bottomSheetData.first().data == null) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
this.realmData = bottomSheetData.first().data as RealmResults<RowRepresentable>
}
BottomSheetType.DOUBLE_LIST, BottomSheetType.LIST_GAME -> {
val bottomSheetData = this.rowRepresentableEditDescriptors ?: throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
if (bottomSheetData.size != 2) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
if (bottomSheetData[1].data == null) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
this.limit = bottomSheetData[0].defaultValue as Int?
this.realmData = bottomSheetData[1].data
}
BottomSheetType.MULTI_SELECTION -> {
val bottomSheetData =
this.rowRepresentableEditDescriptors ?: throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
if (bottomSheetData.size != 1) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
this.realmData = bottomSheetData.first().data as RealmResults<RowRepresentable>
bottomSheetData.first().defaultValue?.let {
(it as RealmList<*>).forEach { row ->
this.selectedRows.add(row as RowRepresentable)
}
}
}
BottomSheetType.NUMERIC_TEXT -> {
val bottomSheetData =
this.rowRepresentableEditDescriptors
?: throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
bottomSheetData[0].defaultValue?.let {
this.doubleValue = it.toString().toDoubleOrNull()
}
}
BottomSheetType.LIST_STATIC -> {
val bottomSheetData = this.rowRepresentableEditDescriptors ?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
if (bottomSheetData.size != 1) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
if (bottomSheetData.first().staticData == null) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
this.staticRows = bottomSheetData.first().staticData as List<RowRepresentable>
}
BottomSheetType.GRID -> {
val bottomSheetData = this.rowRepresentableEditDescriptors ?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
if (bottomSheetData.size != 1) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
this.defaultSize = bottomSheetData.first().defaultValue as Int?
}
else -> {}
}
}
fun getValue() : Any? {
return when(this.row.bottomSheetType) {
BottomSheetType.DOUBLE_EDIT_TEXT -> {
if (this.values.isEmpty()) { return null }
if (this.values.all { it.isEmpty() }) { return null }
return this.values
}
BottomSheetType.EDIT_TEXT, BottomSheetType.EDIT_TEXT_MULTI_LINES -> {
this.stringValue?.trim()?.let {
if (it.isNotEmpty()) {
return it
}
}
return null
}
BottomSheetType.MULTI_SELECTION -> this.selectedRows
BottomSheetType.NUMERIC_TEXT -> this.doubleValue
BottomSheetType.GRID -> this.defaultSize
BottomSheetType.DOUBLE_LIST, BottomSheetType.LIST_GAME -> this.someValues
BottomSheetType.LIST_STATIC -> this.selectedRows.firstOrNull()
BottomSheetType.SUM -> this.doubleValue
else -> null
}
}
fun onClear() {
this.delegate.onRowValueChanged(null, this.row)
}
fun onRowValueChanged() {
// if some data has been added
this.addedData?.let {
this.delegate.onRowValueChanged(it, this.row)
return
}
// otherwise, default behavior
val value = when(this.row.bottomSheetType) {
BottomSheetType.DOUBLE_EDIT_TEXT -> arrayListOf(this.stringValue, this.secondStringValue)
BottomSheetType.DOUBLE_LIST, BottomSheetType.LIST_GAME -> arrayListOf(this.someValues[0], this.someValues[1])
else -> getValue()
}
this.delegate.onRowValueChanged(value, this.row)
}
fun onRowDeleted() {
this.delegate.onRowDeleted(this.row)
}
fun onRowSelected(row: RowRepresentable) {
if (this.selectedRows.contains(row)) {
this.selectedRows.remove(row)
} else {
this.selectedRows.add(row)
}
this.refreshRow(row)
}
fun onRowSelected(position: Int) {
val value = when(this.row.bottomSheetType) {
BottomSheetType.LIST -> this.realmData?.get(position)
BottomSheetType.LIST_STATIC -> this.staticRows[position]
else -> throw PAIllegalStateException("row selected for unmanaged bottom sheet type")
}
this.delegate.onRowValueChanged(value, this.row)
}
fun isSelected(row: RowRepresentable): Boolean {
return this.selectedRows.contains(row)
}
fun notifyDataSetChanged() {
this.dataAdapter.notifyDataSetChanged()
}
fun refreshRow(row: RowRepresentable) {
this.dataAdapter.refreshRow(row)
}
}
Loading…
Cancel
Save