diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f304e967..b593e589 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -34,6 +34,16 @@
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustNothing" />
+
+
+
+
+ android:name=".ui.activity.GraphActivity"
+ android:launchMode="singleTop"
+ android:screenOrientation="portrait" />
- results.addEvolutionValue(netBB100, NET_BB_PER_100_HANDS, session)
+ results.addEvolutionValue(netBB100, stat = NET_BB_PER_100_HANDS, data = session)
}
Stat.returnOnInvestment(tSum, tBuyinSum)?.let { roi ->
- results.addEvolutionValue(roi, ROI, session)
+ results.addEvolutionValue(roi, stat = ROI, data = session)
}
}
diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/Report.kt b/app/src/main/java/net/pokeranalytics/android/calculus/Report.kt
index de8c329f..e97d56f9 100644
--- a/app/src/main/java/net/pokeranalytics/android/calculus/Report.kt
+++ b/app/src/main/java/net/pokeranalytics/android/calculus/Report.kt
@@ -158,13 +158,14 @@ class ComputedResults(group: ComputableGroup) {
/**
* Adds a value to the evolution values
*/
- fun addEvolutionValue(value: Double, stat: Stat, data: Any) {
- this._addEvolutionValue(Point(value, data), stat = stat)
- }
+ fun addEvolutionValue(value: Double, duration: Double? = null, stat: Stat, data: Timed) {
- fun addEvolutionValue(value: Double, duration: Double, stat: Stat, data: Timed) {
- stat.underlyingClass = data::class.java
- this._addEvolutionValue(Point(value, y = duration, data = data.id), stat = stat)
+ val point = if (duration != null) {
+ Point(duration, y = value, data = data.objectIdentifier)
+ } else {
+ Point(value, data = data.objectIdentifier)
+ }
+ this._addEvolutionValue(point, stat = stat)
}
private fun _addEvolutionValue(point: Point, stat: Stat) {
diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt b/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt
index 09335cbe..efbf89c7 100644
--- a/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt
+++ b/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt
@@ -1,9 +1,9 @@
package net.pokeranalytics.android.calculus
import android.content.Context
-import io.realm.RealmModel
import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.FormattingException
+import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.Timed
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
@@ -17,7 +17,11 @@ class StatFormattingException(message: String) : Exception(message) {
}
-interface StatBase : RealmModel {
+class ObjectIdentifier(var id: String, var clazz: Class) {
+
+}
+
+interface StatBase : Identifiable {
fun formattedValue(stat: Stat, context: Context): TextFormat
@@ -48,7 +52,7 @@ enum class AggregationType {
/**
* An enum representing all the types of Session statistics
*/
-enum class Stat(var underlyingClass: Class? = null) : RowRepresentable {
+enum class Stat : RowRepresentable {
NETRESULT,
HOURLY_RATE,
diff --git a/app/src/main/java/net/pokeranalytics/android/model/interfaces/Timed.kt b/app/src/main/java/net/pokeranalytics/android/model/interfaces/Timed.kt
index 01431a6e..49ba2542 100644
--- a/app/src/main/java/net/pokeranalytics/android/model/interfaces/Timed.kt
+++ b/app/src/main/java/net/pokeranalytics/android/model/interfaces/Timed.kt
@@ -1,9 +1,10 @@
package net.pokeranalytics.android.model.interfaces
+import net.pokeranalytics.android.calculus.ObjectIdentifier
import net.pokeranalytics.android.calculus.StatBase
import java.util.*
-interface Timed : StatBase, Identifiable {
+interface Timed : StatBase {
fun startDate() : Date?
@@ -29,4 +30,6 @@ interface Timed : StatBase, Identifiable {
val hourlyDuration: Double
get() = this.netDuration / 3600000.0
+ val objectIdentifier : ObjectIdentifier
+
}
\ No newline at end of file
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 dd126acd..0b7b044f 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
@@ -11,10 +11,7 @@ import io.realm.annotations.LinkingObjects
import io.realm.annotations.PrimaryKey
import io.realm.kotlin.where
import net.pokeranalytics.android.R
-import net.pokeranalytics.android.calculus.ComputedStat
-import net.pokeranalytics.android.calculus.Stat
-import net.pokeranalytics.android.calculus.StatFormattingException
-import net.pokeranalytics.android.calculus.TextFormat
+import net.pokeranalytics.android.calculus.*
import net.pokeranalytics.android.exceptions.ModelException
import net.pokeranalytics.android.model.Limit
import net.pokeranalytics.android.model.LiveData
@@ -47,7 +44,6 @@ typealias BB = Double
open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDataSource, RowRepresentable, Timed,
TimeFilterable, Filterable {
-
enum class Type {
CASH_GAME,
TOURNAMENT
@@ -898,6 +894,11 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
}
+ // Timed
+
+ override val objectIdentifier: ObjectIdentifier
+ get() = ObjectIdentifier(this.id, Session::class.java)
+
}
diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt
index 9774e1b7..4b3178e7 100644
--- a/app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt
+++ b/app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt
@@ -7,6 +7,7 @@ import io.realm.RealmResults
import io.realm.annotations.Ignore
import io.realm.annotations.LinkingObjects
import io.realm.annotations.PrimaryKey
+import net.pokeranalytics.android.calculus.ObjectIdentifier
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.calculus.StatFormattingException
import net.pokeranalytics.android.calculus.TextFormat
@@ -109,5 +110,10 @@ open class SessionSet() : RealmObject(), Timed, Filterable {
}
+ // Timed
+
+ override val objectIdentifier: ObjectIdentifier
+ get() = ObjectIdentifier(this.id, SessionSet::class.java)
+
}
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/BankrollActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/BankrollActivity.kt
new file mode 100644
index 00000000..e1b6ea05
--- /dev/null
+++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/BankrollActivity.kt
@@ -0,0 +1,33 @@
+package net.pokeranalytics.android.ui.activity
+
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import net.pokeranalytics.android.R
+import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
+
+class BankrollActivity : PokerAnalyticsActivity() {
+
+ companion object {
+ fun newInstance(context: Context) {
+ val intent = Intent(context, BankrollActivity::class.java)
+ context.startActivity(intent)
+ }
+
+ /**
+ * Create a new instance for result
+ */
+ fun newInstanceForResult(fragment: Fragment, requestCode: Int) {
+ val intent = Intent(fragment.requireContext(), BankrollActivity::class.java)
+ fragment.startActivityForResult(intent, requestCode)
+ }
+
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_bankroll)
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt
index 39602da7..096a6de5 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt
@@ -32,20 +32,35 @@ class HomeActivity : PokerAnalyticsActivity() {
private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
when (item.itemId) {
- net.pokeranalytics.android.R.id.navigation_history -> {
+ //CLEAN
+ /*
+ R.id.navigation_history -> {
displayFragment(0)
- return@OnNavigationItemSelectedListener true
}
- net.pokeranalytics.android.R.id.navigation_stats -> {
+ R.id.navigation_stats -> {
displayFragment(1)
- return@OnNavigationItemSelectedListener true
}
- net.pokeranalytics.android.R.id.navigation_settings -> {
+ R.id.navigation_settings -> {
displayFragment(2)
- return@OnNavigationItemSelectedListener true
+ }
+ */
+ R.id.navigation_history -> {
+ displayFragment(0)
+ }
+ R.id.navigation_stats -> {
+ displayFragment(1)
+ }
+ R.id.navigation_calendar -> {
+ displayFragment(2)
+ }
+ R.id.navigation_reports -> {
+ displayFragment(3)
+ }
+ R.id.navigation_more -> {
+ displayFragment(4)
}
}
- false
+ return@OnNavigationItemSelectedListener true
}
override fun onCreate(savedInstanceState: Bundle?) {
@@ -97,7 +112,7 @@ class HomeActivity : PokerAnalyticsActivity() {
setSupportActionBar(toolbar)
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
- navigation.selectedItemId = net.pokeranalytics.android.R.id.navigation_history
+ navigation.selectedItemId = R.id.navigation_history
val homePagerAdapter = HomePagerAdapter(supportFragmentManager)
viewPager.offscreenPageLimit = 5
@@ -134,9 +149,10 @@ class HomeActivity : PokerAnalyticsActivity() {
*/
private fun updateToolbar(index: Int) {
when (index) {
+ //CLEAN
+ /*
0 -> {
toolbar.title = getString(R.string.feed)
- //TODO: Change filter button visibility
homeMenu?.findItem(R.id.filter)?.isVisible = false
}
1 -> {
@@ -147,6 +163,28 @@ class HomeActivity : PokerAnalyticsActivity() {
toolbar.title = getString(R.string.services)
homeMenu?.findItem(R.id.filter)?.isVisible = false
}
+ */
+
+ 0 -> {
+ toolbar.title = getString(R.string.feed)
+ homeMenu?.findItem(R.id.filter)?.isVisible = true
+ }
+ 1 -> {
+ toolbar.title = getString(R.string.stats)
+ homeMenu?.findItem(R.id.filter)?.isVisible = true
+ }
+ 2 -> {
+ toolbar.title = getString(R.string.calendar)
+ homeMenu?.findItem(R.id.filter)?.isVisible = false
+ }
+ 3 -> {
+ toolbar.title = getString(R.string.reports)
+ homeMenu?.findItem(R.id.filter)?.isVisible = false
+ }
+ 4 -> {
+ toolbar.title = getString(R.string.more)
+ homeMenu?.findItem(R.id.filter)?.isVisible = false
+ }
}
}
@@ -171,18 +209,15 @@ class HomeActivity : PokerAnalyticsActivity() {
.setCancelable(true)
.setItems(choices.toTypedArray()) { _, which ->
Timber.d("Click on $which")
-
- when(which) {
+ when (which) {
0 -> FiltersActivity.newInstance(this@HomeActivity)
}
-
}
.setNegativeButton(R.string.cancel) { _, _ ->
Timber.d("Click on cancel")
}
builder.show()
-
}
}
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/SettingsActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/SettingsActivity.kt
new file mode 100644
index 00000000..56a1701d
--- /dev/null
+++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/SettingsActivity.kt
@@ -0,0 +1,33 @@
+package net.pokeranalytics.android.ui.activity
+
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import net.pokeranalytics.android.R
+import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
+
+class SettingsActivity : PokerAnalyticsActivity() {
+
+ companion object {
+ fun newInstance(context: Context) {
+ val intent = Intent(context, SettingsActivity::class.java)
+ context.startActivity(intent)
+ }
+
+ /**
+ * Create a new instance for result
+ */
+ fun newInstanceForResult(fragment: Fragment, requestCode: Int) {
+ val intent = Intent(fragment.requireContext(), SettingsActivity::class.java)
+ fragment.startActivityForResult(intent, requestCode)
+ }
+
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_settings)
+ }
+
+}
\ No newline at end of file
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 17a16d3a..5e504fb1 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,9 +4,7 @@ import android.util.SparseArray
import android.view.ViewGroup
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentStatePagerAdapter
-import net.pokeranalytics.android.ui.fragment.HistoryFragment
-import net.pokeranalytics.android.ui.fragment.SettingsFragment
-import net.pokeranalytics.android.ui.fragment.StatsFragment
+import net.pokeranalytics.android.ui.fragment.*
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
import java.lang.ref.WeakReference
@@ -19,15 +17,23 @@ class HomePagerAdapter(fragmentManager: FragmentManager) : FragmentStatePagerAda
override fun getItem(position: Int): PokerAnalyticsFragment {
return when (position) {
+ //CLEAN
+ /*
0 -> HistoryFragment.newInstance()
1 -> StatsFragment.newInstance()
2 -> SettingsFragment.newInstance()
+ */
+ 0 -> HistoryFragment.newInstance()
+ 1 -> StatsFragment.newInstance()
+ 2 -> CalendarFragment.newInstance()
+ 3 -> ReportsFragment.newInstance()
+ 4 -> MoreFragment.newInstance()
else -> HistoryFragment.newInstance()
}
}
override fun getCount(): Int {
- return 3
+ return 5//3
}
override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
@@ -42,11 +48,18 @@ class HomePagerAdapter(fragmentManager: FragmentManager) : FragmentStatePagerAda
}
override fun getItemPosition(obj: Any): Int {
- val fragment = obj as PokerAnalyticsFragment
- return when (fragment) {
+ return when (obj) {
+ //CLEAN
+ /*
HistoryFragment::class.java -> 0
StatsFragment::class.java -> 1
SettingsFragment::class.java -> 2
+ */
+ HistoryFragment::class.java -> 0
+ StatsFragment::class.java -> 1
+ CalendarFragment::class.java -> 2
+ ReportsFragment::class.java -> 3
+ MoreFragment::class.java -> 4
else -> -1
}
}
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
new file mode 100644
index 00000000..b0c06521
--- /dev/null
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollFragment.kt
@@ -0,0 +1,73 @@
+package net.pokeranalytics.android.ui.fragment
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.recyclerview.widget.LinearLayoutManager
+import kotlinx.android.synthetic.main.fragment_bankroll.*
+import kotlinx.android.synthetic.main.fragment_stats.recyclerView
+import net.pokeranalytics.android.R
+import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
+import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
+
+class BankrollFragment : PokerAnalyticsFragment() {
+
+ companion object {
+
+ /**
+ * Create new instance
+ */
+ fun newInstance(): BankrollFragment {
+ val fragment = BankrollFragment()
+ val bundle = Bundle()
+ fragment.arguments = bundle
+ return fragment
+ }
+ }
+
+ private lateinit var parentActivity: PokerAnalyticsActivity
+
+ // Life Cycle
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+ return inflater.inflate(R.layout.fragment_bankroll, container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ initData()
+ initUI()
+ }
+
+
+ // Business
+
+ /**
+ * Init data
+ */
+ private fun initData() {
+
+ }
+
+ /**
+ * Init UI
+ */
+ private fun initUI() {
+
+ parentActivity = activity as PokerAnalyticsActivity
+
+ parentActivity.setSupportActionBar(toolbar)
+ parentActivity.supportActionBar?.setDisplayHomeAsUpEnabled(true)
+ setHasOptionsMenu(true)
+
+ val viewManager = LinearLayoutManager(requireContext())
+
+ recyclerView.apply {
+ setHasFixedSize(true)
+ layoutManager = viewManager
+ //adapter = statsAdapter
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt
new file mode 100644
index 00000000..b05d036f
--- /dev/null
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt
@@ -0,0 +1,63 @@
+package net.pokeranalytics.android.ui.fragment
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.recyclerview.widget.LinearLayoutManager
+import kotlinx.android.synthetic.main.fragment_stats.*
+import net.pokeranalytics.android.R
+import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
+
+class CalendarFragment : PokerAnalyticsFragment() {
+
+ companion object {
+
+ /**
+ * Create new instance
+ */
+ fun newInstance(): CalendarFragment {
+ val fragment = CalendarFragment()
+ val bundle = Bundle()
+ fragment.arguments = bundle
+ return fragment
+ }
+ }
+
+ // Life Cycle
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+ return inflater.inflate(R.layout.fragment_calendar, container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ initData()
+ initUI()
+ }
+
+
+ // Business
+
+ /**
+ * Init data
+ */
+ private fun initData() {
+
+ }
+
+ /**
+ * Init UI
+ */
+ private fun initUI() {
+
+ val viewManager = LinearLayoutManager(requireContext())
+
+ recyclerView.apply {
+ setHasFixedSize(true)
+ layoutManager = viewManager
+ //adapter = statsAdapter
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt
index 5cfb9755..6afffdbf 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt
@@ -13,25 +13,24 @@ import com.github.mikephil.charting.data.LineDataSet
import com.github.mikephil.charting.highlight.Highlight
import com.github.mikephil.charting.listener.OnChartValueSelectedListener
import com.google.android.material.chip.Chip
+import com.google.android.material.chip.ChipGroup
import kotlinx.android.synthetic.main.fragment_evograph.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.GraphType
+import net.pokeranalytics.android.calculus.ObjectIdentifier
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
import net.pokeranalytics.android.ui.graph.setStyle
import net.pokeranalytics.android.ui.view.LegendView
+import net.pokeranalytics.android.util.extensions.ChipGroupExtension
import net.pokeranalytics.android.util.extensions.px
-
-interface GraphDataSource {
-
-
-}
+import net.pokeranalytics.android.util.extensions.toast
+import java.text.DateFormat
class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener {
private lateinit var parentActivity: PokerAnalyticsActivity
- lateinit var dataSource: GraphDataSource
lateinit var stat: Stat
lateinit var entries: List
@@ -66,7 +65,7 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener {
this.legendView = LegendView(requireContext())
this.legendContainer.addView(this.legendView)
- this.legendView.prepareWithStat(this.stat)
+ this.legendView.prepareWithStat(this.stat, this.entries.size)
// Avoid a bug during setting the title
toolbar.title = ""
@@ -109,9 +108,12 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener {
this.chipGroup.addView(chip)
}
- this.chipGroup.setOnCheckedChangeListener { group, i ->
-
- }
+ this.chipGroup.setOnCheckedChangeListener(object : ChipGroupExtension.SingleSelectionOnCheckedListener() {
+ override fun onCheckedChanged(group: ChipGroup, checkedId: Int) {
+ super.onCheckedChanged(group, checkedId)
+ toast("Show: ${stat.aggregationTypes[group.getChildAt(checkedId).id].name}")
+ }
+ })
this.chipGroup.check(this.stat.aggregationTypes.first().ordinal)
}
@@ -127,24 +129,16 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener {
e?.let { entry ->
h?.let { highlight ->
- val id = entry.data as String
- val item = getRealm().where(this.stat.underlyingClass).equalTo("id", id).findAll().firstOrNull()
+ val identifier = entry.data as ObjectIdentifier
+ val item = getRealm().where(identifier.clazz).equalTo("id", identifier.id).findAll().firstOrNull()
item?.let {
- val date = it.startDate()
-
- val entryStatName = this.stat.localizedTitle(requireContext())
+ val formattedDate = DateFormat.getDateInstance(DateFormat.SHORT).format(it.startDate())
val entryValue = it.formattedValue(this.stat, requireContext())
-
- val totalStatName = this.stat.cumulativeLabelResId(requireContext())
val totalStatValue = this.stat.format(e.y.toDouble(), null, requireContext())
+ this.legendView.setItemData(this.stat, formattedDate, entryValue, totalStatValue)
}
-
-// this.text.text = ""
-
-
-
}
}
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/MoreFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/MoreFragment.kt
new file mode 100644
index 00000000..406a0fa7
--- /dev/null
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/MoreFragment.kt
@@ -0,0 +1,93 @@
+package net.pokeranalytics.android.ui.fragment
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.recyclerview.widget.LinearLayoutManager
+import kotlinx.android.synthetic.main.fragment_stats.*
+import net.pokeranalytics.android.R
+import net.pokeranalytics.android.ui.activity.BankrollActivity
+import net.pokeranalytics.android.ui.activity.SettingsActivity
+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.fragment.components.PokerAnalyticsFragment
+import net.pokeranalytics.android.ui.view.RowRepresentable
+import net.pokeranalytics.android.ui.view.rowrepresentable.MoreTabRow
+
+class MoreFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate {
+
+ companion object {
+
+ /**
+ * Create new instance
+ */
+ fun newInstance(): MoreFragment {
+ val fragment = MoreFragment()
+ val bundle = Bundle()
+ fragment.arguments = bundle
+ return fragment
+ }
+
+ val rowRepresentation: List by lazy {
+ val rows = ArrayList()
+ rows.addAll(MoreTabRow.values())
+ rows
+ }
+
+ }
+
+ private lateinit var moreAdapter: RowRepresentableAdapter
+
+
+ // Life Cycle
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+ return inflater.inflate(R.layout.fragment_calendar, container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ initData()
+ initUI()
+ }
+
+ // Rows
+ override fun adapterRows(): List? {
+ return rowRepresentation
+ }
+
+ override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
+ super.onRowSelected(position, row, fromAction)
+ when(row) {
+ MoreTabRow.BANKROLL -> BankrollActivity.newInstance(requireContext())
+ MoreTabRow.SETTINGS -> SettingsActivity.newInstance(requireContext())
+ }
+ }
+
+ // Business
+
+ /**
+ * Init data
+ */
+ private fun initData() {
+ }
+
+ /**
+ * Init UI
+ */
+ private fun initUI() {
+
+ moreAdapter = RowRepresentableAdapter(this, this)
+
+ val viewManager = LinearLayoutManager(requireContext())
+
+ recyclerView.apply {
+ setHasFixedSize(true)
+ layoutManager = viewManager
+ adapter = moreAdapter
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt
new file mode 100644
index 00000000..8dc97324
--- /dev/null
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt
@@ -0,0 +1,84 @@
+package net.pokeranalytics.android.ui.fragment
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.recyclerview.widget.LinearLayoutManager
+import kotlinx.android.synthetic.main.fragment_stats.*
+import net.pokeranalytics.android.R
+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.fragment.components.PokerAnalyticsFragment
+import net.pokeranalytics.android.ui.view.RowRepresentable
+import net.pokeranalytics.android.ui.view.rowrepresentable.ReportRow
+
+class ReportsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate {
+
+ companion object {
+
+ /**
+ * Create new instance
+ */
+ fun newInstance(): ReportsFragment {
+ val fragment = ReportsFragment()
+ val bundle = Bundle()
+ fragment.arguments = bundle
+ return fragment
+ }
+
+ val rowRepresentation: List by lazy {
+ val rows = ArrayList()
+ rows.addAll(ReportRow.getRows())
+ rows
+ }
+ }
+
+ private lateinit var reportsAdapter: RowRepresentableAdapter
+
+
+ // Life Cycle
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+ return inflater.inflate(R.layout.fragment_reports, container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ initData()
+ initUI()
+ }
+
+ // Rows
+
+ override fun adapterRows(): List? {
+ return rowRepresentation
+ }
+
+
+ // Business
+
+ /**
+ * Init data
+ */
+ private fun initData() {
+ }
+
+ /**
+ * Init UI
+ */
+ private fun initUI() {
+
+ reportsAdapter = RowRepresentableAdapter(this, this)
+
+ val viewManager = LinearLayoutManager(requireContext())
+
+ recyclerView.apply {
+ setHasFixedSize(true)
+ layoutManager = viewManager
+ adapter = reportsAdapter
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt
index 2bf70668..41fdd733 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt
@@ -6,7 +6,6 @@ import android.view.*
import android.view.animation.OvershootInterpolator
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
-import androidx.core.content.ContextCompat
import androidx.interpolator.view.animation.FastOutSlowInInterpolator
import androidx.recyclerview.widget.DiffUtil
import io.realm.kotlin.where
@@ -168,7 +167,6 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate {
when (currentSession.getState()) {
SessionState.PENDING, SessionState.PLANNED -> {
- state.setTextColor(ContextCompat.getColor(requireContext(), R.color.white))
sessionMenu?.findItem(R.id.restart)?.isVisible = false
floatingActionButton.setImageResource(R.drawable.ic_outline_play)
sessionMenu?.findItem(R.id.stop)?.isVisible = false
@@ -177,7 +175,6 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate {
.setInterpolator(OvershootInterpolator()).start()
}
SessionState.STARTED -> {
- state.setTextColor(ContextCompat.getColor(requireContext(), R.color.green))
sessionMenu?.findItem(R.id.restart)?.isVisible = true
floatingActionButton.setImageResource(R.drawable.ic_outline_pause)
sessionMenu?.findItem(R.id.stop)?.isVisible = true
@@ -187,7 +184,6 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate {
handler.postDelayed(refreshTimer, 30000)
}
SessionState.PAUSED -> {
- state.setTextColor(ContextCompat.getColor(requireContext(), R.color.blue))
sessionMenu?.findItem(R.id.restart)?.isVisible = true
floatingActionButton.setImageResource(R.drawable.ic_outline_play)
sessionMenu?.findItem(R.id.stop)?.isVisible = true
@@ -196,7 +192,6 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate {
.setInterpolator(OvershootInterpolator()).start()
}
SessionState.FINISHED -> {
- state.setTextColor(ContextCompat.getColor(requireContext(), R.color.white))
sessionMenu?.findItem(R.id.restart)?.isVisible = true
sessionMenu?.findItem(R.id.stop)?.isVisible = false
floatingActionButton.animate().scaleX(0f).scaleY(0f).alpha(0f)
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt
index b276e9d9..7348188b 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt
@@ -68,16 +68,17 @@ class SettingsFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Sta
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
- return inflater.inflate(net.pokeranalytics.android.R.layout.fragment_settings, container, false)
+ return inflater.inflate(R.layout.fragment_settings, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initData()
+ initUI()
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
- if (requestCode == SettingsFragment.REQUEST_CODE_CURRENCY && resultCode == Activity.RESULT_OK) {
+ if (requestCode == REQUEST_CODE_CURRENCY && resultCode == Activity.RESULT_OK) {
data?.let {
Preferences.setCurrencyCode(data.getStringExtra(CurrenciesFragment.INTENT_CURRENCY_CODE), requireContext())
val realm = Realm.getDefaultInstance()
@@ -93,7 +94,7 @@ class SettingsFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Sta
}
override fun adapterRows(): List? {
- return SettingsFragment.rowRepresentation
+ return rowRepresentation
}
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
@@ -102,7 +103,7 @@ class SettingsFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Sta
SettingRow.RATE_APP -> parentActivity.openPlayStorePage()
SettingRow.CONTACT_US -> parentActivity.openContactMail(R.string.contact)
SettingRow.BUG_REPORT -> parentActivity.openContactMail(R.string.bug_report_subject)
- SettingRow.CURRENCY -> CurrenciesActivity.newInstanceForResult(this@SettingsFragment, SettingsFragment.REQUEST_CODE_CURRENCY)
+ SettingRow.CURRENCY -> CurrenciesActivity.newInstanceForResult(this@SettingsFragment, REQUEST_CODE_CURRENCY)
SettingRow.FOLLOW_US -> {
when (position) {
0 -> parentActivity.openUrl(URL.BLOG.value)
@@ -122,24 +123,35 @@ class SettingsFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Sta
}
/**
- * Init data
+ * Init UI
*/
- private fun initData() {
+ private fun initUI() {
parentActivity = activity as PokerAnalyticsActivity
+ parentActivity.setSupportActionBar(toolbar)
+ parentActivity.supportActionBar?.setDisplayHomeAsUpEnabled(true)
+ setHasOptionsMenu(true)
+
val viewManager = LinearLayoutManager(requireContext())
settingsAdapterRow = RowRepresentableAdapter(
this, this
)
- customRecyclerView.apply {
+ recyclerView.apply {
setHasFixedSize(true)
layoutManager = viewManager
adapter = settingsAdapterRow
}
}
+ /**
+ * Init data
+ */
+ private fun initData() {
+
+ }
+
/**
* Open GDPR Activity
*/
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/LegendView.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/LegendView.kt
index a5d4ad1b..03552cde 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/view/LegendView.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/view/LegendView.kt
@@ -8,8 +8,8 @@ import androidx.constraintlayout.widget.ConstraintLayout
import kotlinx.android.synthetic.main.layout_legend_default.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.Stat
-import net.pokeranalytics.android.model.realm.Session
-
+import net.pokeranalytics.android.calculus.TextFormat
+import net.pokeranalytics.android.ui.view.fields.setTextFormat
/**
* Display a row session
@@ -46,23 +46,22 @@ class LegendView : FrameLayout {
/**
* Set the stat data to the view
*/
- fun prepareWithStat(stat: Stat) {
+ fun prepareWithStat(stat: Stat, counter: Int) {
this.stat1Name.text = stat.localizedTitle(context)
this.stat2Name.text = stat.cumulativeLabelResId(context)
-
- //TODO: Set real data
- this.title.text = "11/04/2019"
- this.stat1Value.text = "$521"
- this.stat2Value.text = "$15,051"
- this.counter.text = "21 Sessions"
+ this.counter.text = "$counter ${context.getString(R.string.sessions)}"
}
/**
*
*/
- fun setData(session: Session) {
+ fun setItemData(stat: Stat, title: String, statFormat1: TextFormat, statFormat2: TextFormat) {
+
+ this.title.text = title
+ this.stat1Value.setTextFormat(statFormat1, context)
+ this.stat2Value.setTextFormat(statFormat2, context)
}
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt
index ba8b6b90..0aa25f23 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt
@@ -8,7 +8,7 @@ import net.pokeranalytics.android.util.NULL_TEXT
/**
* An interface extending Displayable to add a way to represent an object as a String
*/
-interface RowRepresentable : Displayable, EditDataSource {
+interface RowRepresentable : Displayable, EditDataSource, ImageDecorator {
fun getDisplayName(): String {
return NULL_TEXT
@@ -28,6 +28,17 @@ interface DefaultEditDataSource : EditDataSource, Localizable {
}
}
+/**
+ * An interface to add an image to a row
+ */
+interface ImageDecorator {
+
+ val imageRes: Int?
+ get() {
+ return null
+ }
+}
+
/**
* An interface used so that enums numericValues can be represented visually
* as rows in RecyclerViews
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 c887ff71..1659120d 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
@@ -16,6 +16,7 @@ import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.model.realm.Transaction
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
+import net.pokeranalytics.android.ui.view.fields.setTextFormat
import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable
/**
@@ -43,6 +44,7 @@ enum class RowViewType(private var layoutRes: Int) {
// Row
TITLE(R.layout.row_title),
TITLE_ARROW(R.layout.row_title_arrow),
+ TITLE_ICON_ARROW(R.layout.row_title_icon_arrow),
TITLE_VALUE(R.layout.row_title_value),
TITLE_VALUE_ARROW(R.layout.row_title_value_arrow),
TITLE_SWITCH(R.layout.row_title_switch),
@@ -75,7 +77,7 @@ enum class RowViewType(private var layoutRes: Int) {
// Row View Holder
HEADER_TITLE, HEADER_TITLE_VALUE, HEADER_TITLE_AMOUNT, HEADER_TITLE_AMOUNT_BIG,
LOCATION_TITLE, INFO,
- TITLE, TITLE_ARROW, TITLE_VALUE, TITLE_VALUE_ARROW, TITLE_GRID, TITLE_SWITCH, TITLE_CHECK, TITLE_VALUE_CHECK,
+ TITLE, TITLE_ARROW, TITLE_ICON_ARROW, TITLE_VALUE, TITLE_VALUE_ARROW, TITLE_GRID, TITLE_SWITCH, TITLE_CHECK, TITLE_VALUE_CHECK,
DATA, BOTTOM_SHEET_DATA, LOADER -> RowViewHolder(layout)
// Row Session
@@ -120,8 +122,9 @@ enum class RowViewType(private var layoutRes: Int) {
itemView.findViewById(R.id.value)?.let {
if (row.computedStat != null) {
val format = row.computedStat!!.format(itemView.context)
- it.setTextColor(format.getColor(itemView.context))
- it.text = format.text
+ it.setTextFormat(format, itemView.context)
+// it.setTextColor(format.getColor(itemView.context))
+// it.text = format.text
} else if (row.value != null) {
it.text = row.value
}
@@ -157,6 +160,13 @@ enum class RowViewType(private var layoutRes: Int) {
it.text = adapter.dataSource.stringForRow(row, itemView.context)
}
+ // Icon
+ itemView.findViewById(R.id.icon)?.let { imageView ->
+ row.imageRes?.let { imageRes ->
+ imageView.setImageResource(imageRes)
+ }
+ }
+
// Listener
val listener = View.OnClickListener {
itemView.findViewById(R.id.switchView)?.let {
@@ -221,8 +231,9 @@ enum class RowViewType(private var layoutRes: Int) {
// Value
itemView.findViewById(R.id.value)?.let { view ->
adapter.dataSource.contentDescriptorForRow(row)?.textFormat?.let {
- view.text = it.text
- view.setTextColor(it.getColor(itemView.context))
+ view.setTextFormat(it, itemView.context)
+// view.text = it.text
+// view.setTextColor(it.getColor(itemView.context))
}
}
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt
index e44f7f64..bce8118f 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt
@@ -15,6 +15,7 @@ import net.pokeranalytics.android.model.TournamentType
import net.pokeranalytics.android.model.extensions.SessionState
import net.pokeranalytics.android.model.extensions.getState
import net.pokeranalytics.android.model.realm.Session
+import net.pokeranalytics.android.ui.view.fields.setTextFormat
import net.pokeranalytics.android.util.extensions.getDayNumber
import net.pokeranalytics.android.util.extensions.getShortDayName
import net.pokeranalytics.android.util.extensions.shortTime
@@ -149,8 +150,9 @@ class SessionRowView : FrameLayout {
val result = session.result?.net ?: 0.0
val formattedStat = ComputedStat(Stat.NETRESULT, result, currency = session.currency).format(context)
- rowHistorySession.gameResult.setTextColor(formattedStat.getColor(context))
- rowHistorySession.gameResult.text = formattedStat.text
+ rowHistorySession.gameResult.setTextFormat(formattedStat, context)
+// rowHistorySession.gameResult.setTextColor(formattedStat.getColor(context))
+// rowHistorySession.gameResult.text = formattedStat.text
}
}
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/TransactionRowView.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/TransactionRowView.kt
index ab45b09c..25f3b5a3 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/view/TransactionRowView.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/view/TransactionRowView.kt
@@ -10,6 +10,7 @@ import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.ComputedStat
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.realm.Transaction
+import net.pokeranalytics.android.ui.view.fields.setTextFormat
import net.pokeranalytics.android.util.extensions.getDayNumber
import net.pokeranalytics.android.util.extensions.getShortDayName
@@ -63,8 +64,9 @@ class TransactionRowView : FrameLayout {
// Amount
val formattedStat = ComputedStat(Stat.NETRESULT, transaction.amount).format(context)
- rowTransaction.transactionAmount.setTextColor(formattedStat.getColor(context))
- rowTransaction.transactionAmount.text = formattedStat.text
+ rowTransaction.transactionAmount.setTextFormat(formattedStat, context)
+// rowTransaction.transactionAmount.setTextColor(formattedStat.getColor(context))
+// rowTransaction.transactionAmount.text = formattedStat.text
}
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/fields/FieldsExtension.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/fields/FieldsExtension.kt
new file mode 100644
index 00000000..1a7b35c5
--- /dev/null
+++ b/app/src/main/java/net/pokeranalytics/android/ui/view/fields/FieldsExtension.kt
@@ -0,0 +1,10 @@
+package net.pokeranalytics.android.ui.view.fields
+
+import android.content.Context
+import androidx.appcompat.widget.AppCompatTextView
+import net.pokeranalytics.android.calculus.TextFormat
+
+fun AppCompatTextView.setTextFormat(textFormat: TextFormat, context: Context) {
+ this.setTextColor(textFormat.getColor(context))
+ this.text = textFormat.text
+}
\ No newline at end of file
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/MoreTabRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/MoreTabRow.kt
new file mode 100644
index 00000000..4e2fe8bc
--- /dev/null
+++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/MoreTabRow.kt
@@ -0,0 +1,31 @@
+package net.pokeranalytics.android.ui.view.rowrepresentable
+
+import net.pokeranalytics.android.R
+import net.pokeranalytics.android.ui.view.RowRepresentable
+import net.pokeranalytics.android.ui.view.RowViewType
+
+/**
+ * An enum managing the rows in the more tabs
+ */
+enum class MoreTabRow : RowRepresentable {
+ BANKROLL,
+ SETTINGS;
+
+ override val resId: Int?
+ get() {
+ return when(this) {
+ BANKROLL -> R.string.bankroll
+ SETTINGS -> R.string.services
+ }
+ }
+
+ override val imageRes: Int?
+ get() {
+ return when(this) {
+ BANKROLL -> R.drawable.ic_outline_lock
+ SETTINGS -> R.drawable.ic_outline_settings
+ }
+ }
+
+ override val viewType: Int = RowViewType.TITLE_ICON_ARROW.ordinal
+}
\ No newline at end of file
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/ReportRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/ReportRow.kt
new file mode 100644
index 00000000..12209607
--- /dev/null
+++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/ReportRow.kt
@@ -0,0 +1,48 @@
+package net.pokeranalytics.android.ui.view.rowrepresentable
+
+import net.pokeranalytics.android.R
+import net.pokeranalytics.android.ui.view.RowRepresentable
+import net.pokeranalytics.android.ui.view.RowViewType
+
+/**
+ * An enum managing the report rows
+ */
+enum class ReportRow : RowRepresentable {
+ BLINDS,
+ BUY_IN,
+ DAY_OF_WEEKS,
+ GENERAL,
+ LOCATIONS,
+ NUMBER_OF_TABLES,
+ TOURNAMENT_TYPES,
+ VARIANT;
+
+
+ companion object {
+ /**
+ * Return the report rows
+ */
+ fun getRows(): ArrayList {
+ val rows = ArrayList()
+ rows.add(CustomizableRowRepresentable(customViewType = RowViewType.HEADER_TITLE, resId = R.string.comparison))
+ rows.addAll(values())
+ return rows
+ }
+ }
+
+ override val resId: Int?
+ get() {
+ return when (this) {
+ BLINDS -> R.string.blinds
+ BUY_IN -> R.string.buyin
+ DAY_OF_WEEKS -> R.string.day_of_the_week
+ GENERAL -> R.string.general
+ LOCATIONS -> R.string.locations
+ NUMBER_OF_TABLES -> R.string.number_of_tables
+ TOURNAMENT_TYPES -> R.string.tournament_type_complete
+ VARIANT -> R.string.variant
+ }
+ }
+
+ override val viewType: Int = RowViewType.TITLE_ARROW.ordinal
+}
\ No newline at end of file
diff --git a/app/src/main/java/net/pokeranalytics/android/util/extensions/ChipGroupExtension.kt b/app/src/main/java/net/pokeranalytics/android/util/extensions/ChipGroupExtension.kt
new file mode 100644
index 00000000..8a642069
--- /dev/null
+++ b/app/src/main/java/net/pokeranalytics/android/util/extensions/ChipGroupExtension.kt
@@ -0,0 +1,16 @@
+package net.pokeranalytics.android.util.extensions
+
+import com.google.android.material.chip.ChipGroup
+
+class ChipGroupExtension {
+
+ open class SingleSelectionOnCheckedListener : ChipGroup.OnCheckedChangeListener {
+ override fun onCheckedChanged(group: ChipGroup, checkedId: Int) {
+ for (i in 0 until group.childCount) {
+ val chip = group.getChildAt(i)
+ chip.isClickable = chip.id != group.checkedChipId
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_outline_calendar.xml b/app/src/main/res/drawable/ic_outline_calendar.xml
new file mode 100644
index 00000000..9307b8fd
--- /dev/null
+++ b/app/src/main/res/drawable/ic_outline_calendar.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_outline_chart.xml b/app/src/main/res/drawable/ic_outline_chart.xml
new file mode 100644
index 00000000..0d4f8c3f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_outline_chart.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_outline_lock.xml b/app/src/main/res/drawable/ic_outline_lock.xml
new file mode 100644
index 00000000..d4968533
--- /dev/null
+++ b/app/src/main/res/drawable/ic_outline_lock.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_outline_more.xml b/app/src/main/res/drawable/ic_outline_more.xml
new file mode 100644
index 00000000..64325fda
--- /dev/null
+++ b/app/src/main/res/drawable/ic_outline_more.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_bankroll.xml b/app/src/main/res/layout/activity_bankroll.xml
new file mode 100644
index 00000000..eb1d8184
--- /dev/null
+++ b/app/src/main/res/layout/activity_bankroll.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml
index 09f1bbc4..275db019 100644
--- a/app/src/main/res/layout/activity_home.xml
+++ b/app/src/main/res/layout/activity_home.xml
@@ -15,16 +15,6 @@
app:layout_constraintTop_toTopOf="parent"
app:title="@string/app_name" />
-
-
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_bankroll.xml b/app/src/main/res/layout/fragment_bankroll.xml
new file mode 100644
index 00000000..0cf1c9b1
--- /dev/null
+++ b/app/src/main/res/layout/fragment_bankroll.xml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_calendar.xml b/app/src/main/res/layout/fragment_calendar.xml
new file mode 100644
index 00000000..aaa1d704
--- /dev/null
+++ b/app/src/main/res/layout/fragment_calendar.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_more.xml b/app/src/main/res/layout/fragment_more.xml
new file mode 100644
index 00000000..aaa1d704
--- /dev/null
+++ b/app/src/main/res/layout/fragment_more.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_reports.xml b/app/src/main/res/layout/fragment_reports.xml
new file mode 100644
index 00000000..aaa1d704
--- /dev/null
+++ b/app/src/main/res/layout/fragment_reports.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_session.xml b/app/src/main/res/layout/fragment_session.xml
index 53457fd3..872fc2f6 100644
--- a/app/src/main/res/layout/fragment_session.xml
+++ b/app/src/main/res/layout/fragment_session.xml
@@ -11,102 +11,18 @@
android:fillViewport="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:paddingBottom="96dp" />
-
+
diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml
index 8b6825d0..8542d548 100644
--- a/app/src/main/res/layout/fragment_settings.xml
+++ b/app/src/main/res/layout/fragment_settings.xml
@@ -1,17 +1,57 @@
-
-
+
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/row_title_arrow.xml b/app/src/main/res/layout/row_title_arrow.xml
index a1d94800..1d73205b 100644
--- a/app/src/main/res/layout/row_title_arrow.xml
+++ b/app/src/main/res/layout/row_title_arrow.xml
@@ -12,10 +12,11 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
+ android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintEnd_toEndOf="@+id/guidelineEnd"
+ app:layout_constraintEnd_toStartOf="@+id/nextArrow"
app:layout_constraintStart_toStartOf="@+id/guidelineStart"
app:layout_constraintTop_toTopOf="parent"
tools:text="Data Type Title" />
diff --git a/app/src/main/res/layout/row_title_icon_arrow.xml b/app/src/main/res/layout/row_title_icon_arrow.xml
new file mode 100644
index 00000000..950ad915
--- /dev/null
+++ b/app/src/main/res/layout/row_title_icon_arrow.xml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/navigation.xml b/app/src/main/res/menu/navigation.xml
index 762f9cdb..6ac0f33b 100644
--- a/app/src/main/res/menu/navigation.xml
+++ b/app/src/main/res/menu/navigation.xml
@@ -1,19 +1,47 @@
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5e551563..958ed4bf 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -5,6 +5,8 @@
Please set a start date for the session
Hour
Minute
+ More
+ Variant