View hands from Session

hh
Laurent 6 years ago
parent 4ff41f6391
commit bbc7d154ca
  1. 2
      app/src/main/AndroidManifest.xml
  2. 49
      app/src/main/java/net/pokeranalytics/android/model/LiveData.kt
  3. 3
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  4. 25
      app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/HandHistory.kt
  5. 78
      app/src/main/java/net/pokeranalytics/android/ui/activity/DataListActivity.kt
  6. 15
      app/src/main/java/net/pokeranalytics/android/ui/activity/FiltersListActivity.kt
  7. 2
      app/src/main/java/net/pokeranalytics/android/ui/activity/components/BaseActivity.kt
  8. 40
      app/src/main/java/net/pokeranalytics/android/ui/adapter/FeedHandHistoryRowRepresentableAdapter.kt
  9. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDetailsFragment.kt
  10. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollFragment.kt
  11. 52
      app/src/main/java/net/pokeranalytics/android/ui/fragment/DataSelectionDialogFragment.kt
  12. 1
      app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt
  13. 96
      app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersListFragment.kt
  14. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt
  15. 5
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt
  16. 1
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt
  17. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/DeletableItemFragment.kt
  18. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/DataManagerFragment.kt
  19. 113
      app/src/main/java/net/pokeranalytics/android/ui/modules/datalist/DataListActivity.kt
  20. 124
      app/src/main/java/net/pokeranalytics/android/ui/modules/datalist/DataListFragment.kt
  21. 55
      app/src/main/java/net/pokeranalytics/android/ui/modules/datalist/DataListViewModel.kt
  22. 59
      app/src/main/java/net/pokeranalytics/android/ui/modules/datalist/DataSelectionDialogFragment.kt
  23. 8
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/HandHistoryActivity.kt
  24. 4
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/HandHistoryFragment.kt
  25. 26
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/views/RowHandHistoryViewHolder.kt
  26. 30
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SessionRow.kt
  27. 2
      app/src/main/res/layout/activity_data_list.xml
  28. 10
      app/src/main/res/layout/fragment_data_selection_dialog.xml
  29. 8
      app/src/main/res/layout/row_hand_history.xml
  30. 4
      app/src/main/res/layout/row_hand_history_view.xml

@ -118,7 +118,7 @@
android:screenOrientation="portrait" />
<activity
android:name="net.pokeranalytics.android.ui.activity.DataListActivity"
android:name="net.pokeranalytics.android.ui.modules.datalist.DataListActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait" />

@ -1,10 +1,15 @@
package net.pokeranalytics.android.model
import android.content.Context
import androidx.fragment.app.Fragment
import io.realm.Realm
import io.realm.Sort
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.model.realm.*
import net.pokeranalytics.android.model.realm.handhistory.HandHistory
import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.modules.handhistory.HandHistoryActivity
import net.pokeranalytics.android.ui.view.Localizable
import net.pokeranalytics.android.util.extensions.findById
@ -22,7 +27,8 @@ enum class LiveData : Localizable {
FILTER,
CUSTOM_FIELD,
REPORT_SETUP,
PLAYER;
PLAYER,
HAND_HISTORY;
var subType:Int? = null
@ -40,6 +46,7 @@ enum class LiveData : Localizable {
CUSTOM_FIELD -> CustomField::class.java
REPORT_SETUP -> ReportSetup::class.java
PLAYER -> Player::class.java
HAND_HISTORY -> HandHistory::class.java
}
}
@ -81,6 +88,7 @@ enum class LiveData : Localizable {
CUSTOM_FIELD -> R.string.custom_field
REPORT_SETUP -> R.string.custom
PLAYER -> R.string.player
HAND_HISTORY -> R.string.hand_history
}
}
@ -98,6 +106,7 @@ enum class LiveData : Localizable {
CUSTOM_FIELD -> R.string.custom_fields
REPORT_SETUP -> R.string.custom
PLAYER -> R.string.players
HAND_HISTORY -> R.string.hands_history
}
}
@ -115,10 +124,17 @@ enum class LiveData : Localizable {
CUSTOM_FIELD -> R.string.new_custom_field
REPORT_SETUP -> R.string.new_report
PLAYER -> R.string.new_friend
HAND_HISTORY -> R.string.new_hand
}
}
val isSearchable: Boolean
get() {
return when (this) {
PLAYER, LOCATION -> true
else -> false
}
}
/**
* Return the new entity titleResId
@ -141,4 +157,33 @@ enum class LiveData : Localizable {
return context.getString(this.pluralResId, context)
}
fun openEditActivity(fragment: Fragment, primaryKey: String? = null, requestCode: Int) {
when (this) {
HAND_HISTORY -> {
HandHistoryActivity.newInstance(fragment, primaryKey)
}
else -> {
EditableDataActivity.newInstanceForResult(fragment, this, primaryKey, requestCode)
}
}
}
val sortFields: Array<String>
get() {
return when (this) {
TRANSACTION, HAND_HISTORY -> arrayOf("date")
FILTER -> arrayOf("useCount", "name")
else -> arrayOf("name")
}
}
val sortOrders: Array<Sort>
get() {
return when (this) {
TRANSACTION, HAND_HISTORY -> arrayOf(Sort.DESCENDING)
FILTER -> arrayOf(Sort.DESCENDING, Sort.ASCENDING)
else -> arrayOf(Sort.ASCENDING)
}
}
}

@ -268,9 +268,9 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
// The number of tables played at the same time
var numberOfTables: Int = 1
// The hands list associated with the Session
// var hands: RealmList<HandHistory> = RealmList()
// The hand histories of the session
@LinkingObjects("session")
val handHistories: RealmResults<HandHistory>? = null
@ -823,6 +823,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
}
}
SessionRow.TOURNAMENT_NAME -> tournamentName?.name ?: NULL_TEXT
SessionRow.HANDS -> this.handHistories?.size.toString() ?: NULL_TEXT
is CustomField -> {
customFieldEntries.find { it.customField?.id == row.id }?.let { customFieldEntry ->
return customFieldEntry.getFormattedValue(currency)

@ -5,6 +5,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.widget.AppCompatTextView
import io.realm.Realm
import io.realm.RealmList
import io.realm.RealmObject
import io.realm.annotations.Ignore
@ -14,18 +15,21 @@ import net.pokeranalytics.android.model.filter.Filterable
import net.pokeranalytics.android.model.handhistory.HandSetup
import net.pokeranalytics.android.model.handhistory.Position
import net.pokeranalytics.android.model.handhistory.Street
import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.model.interfaces.DeleteValidityStatus
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.TimeFilterable
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.ui.modules.handhistory.model.ActionReadRow
import net.pokeranalytics.android.ui.modules.handhistory.model.CardHolder
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.util.extensions.addLineReturn
import net.pokeranalytics.android.util.extensions.formatted
import net.pokeranalytics.android.util.extensions.fullDate
import java.util.*
open class HandHistory : RealmObject(), RowRepresentable, Identifiable, Filterable, TimeFilterable,
open class HandHistory : RealmObject(), Deletable, RowRepresentable, Identifiable, Filterable, TimeFilterable,
CardHolder {
@PrimaryKey
@ -116,6 +120,22 @@ open class HandHistory : RealmObject(), RowRepresentable, Identifiable, Filterab
override var year: Int? = null
override var dayOfMonth: Int? = null
// Deletable
override fun isValidForDelete(realm: Realm): Boolean {
return true
}
override fun getFailedDeleteMessage(status: DeleteValidityStatus): Int {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun deleteDependencies(realm: Realm) {
this.board.deleteAllFromRealm()
this.playerSetups.deleteAllFromRealm()
this.actions.deleteAllFromRealm()
}
/***
* Configures a hand history with a [handSetup]
*/
@ -247,6 +267,9 @@ open class HandHistory : RealmObject(), RowRepresentable, Identifiable, Filterab
return this.anteSum + sortedActions.take(firstIndexOfStreet).sumByDouble { it.effectiveAmount }
}
@Ignore
override val viewType: Int = RowViewType.HAND_HISTORY.ordinal
override fun localizedString(context: Context): CharSequence {
val positions = Position.positionsPerPlayers(this.numberOfPlayers)

@ -1,78 +0,0 @@
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.model.LiveData
import net.pokeranalytics.android.ui.activity.components.BaseActivity
import net.pokeranalytics.android.ui.activity.components.RequestCode
import net.pokeranalytics.android.ui.fragment.DataListFragment
import net.pokeranalytics.android.ui.fragment.DataSelectionDialogFragment
import net.pokeranalytics.android.ui.interfaces.FilterActivityRequestCode
class DataListActivity : BaseActivity() {
enum class IntentKey(val keyName: String) {
DATA_TYPE("DATA_TYPE"),
LIVE_DATA_TYPE("LIVE_DATA_TYPE"),
ITEM_DELETED("ITEM_DELETED"),
SHOW_ADD_BUTTON("SHOW_ADD_BUTTON"),
SELECTION_DIALOG("DIALOG")
}
companion object {
fun newInstance(context: Context, dataType: Int) {
context.startActivity(getIntent(context, dataType))
}
fun newSelectInstance(fragment: Fragment, dataType: Int, showAddButton: Boolean = true) {
val context = fragment.requireContext()
fragment.startActivityForResult(getIntent(context, dataType, showAddButton), FilterActivityRequestCode.SELECT_FILTER.ordinal)
}
fun newSelectionDialogInstance(fragment: Fragment, dataType: LiveData) {
val context = fragment.requireContext()
fragment.startActivityForResult(getIntent(context, dataType.ordinal, false, true), RequestCode.PLAYER_SELECTION.ordinal)
}
private fun getIntent(context: Context, dataType: Int, showAddButton: Boolean = true, dialog: Boolean = false): Intent {
val intent = Intent(context, DataListActivity::class.java)
intent.putExtra(IntentKey.DATA_TYPE.keyName, dataType)
intent.putExtra(IntentKey.SHOW_ADD_BUTTON.keyName, showAddButton)
intent.putExtra(IntentKey.SELECTION_DIALOG.keyName, dialog)
return intent
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_data_list)
initUI()
}
/**
* Init UI
*/
private fun initUI() {
val dataType = intent.getIntExtra(IntentKey.DATA_TYPE.keyName, 0)
val showAddButton = intent.getBooleanExtra(IntentKey.SHOW_ADD_BUTTON.keyName, true)
val dialog = intent.getBooleanExtra(IntentKey.SELECTION_DIALOG.keyName, true)
if (dialog) {
val dataSelectionDialogFragment = DataSelectionDialogFragment.newInstance(dataType)
this.showFragment(dataSelectionDialogFragment, R.id.container)
} else {
val dataListFragment = DataListFragment()
dataListFragment.setData(dataType)
dataListFragment.updateUI(showAddButton)
}
// val fragment = dataListFragment as DataListFragment
// fragment.setData(dataType)
// fragment.updateUI(showAddButton)
}
}

@ -4,14 +4,21 @@ import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProviders
import kotlinx.android.synthetic.main.activity_filters_list.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.ui.activity.components.BaseActivity
import net.pokeranalytics.android.ui.fragment.FiltersListFragment
import net.pokeranalytics.android.ui.interfaces.FilterActivityRequestCode
import net.pokeranalytics.android.ui.modules.datalist.DataListViewModel
class FiltersListActivity : BaseActivity() {
val model: DataListViewModel by lazy {
ViewModelProviders.of(this).get(DataListViewModel::class.java)
}
enum class IntentKey(val keyName: String) {
DATA_TYPE("DATA_TYPE"),
LIVE_DATA_TYPE("LIVE_DATA_TYPE"),
@ -51,8 +58,12 @@ class FiltersListActivity : BaseActivity() {
val dataType = intent.getIntExtra(IntentKey.DATA_TYPE.keyName, 0)
val showAddButton = intent.getBooleanExtra(IntentKey.SHOW_ADD_BUTTON.keyName, true)
val fragment = filtersListFragment as FiltersListFragment
fragment.setData(dataType)
fragment.updateUI(showAddButton)
this.model.dataType = LiveData.values()[dataType]
this.model.showAddButton = showAddButton
// fragment.setData(dataType)
// fragment.updateUI(showAddButton)
}
}

@ -104,7 +104,7 @@ abstract class BaseActivity : AppCompatActivity() {
fun showFragment(fragment: Fragment, containerId: Int) {
val fragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.add(containerId, fragment)
fragmentTransaction.replace(containerId, fragment)
fragmentTransaction.commit()
}

@ -6,13 +6,13 @@ import android.view.ViewGroup
import androidx.appcompat.widget.AppCompatTextView
import androidx.recyclerview.widget.RecyclerView
import io.realm.RealmResults
import kotlinx.android.synthetic.main.row_hand_history.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.realm.handhistory.HandHistory
import net.pokeranalytics.android.ui.modules.handhistory.views.RowHandHistoryViewHolder
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.util.NULL_TEXT
import net.pokeranalytics.android.util.extensions.getMonthAndYear
import timber.log.Timber
import java.util.*
import kotlin.collections.HashMap
@ -35,27 +35,27 @@ class FeedHandHistoryRowRepresentableAdapter(
refreshData()
}
inner class RowHandHistoryViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
BindableHolder {
// override fun onBind(position: Int, row: RowRepresentable, adapter: RecyclerAdapter) {
// inner class RowHandHistoryViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
// BindableHolder {
//
//// override fun onBind(position: Int, row: RowRepresentable, adapter: RecyclerAdapter) {
//// itemView.handHistoryRow.setData(row as HandHistory)
//// val listener = View.OnClickListener {
//// adapter.delegate?.onRowSelected(position, row)
//// }
//// itemView.handHistoryRow.setOnClickListener(listener)
//// }
//
// fun bind(position: Int, row: HandHistory?, adapter: FeedHandHistoryRowRepresentableAdapter) {
//
// itemView.handHistoryRow.setData(row as HandHistory)
// val listener = View.OnClickListener {
// adapter.delegate?.onRowSelected(position, row)
// }
// itemView.handHistoryRow.setOnClickListener(listener)
// }
fun bind(position: Int, row: HandHistory?, adapter: FeedHandHistoryRowRepresentableAdapter) {
itemView.handHistoryRow.setData(row as HandHistory)
val listener = View.OnClickListener {
adapter.delegate?.onRowSelected(position, row)
}
itemView.handHistoryRow.setOnClickListener(listener)
}
}
//
// }
/**
* Display a header
@ -96,7 +96,8 @@ class FeedHandHistoryRowRepresentableAdapter(
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (holder is RowHandHistoryViewHolder) {
holder.bind(position, getHandHistoryForPosition(position), this)
val hh = getHandHistoryForPosition(position) ?: throw PAIllegalStateException("Should not happen")
holder.bind(position, hh, this.delegate)
} else if (holder is HeaderTitleViewHolder) {
holder.bind(getHeaderForPosition(position))
}
@ -155,8 +156,7 @@ class FeedHandHistoryRowRepresentableAdapter(
this.sortedHeaders = this.headersPositions.toSortedMap()
Timber.d("]]] this.sortedHeaders = ${this.sortedHeaders}")
// Timber.d("]]] this.sortedHeaders = ${this.sortedHeaders}")
}

@ -14,7 +14,7 @@ import net.pokeranalytics.android.calculus.bankroll.BankrollReportManager
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.realm.Bankroll
import net.pokeranalytics.android.ui.activity.DataListActivity
import net.pokeranalytics.android.ui.modules.datalist.DataListActivity
import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.activity.components.RequestCode
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter

@ -20,7 +20,7 @@ import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.model.realm.Bankroll
import net.pokeranalytics.android.ui.activity.BankrollDetailsActivity
import net.pokeranalytics.android.ui.activity.DataListActivity
import net.pokeranalytics.android.ui.modules.datalist.DataListActivity
import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.activity.GraphActivity
import net.pokeranalytics.android.ui.activity.components.RequestCode

@ -1,52 +0,0 @@
package net.pokeranalytics.android.ui.fragment
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.DialogFragment
import kotlinx.android.synthetic.main.fragment_data_selection_dialog.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.PAIllegalStateException
class DataSelectionDialogFragment : DialogFragment() {
private enum class BundleKey(var value: String) {
DATA_TYPE("data_type")
}
companion object {
fun newInstance(dataType: Int): DataSelectionDialogFragment {
val df = DataSelectionDialogFragment()
val bundle = Bundle()
bundle.putSerializable(BundleKey.DATA_TYPE.value, dataType)
df.arguments = bundle
return df
}
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_data_selection_dialog, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initDataListFragment()
}
private fun initDataListFragment() {
val dataListFragment = this.dataListFragment as DataListFragment
val dataType = this.arguments?.getInt(BundleKey.DATA_TYPE.value) ?: throw PAIllegalStateException("undefined datatype")
dataListFragment.setData(dataType)
}
}

@ -31,6 +31,7 @@ import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.fragment.components.FilterableFragment
import net.pokeranalytics.android.ui.interfaces.FilterActivityRequestCode
import net.pokeranalytics.android.ui.interfaces.FilterableType
import net.pokeranalytics.android.ui.modules.datalist.DataListActivity
import net.pokeranalytics.android.ui.modules.handhistory.HandHistoryActivity
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.SmoothScrollLinearLayoutManager

@ -3,64 +3,57 @@ package net.pokeranalytics.android.ui.fragment
import android.app.Activity
import android.content.Context
import android.content.Intent
import io.realm.RealmResults
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.activity.FiltersActivity
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetFragment
import net.pokeranalytics.android.ui.interfaces.FilterHandler.Companion.INTENT_FILTER_UPDATE_FILTER_UI
import net.pokeranalytics.android.ui.modules.datalist.DataListFragment
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.util.Preferences
import timber.log.Timber
open class FiltersListFragment : DataListFragment() {
private var identifiableClass: Class<out Deletable> = Filter::class.java
private var dataType: LiveData = LiveData.FILTER
private lateinit var items: RealmResults<Filter>
/**
* Set fragment data
*/
override fun setData(dataType: Int) {
super.setData(dataType)
this.dataType = LiveData.FILTER
this.identifiableClass = Filter::class.java
setToolbarTitle(this.dataType.pluralLocalizedTitle(requireContext()))
this.items = this.retrieveItems(getRealm()) as RealmResults<Filter>
}
override fun rowRepresentableForPosition(position: Int): RowRepresentable? {
Timber.d("rowRepresentableForPosition: ${this.items[position] as RowRepresentable}")
return this.items[position] as RowRepresentable
}
override fun numberOfRows(): Int {
return this.items.size
}
override fun adapterRows(): List<RowRepresentable>? {
return items
}
override fun viewTypeForPosition(position: Int): Int {
val viewType = (this.items[position] as RowRepresentable).viewType
return if (viewType != -1) viewType else RowViewType.DATA.ordinal
}
override fun editDescriptors(row: RowRepresentable): List<RowRepresentableEditDescriptor>? {
return when (row) {
is Filter -> row.editingDescriptors(mapOf("defaultValue" to row.name))
else -> super.editDescriptors(row)
}
}
// private var identifiableClass: Class<out Deletable> = Filter::class.java
// private var dataType: LiveData = LiveData.FILTER
// private lateinit var items: RealmResults<Filter>
//
// /**
// * Set fragment data
// */
// override fun setData(dataType: Int) {
// super.setData(dataType)
//
// this.dataType = LiveData.FILTER
// this.identifiableClass = Filter::class.java
// setToolbarTitle(this.dataType.pluralLocalizedTitle(requireContext()))
// this.items = this.retrieveItems(getRealm()) as RealmResults<Filter>
// }
//
// override fun rowRepresentableForPosition(position: Int): RowRepresentable? {
// Timber.d("rowRepresentableForPosition: ${this.items[position] as RowRepresentable}")
// return this.items[position] as RowRepresentable
// }
//
// override fun numberOfRows(): Int {
// return this.items.size
// }
//
// override fun adapterRows(): List<RowRepresentable>? {
// return items
// }
//
// override fun viewTypeForPosition(position: Int): Int {
// val viewType = (this.items[position] as RowRepresentable).viewType
// return if (viewType != -1) viewType else RowViewType.DATA.ordinal
// }
//
// override fun editDescriptors(row: RowRepresentable): List<RowRepresentableEditDescriptor>? {
// return when (row) {
// is Filter -> row.editingDescriptors(mapOf("defaultValue" to row.name))
// else -> super.editDescriptors(row)
// }
// }
override fun onRowValueChanged(value: Any?, row: RowRepresentable) {
when (row) {
@ -77,7 +70,7 @@ open class FiltersListFragment : DataListFragment() {
when (row) {
is Filter -> {
val filterId = row.id
deleteItem(dataListAdapter, items, filterId)
deleteItem(dataListAdapter, this.model.items, filterId)
if (filterId == Preferences.getActiveFilterId(requireContext())) {
Preferences.setActiveFilterId("", requireContext())
updateFilterUIIfNecessary(requireContext(), "")
@ -101,8 +94,9 @@ open class FiltersListFragment : DataListFragment() {
}
}
else -> {
val identifier = (row as Identifiable).id
EditableDataActivity.newInstanceForResult(this, this.dataType, identifier, REQUEST_CODE_DETAILS)
super.onRowSelected(position, row, tag)
// val identifier = (row as Identifiable).id
// EditableDataActivity.newInstanceForResult(this, this.dataType, identifier, REQUEST_CODE_DETAILS)
}
}
}

@ -22,7 +22,7 @@ import net.pokeranalytics.android.model.Criteria
import net.pokeranalytics.android.model.combined
import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.model.realm.ReportSetup
import net.pokeranalytics.android.ui.activity.DataListActivity
import net.pokeranalytics.android.ui.modules.datalist.DataListActivity
import net.pokeranalytics.android.ui.activity.ReportCreationActivity
import net.pokeranalytics.android.ui.activity.components.ReportActivity
import net.pokeranalytics.android.ui.activity.components.RequestCode

@ -27,6 +27,7 @@ import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.fragment.components.RealmFragment
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetFragment
import net.pokeranalytics.android.ui.helpers.DateTimePickerManager
import net.pokeranalytics.android.ui.modules.datalist.DataListActivity
import net.pokeranalytics.android.ui.modules.handhistory.HandHistoryActivity
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableDiffCallback
@ -223,6 +224,10 @@ class SessionFragment : RealmFragment(), RowRepresentableDelegate {
SessionRow.BANKROLL -> {
BottomSheetFragment.create(fragmentManager, row, this, data, false, currentSession.currency)
}
SessionRow.HANDS -> {
val hhIds = this.currentSession.handHistories?.map { it.id }?.toTypedArray()
DataListActivity.newDialogInstance(this, LiveData.HAND_HISTORY, false, hhIds)
}
else -> BottomSheetFragment.create(fragmentManager, row, this, data, currentCurrency = currentSession.currency)
}
}

@ -26,6 +26,7 @@ import net.pokeranalytics.android.ui.extensions.openContactMail
import net.pokeranalytics.android.ui.extensions.openPlayStorePage
import net.pokeranalytics.android.ui.extensions.openUrl
import net.pokeranalytics.android.ui.fragment.components.BaseFragment
import net.pokeranalytics.android.ui.modules.datalist.DataListActivity
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.SettingRow
import net.pokeranalytics.android.util.Preferences

@ -15,7 +15,7 @@ import kotlinx.coroutines.launch
import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.ui.activity.DataListActivity
import net.pokeranalytics.android.ui.modules.datalist.DataListActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
/**

@ -13,7 +13,7 @@ import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.ConfigurationException
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.activity.DataListActivity
import net.pokeranalytics.android.ui.modules.datalist.DataListActivity
import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.fragment.components.RealmFragment
import net.pokeranalytics.android.ui.viewmodel.DataManagerViewModel

@ -0,0 +1,113 @@
package net.pokeranalytics.android.ui.modules.datalist
import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProviders
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.ui.activity.components.BaseActivity
import net.pokeranalytics.android.ui.activity.components.RequestCode
import net.pokeranalytics.android.ui.interfaces.FilterActivityRequestCode
class DataListActivity : BaseActivity() {
val model: DataListViewModel by lazy {
ViewModelProviders.of(this).get(DataListViewModel::class.java)
}
enum class IntentKey(val keyName: String) {
DATA_TYPE("data_type"),
LIVE_DATA_TYPE("LIVE_DATA_TYPE"),
ITEM_DELETED("item_deleted"),
SHOW_ADD_BUTTON("show_add_button"),
DIALOG("dialog"),
ITEM_IDS("item_ids"),
DATA_SELECTION("selection")
}
companion object {
fun newInstance(context: Context, dataType: Int) {
context.startActivity(
getIntent(
context,
dataType
)
)
}
fun newSelectInstance(fragment: Fragment, dataType: Int, showAddButton: Boolean = true) {
val context = fragment.requireContext()
fragment.startActivityForResult(
getIntent(
context,
dataType,
showAddButton
), FilterActivityRequestCode.SELECT_FILTER.ordinal)
}
fun newDialogInstance(fragment: Fragment, dataType: LiveData, selection: Boolean, itemIds: Array<String>? = null) {
val context = fragment.requireContext()
fragment.startActivityForResult(
getIntent(
context,
dataType.ordinal,
false,
true,
selection,
itemIds
), RequestCode.PLAYER_SELECTION.ordinal)
}
private fun getIntent(context: Context, dataType: Int, showAddButton: Boolean = true, dialog: Boolean = false, selection: Boolean = false, itemIds: Array<String>? = null): Intent {
val intent = Intent(context, DataListActivity::class.java)
intent.putExtra(IntentKey.DATA_TYPE.keyName, dataType)
intent.putExtra(IntentKey.SHOW_ADD_BUTTON.keyName, showAddButton)
intent.putExtra(IntentKey.DIALOG.keyName, dialog)
intent.putExtra(IntentKey.DATA_SELECTION.keyName, selection)
intent.putExtra(IntentKey.ITEM_IDS.keyName, itemIds)
return intent
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_data_list)
initUI()
}
/**
* Init UI
*/
private fun initUI() {
val dataType = intent.getIntExtra(IntentKey.DATA_TYPE.keyName, 0)
val showAddButton = intent.getBooleanExtra(IntentKey.SHOW_ADD_BUTTON.keyName, true)
val dialog = intent.getBooleanExtra(IntentKey.DIALOG.keyName, true)
val selection = intent.getBooleanExtra(IntentKey.DATA_SELECTION.keyName, false)
val itemIds = intent.getStringArrayExtra(IntentKey.ITEM_IDS.keyName)
this.model.dataType = LiveData.values()[dataType]
this.model.isSelectionInstance = selection
this.model.showAddButton = showAddButton
this.model.itemIds = itemIds
val dataListFragment = DataListFragment()
val fragment = if (dialog) {
val dataSelectionDialogFragment = DataSelectionDialogFragment()
showFragment(dataSelectionDialogFragment, R.id.container)
dataSelectionDialogFragment.showFragment(dataListFragment)
} else {
showFragment(dataListFragment, R.id.container)
}
// val fragment = dataListFragment as DataListFragment
// fragment.setData(dataType)
// fragment.updateUI(showAddButton)
}
}

@ -1,4 +1,4 @@
package net.pokeranalytics.android.ui.fragment
package net.pokeranalytics.android.ui.modules.datalist
import android.app.Activity
import android.content.Intent
@ -6,6 +6,7 @@ import android.os.Bundle
import android.view.*
import androidx.appcompat.widget.SearchView
import androidx.core.view.isVisible
import androidx.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
import io.realm.Realm
@ -19,66 +20,37 @@ import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.activity.FiltersActivity
import net.pokeranalytics.android.ui.adapter.LiveRowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.extensions.removeMargins
import net.pokeranalytics.android.ui.fragment.components.DeletableItemFragment
import net.pokeranalytics.android.ui.helpers.SwipeToDeleteCallback
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.util.extensions.find
import net.pokeranalytics.android.util.extensions.sorted
open class DataListFragment : DeletableItemFragment(), LiveRowRepresentableDataSource, RowRepresentableDelegate {
open class DataListFragment : DeletableItemFragment(), RowRepresentableDelegate {
val model: DataListViewModel by lazy {
ViewModelProviders.of(requireActivity()).get(DataListViewModel::class.java)
}
companion object {
const val REQUEST_CODE_DETAILS = 1000
}
private lateinit var identifiableClass: Class<out Deletable>
private lateinit var dataType: LiveData
private lateinit var items: RealmResults<out Deletable>
private var dataListMenu: Menu? = null
private var menu: Menu? = null
private var searchView: SearchView? = null
/***
* Returns the selected item on row selection
*/
private var isSelectionInstance: Boolean = false
private var isSearchable: Boolean = false
set(value) {
field = value
val searchMenuItem = dataListMenu?.findItem(R.id.action_search)
searchMenuItem?.isVisible = value
}
/**
* Set fragment data
*/
open fun setData(dataType: Int) {
this.dataType = LiveData.values()[dataType]
this.identifiableClass = this.dataType.relatedEntity
setToolbarTitle(this.dataType.pluralLocalizedTitle(requireContext()))
this.items = this.retrieveItems(getRealm())
this.isSearchable = when (this.dataType) {
LiveData.PLAYER, LiveData.LOCATION -> true
else -> false
}
}
open fun retrieveItems(realm: Realm): RealmResults<out Deletable> {
return realm.sorted(this.identifiableClass, editableOnly = true, filterableTypeUniqueIdentifier = dataType.subType)
return realm.sorted(this.model.identifiableClass,
editableOnly = true,
filterableTypeUniqueIdentifier = this.model.dataType.subType)
}
override fun deletableItems() : List<Deletable> {
return this.items
return this.model.items
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
@ -88,24 +60,44 @@ open class DataListFragment : DeletableItemFragment(), LiveRowRepresentableDataS
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initData()
initUI()
}
fun initData() {
val itemIds = this.model.itemIds
val items = if (itemIds?.isNotEmpty() == true) {
getRealm().where(this.model.identifiableClass)
.`in`("id", itemIds)
.sort(this.model.dataType.sortFields, this.model.dataType.sortOrders)
.findAll()
} else {
this.retrieveItems(getRealm())
}
this.model.setItemsList(items)
}
/**
* Init UI
*/
private fun initUI() {
val searchMenuItem = this.menu?.findItem(R.id.action_search)
searchMenuItem?.isVisible = this.model.isSearchable
setToolbarTitle(this.model.dataType.pluralLocalizedTitle(requireContext()))
setDisplayHomeAsUpEnabled(true)
val viewManager = LinearLayoutManager(requireContext())
this.dataListAdapter = RowRepresentableAdapter(this, this)
this.dataListAdapter = RowRepresentableAdapter(this.model, this)
val swipeToDelete = SwipeToDeleteCallback(dataListAdapter) { position ->
val item = this.items[position]
val swipeToDelete = SwipeToDeleteCallback(this.dataListAdapter) { position ->
val item = this.model.items[position]
if (item != null) {
val itemId = item.id
deleteItem(dataListAdapter, items, itemId)
deleteItem(this.dataListAdapter, this.model.items, itemId)
} else {
throw PAIllegalStateException("Item with position $position not found")
}
@ -123,10 +115,13 @@ open class DataListFragment : DeletableItemFragment(), LiveRowRepresentableDataS
this.addButton.setOnClickListener {
EditableDataActivity.newInstance(
requireContext(),
dataType = this.dataType.ordinal,
dataType = this.model.dataType.ordinal,
primaryKey = null
)
}
this.addButton.isVisible = this.model.showAddButton
}
override fun onResume() {
@ -138,14 +133,14 @@ open class DataListFragment : DeletableItemFragment(), LiveRowRepresentableDataS
menu.clear()
inflater.inflate(R.menu.toolbar_data_list, menu)
this.dataListMenu = menu
this.menu = menu
val searchMenuItem = menu.findItem(R.id.action_search)
searchMenuItem.isVisible = isSearchable
searchMenuItem.isVisible = this.model.isSearchable
searchView = searchMenuItem.actionView as SearchView?
searchView?.removeMargins()
searchView?.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
this.searchView = searchMenuItem.actionView as SearchView?
this.searchView?.removeMargins()
this.searchView?.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
return false
}
@ -159,22 +154,9 @@ open class DataListFragment : DeletableItemFragment(), LiveRowRepresentableDataS
super.onCreateOptionsMenu(menu, inflater)
}
override fun rowRepresentableForPosition(position: Int): RowRepresentable? {
return this.items[position] as RowRepresentable
}
override fun numberOfRows(): Int {
return this.items.size
}
override fun viewTypeForPosition(position: Int): Int {
val viewType = (this.items[position] as RowRepresentable).viewType
return if (viewType != -1) viewType else RowViewType.DATA.ordinal
}
override fun onRowSelected(position: Int, row: RowRepresentable, tag: Int) {
if (this.isSelectionInstance) {
if (this.model.isSelectionInstance) { // Ends the activity and go back to previous screen
val identifier = (row as Identifiable).id
val intent = Intent()
intent.putExtra(BundleKey.PRIMARY_KEY.value, identifier)
@ -182,7 +164,7 @@ open class DataListFragment : DeletableItemFragment(), LiveRowRepresentableDataS
this.activity?.finish()
} else {
when (this.dataType) {
when (this.model.dataType) {
LiveData.FILTER -> {
val intent = Intent()
intent.putExtra(FiltersActivity.IntentKey.FILTER_ID.keyName, (row as Filter).id)
@ -191,25 +173,19 @@ open class DataListFragment : DeletableItemFragment(), LiveRowRepresentableDataS
}
else -> {
val identifier = (row as Identifiable).id
EditableDataActivity.newInstanceForResult(this, this.dataType, identifier, REQUEST_CODE_DETAILS)
this.model.dataType.openEditActivity(this, identifier, REQUEST_CODE_DETAILS)
}
}
}
}
/**
* Update UI
*/
fun updateUI(showAddButton: Boolean) {
this.addButton.isVisible = showAddButton
}
/**
* Filter the items list with the given search content
*/
private fun filterItemsWithSearch(searchContent: String?) {
this.items = getRealm().find(this.identifiableClass, searchContent)
val items = getRealm().find(this.model.identifiableClass, searchContent)
this.model.setItemsList(items)
this.dataListAdapter.notifyDataSetChanged()
}

@ -0,0 +1,55 @@
package net.pokeranalytics.android.ui.modules.datalist
import androidx.lifecycle.ViewModel
import io.realm.RealmResults
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.ui.adapter.LiveRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
class DataListViewModel : ViewModel(), LiveRowRepresentableDataSource {
/***
* The managed data type
*/
lateinit var dataType: LiveData
/***
* Returns the selected item on row selection
*/
var isSelectionInstance: Boolean = false
lateinit var items: RealmResults<out Deletable>
/***
* The item ids to load
*/
var itemIds: Array<String>? = null
val isSearchable: Boolean
get() { return this.dataType.isSearchable }
val identifiableClass: Class<out Deletable>
get() { return this.dataType.relatedEntity }
var showAddButton: Boolean = false
override fun rowRepresentableForPosition(position: Int): RowRepresentable? {
return this.items[position] as RowRepresentable
}
override fun numberOfRows(): Int {
return this.items.size
}
override fun viewTypeForPosition(position: Int): Int {
val viewType = (this.items[position] as RowRepresentable).viewType
return if (viewType != -1) viewType else RowViewType.DATA.ordinal
}
fun setItemsList(items: RealmResults<out Deletable>) {
this.items = items
}
}

@ -0,0 +1,59 @@
package net.pokeranalytics.android.ui.modules.datalist
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.Fragment
import net.pokeranalytics.android.R
class DataSelectionDialogFragment : DialogFragment() {
private enum class BundleKey(var value: String) {
DATA_TYPE("data_type"),
ITEM_IDS("item_ids")
}
companion object {
fun newInstance(): DataSelectionDialogFragment {
val df = DataSelectionDialogFragment()
return df
}
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_data_selection_dialog, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// initDataListFragment()
}
// private fun initDataListFragment() {
////
//// val dataListFragment =
//// DataListFragment()
//// val dataType = this.arguments?.getInt(BundleKey.DATA_TYPE.value) ?: throw PAIllegalStateException("undefined datatype")
//// val itemIds = this.arguments?.getStringArray(BundleKey.ITEM_IDS.value)
//// dataListFragment.setData(dataType, itemIds)
////
//// showFragment(dataListFragment)
////
//// }
fun showFragment(fragment: Fragment) {
val fragmentTransaction = requireFragmentManager().beginTransaction()
fragmentTransaction.replace(R.id.container, fragment)
fragmentTransaction.commit()
}
}

@ -45,11 +45,13 @@ class HandHistoryActivity : BaseActivity() {
*/
private fun initUI() {
val fragmentTransaction = supportFragmentManager.beginTransaction()
val handHistoryId = intent.getStringExtra(IntentKey.IDENTIFIER.keyName)
val sessionId = intent.getStringExtra(IntentKey.SESSION_CONFIGURATION.keyName)
val fragment = HandHistoryFragment.newInstance(handHistoryId, sessionId)
val attached = intent.getBooleanExtra(IntentKey.ATTACHED.keyName, false)
val fragment = HandHistoryFragment.newInstance(handHistoryId, sessionId, attached)
val fragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.add(R.id.container, fragment)
fragmentTransaction.commit()

@ -19,7 +19,6 @@ import net.pokeranalytics.android.model.realm.Player
import net.pokeranalytics.android.model.realm.handhistory.Action
import net.pokeranalytics.android.model.realm.handhistory.Card
import net.pokeranalytics.android.model.realm.handhistory.HandHistory
import net.pokeranalytics.android.ui.activity.DataListActivity
import net.pokeranalytics.android.ui.activity.components.RequestCode
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.extensions.px
@ -27,6 +26,7 @@ import net.pokeranalytics.android.ui.fragment.components.BaseFragment
import net.pokeranalytics.android.ui.fragment.components.RealmFragment
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetFragment
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.modules.datalist.DataListActivity
import net.pokeranalytics.android.ui.modules.handhistory.model.*
import net.pokeranalytics.android.ui.modules.handhistory.views.KeyboardListener
import net.pokeranalytics.android.ui.view.RowRepresentable
@ -384,7 +384,7 @@ class HandHistoryFragment : RealmFragment(), RowRepresentableDelegate, KeyboardL
when (tag) {
PlayerSetupRow.Tag.PLAYER.ordinal -> {
this.model.clickPosition = position
DataListActivity.newSelectionDialogInstance(this, LiveData.PLAYER)
DataListActivity.newDialogInstance(this, LiveData.PLAYER, true)
}
else -> {
Timber.d("onItemClick not configured for row: $row, position: $position, tag: $tag")

@ -2,23 +2,39 @@ package net.pokeranalytics.android.ui.modules.handhistory.views
import android.view.View
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.row_hand_history.view.*
import kotlinx.android.synthetic.main.row_hand_history_view.view.*
import net.pokeranalytics.android.model.handhistory.Street
import net.pokeranalytics.android.model.realm.handhistory.HandHistory
import net.pokeranalytics.android.ui.adapter.BindableHolder
import net.pokeranalytics.android.ui.adapter.RecyclerAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.util.extensions.formatted
class RowHandHistoryViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
BindableHolder {
override fun onBind(position: Int, row: RowRepresentable, adapter: RecyclerAdapter) {
this.bind(position, row, adapter.delegate)
}
itemView.handHistoryRow.setData(row as HandHistory)
val listener = View.OnClickListener {
adapter.delegate?.onRowSelected(position, row)
fun bind(position: Int, row: RowRepresentable, delegate: RowRepresentableDelegate?) {
val handHistory = row as HandHistory
itemView.cardsLayout.removeAllViews()
handHistory.cardViews(itemView.context, itemView.cardsLayout).forEach { view ->
itemView.cardsLayout.addView(view)
}
itemView.handHistoryRow.setOnClickListener(listener)
itemView.amount.text = handHistory.potSizeForStreet(Street.SUMMARY).formatted()
// itemView.handHistoryRow.setData(handHistory)
val listener = View.OnClickListener {
delegate?.onRowSelected(position, row)
}
itemView.constraintLayout.setOnClickListener(listener)
}
}

@ -37,7 +37,8 @@ enum class SessionRow : RowRepresentable {
END_DATE,
BREAK_TIME,
COMMENT;
COMMENT,
HANDS;
companion object {
/**
@ -62,14 +63,20 @@ enum class SessionRow : RowRepresentable {
)
}
SessionState.STARTED, SessionState.PAUSED, SessionState.FINISHED -> {
arrayListOf(
val fields = mutableListOf<RowRepresentable>()
fields.addAll(listOf(
PRIZE,
BUY_IN,
POSITION,
PLAYERS,
TIPS,
COMMENT,
SeparatorRow(),
TIPS))
fields.add(SeparatorRow())
fields.add(COMMENT)
if (session.handHistories?.isNotEmpty() == true) {
fields.add(HANDS)
}
fields.add(SeparatorRow())
fields.addAll(listOf(
GAME,
INITIAL_BUY_IN,
LOCATION,
@ -82,7 +89,8 @@ enum class SessionRow : RowRepresentable {
START_DATE,
END_DATE,
BREAK_TIME
)
))
fields
}
}
}
@ -100,7 +108,11 @@ enum class SessionRow : RowRepresentable {
session.isLive -> fields.addAll(listOf(CASHED_OUT, BUY_IN, TIPS))
else -> fields.add(NET_RESULT)
}
fields.add(SeparatorRow())
fields.add(COMMENT)
if (session.handHistories?.isNotEmpty() == true) {
fields.add(HANDS)
}
fields.add(SeparatorRow())
fields.addAll(listOf(
GAME,
@ -108,10 +120,10 @@ enum class SessionRow : RowRepresentable {
LOCATION,
BANKROLL,
TABLE_SIZE,
SeparatorRow(),
START_DATE,
END_DATE,
BREAK_TIME
)
)
return fields
@ -146,6 +158,7 @@ enum class SessionRow : RowRepresentable {
END_DATE -> R.string.end_date
BREAK_TIME -> R.string.break_time
COMMENT -> R.string.comment
HANDS -> R.string.hands
}
}
@ -154,7 +167,8 @@ enum class SessionRow : RowRepresentable {
return when (this) {
NET_RESULT, PRIZE, POSITION, PLAYERS, CASHED_OUT, INITIAL_BUY_IN, BUY_IN, TIPS,
GAME, BLINDS, LOCATION, BANKROLL, TABLE_SIZE, COMMENT,
TOURNAMENT_TYPE, TOURNAMENT_NAME, TOURNAMENT_FEATURE, START_DATE, END_DATE, BREAK_TIME -> RowViewType.TITLE_VALUE.ordinal
TOURNAMENT_TYPE, TOURNAMENT_NAME, TOURNAMENT_FEATURE, HANDS,
START_DATE, END_DATE, BREAK_TIME -> RowViewType.TITLE_VALUE.ordinal
}
}

@ -8,7 +8,7 @@
<!-- <fragment-->
<!-- android:id="@+id/dataListFragment"-->
<!-- android:name="net.pokeranalytics.android.ui.fragment.DataListFragment"-->
<!-- android:name="net.pokeranalytics.android.ui.modules.datalist.DataListFragment"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="match_parent"-->
<!-- tools:layout="@layout/fragment_data_list" />-->

@ -4,10 +4,10 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/dataListFragment"
android:name="net.pokeranalytics.android.ui.fragment.DataListFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- <fragment-->
<!-- android:id="@+id/dataListFragment"-->
<!-- android:name="net.pokeranalytics.android.ui.modules.datalist.DataListFragment"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="match_parent" />-->
</FrameLayout>

@ -5,9 +5,9 @@
android:orientation="vertical"
android:padding="4dp">
<net.pokeranalytics.android.ui.view.HandHistoryRowView
android:id="@+id/handHistoryRow"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<!-- <net.pokeranalytics.android.ui.view.HandHistoryRowView-->
<!-- android:id="@+id/handHistoryRow"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content" />-->
</LinearLayout>

@ -1,7 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/constraintLayout"
android:layout_width="match_parent"
android:layout_height="56dp"
android:background="?selectableItemBackground">

Loading…
Cancel
Save