diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/ComparisonChartPagerAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/ComparisonChartPagerAdapter.kt index e5794fa4..ff9bc2a1 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/ComparisonChartPagerAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/ComparisonChartPagerAdapter.kt @@ -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>() + private var weakReferences = SparseArray>() 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 +// } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SubscriptionFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SubscriptionFragment.kt index 381888c4..2dd37b3f 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SubscriptionFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SubscriptionFragment.kt @@ -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> = HashMap() diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt index 23899ad8..6d9ebb0e 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt @@ -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 diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt index cca1a864..3cbe9d61 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt @@ -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 diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt index 8e923bab..8510ccf6 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt @@ -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) + } + } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt index 92f9946b..6ffbeaf3 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt @@ -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) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListGameFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListGameFragment.kt index 7370be6b..42b69915 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListGameFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListGameFragment.kt @@ -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) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetMultiSelectionFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetMultiSelectionFragment.kt index 7b5a7ff3..8092818f 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetMultiSelectionFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetMultiSelectionFragment.kt @@ -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( diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetNumericTextFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetNumericTextFragment.kt index 28753884..86b50ff6 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetNumericTextFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetNumericTextFragment.kt @@ -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 diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetStaticListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetStaticListFragment.kt index 537eb1c7..7df5b425 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetStaticListFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetStaticListFragment.kt @@ -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) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetSumFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetSumFragment.kt index e3ec3a1b..fd904c40 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetSumFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetSumFragment.kt @@ -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 diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt index c796c434..d8083d73 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt @@ -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() } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/viewmodel/BottomSheetViewModel.kt b/app/src/main/java/net/pokeranalytics/android/ui/viewmodel/BottomSheetViewModel.kt index eae5a684..07c7c39e 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/viewmodel/BottomSheetViewModel.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/viewmodel/BottomSheetViewModel.kt @@ -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? = null var staticRows: List = 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) } } diff --git a/build.gradle b/build.gradle index 84af79cd..79e6bf50 100644 --- a/build.gradle +++ b/build.gradle @@ -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'