merge conflicts

feature/top10
Laurent 7 years ago
commit ad5aacd56d
  1. 2
      app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt
  2. 11
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  3. 41
      app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt
  4. 8
      app/src/main/java/net/pokeranalytics/android/ui/activity/StatisticDetailsActivity.kt
  5. 1
      app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableDataSource.kt
  6. 77
      app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarDetailsFragment.kt
  7. 34
      app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt
  8. 2
      app/src/main/java/net/pokeranalytics/android/ui/graph/GraphUnderlyingEntry.kt
  9. 2
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/GraphRow.kt

@ -67,7 +67,7 @@ class PokerAnalyticsApplication : Application() {
val sessionsCount = realm.where<Session>().findAll().size val sessionsCount = realm.where<Session>().findAll().size
realm.close() realm.close()
if (sessionsCount < 10) { if (sessionsCount < 1) {
GlobalScope.launch { GlobalScope.launch {
FakeDataManager.createFakeSessions(2000) FakeDataManager.createFakeSessions(2000)
} }

@ -142,6 +142,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
field = value field = value
this.computeNetDuration() this.computeNetDuration()
this.dateChanged() this.dateChanged()
this.defineDefaultTournamentBuyinIfNecessary()
this.computeStats() this.computeStats()
} }
@ -407,9 +408,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
when (getState()) { when (getState()) {
SessionState.PENDING, SessionState.PLANNED -> { SessionState.PENDING, SessionState.PLANNED -> {
this.startDate = Date() this.startDate = Date()
if (this.tournamentEntryFee != null) { this.defineDefaultTournamentBuyinIfNecessary()
this.result?.buyin = this.tournamentEntryFee
}
} }
SessionState.PAUSED -> { SessionState.PAUSED -> {
val pauseDate = this.pauseDate val pauseDate = this.pauseDate
@ -427,6 +426,12 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
} }
} }
private fun defineDefaultTournamentBuyinIfNecessary() {
if (this.tournamentEntryFee != null && this.result?.buyin == null) {
this.result?.buyin = this.tournamentEntryFee
}
}
/** /**
* Pause a session * Pause a session
*/ */

@ -1,7 +1,9 @@
package net.pokeranalytics.android.ui.activity package net.pokeranalytics.android.ui.activity
import android.app.KeyguardManager
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
@ -9,6 +11,7 @@ import androidx.appcompat.app.AlertDialog
import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.bottomnavigation.BottomNavigationView
import io.realm.RealmResults import io.realm.RealmResults
import kotlinx.android.synthetic.main.activity_home.* import kotlinx.android.synthetic.main.activity_home.*
import net.pokeranalytics.android.BuildConfig
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.Currency import net.pokeranalytics.android.model.realm.Currency
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
@ -68,7 +71,17 @@ class HomeActivity : PokerAnalyticsActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_home)
if (BuildConfig.DEBUG) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
setShowWhenLocked(true)
setTurnScreenOn(true)
val keyguardManager = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
keyguardManager.requestDismissKeyguard(this, null)
}
}
setContentView(net.pokeranalytics.android.R.layout.activity_home)
observeRealmObjects() observeRealmObjects()
initUI() initUI()
@ -77,7 +90,7 @@ class HomeActivity : PokerAnalyticsActivity() {
override fun onCreateOptionsMenu(menu: Menu?): Boolean { override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menu?.clear() menu?.clear()
menuInflater.inflate(R.menu.toolbar_home, menu) menuInflater.inflate(net.pokeranalytics.android.R.menu.toolbar_home, menu)
this.homeMenu = menu this.homeMenu = menu
//TODO: Change queryWith button visibility //TODO: Change queryWith button visibility
homeMenu?.findItem(R.id.filter)?.isVisible = false homeMenu?.findItem(R.id.filter)?.isVisible = false
@ -86,7 +99,7 @@ class HomeActivity : PokerAnalyticsActivity() {
override fun onOptionsItemSelected(item: MenuItem?): Boolean { override fun onOptionsItemSelected(item: MenuItem?): Boolean {
when (item?.itemId) { when (item?.itemId) {
R.id.filter -> manageFilters() net.pokeranalytics.android.R.id.filter -> manageFilters()
} }
return super.onOptionsItemSelected(item) return super.onOptionsItemSelected(item)
} }
@ -116,7 +129,7 @@ class HomeActivity : PokerAnalyticsActivity() {
setSupportActionBar(toolbar) setSupportActionBar(toolbar)
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener) navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
navigation.selectedItemId = R.id.navigation_history navigation.selectedItemId = net.pokeranalytics.android.R.id.navigation_history
val homePagerAdapter = HomePagerAdapter(supportFragmentManager) val homePagerAdapter = HomePagerAdapter(supportFragmentManager)
viewPager.offscreenPageLimit = 5 viewPager.offscreenPageLimit = 5
@ -178,12 +191,12 @@ class HomeActivity : PokerAnalyticsActivity() {
homeMenu?.findItem(R.id.filter)?.isVisible = false homeMenu?.findItem(R.id.filter)?.isVisible = false
} }
2 -> { 2 -> {
toolbar.title = getString(R.string.calendar) toolbar.title = getString(net.pokeranalytics.android.R.string.calendar)
homeMenu?.findItem(R.id.filter)?.isVisible = false homeMenu?.findItem(net.pokeranalytics.android.R.id.filter)?.isVisible = false
} }
3 -> { 3 -> {
toolbar.title = getString(R.string.reports) toolbar.title = getString(net.pokeranalytics.android.R.string.reports)
homeMenu?.findItem(R.id.filter)?.isVisible = false homeMenu?.findItem(net.pokeranalytics.android.R.id.filter)?.isVisible = false
} }
4 -> { 4 -> {
toolbar.title = getString(R.string.services) //getString(R.string.more) toolbar.title = getString(R.string.services) //getString(R.string.more)
@ -200,16 +213,16 @@ class HomeActivity : PokerAnalyticsActivity() {
val filterSelected = false val filterSelected = false
val choices = ArrayList<CharSequence>() val choices = ArrayList<CharSequence>()
choices.add(getString(R.string.new_str)) choices.add(getString(net.pokeranalytics.android.R.string.new_str))
if (filterSelected) { if (filterSelected) {
choices.add(getString(R.string.modify_current_filter)) choices.add(getString(net.pokeranalytics.android.R.string.modify_current_filter))
choices.add(getString(R.string.load_from_db)) choices.add(getString(net.pokeranalytics.android.R.string.load_from_db))
choices.add(getString(R.string.remove_filter)) choices.add(getString(net.pokeranalytics.android.R.string.remove_filter))
} }
val builder = AlertDialog.Builder(this) val builder = AlertDialog.Builder(this)
builder.setTitle(R.string.filter_selection) builder.setTitle(net.pokeranalytics.android.R.string.filter_selection)
.setCancelable(true) .setCancelable(true)
.setItems(choices.toTypedArray()) { _, which -> .setItems(choices.toTypedArray()) { _, which ->
Timber.d("Click on $which") Timber.d("Click on $which")
@ -217,7 +230,7 @@ class HomeActivity : PokerAnalyticsActivity() {
0 -> FiltersActivity.newInstance(this@HomeActivity) 0 -> FiltersActivity.newInstance(this@HomeActivity)
} }
} }
.setNegativeButton(R.string.cancel) { _, _ -> .setNegativeButton(net.pokeranalytics.android.R.string.cancel) { _, _ ->
Timber.d("Click on cancel") Timber.d("Click on cancel")
} }

@ -11,7 +11,7 @@ import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.fragment.StatisticDetailsFragment import net.pokeranalytics.android.ui.fragment.StatisticDetailsFragment
class StatisticsDetailsParameters(var stat: Stat, var computableGroup: ComputableGroup, var report: Report) class StatisticsDetailsParameters(var stat: Stat, var computableGroup: ComputableGroup, var report: Report, var title: String? = null)
class StatisticDetailsActivity : PokerAnalyticsActivity() { class StatisticDetailsActivity : PokerAnalyticsActivity() {
@ -24,8 +24,8 @@ class StatisticDetailsActivity : PokerAnalyticsActivity() {
/** /**
* Default constructor * Default constructor
*/ */
fun newInstance(context: Context, stat: Stat, group: ComputableGroup, report: Report, displayAggregationChoices: Boolean = true) { fun newInstance(context: Context, stat: Stat, group: ComputableGroup, report: Report, displayAggregationChoices: Boolean = true, title: String? = null) {
parameters = StatisticsDetailsParameters(stat, group, report) parameters = StatisticsDetailsParameters(stat, group, report, title)
this.displayAggregationChoices = displayAggregationChoices this.displayAggregationChoices = displayAggregationChoices
val intent = Intent(context, StatisticDetailsActivity::class.java) val intent = Intent(context, StatisticDetailsActivity::class.java)
context.startActivity(intent) context.startActivity(intent)
@ -50,7 +50,7 @@ class StatisticDetailsActivity : PokerAnalyticsActivity() {
fragmentTransaction.commit() fragmentTransaction.commit()
parameters?.let { parameters?.let {
statisticDetailsFragment.setData(it.stat, it.computableGroup, it.report, displayAggregationChoices) statisticDetailsFragment.setData(it.stat, it.computableGroup, it.report, displayAggregationChoices, it.title)
parameters = null parameters = null
} }

@ -39,6 +39,7 @@ interface RowRepresentableDataSource: EditableDataSource, DisplayableDataSource,
* To do that, this interface overrides and provides a default implementation to specific methods of [RowRepresentableDataSource] * To do that, this interface overrides and provides a default implementation to specific methods of [RowRepresentableDataSource]
*/ */
interface StaticRowRepresentableDataSource: RowRepresentableDataSource { interface StaticRowRepresentableDataSource: RowRepresentableDataSource {
override fun rowRepresentableForPosition(position:Int): RowRepresentable? { override fun rowRepresentableForPosition(position:Int): RowRepresentable? {
this.adapterRows()?.let { this.adapterRows()?.let {
return it[position] return it[position]

@ -52,8 +52,19 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable
private var sessionTypeCondition: QueryCondition? = null private var sessionTypeCondition: QueryCondition? = null
private var rowRepresentables: ArrayList<RowRepresentable> = ArrayList() private var rowRepresentables: ArrayList<RowRepresentable> = ArrayList()
//private var stat: Stat = Stat.NET_RESULT /**
//private var entries: List<Entry> = ArrayList() * Set data
*/
fun setData(computedResults: ComputedResults?, sessionTypeCondition: QueryCondition?, title: String?) {
this.computedResults = computedResults
this.sessionTypeCondition = sessionTypeCondition
this.title = title
displayData()
launchStatComputation()
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_calendar_details, container, false) return inflater.inflate(R.layout.fragment_calendar_details, container, false)
@ -64,21 +75,6 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable
initUI() initUI()
} }
override fun adapterRows(): List<RowRepresentable>? {
return rowRepresentables
}
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
when (row) {
is GraphRow -> {
//TODO: Open graph details
row.report.results.firstOrNull()?.group?.let { computableGroup ->
StatisticDetailsActivity.newInstance(requireContext(), row.stat, computableGroup, row.report, false)
}
}
}
}
/** /**
* Init UI * Init UI
*/ */
@ -93,6 +89,16 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable
parentActivity.supportActionBar?.setDisplayHomeAsUpEnabled(true) parentActivity.supportActionBar?.setDisplayHomeAsUpEnabled(true)
setHasOptionsMenu(true) setHasOptionsMenu(true)
var tabIndexToSelect = 0
sessionTypeCondition?.let {
tabIndexToSelect = when (it) {
QueryCondition.IsCash -> 1
QueryCondition.IsTournament -> 2
else -> 0
}
}
tabs.getTabAt(tabIndexToSelect)?.select()
tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) { override fun onTabSelected(tab: TabLayout.Tab) {
@ -121,6 +127,7 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable
adapter = statsAdapter adapter = statsAdapter
} }
} }
/** /**
@ -132,15 +139,23 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable
toolbar.title = it toolbar.title = it
} }
sessionTypeCondition?.let {
when (it) {
QueryCondition.IsCash -> tabs.getTabAt(1)?.select()
QueryCondition.IsTournament -> tabs.getTabAt(2)?.select()
else -> tabs.getTabAt(0)?.select()
}
} }
// StaticRowRepresentableDataSource
override fun adapterRows(): List<RowRepresentable>? {
return rowRepresentables
} }
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
when (row) {
is GraphRow -> {
row.report.results.firstOrNull()?.group?.let { computableGroup ->
StatisticDetailsActivity.newInstance(requireContext(), row.stat, computableGroup, row.report, false, row.title)
}
}
}
}
/** /**
* Launch stat computation * Launch stat computation
@ -187,7 +202,7 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable
rowRepresentables.add(StatDoubleRow(it.computedStat(Stat.NET_RESULT), it.computedStat(Stat.HOURLY_RATE))) rowRepresentables.add(StatDoubleRow(it.computedStat(Stat.NET_RESULT), it.computedStat(Stat.HOURLY_RATE)))
rowRepresentables.add(StatDoubleRow(it.computedStat(Stat.LOCATIONS_PLAYED), it.computedStat(Stat.LONGEST_STREAKS))) rowRepresentables.add(StatDoubleRow(it.computedStat(Stat.LOCATIONS_PLAYED), it.computedStat(Stat.LONGEST_STREAKS)))
rowRepresentables.add(CustomizableRowRepresentable(RowViewType.HEADER_TITLE, resId = R.string.distribution)) rowRepresentables.add(CustomizableRowRepresentable(RowViewType.HEADER_TITLE, resId = R.string.distribution))
rowRepresentables.add(GraphRow(report, Stat.STANDARD_DEVIATION)) rowRepresentables.add(GraphRow(report, Stat.STANDARD_DEVIATION, requireContext().getString(R.string.distribution)))
rowRepresentables.add(StatDoubleRow(it.computedStat(Stat.WIN_RATIO), it.computedStat(Stat.MAXIMUM_NETRESULT))) rowRepresentables.add(StatDoubleRow(it.computedStat(Stat.WIN_RATIO), it.computedStat(Stat.MAXIMUM_NETRESULT)))
rowRepresentables.add(CustomizableRowRepresentable(RowViewType.HEADER_TITLE, resId = R.string.volume)) rowRepresentables.add(CustomizableRowRepresentable(RowViewType.HEADER_TITLE, resId = R.string.volume))
rowRepresentables.add(GraphRow(report, Stat.HOURLY_DURATION)) rowRepresentables.add(GraphRow(report, Stat.HOURLY_DURATION))
@ -207,18 +222,4 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable
} }
} }
/**
* Set data
*/
fun setData(computedResults: ComputedResults?, sessionTypeCondition: QueryCondition?, title: String?) {
this.computedResults = computedResults
this.sessionTypeCondition = sessionTypeCondition
this.title = title
displayData()
launchStatComputation()
}
} }

@ -48,6 +48,7 @@ class StatisticDetailsFragment : PokerAnalyticsFragment() {
private lateinit var graphFragment: GraphFragment private lateinit var graphFragment: GraphFragment
private lateinit var selectedReport: Report private lateinit var selectedReport: Report
private var title: String? = null
private var reports: MutableMap<AggregationType, Report> = hashMapOf() private var reports: MutableMap<AggregationType, Report> = hashMapOf()
private var stat: Stat = Stat.NET_RESULT private var stat: Stat = Stat.NET_RESULT
private var displayAggregationChoices: Boolean = true private var displayAggregationChoices: Boolean = true
@ -61,6 +62,21 @@ class StatisticDetailsFragment : PokerAnalyticsFragment() {
initUI() initUI()
} }
/**
* Set data
*/
fun setData(stat: Stat, computableGroup: ComputableGroup, report: Report, displayAggregationChoices: Boolean, title: String? = null) {
this.stat = stat
this.computableGroup = computableGroup
this.selectedReport = report
this.displayAggregationChoices = displayAggregationChoices
this.title = title
stat.aggregationTypes.firstOrNull()?.let {
reports[it] = report
}
}
/** /**
* Init UI * Init UI
*/ */
@ -89,7 +105,7 @@ class StatisticDetailsFragment : PokerAnalyticsFragment() {
} }
} }
toolbar.title = stat.localizedTitle(requireContext()) toolbar.title = this.title ?: stat.localizedTitle(requireContext())
val aggregationTypes = stat.aggregationTypes val aggregationTypes = stat.aggregationTypes
aggregationTypes.forEachIndexed { index, type -> aggregationTypes.forEachIndexed { index, type ->
@ -117,6 +133,7 @@ class StatisticDetailsFragment : PokerAnalyticsFragment() {
return return
} }
} }
else -> {}
} }
reports[aggregationType]?.let { report -> reports[aggregationType]?.let { report ->
@ -191,19 +208,4 @@ class StatisticDetailsFragment : PokerAnalyticsFragment() {
} }
/**
* Set data
*/
fun setData(stat: Stat, computableGroup: ComputableGroup, report: Report, displayAggregationChoices: Boolean) {
this.stat = stat
this.computableGroup = computableGroup
this.selectedReport = report
this.displayAggregationChoices = displayAggregationChoices
stat.aggregationTypes.firstOrNull()?.let {
reports[it] = report
}
}
} }

@ -22,7 +22,7 @@ interface GraphUnderlyingEntry {
): LegendContent { ): LegendContent {
return when (stat) { return when (stat) {
Stat.NUMBER_OF_SETS, Stat.NUMBER_OF_GAMES, Stat.WIN_RATIO -> { Stat.NUMBER_OF_SETS, Stat.NUMBER_OF_GAMES, Stat.WIN_RATIO, Stat.HOURLY_DURATION, Stat.AVERAGE_HOURLY_DURATION -> {
val totalStatValue = stat.format(entry.y.toDouble(), currency = null) val totalStatValue = stat.format(entry.y.toDouble(), currency = null)
DefaultLegendValues(this.entryTitle, totalStatValue) DefaultLegendValues(this.entryTitle, totalStatValue)
} }

@ -6,7 +6,7 @@ import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.RowViewType
class GraphRow(var report: Report, var stat: Stat) : RowRepresentable { class GraphRow(var report: Report, var stat: Stat, var title: String? = null) : RowRepresentable {
override val viewType: Int override val viewType: Int
get() = RowViewType.GRAPH.ordinal get() = RowViewType.GRAPH.ordinal

Loading…
Cancel
Save