Bottom sheet refactoring

hh
Laurent 6 years ago
parent ee9a335f22
commit d8af6e9aaa
  1. 16
      app/src/main/java/net/pokeranalytics/android/ui/adapter/ComparisonChartPagerAdapter.kt
  2. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SubscriptionFragment.kt
  3. 3
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt
  4. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt
  5. 60
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt
  6. 8
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt
  7. 4
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListGameFragment.kt
  8. 4
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetMultiSelectionFragment.kt
  9. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetNumericTextFragment.kt
  10. 8
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetStaticListFragment.kt
  11. 6
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetSumFragment.kt
  12. 6
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt
  13. 48
      app/src/main/java/net/pokeranalytics/android/ui/viewmodel/BottomSheetViewModel.kt
  14. 2
      build.gradle

@ -15,9 +15,9 @@ import java.lang.ref.WeakReference
/**
* Comparison Chart Pager Adapter
*/
class ComparisonChartPagerAdapter(val context: Context, fragmentManager: FragmentManager) : FragmentStatePagerAdapter(fragmentManager) {
class ComparisonChartPagerAdapter(val context: Context, fragmentManager: FragmentManager) : FragmentStatePagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
var weakReferences = SparseArray<WeakReference<BaseFragment>>()
private var weakReferences = SparseArray<WeakReference<BaseFragment>>()
override fun getItem(position: Int): BaseFragment {
return when (position) {
@ -59,11 +59,11 @@ class ComparisonChartPagerAdapter(val context: Context, fragmentManager: Fragmen
/**
* Return the fragment at the position key
*/
fun getFragment(key: Int): BaseFragment? {
if (weakReferences.get(key) != null) {
return weakReferences.get(key).get()
}
return null
}
// fun getFragment(key: Int): BaseFragment? {
// if (weakReferences.get(key) != null) {
// return weakReferences.get(key).get()
// }
// return null
// }
}

@ -156,7 +156,7 @@ class SubscriptionFragment : BaseFragment(), SkuDetailsResponseListener, Purchas
* A simple pager adapter that represents 5 ScreenSlidePageFragment objects, in
* sequence.
*/
private inner class ScreenSlidePagerAdapter(fm: FragmentManager) : FragmentStatePagerAdapter(fm) {
private inner class ScreenSlidePagerAdapter(fragmentManager: FragmentManager) : FragmentStatePagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
private var fragments: HashMap<Int, WeakReference<ScreenSlidePageFragment>> = HashMap()

@ -96,10 +96,9 @@ class BottomSheetDoubleEditTextFragment : BottomSheetFragment() {
}
}
editText2.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
this.viewModel.onRowValueChanged()
this.onRowValueChanged()
// this.delegate.onRowValueChanged(values, row)
dismiss()
true

@ -52,7 +52,7 @@ class BottomSheetEditTextFragment : BottomSheetFragment() {
editText.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
this.viewModel.onRowValueChanged()
this.onRowValueChanged()
// delegate.onRowValueChanged(getValue(), row)
dismiss()
true

@ -19,6 +19,7 @@ import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.activity.components.BaseActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
@ -35,9 +36,7 @@ class BottomSheetConfig(var row: RowRepresentable,
var isDeletable: Boolean? = false,
var valueHasPlaceholder: Boolean? = null,
var alternativeLabels: Boolean = false
) {
}
)
open class BottomSheetFragment : BottomSheetDialogFragment() {
@ -48,6 +47,10 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
ViewModelProviders.of(this).get(BottomSheetViewModel::class.java)
}
private var delegate: RowRepresentableDelegate? = null
protected lateinit var dataAdapter: RowRepresentableAdapter
companion object {
private var config: BottomSheetConfig? = null
@ -111,7 +114,6 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
private fun configure(configuration: BottomSheetConfig) {
this.viewModel.row = configuration.row
this.viewModel.delegate = configuration.delegate
this.viewModel.rowRepresentableEditDescriptors = configuration.rowRepresentableEditDescriptors
this.viewModel.isClearable = configuration.isClearable ?: true
this.viewModel.currentCurrency = configuration.currentCurrency
@ -119,6 +121,8 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
this.viewModel.valueAsPlaceholder = configuration.valueHasPlaceholder ?: false
this.viewModel.alternativeLabels = configuration.alternativeLabels
this.delegate = configuration.delegate
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
@ -132,7 +136,7 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
val pokerAnalyticsActivity = activity as BaseActivity
val liveDataType = LiveData.values()[dataType]
this.viewModel.addedData = liveDataType.getData(pokerAnalyticsActivity.getRealm(), primaryKey)
this.viewModel.onRowValueChanged()
this.onRowValueChanged()
// this.delegate.onRowValueChanged(proxyItem, this.row)
dismiss()
}
@ -161,14 +165,14 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
// Menu
bottomSheetToolbar.menu.findItem(R.id.actionClear).setOnMenuItemClickListener {
this.viewModel.onClear()
this.onClear()
// delegate.onRowValueChanged(null, row)
dismiss()
true
}
bottomSheetToolbar.menu.findItem(R.id.actionDelete).setOnMenuItemClickListener {
this.viewModel.onRowDeleted()
this.onRowDeleted()
// delegate.onRowDeleted(row)
dismiss()
true
@ -194,7 +198,7 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
true
}
bottomSheetToolbar.menu.findItem(R.id.actionCheck).setOnMenuItemClickListener {
this.viewModel.onRowValueChanged()
this.onRowValueChanged()
// this.delegate.onRowValueChanged(getValue(), row)
dismiss()
true
@ -216,4 +220,44 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
return this.viewModel.getValue()
}
private fun onClear() {
this.delegate?.onRowValueChanged(null, this.viewModel.row)
}
fun onRowValueChanged() {
val row = this.viewModel.row
// if some data has been added
this.viewModel.addedData?.let {
this.delegate?.onRowValueChanged(it, row)
return
}
val value = this.viewModel.changedValue()
this.delegate?.onRowValueChanged(value, row)
}
private fun onRowDeleted() {
this.delegate?.onRowDeleted(this.viewModel.row)
}
fun onRowSelected(row: RowRepresentable) {
this.viewModel.rowSelected(row)
this.refreshRow(row)
}
fun onRowSelected(position: Int) {
val value = this.viewModel.rowSelected(position)
this.delegate?.onRowValueChanged(value, this.viewModel.row)
}
fun notifyDataSetChanged() {
this.dataAdapter.notifyDataSetChanged()
}
fun refreshRow(row: RowRepresentable) {
this.dataAdapter.refreshRow(row)
}
}

@ -28,7 +28,7 @@ open class BottomSheetListFragment : BottomSheetFragment(), LiveRowRepresentable
override fun onResume() {
super.onResume()
this.viewModel.notifyDataSetChanged()
this.notifyDataSetChanged()
}
override fun rowRepresentableForPosition(position: Int): RowRepresentable? {
@ -51,7 +51,7 @@ open class BottomSheetListFragment : BottomSheetFragment(), LiveRowRepresentable
override fun onRowSelected(position: Int, row: RowRepresentable, tag: Int) {
this.viewModel.onRowSelected(position)
this.onRowSelected(position)
dismiss()
// this.viewModel.realmData?.let {
// val selectedData = it[position]
@ -61,7 +61,7 @@ open class BottomSheetListFragment : BottomSheetFragment(), LiveRowRepresentable
// dismiss()
// }
// }
super.onRowSelected(position, row, tag)
// super.onRowSelected(position, row, tag)
}
/**
@ -86,7 +86,7 @@ open class BottomSheetListFragment : BottomSheetFragment(), LiveRowRepresentable
val viewManager = LinearLayoutManager(requireContext())
val dataAdapter = RowRepresentableAdapter(this, this)
this.viewModel.dataAdapter = dataAdapter
this.dataAdapter = dataAdapter
recyclerView.apply {
setHasFixedSize(true)

@ -30,7 +30,7 @@ class BottomSheetListGameFragment : BottomSheetListFragment() {
val selectedData = it[position]
selectedData?.let { data ->
this.viewModel.someValues[1] = data
this.viewModel.onRowValueChanged()
this.onRowValueChanged()
// this.delegate.onRowValueChanged(values, this.row)
dismiss()
}
@ -69,7 +69,7 @@ class BottomSheetListGameFragment : BottomSheetListFragment() {
val viewManager2 = LinearLayoutManager(requireContext())
val dataAdapter = RowRepresentableAdapter(this, this)
this.viewModel.dataAdapter = dataAdapter
this.dataAdapter = dataAdapter
recyclerView2.apply {
setHasFixedSize(true)

@ -26,13 +26,13 @@ open class BottomSheetMultiSelectionFragment : BottomSheetListFragment() {
val liveDataType = LiveData.values()[dataType]
val proxyItem: RealmModel? = liveDataType.getData(pokerAnalyticsActivity.getRealm(), primaryKey)
this.viewModel.selectedRows.add(proxyItem as RowRepresentable)
this.viewModel.refreshRow(proxyItem as RowRepresentable)
this.refreshRow(proxyItem as RowRepresentable)
// dataAdapter.refreshRow(proxyItem as RowRepresentable)
}
}
override fun onRowSelected(position: Int, row: RowRepresentable, tag: Int) {
this.viewModel.onRowSelected(row)
this.onRowSelected(row)
}
override fun isSelected(

@ -68,7 +68,7 @@ class BottomSheetNumericTextFragment : BottomSheetFragment() {
editText.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
this.viewModel.onRowValueChanged()
this.onRowValueChanged()
// delegate.onRowValueChanged(getValue(), row)
dismiss()
true

@ -25,7 +25,7 @@ class BottomSheetStaticListFragment : BottomSheetFragment(), StaticRowRepresenta
override fun onResume() {
super.onResume()
this.viewModel.notifyDataSetChanged()
this.notifyDataSetChanged()
// dataAdapter.notifyDataSetChanged()
}
@ -35,10 +35,10 @@ class BottomSheetStaticListFragment : BottomSheetFragment(), StaticRowRepresenta
override fun onRowSelected(position: Int, row: RowRepresentable, tag: Int) {
this.viewModel.selectedRows.add(row)
this.viewModel.onRowValueChanged()
this.onRowValueChanged()
// this.delegate.onRowValueChanged(row, this.row)
dismiss()
super.onRowSelected(position, row, tag)
// super.onRowSelected(position, row, tag)
}
/**
@ -49,7 +49,7 @@ class BottomSheetStaticListFragment : BottomSheetFragment(), StaticRowRepresenta
val viewManager = LinearLayoutManager(requireContext())
val dataAdapter = RowRepresentableAdapter(this, this)
this.viewModel.dataAdapter = dataAdapter
this.dataAdapter = dataAdapter
recyclerView.apply {
setHasFixedSize(true)

@ -65,7 +65,7 @@ class BottomSheetSumFragment : BottomSheetFragment() {
button1.setOnClickListener {
// val newValue = this.viewModel.currentDefaultValue + defaultValue1
this.viewModel.doubleValue = this.viewModel.currentDefaultValue + defaultValue1
this.viewModel.onRowValueChanged()
this.onRowValueChanged()
// this.delegate.onRowValueChanged(currentDefaultValue + defaultValue1, row)
dismiss()
}
@ -82,7 +82,7 @@ class BottomSheetSumFragment : BottomSheetFragment() {
button2.visibility = if (defaultValue2 > 0) View.VISIBLE else View.GONE
button2.setOnClickListener {
this.viewModel.doubleValue = this.viewModel.currentDefaultValue + defaultValue2
this.viewModel.onRowValueChanged()
this.onRowValueChanged()
// this.delegate.onRowValueChanged(currentDefaultValue + defaultValue2, row)
dismiss()
}
@ -113,7 +113,7 @@ class BottomSheetSumFragment : BottomSheetFragment() {
editText2.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
this.viewModel.onRowValueChanged()
this.onRowValueChanged()
// this.delegate.onRowValueChanged(value, row)
dismiss()
true

@ -26,7 +26,7 @@ class BottomSheetTableSizeGridFragment : BottomSheetFragment(), StaticRowReprese
override fun onResume() {
super.onResume()
this.viewModel.notifyDataSetChanged()
this.notifyDataSetChanged()
// dataAdapter.notifyDataSetChanged()
}
@ -39,7 +39,7 @@ class BottomSheetTableSizeGridFragment : BottomSheetFragment(), StaticRowReprese
val viewManager = GridLayoutManager(requireContext(), 3)
val dataAdapter = RowRepresentableAdapter(this, this)
this.viewModel.dataAdapter = dataAdapter
this.dataAdapter = dataAdapter
val spanCount = 3
val spacing = 2.px
@ -59,7 +59,7 @@ class BottomSheetTableSizeGridFragment : BottomSheetFragment(), StaticRowReprese
override fun onRowSelected(position: Int, row: RowRepresentable, tag: Int) {
this.viewModel.defaultSize = (row as TableSize).numberOfPlayer
this.viewModel.onRowValueChanged()
this.onRowValueChanged()
dismiss()
}

@ -5,8 +5,6 @@ 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
@ -16,7 +14,6 @@ import java.util.*
class BottomSheetViewModel : ViewModel() {
lateinit var row: RowRepresentable
lateinit var delegate: RowRepresentableDelegate
var currentCurrency: Currency? = null
var valueAsPlaceholder: Boolean = false
@ -44,7 +41,6 @@ class BottomSheetViewModel : ViewModel() {
/**
* Lists, dynamic or static
*/
lateinit var dataAdapter: RowRepresentableAdapter
var realmData: RealmResults<RowRepresentable>? = null
var staticRows: List<RowRepresentable> = emptyList()
@ -193,60 +189,32 @@ class BottomSheetViewModel : ViewModel() {
}
}
fun onClear() {
this.delegate.onRowValueChanged(null, this.row)
fun isSelected(row: RowRepresentable): Boolean {
return this.selectedRows.contains(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) {
fun changedValue(): Any? {
return when(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) {
fun rowSelected(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) {
fun rowSelected(position: Int): RowRepresentable? {
return 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)
}
}

@ -10,7 +10,7 @@ buildscript {
}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.1'
classpath 'com.android.tools.build:gradle:3.6.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'io.realm:realm-gradle-plugin:5.15.2'
classpath 'com.google.gms:google-services:4.3.3'

Loading…
Cancel
Save