diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollFragment.kt index 2368a76e..3538bacb 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollFragment.kt @@ -1,29 +1,47 @@ package net.pokeranalytics.android.ui.fragment +import android.app.Activity +import android.content.Intent import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager +import io.realm.Realm import io.realm.RealmResults import kotlinx.android.synthetic.main.fragment_bankroll.* import kotlinx.android.synthetic.main.fragment_stats.recyclerView +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch import net.pokeranalytics.android.R +import net.pokeranalytics.android.calculus.Calculator import net.pokeranalytics.android.calculus.ComputedStat import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.calculus.bankroll.BankrollCalculator +import net.pokeranalytics.android.calculus.bankroll.BankrollReport import net.pokeranalytics.android.calculus.bankroll.BankrollReportSetup +import net.pokeranalytics.android.model.Criteria import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.realm.Bankroll +import net.pokeranalytics.android.ui.activity.DataListActivity +import net.pokeranalytics.android.ui.activity.EditableDataActivity +import net.pokeranalytics.android.ui.activity.StatisticDetailsActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource +import net.pokeranalytics.android.ui.extensions.toast +import net.pokeranalytics.android.ui.fragment.DataListFragment.Companion.REQUEST_CODE_DETAILS import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable +import net.pokeranalytics.android.ui.view.rowrepresentable.GraphRow import timber.log.Timber +import java.util.* +import kotlin.collections.ArrayList class BankrollFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate { @@ -42,8 +60,9 @@ class BankrollFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSou private lateinit var parentActivity: PokerAnalyticsActivity private lateinit var bankrollAdapter: RowRepresentableAdapter - private lateinit var bankrolls: RealmResults private var rows: ArrayList = ArrayList() + private var bankrollReportForRow: HashMap = HashMap() + // Life Cycle @@ -57,15 +76,40 @@ class BankrollFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSou initData() } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (requestCode == REQUEST_CODE_DETAILS && resultCode == Activity.RESULT_OK) { + val needToDeleteItem = data?.getBooleanExtra(DataListActivity.IntentKey.ITEM_DELETED.keyName, false) ?: false + if (needToDeleteItem) { + GlobalScope.launch(Dispatchers.Main) { + delay(300) + //TODO: Delete bankroll + //deleteItem(lastItemClickedPosition) + } + } + } + } + override fun adapterRows(): List? { - Timber.d("adapterRows: ${rows.size}") return rows } - - override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { - + Timber.d("onRowSelected: $row") + when(row) { + is GraphRow -> { + row.report.results.firstOrNull()?.group?.let { computableGroup -> + StatisticDetailsActivity.newInstance(requireContext(), row.stat, computableGroup, row.report, false, row.title) + } + } + else -> { + if (bankrollReportForRow.containsKey(row)) { + val bankrollReport = bankrollReportForRow[row] + toast("${bankrollReport?.total}") + } + } + } } // Business @@ -75,38 +119,55 @@ class BankrollFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSou */ private fun initData() { - // Graph - //rows.add(GraphRow(report, Stat.NET_RESULT)) + rows.clear() + bankrollReportForRow.clear() + GlobalScope.launch { - // Global + val startDate = Date() + val realm = Realm.getDefaultInstance() + // Graph - val start = System.currentTimeMillis() + val requiredStats: List = listOf(Stat.NET_RESULT) + val options = Calculator.Options( + evolutionValues = Calculator.Options.EvolutionValues.STANDARD, + stats = requiredStats, + criterias = listOf(Criteria.Bankrolls) + ) - val globalBankrollReportSetup = BankrollReportSetup() - val globalBankrollReport = BankrollCalculator.computeReport(globalBankrollReportSetup) + val report = Calculator.computeStats(realm, options = options) + rows.add(0, GraphRow(report, Stat.NET_RESULT)) - Timber.d("bankrollReport: ${globalBankrollReport.total}") + val globalBankrollReportSetup = BankrollReportSetup() + val globalBankrollReport = BankrollCalculator.computeReport(globalBankrollReportSetup) + rows.add(globalBankrollReport) + bankrollReportForRow[globalBankrollReport] = globalBankrollReport - rows.add(globalBankrollReport) + // Bankrolls + rows.add(CustomizableRowRepresentable(RowViewType.HEADER_TITLE, resId = R.string.bankrolls)) + val bankrolls = LiveData.BANKROLL.items(realm) as RealmResults - // Bankrolls - rows.add(CustomizableRowRepresentable(RowViewType.HEADER_TITLE, resId = R.string.bankrolls)) + bankrolls.forEach { + val bankrollReportSetup = BankrollReportSetup(it) + val bankrollReport = BankrollCalculator.computeReport(bankrollReportSetup) + val computedStat = ComputedStat(Stat.NET_RESULT, bankrollReport.total) + val row = CustomizableRowRepresentable(RowViewType.TITLE_VALUE_ARROW, title = it.name, computedStat = computedStat, isSelectable = true) - bankrolls = LiveData.BANKROLL.items(getRealm()) as RealmResults - Timber.d("Bankrolls: ${bankrolls.size}") + rows.add(row) + bankrollReportForRow[row] = bankrollReport + } - bankrolls.forEach { - val bankrollReportSetup = BankrollReportSetup(it) - val bankrollReport = BankrollCalculator.computeReport(bankrollReportSetup) - val computedStat = ComputedStat(Stat.NET_RESULT, bankrollReport.total) - rows.add(CustomizableRowRepresentable(RowViewType.TITLE_VALUE_ARROW, title = it.name, computedStat = computedStat)) - } + realm.close() + Timber.d("initData: ${System.currentTimeMillis() - startDate.time}ms") - Timber.d("Done in: ${System.currentTimeMillis() - start}ms") - Timber.d("initData: ${rows.size} rows") + launch(Dispatchers.Main) { + if (!isDetached) { + bankrollAdapter.notifyDataSetChanged() + } + } + } } @@ -130,6 +191,16 @@ class BankrollFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSou layoutManager = viewManager adapter = bankrollAdapter } + + addButton.setOnClickListener { + LiveData.BANKROLL?.let { + EditableDataActivity.newInstance( + requireContext(), + dataType = it.ordinal, + primaryKey = null + ) + } + } } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt index 5554d807..05c518f4 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt @@ -383,6 +383,11 @@ enum class RowViewType(private var layoutRes: Int) { val formattedStat = ComputedStat(Stat.RISK_OF_RUIN, riskOfRuin).format() it.setTextFormat(formattedStat, itemView.context) } + val listener = View.OnClickListener { + adapter.delegate?.onRowSelected(position, row) + } + itemView.findViewById(R.id.container)?.setOnClickListener(listener) + } } } diff --git a/app/src/main/res/layout/fragment_bankroll.xml b/app/src/main/res/layout/fragment_bankroll.xml index 0cf1c9b1..3fd2106c 100644 --- a/app/src/main/res/layout/fragment_bankroll.xml +++ b/app/src/main/res/layout/fragment_bankroll.xml @@ -53,4 +53,17 @@ + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_data_list.xml b/app/src/main/res/layout/fragment_data_list.xml index f284300d..eae259fb 100644 --- a/app/src/main/res/layout/fragment_data_list.xml +++ b/app/src/main/res/layout/fragment_data_list.xml @@ -82,7 +82,6 @@ - - \ No newline at end of file diff --git a/app/src/main/res/layout/row_legend_default.xml b/app/src/main/res/layout/row_legend_default.xml index 884833cb..caeace10 100644 --- a/app/src/main/res/layout/row_legend_default.xml +++ b/app/src/main/res/layout/row_legend_default.xml @@ -2,9 +2,10 @@ + android:background="?selectableItemBackground">