diff --git a/app/src/androidTest/assets/schema_3.realm b/app/src/androidTest/assets/schema_3.realm
new file mode 100644
index 00000000..4409e5b8
Binary files /dev/null and b/app/src/androidTest/assets/schema_3.realm differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b593e589..4caf0748 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -44,6 +44,16 @@
android:launchMode="singleTop"
android:screenOrientation="portrait" />
+
+
+
+
-
-
diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt
index a92e3af4..cfe97dca 100644
--- a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt
+++ b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt
@@ -51,7 +51,7 @@ class PokerAnalyticsApplication : Application() {
}
if (BuildConfig.DEBUG) {
- // this.createFakeSessions()
+ //this.createFakeSessions()
}
}
diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt b/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt
index e8cd78ca..af908c6a 100644
--- a/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt
+++ b/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt
@@ -35,7 +35,7 @@ class Calculator {
enum class EvolutionValues {
NONE,
STANDARD,
- DATED
+ TIMED
}
var display: Display = Display.TABLE
@@ -146,12 +146,17 @@ class Calculator {
tBuyinSum += computable.ratedBuyin
tHands += computable.estimatedHands
- val session = computable.session ?: throw IllegalStateException("Computing lone ComputableResult")
+ val session =
+ computable.session ?: throw IllegalStateException("Computing lone ComputableResult")
results.addEvolutionValue(tSum, stat = NETRESULT, data = session)
results.addEvolutionValue(tSum / index, stat = AVERAGE, data = session)
results.addEvolutionValue(index.toDouble(), stat = NUMBER_OF_GAMES, data = session)
results.addEvolutionValue(tBBSum / tBBSessionCount, stat = AVERAGE_NET_BB, data = session)
- results.addEvolutionValue((tWinningSessionCount / index).toDouble(), stat = WIN_RATIO, data = session)
+ results.addEvolutionValue(
+ (tWinningSessionCount.toDouble() / index.toDouble()),
+ stat = WIN_RATIO,
+ data = session
+ )
results.addEvolutionValue(tBuyinSum / index, stat = AVERAGE_BUYIN, data = session)
Stat.netBBPer100Hands(tBBSum, tHands)?.let { netBB100 ->
@@ -182,7 +187,7 @@ class Calculator {
// var bbHourlyRate = gBBSum / gDuration
when (options.evolutionValues) {
- Options.EvolutionValues.DATED -> {
+ Options.EvolutionValues.STANDARD, Options.EvolutionValues.TIMED -> {
var tHourlyDuration = 0.0
var tIndex = 0
@@ -202,16 +207,49 @@ class Calculator {
tHourlyRate = gSum / tHourlyDuration
tHourlyRateBB = gBBSum / tHourlyDuration
- results.addEvolutionValue(tSum, tHourlyDuration, NETRESULT, sessionSet)
- results.addEvolutionValue(tSum / tHourlyDuration, tHourlyDuration, HOURLY_RATE, sessionSet)
- results.addEvolutionValue(tHourlyRate, tHourlyDuration, HOURLY_RATE, sessionSet)
- results.addEvolutionValue(tIndex.toDouble(), tHourlyDuration, NUMBER_OF_SETS, sessionSet)
- results.addEvolutionValue(sessionSet.netDuration.toDouble(), tHourlyDuration, DURATION, sessionSet)
- results.addEvolutionValue(tHourlyDuration / tIndex, tHourlyDuration, AVERAGE_DURATION, sessionSet)
- results.addEvolutionValue(tHourlyRateBB, tHourlyDuration, HOURLY_RATE_BB, sessionSet)
-
- Stat.netBBPer100Hands(gBBSum, gTotalHands)?.let { netBB100 ->
- results.addEvolutionValue(netBB100, tHourlyDuration, NET_BB_PER_100_HANDS, sessionSet)
+ when (options.evolutionValues) {
+ Options.EvolutionValues.STANDARD -> {
+ results.addEvolutionValue(tHourlyRate, stat = HOURLY_RATE, data = sessionSet)
+ results.addEvolutionValue(tIndex.toDouble(), stat = NUMBER_OF_SETS, data = sessionSet)
+ results.addEvolutionValue(
+ sessionSet.netDuration.toDouble(),
+ stat = DURATION,
+ data = sessionSet
+ )
+ results.addEvolutionValue(
+ tHourlyDuration / tIndex,
+ stat = AVERAGE_DURATION,
+ data = sessionSet
+ )
+ results.addEvolutionValue(tHourlyRateBB, stat = HOURLY_RATE_BB, data = sessionSet)
+
+ Stat.netBBPer100Hands(gBBSum, gTotalHands)?.let { netBB100 ->
+ results.addEvolutionValue(netBB100, stat = NET_BB_PER_100_HANDS, data = sessionSet)
+ }
+
+ }
+ Options.EvolutionValues.TIMED -> {
+ results.addEvolutionValue(tSum, tHourlyDuration, NETRESULT, sessionSet)
+ results.addEvolutionValue(tHourlyRate, tHourlyDuration, HOURLY_RATE, sessionSet)
+ results.addEvolutionValue(tIndex.toDouble(), tHourlyDuration, NUMBER_OF_SETS, sessionSet)
+ results.addEvolutionValue(
+ sessionSet.netDuration.toDouble(),
+ tHourlyDuration,
+ DURATION,
+ sessionSet
+ )
+ results.addEvolutionValue(
+ tHourlyDuration / tIndex,
+ tHourlyDuration,
+ AVERAGE_DURATION,
+ sessionSet
+ )
+ results.addEvolutionValue(tHourlyRateBB, tHourlyDuration, HOURLY_RATE_BB, sessionSet)
+
+ Stat.netBBPer100Hands(gBBSum, gTotalHands)?.let { netBB100 ->
+ results.addEvolutionValue(netBB100, tHourlyDuration, NET_BB_PER_100_HANDS, sessionSet)
+ }
+ }
}
}
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 efbf89c7..2d72b901 100644
--- a/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt
+++ b/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt
@@ -201,7 +201,24 @@ enum class Stat : RowRepresentable {
get() {
return when (this) {
NETRESULT -> listOf(AggregationType.SESSION, AggregationType.MONTH, AggregationType.YEAR, AggregationType.DURATION)
- else -> listOf(AggregationType.SESSION, AggregationType.MONTH, AggregationType.YEAR, AggregationType.DURATION)
+ NUMBER_OF_GAMES, NUMBER_OF_SETS -> listOf(AggregationType.MONTH, AggregationType.YEAR)
+ else -> listOf(AggregationType.SESSION, AggregationType.MONTH, AggregationType.YEAR)
+ }
+ }
+
+ val hasEvolutionGraph: Boolean
+ get() {
+ return when (this) {
+ DURATION, AVERAGE_DURATION -> false
+ else -> true
+ }
+ }
+
+ val significantIndividualValue: Boolean
+ get() {
+ return when (this) {
+ WIN_RATIO, NUMBER_OF_SETS, NUMBER_OF_GAMES -> false
+ else -> true
}
}
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 0b7b044f..3b661a74 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
@@ -879,6 +879,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
Stat.DURATION, Stat.AVERAGE_DURATION -> this.netDuration.toDouble()
Stat.HOURLY_RATE, Stat.STANDARD_DEVIATION_HOURLY -> this.hourlyRate
Stat.HANDS_PLAYED -> this.estimatedHands
+ Stat.WIN_RATIO -> null
else -> throw StatFormattingException("format undefined for stat ${stat.name}")
}
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 4b3178e7..77f4dc1b 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
@@ -14,6 +14,7 @@ import net.pokeranalytics.android.calculus.TextFormat
import net.pokeranalytics.android.model.filter.Filterable
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.interfaces.Timed
+import net.pokeranalytics.android.util.NULL_TEXT
import java.util.*
@@ -79,12 +80,26 @@ open class SessionSet() : RealmObject(), Timed, Filterable {
var bbNet: BB = 0.0
+ val bbHourlyRate: BB
+ get() {
+ return this.bbNet / this.hourlyDuration
+ }
+
override fun formattedValue(stat: Stat, context: Context) : TextFormat {
return when (stat) {
Stat.NETRESULT, Stat.AVERAGE -> stat.format(this.ratedNet, null, context)
Stat.DURATION, Stat.AVERAGE_DURATION -> stat.format(this.netDuration.toDouble(), null, context)
Stat.HOURLY_RATE -> stat.format(this.hourlyRate, null, context)
Stat.HANDS_PLAYED -> stat.format(this.estimatedHands, null, context)
+ Stat.HOURLY_RATE_BB -> stat.format(this.bbHourlyRate, null, context)
+ Stat.NET_BB_PER_100_HANDS, Stat.STANDARD_DEVIATION_BB_PER_100_HANDS -> {
+ val netBBPer100Hands = Stat.netBBPer100Hands(this.bbNet, this.estimatedHands)
+ if (netBBPer100Hands != null) {
+ return stat.format(this.estimatedHands, null, context)
+ } else {
+ return TextFormat(NULL_TEXT)
+ }
+ }
else -> throw StatFormattingException("format undefined for stat ${stat.name}")
}
}
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/ComparisonChartActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/ComparisonChartActivity.kt
new file mode 100644
index 00000000..a38ca702
--- /dev/null
+++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/ComparisonChartActivity.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 ComparisonChartActivity : PokerAnalyticsActivity() {
+
+ companion object {
+ fun newInstance(context: Context) {
+ val intent = Intent(context, ComparisonChartActivity::class.java)
+ context.startActivity(intent)
+ }
+
+ /**
+ * Create a new instance for result
+ */
+ fun newInstanceForResult(fragment: Fragment, requestCode: Int) {
+ val intent = Intent(fragment.requireContext(), ComparisonChartActivity::class.java)
+ fragment.startActivityForResult(intent, requestCode)
+ }
+
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_comparison_chart)
+ }
+
+}
\ 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 096a6de5..af6939bb 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
@@ -73,7 +73,7 @@ class HomeActivity : PokerAnalyticsActivity() {
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
- menuInflater.inflate(R.menu.home_menu, menu)
+ menuInflater.inflate(R.menu.toolbar_home, menu)
this.homeMenu = menu
//TODO: Change filter button visibility
homeMenu?.findItem(R.id.filter)?.isVisible = true
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
index 56a1701d..031da0f3 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/activity/SettingsActivity.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/SettingsActivity.kt
@@ -9,25 +9,25 @@ 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)
- }
+ 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)
- }
+ /**
+ * 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)
- }
+ 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/activity/GraphActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/StatisticDetailsActivity.kt
similarity index 53%
rename from app/src/main/java/net/pokeranalytics/android/ui/activity/GraphActivity.kt
rename to app/src/main/java/net/pokeranalytics/android/ui/activity/StatisticDetailsActivity.kt
index e0a840d9..4a9ef680 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/activity/GraphActivity.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/StatisticDetailsActivity.kt
@@ -4,17 +4,14 @@ import android.content.Context
import android.content.Intent
import android.os.Bundle
import com.github.mikephil.charting.data.Entry
+import kotlinx.android.synthetic.main.activity_graph.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
-import net.pokeranalytics.android.ui.fragment.GraphFragment
+import net.pokeranalytics.android.ui.fragment.GraphParameters
-class GraphParameters(stat: Stat, entries: List) {
- var stat: Stat = stat
- var entries: List = entries
-}
-class GraphActivity : PokerAnalyticsActivity() {
+class StatisticDetailsActivity : PokerAnalyticsActivity() {
private enum class IntentKey(val keyName: String) {
STAT("STAT"),
@@ -30,10 +27,8 @@ class GraphActivity : PokerAnalyticsActivity() {
* Default constructor
*/
fun newInstance(context: Context, stat: Stat, entries: List) {
-
- GraphActivity.parameters = GraphParameters(stat, entries)
-
- val intent = Intent(context, GraphActivity::class.java)
+ parameters = GraphParameters(stat, entries)
+ val intent = Intent(context, StatisticDetailsActivity::class.java)
context.startActivity(intent)
}
@@ -41,7 +36,7 @@ class GraphActivity : PokerAnalyticsActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_graph)
+ setContentView(R.layout.activity_statistic_details)
initUI()
}
@@ -50,20 +45,6 @@ class GraphActivity : PokerAnalyticsActivity() {
*/
private fun initUI() {
- val fragmentManager = supportFragmentManager
- val fragmentTransaction = fragmentManager.beginTransaction()
- val fragment = GraphFragment()
-
- fragmentTransaction.add(R.id.container, fragment)
- fragmentTransaction.commit()
-
- GraphActivity.parameters?.let {
- fragment.setData(it.stat, it.entries)
- GraphActivity.parameters = null
- } ?: run {
- throw Exception("Missing graph parameters")
- }
-
}
}
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
new file mode 100644
index 00000000..193065c5
--- /dev/null
+++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/ComparisonChartPagerAdapter.kt
@@ -0,0 +1,80 @@
+package net.pokeranalytics.android.ui.adapter
+
+import android.content.Context
+import android.util.SparseArray
+import android.view.ViewGroup
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentStatePagerAdapter
+import net.pokeranalytics.android.R
+import net.pokeranalytics.android.ui.fragment.*
+import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
+import java.lang.ref.WeakReference
+
+/**
+ * Comparison Chart Pager Adapter
+ */
+class ComparisonChartPagerAdapter(val context: Context, fragmentManager: FragmentManager) : FragmentStatePagerAdapter(fragmentManager) {
+
+ var weakReferences = SparseArray>()
+
+ override fun getItem(position: Int): PokerAnalyticsFragment {
+ return when (position) {
+ 0 -> GraphFragment()
+ 1 -> GraphFragment()
+ 2 -> CalendarFragment.newInstance()
+ else -> HistoryFragment.newInstance()
+ }
+ }
+
+ override fun getCount(): Int {
+ return 3
+ }
+
+ override fun getPageTitle(position: Int): CharSequence? {
+ return when(position) {
+ 0 -> context.getString(R.string.bar)
+ 1 -> context.getString(R.string.line)
+ 2-> context.getString(R.string.table)
+ else -> super.getPageTitle(position)
+ }
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
+ super.destroyItem(container, position, `object`)
+ weakReferences.remove(position)
+ }
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val fragment = super.instantiateItem(container, position) as PokerAnalyticsFragment
+ weakReferences.put(position, WeakReference(fragment))
+ return fragment
+ }
+
+ override fun getItemPosition(obj: Any): Int {
+ 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
+ }
+ }
+
+ /**
+ * Return the fragment at the position key
+ */
+ fun getFragment(key: Int): PokerAnalyticsFragment? {
+ 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/util/extensions/ChipGroupExtension.kt b/app/src/main/java/net/pokeranalytics/android/ui/extensions/ChipGroupExtension.kt
similarity index 88%
rename from app/src/main/java/net/pokeranalytics/android/util/extensions/ChipGroupExtension.kt
rename to app/src/main/java/net/pokeranalytics/android/ui/extensions/ChipGroupExtension.kt
index 8a642069..e860242e 100644
--- a/app/src/main/java/net/pokeranalytics/android/util/extensions/ChipGroupExtension.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/extensions/ChipGroupExtension.kt
@@ -1,4 +1,4 @@
-package net.pokeranalytics.android.util.extensions
+package net.pokeranalytics.android.ui.extensions
import com.google.android.material.chip.ChipGroup
diff --git a/app/src/main/java/net/pokeranalytics/android/util/extensions/UIExtensions.kt b/app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt
similarity index 91%
rename from app/src/main/java/net/pokeranalytics/android/util/extensions/UIExtensions.kt
rename to app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt
index 06f89e3b..e7535db1 100644
--- a/app/src/main/java/net/pokeranalytics/android/util/extensions/UIExtensions.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt
@@ -1,4 +1,4 @@
-package net.pokeranalytics.android.util.extensions
+package net.pokeranalytics.android.ui.extensions
import android.content.ActivityNotFoundException
import android.content.Context
@@ -7,10 +7,12 @@ import android.content.res.Resources
import android.net.Uri
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
+import androidx.appcompat.widget.AppCompatTextView
import androidx.browser.customtabs.CustomTabsIntent
import androidx.core.content.ContextCompat
import net.pokeranalytics.android.BuildConfig
import net.pokeranalytics.android.R
+import net.pokeranalytics.android.calculus.TextFormat
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
import net.pokeranalytics.android.util.DeviceUtils
@@ -100,4 +102,9 @@ fun showAlertDialog(context: Context, title: Int? = null, message: Int? = null)
}
builder.setPositiveButton(R.string.ok, null)
builder.show()
+}
+
+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/fragment/ComparisonChartFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ComparisonChartFragment.kt
new file mode 100644
index 00000000..eb2d3041
--- /dev/null
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ComparisonChartFragment.kt
@@ -0,0 +1,122 @@
+package net.pokeranalytics.android.ui.fragment
+
+import android.os.Bundle
+import android.view.*
+import kotlinx.android.synthetic.main.fragment_comparison_chart.*
+import net.pokeranalytics.android.R
+import net.pokeranalytics.android.ui.activity.BankrollActivity
+import net.pokeranalytics.android.ui.activity.SettingsActivity
+import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
+import net.pokeranalytics.android.ui.adapter.ComparisonChartPagerAdapter
+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
+import net.pokeranalytics.android.ui.extensions.toast
+
+class ComparisonChartFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate {
+
+ companion object {
+
+ /**
+ * Create new instance
+ */
+ fun newInstance(): ComparisonChartFragment {
+ val fragment = ComparisonChartFragment()
+ val bundle = Bundle()
+ fragment.arguments = bundle
+ return fragment
+ }
+
+ val rowRepresentation: List by lazy {
+ val rows = ArrayList()
+ rows.addAll(MoreTabRow.values())
+ rows
+ }
+
+ }
+
+ private lateinit var parentActivity: PokerAnalyticsActivity
+ private lateinit var viewPagerAdapter: ComparisonChartPagerAdapter
+ private var comparisonChartMenu: Menu? = null
+
+
+ // Life Cycle
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+ return inflater.inflate(R.layout.fragment_comparison_chart, container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ initData()
+ initUI()
+ }
+
+ override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
+ inflater?.inflate(R.menu.toolbar_comparison_chart, menu)
+ this.comparisonChartMenu = menu
+ super.onCreateOptionsMenu(menu, inflater)
+ }
+
+ override fun onOptionsItemSelected(item: MenuItem?): Boolean {
+ when (item!!.itemId) {
+ R.id.settings -> openChangeStatistics()
+ }
+ return true
+ }
+
+ // 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() {
+
+ parentActivity = activity as PokerAnalyticsActivity
+
+ toolbar.title = ""
+
+ parentActivity.setSupportActionBar(toolbar)
+ parentActivity.supportActionBar?.setDisplayHomeAsUpEnabled(true)
+ setHasOptionsMenu(true)
+
+ toolbar.title = "Comparison chart"
+
+ viewPagerAdapter = ComparisonChartPagerAdapter(requireContext(), parentActivity.supportFragmentManager)
+ viewPager.adapter = viewPagerAdapter
+ viewPager.offscreenPageLimit = 2
+
+ tabs.setupWithViewPager(viewPager)
+
+ }
+
+ /**
+ * Open change statistics
+ */
+ private fun openChangeStatistics() {
+ //TODO
+ toast("Open change statistics")
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt
index 44e8b118..9b0123c7 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt
@@ -52,7 +52,7 @@ open class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDele
}
override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
- inflater?.inflate(R.menu.editable_data, menu)
+ inflater?.inflate(R.menu.toolbar_editable_data, menu)
this.editableMenu = menu
updateMenuUI()
super.onCreateOptionsMenu(menu, inflater)
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt
index 8a9915a4..c470f429 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt
@@ -71,7 +71,7 @@ open class FiltersFragment : PokerAnalyticsFragment(), StaticRowRepresentableDat
}
override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
- inflater?.inflate(R.menu.editable_data, menu)
+ inflater?.inflate(R.menu.toolbar_editable_data, menu)
this.filterMenu = menu
updateMenuUI()
super.onCreateOptionsMenu(menu, inflater)
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 6afffdbf..7e0b6647 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
@@ -9,7 +9,6 @@ import com.github.mikephil.charting.charts.BarLineChartBase
import com.github.mikephil.charting.charts.LineChart
import com.github.mikephil.charting.data.Entry
import com.github.mikephil.charting.data.LineData
-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
@@ -21,19 +20,25 @@ 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.PALineDataSet
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
-import net.pokeranalytics.android.util.extensions.toast
+import net.pokeranalytics.android.ui.extensions.ChipGroupExtension
+import net.pokeranalytics.android.ui.extensions.px
+import net.pokeranalytics.android.ui.extensions.toast
import java.text.DateFormat
+class GraphParameters(stat: Stat, entries: List) {
+ var stat: Stat = stat
+ var entries: List = entries
+}
+
class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener {
private lateinit var parentActivity: PokerAnalyticsActivity
- lateinit var stat: Stat
- lateinit var entries: List
+ private var stat: Stat = Stat.NETRESULT
+ private var entries: List = ArrayList()
lateinit var legendView: LegendView
lateinit var chartView: BarLineChartBase<*>
@@ -62,21 +67,13 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener {
private fun initUI() {
parentActivity = activity as PokerAnalyticsActivity
+ parentActivity.title = stat.localizedTitle(requireContext())
this.legendView = LegendView(requireContext())
this.legendContainer.addView(this.legendView)
this.legendView.prepareWithStat(this.stat, this.entries.size)
- // Avoid a bug during setting the title
- toolbar.title = ""
-
- parentActivity.setSupportActionBar(toolbar)
- parentActivity.supportActionBar?.setDisplayHomeAsUpEnabled(true)
- setHasOptionsMenu(true)
-
- toolbar.title = stat.localizedTitle(requireContext())
-
- val dataSet = LineDataSet(this.entries, this.stat.name)
+ val dataSet = PALineDataSet(this.entries, this.stat.name, requireContext())
val colors = arrayOf(R.color.green_light).toIntArray()
dataSet.setColors(colors, context)
dataSet.setDrawCircles(false)
@@ -96,9 +93,11 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener {
this.chartContainer.addView(this.chartView)
- this.chartView.setStyle(requireContext())
+ this.chartView.setStyle(false, requireContext())
this.chartView.setOnChartValueSelectedListener(this)
+ this.chartView.highlightValue((this.entries.size - 1).toFloat(), 0)
+
this.stat.aggregationTypes.forEach { type ->
val chip = Chip(requireContext())
chip.id = type.ordinal
@@ -108,6 +107,8 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener {
this.chipGroup.addView(chip)
}
+ this.chipGroup.check(this.stat.aggregationTypes.first().ordinal)
+
this.chipGroup.setOnCheckedChangeListener(object : ChipGroupExtension.SingleSelectionOnCheckedListener() {
override fun onCheckedChanged(group: ChipGroup, checkedId: Int) {
super.onCheckedChanged(group, checkedId)
@@ -115,7 +116,6 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener {
}
})
- this.chipGroup.check(this.stat.aggregationTypes.first().ordinal)
}
// OnChartValueSelectedListener
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
index 8dc97324..7883f75e 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt
@@ -7,6 +7,7 @@ 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.ComparisonChartActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
@@ -56,6 +57,11 @@ class ReportsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSour
return rowRepresentation
}
+ override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
+ super.onRowSelected(position, row, fromAction)
+ ComparisonChartActivity.newInstance(requireContext())
+ }
+
// Business
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 41fdd733..45767d22 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
@@ -63,7 +63,7 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate {
}
override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
- inflater?.inflate(R.menu.session_toolbar, menu)
+ inflater?.inflate(R.menu.toolbar_session, menu)
this.sessionMenu = menu
updateMenuUI()
super.onCreateOptionsMenu(menu, inflater)
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 7348188b..3d681cee 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
@@ -25,15 +25,14 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.SettingRow
import net.pokeranalytics.android.util.Preferences
import net.pokeranalytics.android.util.URL
import net.pokeranalytics.android.util.UserDefaults
-import net.pokeranalytics.android.util.extensions.openContactMail
-import net.pokeranalytics.android.util.extensions.openPlayStorePage
-import net.pokeranalytics.android.util.extensions.openUrl
+import net.pokeranalytics.android.ui.extensions.openContactMail
+import net.pokeranalytics.android.ui.extensions.openPlayStorePage
+import net.pokeranalytics.android.ui.extensions.openUrl
import java.util.*
class SettingsFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, StaticRowRepresentableDataSource {
- private lateinit var parentActivity: PokerAnalyticsActivity
companion object {
@@ -56,15 +55,8 @@ class SettingsFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Sta
const val REQUEST_CODE_CURRENCY: Int = 100
}
- override fun stringForRow(row: RowRepresentable): String {
- return when (row) {
- SettingRow.VERSION -> BuildConfig.VERSION_NAME + if (BuildConfig.DEBUG) " (${BuildConfig.VERSION_CODE}) DEBUG" else ""
- SettingRow.CURRENCY -> UserDefaults.currency.symbol
- else -> ""
- }
- }
-
private lateinit var settingsAdapterRow: RowRepresentableAdapter
+ private lateinit var parentActivity: PokerAnalyticsActivity
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
@@ -97,6 +89,14 @@ class SettingsFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Sta
return rowRepresentation
}
+ override fun stringForRow(row: RowRepresentable): String {
+ return when (row) {
+ SettingRow.VERSION -> BuildConfig.VERSION_NAME + if (BuildConfig.DEBUG) " (${BuildConfig.VERSION_CODE}) DEBUG" else ""
+ SettingRow.CURRENCY -> UserDefaults.currency.symbol
+ else -> ""
+ }
+ }
+
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
when (row) {
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt
new file mode 100644
index 00000000..50413327
--- /dev/null
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt
@@ -0,0 +1,79 @@
+package net.pokeranalytics.android.ui.fragment
+
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import com.github.mikephil.charting.data.Entry
+import kotlinx.android.synthetic.main.fragment_statistic_details.*
+import net.pokeranalytics.android.R
+import net.pokeranalytics.android.calculus.Stat
+import net.pokeranalytics.android.ui.activity.StatisticDetailsActivity
+import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
+import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
+
+class StatisticDetailsFragment : PokerAnalyticsFragment() {
+
+ companion object {
+ fun newInstance(context: Context) {
+ val intent = Intent(context, StatisticDetailsFragment::class.java)
+ context.startActivity(intent)
+ }
+ }
+
+ private lateinit var parentActivity: PokerAnalyticsActivity
+
+ private var stat: Stat = Stat.NETRESULT
+ private var entries: List = ArrayList()
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+ return inflater.inflate(R.layout.fragment_statistic_details, container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ initUI()
+ }
+
+ /**
+ * Init UI
+ */
+ private fun initUI() {
+
+ parentActivity = activity as PokerAnalyticsActivity
+
+ // Avoid a bug during setting the title
+ toolbar.title = ""
+
+ parentActivity.setSupportActionBar(toolbar)
+ parentActivity.supportActionBar?.setDisplayHomeAsUpEnabled(true)
+ setHasOptionsMenu(true)
+
+ toolbar.title = stat.localizedTitle(requireContext())
+
+ val fragmentManager = parentActivity.supportFragmentManager
+ val fragmentTransaction = fragmentManager.beginTransaction()
+ val fragment = GraphFragment()
+
+ fragmentTransaction.add(R.id.container, fragment)
+ fragmentTransaction.commit()
+
+ StatisticDetailsActivity.parameters?.let {
+ fragment.setData(it.stat, it.entries)
+ StatisticDetailsActivity.parameters = null
+ } ?: run {
+ throw Exception("Missing graph parameters")
+ }
+ }
+
+ /**
+ * Set data
+ */
+ fun setData(stat: Stat, entries: List) {
+ this.stat = stat
+ this.entries = entries
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt
index 65cb1378..14202d82 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt
@@ -12,7 +12,7 @@ import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.*
import net.pokeranalytics.android.model.StatRepresentable
import net.pokeranalytics.android.model.filter.QueryCondition
-import net.pokeranalytics.android.ui.activity.GraphActivity
+import net.pokeranalytics.android.ui.activity.StatisticDetailsActivity
import net.pokeranalytics.android.ui.adapter.DisplayDescriptor
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
@@ -199,7 +199,7 @@ class StatsFragment : SessionObserverFragment(), StaticRowRepresentableDataSourc
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
- if (row is StatRepresentable) {
+ if (row is StatRepresentable && row.stat.hasEvolutionGraph) {
// filter groups
val groupResults = this.report?.results?.filter {
@@ -237,7 +237,7 @@ class StatsFragment : SessionObserverFragment(), StaticRowRepresentableDataSourc
if (!isDetached) {
report.results.firstOrNull()?.defaultStatEntries(stat)?.let { entries ->
- GraphActivity.newInstance(requireContext(), stat, entries)
+ StatisticDetailsActivity.newInstance(requireContext(), stat, entries)
}
}
}
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 57c17392..f883c7f2 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
@@ -97,7 +97,7 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
private fun initUI() {
row.let {
bottomSheetToolbar.title = row.localizedTitle(requireContext())
- bottomSheetToolbar.inflateMenu(R.menu.bottom_sheet_menu)
+ bottomSheetToolbar.inflateMenu(R.menu.toolbar_bottom_sheet)
bottomSheetToolbar.setOnMenuItemClickListener {
false
}
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 919acd05..3782f246 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
@@ -14,7 +14,7 @@ import net.pokeranalytics.android.exceptions.RowRepresentableEditDescriptorExcep
import net.pokeranalytics.android.model.Limit
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.view.RowRepresentable
-import net.pokeranalytics.android.util.extensions.px
+import net.pokeranalytics.android.ui.extensions.px
/**
* Bottom Sheet List Game Fragment
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 e2a7ac37..7c199c09 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
@@ -13,7 +13,7 @@ import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.GridSpacingItemDecoration
import net.pokeranalytics.android.ui.view.RowRepresentable
-import net.pokeranalytics.android.util.extensions.px
+import net.pokeranalytics.android.ui.extensions.px
class BottomSheetTableSizeGridFragment : BottomSheetFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate {
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/graph/ChartDataSet.kt b/app/src/main/java/net/pokeranalytics/android/ui/graph/ChartDataSet.kt
new file mode 100644
index 00000000..df878d24
--- /dev/null
+++ b/app/src/main/java/net/pokeranalytics/android/ui/graph/ChartDataSet.kt
@@ -0,0 +1,15 @@
+package net.pokeranalytics.android.ui.graph
+
+import android.content.Context
+import com.github.mikephil.charting.data.Entry
+import com.github.mikephil.charting.data.LineDataSet
+import net.pokeranalytics.android.R
+
+class PALineDataSet(yVals: List, label: String, context: Context) : LineDataSet(yVals, label) {
+
+ init {
+ this.highLightColor = context.getColor(R.color.chart_highlight_indicator)
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/graph/GraphExtensions.kt b/app/src/main/java/net/pokeranalytics/android/ui/graph/GraphExtensions.kt
index ee94423e..e5f6e8a9 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/graph/GraphExtensions.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/graph/GraphExtensions.kt
@@ -1,76 +1,61 @@
package net.pokeranalytics.android.ui.graph
import android.content.Context
+import android.graphics.Typeface
import androidx.core.content.ContextCompat
import com.github.mikephil.charting.charts.BarLineChartBase
import com.github.mikephil.charting.components.XAxis
import net.pokeranalytics.android.R
-import net.pokeranalytics.android.util.extensions.px
+import net.pokeranalytics.android.ui.extensions.px
-//fun BarChart.setStyle(context: Context) {
-// GraphHelper.setStyle(this, context)
-//}
+fun BarLineChartBase<*>.setStyle(small: Boolean, context: Context) {
-fun BarLineChartBase<*>.setStyle(context: Context) {
- GraphHelper.setStyle(this, context)
-}
+ // X Axis
+ this.xAxis.axisLineColor = ContextCompat.getColor(context, R.color.chart_default)
+ this.xAxis.enableGridDashedLine(3.0f.px, 5.0f.px, 1.0f.px)
+ this.xAxis.textColor = ContextCompat.getColor(context, R.color.chart_default)
+ this.xAxis.labelCount = 4
+ this.xAxis.position = XAxis.XAxisPosition.BOTTOM
-class GraphHelper {
+ this.xAxis.textColor = ContextCompat.getColor(context, R.color.chart_default)
+ this.xAxis.typeface = Typeface.DEFAULT
+ this.xAxis.labelCount = 4
+ this.xAxis.position = XAxis.XAxisPosition.BOTTOM
- companion object {
+ this.xAxis.setDrawLabels(true)
+ this.xAxis.setDrawGridLines(true)
+ this.xAxis.granularity = 1.0f
+ this.xAxis.isGranularityEnabled = true
+ this.xAxis.isEnabled = true
- fun setStyle(chart: BarLineChartBase<*>, context: Context) {
+ // Y Axis
+ this.axisLeft.setDrawAxisLine(false)
+ this.axisLeft.setDrawGridLines(true)
+ this.axisLeft.enableGridDashedLine(3.0f.px, 5.0f.px, 1.0f.px)
- chart.xAxis.axisLineColor = ContextCompat.getColor(context, R.color.chart_default)
- chart.xAxis.enableGridDashedLine(3.0f.px, 5.0f.px, 1.0f.px)
- chart.xAxis.textColor = ContextCompat.getColor(context, R.color.chart_default)
- chart.xAxis.labelCount = 4
- chart.xAxis.position = XAxis.XAxisPosition.BOTTOM
+ this.axisLeft.setDrawZeroLine(true)
+// this.axisLeft.zeroLineWidth = 1.0f.px
+ this.axisLeft.zeroLineColor = ContextCompat.getColor(context, R.color.chart_default)
- chart.axisLeft.enableGridDashedLine(3.0f.px, 5.0f.px, 1.0f.px)
+ this.axisLeft.isGranularityEnabled = true
+ this.axisLeft.granularity = 1.0f
-// this.xAxis.axisLineWidth = ChartAppearance.lineWidth
-// this.xAxis.enableGridDashedLine(3.0f, 5.0f, 1.0f)
-//
-// this.xAxis.labelTextColor = ChartAppearance.defaultColor
-// this.xAxis.labelFont = Fonts.graphAxis
-// this.xAxis.labelCount = 4
-// this.xAxis.labelPosition = .bottom
-//
-// this.xAxis.drawLabelsEnabled = true
-// this.xAxis.drawGridLinesEnabled = true
-// this.xAxis.granularity = 1.0
-// this.xAxis.granularityEnabled = true
-// this.xAxis.enabled = true
-//
-// // Y Axis
-// this.leftAxis.drawAxisLineEnabled = false
-// this.leftAxis.drawGridLinesEnabled = true
-// this.leftAxis.gridLineDashLengths = [3.0, 5.0]
-//
-// this.leftAxis.drawZeroLineEnabled = true
-// this.leftAxis.zeroLineWidth = ChartAppearance.lineWidth
-// this.leftAxis.zeroLineColor = ChartAppearance.defaultColor
-//
-// this.leftAxis.granularityEnabled = true
-// this.leftAxis.granularity = 1.0
-//
-// this.leftAxis.labelTextColor = ChartAppearance.defaultColor
-// this.leftAxis.labelFont = Fonts.graphAxis
-// this.leftAxis.labelCount = small ? 1 : 7 // @todo not great if interval is [0..2] for number of records as we get decimals
-//
+ this.axisLeft.textColor = ContextCompat.getColor(context, R.color.chart_default)
+ this.axisLeft.typeface = Typeface.DEFAULT
+ this.axisLeft.labelCount =
+ if (small) 1 else 7 // @todo not great if interval is [0..2] for number of records as we get decimals
+
+ this.axisRight.isEnabled = false
+ this.legend.isEnabled = false
+
+
+// @todo
// if timeYAxis {
-// this.leftAxis.valueFormatter = HourValueFormatter()
+// this.axisLeft.valueFormatter = HourValueFormatter()
// } else {
-// this.leftAxis.valueFormatter = LargeNumberFormatter()
+// this.axisLeft.valueFormatter = LargeNumberFormatter()
// }
//
-// this.rightAxis.enabled = false
-//
-// this.legend.enabled = false
-
- }
- }
}
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 03552cde..eab4bfe2 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
@@ -5,11 +5,12 @@ import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.FrameLayout
import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.core.view.isVisible
import kotlinx.android.synthetic.main.layout_legend_default.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.calculus.TextFormat
-import net.pokeranalytics.android.ui.view.fields.setTextFormat
+import net.pokeranalytics.android.ui.extensions.setTextFormat
/**
* Display a row session
@@ -48,8 +49,14 @@ class LegendView : FrameLayout {
*/
fun prepareWithStat(stat: Stat, counter: Int) {
- this.stat1Name.text = stat.localizedTitle(context)
- this.stat2Name.text = stat.cumulativeLabelResId(context)
+ if (stat.significantIndividualValue) {
+ this.stat1Name.text = stat.localizedTitle(context)
+ this.stat2Name.text = stat.cumulativeLabelResId(context)
+ } else {
+ this.stat1Name.text = stat.cumulativeLabelResId(context)
+ this.stat2Name.isVisible = false
+ }
+
this.counter.text = "$counter ${context.getString(R.string.sessions)}"
}
@@ -60,8 +67,13 @@ class LegendView : FrameLayout {
fun setItemData(stat: Stat, title: String, statFormat1: TextFormat, statFormat2: TextFormat) {
this.title.text = title
- this.stat1Value.setTextFormat(statFormat1, context)
- this.stat2Value.setTextFormat(statFormat2, context)
+
+ if (stat.significantIndividualValue) {
+ this.stat1Value.setTextFormat(statFormat1, context)
+ this.stat2Value.setTextFormat(statFormat2, context)
+ } else {
+ this.stat1Value.setTextFormat(statFormat2, context)
+ }
}
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 1659120d..387756b9 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
@@ -13,10 +13,11 @@ import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.row_history_session.view.*
import kotlinx.android.synthetic.main.row_transaction.view.*
import net.pokeranalytics.android.R
+import net.pokeranalytics.android.model.StatRepresentable
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.extensions.setTextFormat
import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable
/**
@@ -232,11 +233,13 @@ enum class RowViewType(private var layoutRes: Int) {
itemView.findViewById(R.id.value)?.let { view ->
adapter.dataSource.contentDescriptorForRow(row)?.textFormat?.let {
view.setTextFormat(it, itemView.context)
-// view.text = it.text
-// view.setTextColor(it.getColor(itemView.context))
}
}
+ if (row is StatRepresentable) {
+ itemView.findViewById(R.id.nextArrow)?.isVisible = row.stat.hasEvolutionGraph
+ }
+
// Listener
val listener = View.OnClickListener {
adapter.delegate?.onRowSelected(position, row)
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 bce8118f..362a83fb 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,7 +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.ui.extensions.setTextFormat
import net.pokeranalytics.android.util.extensions.getDayNumber
import net.pokeranalytics.android.util.extensions.getShortDayName
import net.pokeranalytics.android.util.extensions.shortTime
@@ -151,8 +151,6 @@ class SessionRowView : FrameLayout {
val result = session.result?.net ?: 0.0
val formattedStat = ComputedStat(Stat.NETRESULT, result, currency = session.currency).format(context)
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 25f3b5a3..6ccb8219 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,7 +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.ui.extensions.setTextFormat
import net.pokeranalytics.android.util.extensions.getDayNumber
import net.pokeranalytics.android.util.extensions.getShortDayName
@@ -65,8 +65,6 @@ class TransactionRowView : FrameLayout {
// Amount
val formattedStat = ComputedStat(Stat.NETRESULT, transaction.amount).format(context)
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
deleted file mode 100644
index 1a7b35c5..00000000
--- a/app/src/main/java/net/pokeranalytics/android/ui/view/fields/FieldsExtension.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-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/res/layout/activity_comparison_chart.xml b/app/src/main/res/layout/activity_comparison_chart.xml
new file mode 100644
index 00000000..9ef4638e
--- /dev/null
+++ b/app/src/main/res/layout/activity_comparison_chart.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_graph.xml b/app/src/main/res/layout/activity_graph.xml
index b1ce6c7a..44e1e283 100644
--- a/app/src/main/res/layout/activity_graph.xml
+++ b/app/src/main/res/layout/activity_graph.xml
@@ -1,8 +1,26 @@
-
+
+
+ android:layout_height="?attr/actionBarSize"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ tools:title="@string/app_name" />
+
+
-
\ 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 275db019..d5788e1c 100644
--- a/app/src/main/res/layout/activity_home.xml
+++ b/app/src/main/res/layout/activity_home.xml
@@ -34,6 +34,6 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
- app:menu="@menu/navigation" />
+ app:menu="@menu/navigation_home" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_statistic_details.xml b/app/src/main/res/layout/activity_statistic_details.xml
new file mode 100644
index 00000000..62d1cb20
--- /dev/null
+++ b/app/src/main/res/layout/activity_statistic_details.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_comparison_chart.xml b/app/src/main/res/layout/fragment_comparison_chart.xml
new file mode 100644
index 00000000..e24de7cb
--- /dev/null
+++ b/app/src/main/res/layout/fragment_comparison_chart.xml
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_evograph.xml b/app/src/main/res/layout/fragment_evograph.xml
index eba9d9ac..63506299 100644
--- a/app/src/main/res/layout/fragment_evograph.xml
+++ b/app/src/main/res/layout/fragment_evograph.xml
@@ -5,22 +5,13 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
-
-
+ app:layout_constraintTop_toTopOf="parent" />
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/layout_legend_default.xml b/app/src/main/res/layout/layout_legend_default.xml
index 4d65f59a..e5684cbf 100644
--- a/app/src/main/res/layout/layout_legend_default.xml
+++ b/app/src/main/res/layout/layout_legend_default.xml
@@ -88,7 +88,7 @@
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintTop_toBottomOf="@id/stat2Value"
+ app:layout_constraintTop_toBottomOf="@id/stat1Value"
tools:text="152 sessions" />
\ No newline at end of file
diff --git a/app/src/main/res/menu/navigation.xml b/app/src/main/res/menu/navigation_home.xml
similarity index 100%
rename from app/src/main/res/menu/navigation.xml
rename to app/src/main/res/menu/navigation_home.xml
diff --git a/app/src/main/res/menu/bottom_sheet_menu.xml b/app/src/main/res/menu/toolbar_bottom_sheet.xml
similarity index 100%
rename from app/src/main/res/menu/bottom_sheet_menu.xml
rename to app/src/main/res/menu/toolbar_bottom_sheet.xml
diff --git a/app/src/main/res/menu/toolbar_comparison_chart.xml b/app/src/main/res/menu/toolbar_comparison_chart.xml
new file mode 100644
index 00000000..2132026e
--- /dev/null
+++ b/app/src/main/res/menu/toolbar_comparison_chart.xml
@@ -0,0 +1,11 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/editable_data.xml b/app/src/main/res/menu/toolbar_editable_data.xml
similarity index 100%
rename from app/src/main/res/menu/editable_data.xml
rename to app/src/main/res/menu/toolbar_editable_data.xml
diff --git a/app/src/main/res/menu/home_menu.xml b/app/src/main/res/menu/toolbar_home.xml
similarity index 100%
rename from app/src/main/res/menu/home_menu.xml
rename to app/src/main/res/menu/toolbar_home.xml
diff --git a/app/src/main/res/menu/session_toolbar.xml b/app/src/main/res/menu/toolbar_session.xml
similarity index 100%
rename from app/src/main/res/menu/session_toolbar.xml
rename to app/src/main/res/menu/toolbar_session.xml
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 65d61cb7..16a219a4 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -38,5 +38,6 @@
#8e35c8
#5c7258
+ #f8ffe5
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 958ed4bf..3e35818b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -7,6 +7,7 @@
Minute
More
Variant
+ Line
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 4853c382..58c93d7e 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -19,6 +19,7 @@
- @style/PokerAnalyticsTheme.TextView
- @style/PokerAnalyticsTheme.AlertDialog
- @style/PokerAnalyticsTheme.Chip
+ - @style/PokerAnalyticsTheme.TabLayout
@@ -179,6 +180,14 @@
- @font/roboto
+
+
+