From 81d8f5d8d9ad1264375e41b3d58e40c22b56897a Mon Sep 17 00:00:00 2001 From: Laurent Date: Mon, 5 Oct 2020 16:12:20 +0200 Subject: [PATCH] Adds ability to change result capture method inside the session --- .../android/model/realm/Bankroll.kt | 16 +- .../android/model/realm/Session.kt | 9 ++ .../android/ui/adapter/HomePagerAdapter.kt | 15 +- .../android/ui/modules/feed/FeedFragment.kt | 25 ++- .../ui/modules/feed/NewDataMenuActivity.kt | 2 +- .../handhistory/replayer/ReplayerFragment.kt | 11 -- .../session/ResultCaptureSelectionPopup.kt | 67 ++++++++ .../ui/modules/session/SessionFragment.kt | 148 +++++++----------- .../ui/modules/session/SessionViewModel.kt | 90 +++++++++++ .../android/ui/view/SessionRowView.kt | 10 +- .../ui/view/rowrepresentable/SessionRow.kt | 24 +-- .../res/drawable/ic_pause_circle_outline.xml | 9 ++ .../res/drawable/ic_play_circle_outline.xml | 9 ++ app/src/main/res/drawable/ic_swap_vert.xml | 9 ++ app/src/main/res/layout/activity_new_data.xml | 2 +- .../res/layout/view_replayer_settings.xml | 12 +- .../res/layout/view_result_capture_method.xml | 79 ++++++++++ app/src/main/res/menu/toolbar_session.xml | 10 +- 18 files changed, 386 insertions(+), 161 deletions(-) create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/modules/session/ResultCaptureSelectionPopup.kt create mode 100644 app/src/main/res/drawable/ic_pause_circle_outline.xml create mode 100644 app/src/main/res/drawable/ic_play_circle_outline.xml create mode 100644 app/src/main/res/drawable/ic_swap_vert.xml create mode 100644 app/src/main/res/layout/view_result_capture_method.xml diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt index de162646..655aedd6 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt @@ -15,6 +15,7 @@ import net.pokeranalytics.android.model.interfaces.NameManageable import net.pokeranalytics.android.model.interfaces.SaveValidityStatus import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.rowrepresentable.BankrollRow +import net.pokeranalytics.android.ui.view.rowrepresentable.SessionRow import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow import net.pokeranalytics.android.util.Preferences import net.pokeranalytics.android.util.UserDefaults @@ -22,7 +23,20 @@ import java.util.* enum class ResultCaptureType { BUYIN_CASHEDOUT, - NET_RESULT + NET_RESULT; + + companion object { + val buyinCashedOutFields = listOf(SessionRow.CASHED_OUT, SessionRow.BUY_IN, SessionRow.TIPS) + val netResultFields = listOf(SessionRow.NET_RESULT) + } + + val rowRepresentables: List + get() { + return when (this) { + BUYIN_CASHEDOUT -> buyinCashedOutFields + NET_RESULT -> netResultFields + } + } } open class Bankroll : RealmObject(), NameManageable, RowRepresentable { diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt index 1c24eaa7..a6b0d5b0 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt @@ -993,4 +993,13 @@ open class Session : RealmObject(), Savable, Editable, RowRepresentable, Timed, } } + fun clearBuyinCashedOut() { + this.result?.buyin = null + this.result?.cashout = null + } + + fun clearNetResult() { + this.result?.netResult = null + } + } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/HomePagerAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/HomePagerAdapter.kt index 8017dedf..7e9dfb7b 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/HomePagerAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/HomePagerAdapter.kt @@ -4,6 +4,7 @@ import android.util.SparseArray import android.view.ViewGroup import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentStatePagerAdapter +import net.pokeranalytics.android.exceptions.PAIllegalStateException import net.pokeranalytics.android.ui.modules.calendar.CalendarFragment import net.pokeranalytics.android.ui.fragment.ReportsFragment import net.pokeranalytics.android.ui.fragment.SettingsFragment @@ -27,7 +28,7 @@ class HomePagerAdapter(fragmentManager: FragmentManager) : 2 -> CalendarFragment.newInstance() 3 -> ReportsFragment.newInstance() 4 -> SettingsFragment.newInstance() - else -> FeedFragment.newInstance() + else -> throw PAIllegalStateException("Should not happen") } } @@ -53,7 +54,7 @@ class HomePagerAdapter(fragmentManager: FragmentManager) : CalendarFragment::class.java -> 2 ReportsFragment::class.java -> 3 SettingsFragment::class.java -> 4 - else -> -1 + else -> throw PAIllegalStateException("Should not happen") } } @@ -64,14 +65,4 @@ class HomePagerAdapter(fragmentManager: FragmentManager) : } } -// /** -// * Return the fragment at the position key -// */ -// fun getFragment(key: Int): BaseFragment? { -// if (this.weakReferences.get(key) != null) { -// return this.weakReferences.get(key).get() -// } -// return null -// } - } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/feed/FeedFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/feed/FeedFragment.kt index c9f3b386..f86c0d8e 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/feed/FeedFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/feed/FeedFragment.kt @@ -54,8 +54,7 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate, PurchaseLis companion object { fun newInstance(): FeedFragment { - val fragment = - FeedFragment() + val fragment = FeedFragment() val bundle = Bundle() fragment.arguments = bundle return fragment @@ -65,8 +64,7 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate, PurchaseLis private var menuPosition: Int = 0 - private var currentTab = - Tab.SESSIONS + private var currentTab = Tab.SESSIONS private lateinit var sessionAdapter: FeedSessionRowRepresentableAdapter private lateinit var transactionAdapter: FeedTransactionRowRepresentableAdapter @@ -249,11 +247,7 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate, PurchaseLis */ private fun initUI() { - this.sessionAdapter = - FeedSessionRowRepresentableAdapter( - getRealm(), - this - ) + this.sessionAdapter = FeedSessionRowRepresentableAdapter(getRealm(), this) registerForContextMenu(this.menuRecyclerView) @@ -284,6 +278,12 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate, PurchaseLis messageBox.isVisible = false } + val viewManager = SmoothScrollLinearLayoutManager(requireContext()) + menuRecyclerView.apply { + setHasFixedSize(true) + layoutManager = viewManager + } + // Add button addButton.setOnClickListener { activity?.let { @@ -347,13 +347,6 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate, PurchaseLis private fun initData() { this.currentFilterable = FilterableType.SESSION - - val viewManager = SmoothScrollLinearLayoutManager(requireContext()) - menuRecyclerView.apply { - setHasFixedSize(true) - layoutManager = viewManager - } - applyFilter() } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/feed/NewDataMenuActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/feed/NewDataMenuActivity.kt index fe32048d..bcfa40c4 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/feed/NewDataMenuActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/feed/NewDataMenuActivity.kt @@ -79,7 +79,7 @@ class NewDataMenuActivity : BaseActivity() { finishWithResult(2) } - newHandHistory.setOnClickListener { + new_hand_history.setOnClickListener { finishWithResult(3) } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/replayer/ReplayerFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/replayer/ReplayerFragment.kt index a58975dc..3cdaac2c 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/replayer/ReplayerFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/replayer/ReplayerFragment.kt @@ -225,8 +225,6 @@ class ReplayerFragment : RealmFragment() { private fun openSettings() { -// val builder = AlertDialog.Builder(requireContext()) - // Get the layout inflater val inflater = requireActivity().layoutInflater @@ -247,15 +245,6 @@ class ReplayerFragment : RealmFragment() { popupWindow.isFocusable = true popupWindow.showAsDropDown(this.settings, 0, -300) - - -// builder.setView(view).setNegativeButton(R.string.ok) { dialog, _ -> -// dialog.cancel() -// } -// -// val dialog = builder.create() -// dialog.show() - } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/session/ResultCaptureSelectionPopup.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/session/ResultCaptureSelectionPopup.kt new file mode 100644 index 00000000..91da6338 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/session/ResultCaptureSelectionPopup.kt @@ -0,0 +1,67 @@ +package net.pokeranalytics.android.ui.modules.session + +import android.app.Activity +import android.widget.Button +import android.widget.PopupWindow +import com.google.android.material.chip.Chip +import com.google.android.material.chip.ChipGroup +import net.pokeranalytics.android.R +import net.pokeranalytics.android.exceptions.PAIllegalStateException +import net.pokeranalytics.android.model.realm.ResultCaptureType + +interface ResultCaptureTypeDelegate { + fun resultCaptureTypeSelected(resultCaptureType: ResultCaptureType, applyBankroll: Boolean) +} + +class ResultCaptureSelectionPopup( + private var delegate: ResultCaptureTypeDelegate, + var type: ResultCaptureType?, + activity: Activity +) : PopupWindow(activity) { + + init { + + // Get the layout inflater + val inflater = activity.layoutInflater + val view = inflater.inflate(R.layout.view_result_capture_method, null) + + this.contentView = view + this.isFocusable = true + + val netResultChip = view.findViewById(R.id.chip_net_result) + netResultChip.isChecked = type == ResultCaptureType.NET_RESULT + netResultChip.isCheckedIconVisible = true + + val buyinCashoutChip = view.findViewById(R.id.chip_buyin_cashout) + buyinCashoutChip.isChecked = type == ResultCaptureType.BUYIN_CASHEDOUT + buyinCashoutChip.isCheckedIconVisible = true + + val buttonSessionOnly = view.findViewById