Replace kotlin synthetic by new view bindings

kmm
Laurent 5 years ago
parent 1052f27d19
commit c6cb1043c4
  1. 18
      app/src/main/java/net/pokeranalytics/android/ui/modules/bankroll/BankrollDetailsFragment.kt
  2. 18
      app/src/main/java/net/pokeranalytics/android/ui/modules/bankroll/BankrollFragment.kt
  3. 47
      app/src/main/java/net/pokeranalytics/android/ui/modules/calendar/CalendarDetailsFragment.kt
  4. 70
      app/src/main/java/net/pokeranalytics/android/ui/modules/calendar/CalendarFragment.kt
  5. 25
      app/src/main/java/net/pokeranalytics/android/ui/modules/data/CustomFieldDataFragment.kt
  6. 16
      app/src/main/java/net/pokeranalytics/android/ui/modules/data/EditableDataFragment.kt
  7. 17
      app/src/main/java/net/pokeranalytics/android/ui/modules/data/PlayerDataFragment.kt
  8. 21
      app/src/main/java/net/pokeranalytics/android/ui/modules/datalist/DataListFragment.kt
  9. 51
      app/src/main/java/net/pokeranalytics/android/ui/modules/feed/FeedFragment.kt
  10. 26
      app/src/main/java/net/pokeranalytics/android/ui/modules/feed/NewDataMenuActivity.kt
  11. 22
      app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterDetailsFragment.kt
  12. 34
      app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FiltersFragment.kt
  13. 3
      app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FiltersListFragment.kt
  14. 42
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/editor/EditorFragment.kt
  15. 45
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/replayer/ReplayerFragment.kt
  16. 20
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/views/KeyboardActionView.kt
  17. 22
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/views/KeyboardAmountView.kt
  18. 20
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/views/KeyboardCardView.kt
  19. 20
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/views/RowHandHistoryViewHolder.kt
  20. 43
      app/src/main/java/net/pokeranalytics/android/ui/modules/session/SessionFragment.kt

@ -5,12 +5,12 @@ import android.content.Intent
import android.os.Bundle
import android.view.*
import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.fragment_bankroll.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.ComputedStat
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.calculus.bankroll.BankrollReport
import net.pokeranalytics.android.calculus.bankroll.BankrollReportManager
import net.pokeranalytics.android.databinding.FragmentBankrollDetailsBinding
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.realm.Bankroll
@ -47,11 +47,16 @@ class BankrollDetailsFragment : RealmFragment(), StaticRowRepresentableDataSourc
private var bankrollDetailsMenu: Menu? = null
private var _binding: FragmentBankrollDetailsBinding? = null
private val binding get() = _binding!!
// Life Cycle
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_bankroll_details, container, false)
_binding = FragmentBankrollDetailsBinding.inflate(inflater, container, false)
return binding.root
// return inflater.inflate(R.layout.fragment_bankroll_details, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -81,6 +86,11 @@ class BankrollDetailsFragment : RealmFragment(), StaticRowRepresentableDataSourc
super.onCreateOptionsMenu(menu, inflater)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
/**
* Init data
*/
@ -104,7 +114,7 @@ class BankrollDetailsFragment : RealmFragment(), StaticRowRepresentableDataSourc
val viewManager = LinearLayoutManager(requireContext())
recyclerView.apply {
this.binding.recyclerView.apply {
setHasFixedSize(true)
layoutManager = viewManager
adapter = bankrollAdapter
@ -188,7 +198,7 @@ class BankrollDetailsFragment : RealmFragment(), StaticRowRepresentableDataSourc
// StaticRowRepresentableDataSource
override fun adapterRows(): List<RowRepresentable>? {
override fun adapterRows(): List<RowRepresentable> {
return rows
}

@ -9,13 +9,14 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import com.github.mikephil.charting.data.LineDataSet
import io.realm.RealmResults
import kotlinx.android.synthetic.main.fragment_bankroll.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.bankroll.BankrollReportManager
import net.pokeranalytics.android.databinding.FragmentBankrollBinding
import net.pokeranalytics.android.databinding.FragmentBankrollDetailsBinding
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.model.realm.Bankroll
@ -62,6 +63,9 @@ class BankrollFragment : DeletableItemFragment(), StaticRowRepresentableDataSour
private lateinit var bankrolls: RealmResults<Bankroll>
private var _binding: FragmentBankrollBinding? = null
private val binding get() = _binding!!
override fun deletableItems(): List<Deletable> {
return this.bankrolls
}
@ -70,7 +74,8 @@ class BankrollFragment : DeletableItemFragment(), StaticRowRepresentableDataSour
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_bankroll, container, false)
_binding = FragmentBankrollBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -103,6 +108,11 @@ class BankrollFragment : DeletableItemFragment(), StaticRowRepresentableDataSour
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
/**
* Init data
*/
@ -153,13 +163,13 @@ class BankrollFragment : DeletableItemFragment(), StaticRowRepresentableDataSour
val viewManager = LinearLayoutManager(requireContext())
recyclerView.apply {
this.binding.recyclerView.apply {
setHasFixedSize(true)
layoutManager = viewManager
adapter = dataListAdapter
}
addButton.setOnClickListener {
this.binding.addButton.setOnClickListener {
EditableDataActivity.newInstanceForResult(
this@BankrollFragment,
dataType = LiveData.BANKROLL,

@ -13,7 +13,6 @@ import com.github.mikephil.charting.data.BarDataSet
import com.github.mikephil.charting.data.LineDataSet
import com.google.android.material.tabs.TabLayout
import io.realm.Realm
import kotlinx.android.synthetic.main.fragment_calendar_details.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
@ -21,6 +20,7 @@ import net.pokeranalytics.android.R
import net.pokeranalytics.android.calcul.defaultStatEntries
import net.pokeranalytics.android.calculus.Calculator
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.databinding.FragmentCalendarDetailsBinding
import net.pokeranalytics.android.model.filter.Query
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.ui.activity.GraphActivity
@ -54,22 +54,12 @@ class CalendarDetailsFragment : BaseFragment(), StaticRowRepresentableDataSource
private var rowRepresentables: ArrayList<RowRepresentable> = ArrayList()
/**
* Set data
*/
// fun setData(computedResults: ComputedResults?, sessionTypeCondition: QueryCondition?, title: String?) {
//
// this.computedResults = computedResults
// this.sessionTypeCondition = sessionTypeCondition
// this.title = title
//
// displayData()
// launchStatComputation()
//
// }
private var _binding: FragmentCalendarDetailsBinding? = null
private val binding get() = _binding!!
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_calendar_details, container, false)
_binding = FragmentCalendarDetailsBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -78,6 +68,11 @@ class CalendarDetailsFragment : BaseFragment(), StaticRowRepresentableDataSource
launchStatComputation()
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
/**
* Init UI
*/
@ -96,9 +91,9 @@ class CalendarDetailsFragment : BaseFragment(), StaticRowRepresentableDataSource
}
}
tabs.getTabAt(tabIndexToSelect)?.select()
this.binding.tabs.getTabAt(tabIndexToSelect)?.select()
tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
this.binding.tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
when (tab.position) {
0 -> model.sessionTypeCondition = null
@ -119,7 +114,7 @@ class CalendarDetailsFragment : BaseFragment(), StaticRowRepresentableDataSource
val viewManager = LinearLayoutManager(requireContext())
recyclerView.apply {
this.binding.recyclerView.apply {
setHasFixedSize(true)
layoutManager = viewManager
adapter = statsAdapter
@ -130,7 +125,7 @@ class CalendarDetailsFragment : BaseFragment(), StaticRowRepresentableDataSource
// StaticRowRepresentableDataSource
override fun adapterRows(): List<RowRepresentable>? {
override fun adapterRows(): List<RowRepresentable> {
return rowRepresentables
}
@ -165,9 +160,9 @@ class CalendarDetailsFragment : BaseFragment(), StaticRowRepresentableDataSource
*/
private fun launchStatComputation() {
progressBar.isVisible = true
progressBar.animate().alpha(1f).start()
recyclerView.animate().alpha(0f).start()
this.binding.progressBar.isVisible = true
this.binding.progressBar.animate().alpha(1f).start()
this.binding.recyclerView.animate().alpha(0f).start()
this.model.computedResults?.let { computedResults ->
@ -227,10 +222,10 @@ class CalendarDetailsFragment : BaseFragment(), StaticRowRepresentableDataSource
launch(Dispatchers.Main) {
statsAdapter.notifyDataSetChanged()
progressBar.animate().cancel()
progressBar.animate().alpha(0f).withEndAction { progressBar.isVisible = false }.start()
recyclerView.animate().cancel()
recyclerView.animate().alpha(1f).start()
binding.progressBar.animate().cancel()
binding.progressBar.animate().alpha(0f).withEndAction { binding.progressBar.isVisible = false }.start()
binding.recyclerView.animate().cancel()
binding.recyclerView.animate().alpha(1f).start()
}
}
}

@ -7,15 +7,14 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.tabs.TabLayout
import io.realm.Realm
import kotlinx.android.synthetic.main.fragment_calendar.*
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.Calculator
import net.pokeranalytics.android.calculus.ComputedResults
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.databinding.FragmentCalendarBinding
import net.pokeranalytics.android.model.Criteria
import net.pokeranalytics.android.model.combined
import net.pokeranalytics.android.model.filter.QueryCondition
@ -72,11 +71,15 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable
TimeFilter.MONTH
private var currentStat = Stat.NET_RESULT
private var _binding: FragmentCalendarBinding? = null
private val binding get() = _binding!!
// Life Cycle
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_calendar, container, false)
_binding = FragmentCalendarBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -86,7 +89,14 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable
listenRealmChanges(this, ComputableResult::class.java)
}
override fun adapterRows(): List<RowRepresentable>? {
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
//
override fun adapterRows(): List<RowRepresentable> {
return rows
}
@ -134,12 +144,12 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable
private fun initUI() {
CalendarTabs.values().forEach {
val tab = tabs.newTab()
val tab = binding.tabs.newTab()
tab.text = getString(it.resId)
tabs.addTab(tab)
binding.tabs.addTab(tab)
}
tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
binding.tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
when (tab.position) {
0 -> currentStat = Stat.NET_RESULT
@ -162,57 +172,57 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable
})
// Manage session type queryWith
filterSessionAll.setOnCheckedChangeListener { _, isChecked ->
binding.filterSessionAll.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
sessionTypeCondition = null
filterSessionCash.isChecked = false
filterSessionTournament.isChecked = false
binding.filterSessionCash.isChecked = false
binding.filterSessionTournament.isChecked = false
launchAsyncStatComputation()
} else if (sessionTypeCondition == null) {
filterSessionAll.isChecked = true
binding.filterSessionAll.isChecked = true
}
}
filterSessionCash.setOnCheckedChangeListener { _, isChecked ->
binding.filterSessionCash.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
sessionTypeCondition = QueryCondition.IsCash
filterSessionAll.isChecked = false
filterSessionTournament.isChecked = false
binding.filterSessionAll.isChecked = false
binding.filterSessionTournament.isChecked = false
launchAsyncStatComputation()
} else if (sessionTypeCondition == QueryCondition.IsCash) {
filterSessionCash.isChecked = true
binding.filterSessionCash.isChecked = true
}
}
filterSessionTournament.setOnCheckedChangeListener { _, isChecked ->
binding.filterSessionTournament.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
sessionTypeCondition = QueryCondition.IsTournament
filterSessionAll.isChecked = false
filterSessionCash.isChecked = false
binding.filterSessionAll.isChecked = false
binding.filterSessionCash.isChecked = false
launchAsyncStatComputation()
} else if (sessionTypeCondition == QueryCondition.IsTournament) {
filterSessionTournament.isChecked = true
binding.filterSessionTournament.isChecked = true
}
}
// Manage time queryWith
filterTimeMonth.setOnCheckedChangeListener { _, isChecked ->
binding.filterTimeMonth.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
currentTimeFilter =
TimeFilter.MONTH
filterTimeYear.isChecked = false
binding.filterTimeYear.isChecked = false
displayData()
} else if (currentTimeFilter == TimeFilter.MONTH) {
filterTimeMonth.isChecked = true
binding.filterTimeMonth.isChecked = true
}
}
filterTimeYear.setOnCheckedChangeListener { _, isChecked ->
binding.filterTimeYear.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
currentTimeFilter =
TimeFilter.YEAR
filterTimeMonth.isChecked = false
binding.filterTimeMonth.isChecked = false
displayData()
} else if (currentTimeFilter == TimeFilter.YEAR) {
filterTimeYear.isChecked = true
binding.filterTimeYear.isChecked = true
}
}
@ -220,7 +230,7 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable
calendarAdapter = RowRepresentableAdapter(this, this)
recyclerView.apply {
binding.recyclerView.apply {
setHasFixedSize(true)
layoutManager = viewManager
adapter = calendarAdapter
@ -232,8 +242,8 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable
*/
private fun launchAsyncStatComputation() {
progressBar?.showWithAnimation()
recyclerView?.hideWithAnimation()
binding.progressBar?.showWithAnimation()
binding.recyclerView?.hideWithAnimation()
GlobalScope.launch {
@ -411,8 +421,8 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable
calendarAdapter.notifyDataSetChanged()
progressBar?.hideWithAnimation()
recyclerView?.showWithAnimation()
binding.progressBar.hideWithAnimation()
binding.recyclerView.showWithAnimation()
}

@ -9,8 +9,10 @@ import androidx.interpolator.view.animation.FastOutSlowInInterpolator
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.chip.ChipGroup
import kotlinx.android.synthetic.main.fragment_custom_view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.databinding.FragmentBankrollDetailsBinding
import net.pokeranalytics.android.databinding.FragmentCalendarDetailsBinding
import net.pokeranalytics.android.databinding.FragmentCustomViewBinding
import net.pokeranalytics.android.model.realm.CustomField
import net.pokeranalytics.android.model.realm.CustomFieldEntry
import net.pokeranalytics.android.ui.activity.components.BaseActivity
@ -102,18 +104,25 @@ class CustomFieldDataFragment : EditableDataFragment(), StaticRowRepresentableDa
}
})
private var _binding: FragmentCustomViewBinding? = null
private val binding get() = _binding!!
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_custom_view, container, false)
_binding = FragmentCustomViewBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initUI()
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
override fun getDataSource(): RowRepresentableDataSource {
return this
}
@ -206,18 +215,18 @@ class CustomFieldDataFragment : EditableDataFragment(), StaticRowRepresentableDa
*/
private fun initUI() {
customField.updateRowRepresentation()
bottomBar.translationY = 72f.px
bottomBar.visibility = View.VISIBLE
binding.bottomBar.translationY = 72f.px
binding.bottomBar.visibility = View.VISIBLE
if (customField.sortCondition == CustomField.Sort.DEFAULT.uniqueIdentifier) {
itemTouchHelper.attachToRecyclerView(recyclerView)
itemTouchHelper.attachToRecyclerView(binding.recyclerView)
} else {
itemTouchHelper.attachToRecyclerView(null)
}
when (customField.sortCondition) {
CustomField.Sort.DEFAULT.uniqueIdentifier -> sortDefault.isChecked = true
CustomField.Sort.ASCENDING.uniqueIdentifier -> sortAscending.isChecked = true
CustomField.Sort.DEFAULT.uniqueIdentifier -> binding.sortDefault.isChecked = true
CustomField.Sort.ASCENDING.uniqueIdentifier -> binding.sortAscending.isChecked = true
CustomField.Sort.DESCENDING.uniqueIdentifier -> sortDescending.isChecked = true
}

@ -4,11 +4,12 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.widget.Toolbar
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import io.realm.RealmModel
import kotlinx.android.synthetic.main.fragment_editable_data.*
import kotlinx.android.synthetic.main.fragment_editable_data.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.interfaces.Editable
import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.utils.CrashLogging
@ -87,6 +88,8 @@ open class EditableDataFragment : DataManagerFragment(), RowRepresentableDelegat
val liveDataType = this.model.liveDataType
val toolbar = this.view?.findViewById<Toolbar>(R.id.toolbar)
val data: RealmModel? = liveDataType.getData(this.getRealm(), this.model.primaryKey)
data?.let {
@ -96,13 +99,16 @@ open class EditableDataFragment : DataManagerFragment(), RowRepresentableDelegat
liveDataType.updateEntityLocalizedTitle(requireContext())
}
this.appBar.toolbar.title = title
toolbar?.title = title
deleteButtonShouldAppear = true
isUpdating = true
} ?: run {
this.appBar.toolbar.title = liveDataType.newEntityLocalizedTitle(requireContext())
toolbar?.title = liveDataType.newEntityLocalizedTitle(requireContext())
}
val recyclerView = this.view?.findViewById<RecyclerView>(R.id.recyclerView) ?: throw
PAIllegalStateException("recyclerView not found")
val viewManager = LinearLayoutManager(requireContext())
recyclerView.apply {
setHasFixedSize(true)
@ -112,7 +118,7 @@ open class EditableDataFragment : DataManagerFragment(), RowRepresentableDelegat
val dataSource = getDataSource()
this.rowRepresentableAdapter = RowRepresentableAdapter(getDataSource(), this)
//this.rowRepresentableAdapter.setHasStableIds(true)
this.recyclerView.adapter = rowRepresentableAdapter
recyclerView.adapter = rowRepresentableAdapter
// When creating an object, open automatically the keyboard for the first row
if (!deleteButtonShouldAppear && shouldOpenKeyboard) {

@ -9,12 +9,12 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AlertDialog
import kotlinx.android.synthetic.main.fragment_player.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import net.pokeranalytics.android.R
import net.pokeranalytics.android.databinding.FragmentPlayerBinding
import net.pokeranalytics.android.model.realm.Comment
import net.pokeranalytics.android.model.realm.Player
import net.pokeranalytics.android.ui.activity.ColorPickerActivity
@ -22,7 +22,6 @@ import net.pokeranalytics.android.ui.activity.components.MediaActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.extensions.showAlertDialog
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetFragment
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowViewType
@ -46,11 +45,14 @@ class PlayerDataFragment : EditableDataFragment(), StaticRowRepresentableDataSou
private var mediaActivity: MediaActivity? = null
private var _binding: FragmentPlayerBinding? = null
private val binding get() = _binding!!
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
super.onCreateView(inflater, container, savedInstanceState)
shouldOpenKeyboard = false
return inflater.inflate(R.layout.fragment_player, container, false)
_binding = FragmentPlayerBinding.inflate(inflater, container, false)
return binding.root
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
@ -68,6 +70,11 @@ class PlayerDataFragment : EditableDataFragment(), StaticRowRepresentableDataSou
initUI()
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
/**
* Init UI
*/
@ -80,7 +87,7 @@ class PlayerDataFragment : EditableDataFragment(), StaticRowRepresentableDataSou
onRowSelected(0, PlayerRow.NAME)
}
addComment.setOnClickListener {
binding.addComment.setOnClickListener {
val comment = player.addComment()
rowRepresentableAdapter.notifyDataSetChanged()
onRowSelected(-1, comment)

@ -11,8 +11,8 @@ import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
import io.realm.Realm
import io.realm.RealmResults
import kotlinx.android.synthetic.main.fragment_data_list.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.databinding.FragmentDataListBinding
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.interfaces.Deletable
@ -44,6 +44,9 @@ open class DataListFragment : DeletableItemFragment(), RowRepresentableDelegate
private var menu: Menu? = null
private var searchView: SearchView? = null
private var _binding: FragmentDataListBinding? = null
private val binding get() = _binding!!
open fun retrieveItems(realm: Realm): RealmResults<out Deletable> {
return realm.sorted(this.model.identifiableClass,
editableOnly = true,
@ -56,7 +59,8 @@ open class DataListFragment : DeletableItemFragment(), RowRepresentableDelegate
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_data_list, container, false)
_binding = FragmentDataListBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -65,6 +69,11 @@ open class DataListFragment : DeletableItemFragment(), RowRepresentableDelegate
initUI()
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
fun initData() {
val itemIds = this.model.itemIds
@ -106,14 +115,14 @@ open class DataListFragment : DeletableItemFragment(), RowRepresentableDelegate
val itemTouchHelper = ItemTouchHelper(swipeToDelete)
recyclerView.apply {
binding.recyclerView.apply {
setHasFixedSize(true)
layoutManager = viewManager
adapter = dataListAdapter
itemTouchHelper.attachToRecyclerView(this)
}
this.addButton.setOnClickListener {
binding.addButton.setOnClickListener {
EditableDataActivity.newInstanceForResult(this,
dataType = this.model.dataType,
@ -123,13 +132,13 @@ open class DataListFragment : DeletableItemFragment(), RowRepresentableDelegate
}
this.addButton.isVisible = this.model.showAddButton
binding.addButton.isVisible = this.model.showAddButton
}
override fun onResume() {
super.onResume()
this.recyclerView?.adapter?.notifyDataSetChanged()
binding.recyclerView.adapter?.notifyDataSetChanged()
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {

@ -10,13 +10,12 @@ import androidx.core.view.isVisible
import androidx.interpolator.view.animation.FastOutSlowInInterpolator
import com.android.billingclient.api.Purchase
import com.google.android.material.tabs.TabLayout
import com.google.firebase.crashlytics.FirebaseCrashlytics
import io.realm.RealmModel
import io.realm.RealmResults
import io.realm.Sort
import io.realm.kotlin.where
import kotlinx.android.synthetic.main.fragment_feed.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.databinding.FragmentFeedBinding
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.interfaces.Editable
@ -105,6 +104,9 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate, PurchaseLis
}
private var _binding: FragmentFeedBinding? = null
private val binding get() = _binding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
AppGuard.registerListener(this)
@ -114,9 +116,10 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate, PurchaseLis
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
): View {
super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_feed, container, false)
_binding = FragmentFeedBinding.inflate(inflater, container, false)
return binding.root
}
override fun onCreateContextMenu(menu: ContextMenu, v: View, menuInfo: ContextMenu.ContextMenuInfo?) {
@ -219,6 +222,7 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate, PurchaseLis
override fun onDestroyView() {
super.onDestroyView()
realmTransactions.removeAllChangeListeners()
_binding = null
}
override fun onRowSelected(position: Int, row: RowRepresentable, tag: Int) {
@ -250,43 +254,43 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate, PurchaseLis
this.sessionAdapter = FeedSessionRowRepresentableAdapter(getRealm(), this)
registerForContextMenu(this.menuRecyclerView)
registerForContextMenu(binding.menuRecyclerView)
val messageToShow: Preferences.FeedMessage? =
Preferences.feedMessageToShow(requireContext())
if (messageToShow != null) {
messageBox.isVisible = true
message.text = getString(messageToShow.resId)
binding.messageBox.isVisible = true
binding.message.text = getString(messageToShow.resId)
messageToShow.actionResId?.let {
messageBoxAction.text = requireContext().getString(it)
binding.messageBoxAction.text = requireContext().getString(it)
messageToShow.action(requireContext())?.let { action ->
messageBoxAction.setOnClickListener { view ->
binding.messageBoxAction.setOnClickListener { view ->
action.invoke(view)
hideMessageBox(messageToShow)
}
}
} ?: run {
messageBoxAction.visibility = View.GONE
binding.messageBoxAction.visibility = View.GONE
}
messageBoxDismiss.text = requireContext().getString(messageToShow.dismissResId)
messageBoxDismiss.setOnClickListener {
binding.messageBoxDismiss.text = requireContext().getString(messageToShow.dismissResId)
binding.messageBoxDismiss.setOnClickListener {
hideMessageBox(messageToShow)
}
} else {
messageBox.isVisible = false
binding.messageBox.isVisible = false
}
val viewManager = SmoothScrollLinearLayoutManager(requireContext())
menuRecyclerView.apply {
binding.menuRecyclerView.apply {
setHasFixedSize(true)
layoutManager = viewManager
}
// Add button
addButton.setOnClickListener {
binding.addButton.setOnClickListener {
activity?.let {
val options = ActivityOptionsCompat.makeSceneTransitionAnimation(it)
val intent = Intent(requireContext(), NewDataMenuActivity::class.java)
@ -295,7 +299,7 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate, PurchaseLis
}
// Tabs
tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
binding.tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
when (tab.position) {
Tab.SESSIONS.ordinal -> {
@ -318,7 +322,7 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate, PurchaseLis
}
})
this.subscribe.setOnClickListener {
binding.subscribe.setOnClickListener {
if (!AppGuard.isProUser) {
BillingActivity.newInstanceForResult(this, false)
} else {
@ -330,15 +334,16 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate, PurchaseLis
}
private fun showSubscriptionButton() {
this.subscribe.isVisible = !AppGuard.isProUser
this.binding.subscribe.isVisible = !AppGuard.isProUser
}
private fun hideMessageBox(message: Preferences.FeedMessage) {
Preferences.setStopShowingMessage(message, requireContext())
val messageBox = binding.messageBox
messageBox.animate().translationY(messageBox.height.toFloat())
.setInterpolator(FastOutSlowInInterpolator())
.withEndAction { messageBox?.isVisible = false }
.withEndAction { messageBox.isVisible = false }
.start()
}
@ -553,7 +558,7 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate, PurchaseLis
private fun selectTab(tab: Tab) {
this.currentTab = tab
this.tabs.getTabAt(tab.ordinal)?.select()
this.binding.tabs.getTabAt(tab.ordinal)?.select()
setAdapter()
}
@ -564,9 +569,9 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate, PurchaseLis
private fun setAdapter() {
when (this.currentTab) {
Tab.SESSIONS -> menuRecyclerView.adapter = sessionAdapter
Tab.TRANSACTIONS -> menuRecyclerView.adapter = transactionAdapter
Tab.HAND_HISTORY -> menuRecyclerView.adapter = handHistoryAdapter
Tab.SESSIONS -> binding.menuRecyclerView.adapter = sessionAdapter
Tab.TRANSACTIONS -> binding.menuRecyclerView.adapter = transactionAdapter
Tab.HAND_HISTORY -> binding.menuRecyclerView.adapter = handHistoryAdapter
}
}

@ -9,14 +9,14 @@ import android.os.Build
import android.os.Bundle
import android.view.View
import android.view.ViewAnimationUtils
import kotlinx.android.synthetic.main.activity_new_data.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import net.pokeranalytics.android.R
import net.pokeranalytics.android.databinding.ActivityNewDataBinding
import net.pokeranalytics.android.ui.activity.components.BaseActivity
import net.pokeranalytics.android.ui.extensions.px
import kotlin.math.max
class NewDataMenuActivity : BaseActivity() {
@ -36,6 +36,8 @@ class NewDataMenuActivity : BaseActivity() {
private var menuWillBeHidden = false
private val fabSize = 48.px
private lateinit var binding: ActivityNewDataBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -43,7 +45,9 @@ class NewDataMenuActivity : BaseActivity() {
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}
setContentView(R.layout.activity_new_data)
binding = ActivityNewDataBinding.inflate(layoutInflater)
setContentView(binding.root)
initUI()
}
@ -63,27 +67,27 @@ class NewDataMenuActivity : BaseActivity() {
overridePendingTransition(0, 0)
container.viewTreeObserver.addOnGlobalLayoutListener {
binding.container.viewTreeObserver.addOnGlobalLayoutListener {
showMenu()
}
newCashGame.setOnClickListener {
binding.newCashGame.setOnClickListener {
finishWithResult(0)
}
newTournament.setOnClickListener {
binding.newTournament.setOnClickListener {
finishWithResult(1)
}
newTransaction.setOnClickListener {
binding.newTransaction.setOnClickListener {
finishWithResult(2)
}
new_hand_history.setOnClickListener {
binding.newHandHistory.setOnClickListener {
finishWithResult(3)
}
container.setOnClickListener {
binding.container.setOnClickListener {
hideMenu()
}
}
@ -112,9 +116,10 @@ class NewDataMenuActivity : BaseActivity() {
*/
private fun showMenu() {
val menuContainer = binding.menuContainer
val cx = menuContainer.measuredWidth - fabSize / 2
val cy = menuContainer.measuredHeight - fabSize / 2
val finalRadius = Math.max(menuContainer.width, menuContainer.height)
val finalRadius = max(menuContainer.width, menuContainer.height)
val anim = ViewAnimationUtils.createCircularReveal(menuContainer, cx, cy, 0f, finalRadius.toFloat())
anim.duration = 150
@ -132,6 +137,7 @@ class NewDataMenuActivity : BaseActivity() {
}
menuWillBeHidden = true
val menuContainer = binding.menuContainer
val cx = menuContainer.measuredWidth - fabSize / 2
val cy = menuContainer.measuredHeight - fabSize / 2
val initialRadius = menuContainer.width

@ -6,9 +6,8 @@ import android.view.View
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.fragment_filter_details.*
import kotlinx.android.synthetic.main.fragment_filter_details.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.databinding.FragmentFilterDetailsBinding
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
@ -30,6 +29,9 @@ open class FilterDetailsFragment : RealmFragment(), RowRepresentableDelegate {
private lateinit var rowRepresentableAdapter: RowRepresentableAdapter
private var _binding: FragmentFilterDetailsBinding? = null
private val binding get() = _binding!!
companion object {
fun newInstance(categoryRow: FilterCategoryRow): FilterDetailsFragment {
@ -44,7 +46,8 @@ open class FilterDetailsFragment : RealmFragment(), RowRepresentableDelegate {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_filter_details, container, false)
_binding = FragmentFilterDetailsBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -58,6 +61,11 @@ open class FilterDetailsFragment : RealmFragment(), RowRepresentableDelegate {
saveData()
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
/**
* Init UI
*/
@ -65,11 +73,11 @@ open class FilterDetailsFragment : RealmFragment(), RowRepresentableDelegate {
setDisplayHomeAsUpEnabled(true)
this.appBar.toolbar.title = getString(R.string.filter)
this.binding.toolbar.title = getString(R.string.filter)
val viewManager = LinearLayoutManager(requireContext())
recyclerView.apply {
binding.recyclerView.apply {
setHasFixedSize(true)
layoutManager = viewManager
}
@ -95,10 +103,10 @@ open class FilterDetailsFragment : RealmFragment(), RowRepresentableDelegate {
Timber.d(">> Filter = ${this.activityModel.currentFilter}")
Timber.d("selectedRow = ${this.activityModel.selectedCategoryRow}")
this.appBar.toolbar.title = this.activityModel.selectedCategoryRow?.localizedTitle(requireContext())
this.binding.toolbar.title = this.activityModel.selectedCategoryRow?.localizedTitle(requireContext())
this.rowRepresentableAdapter = RowRepresentableAdapter(this.model, this)
this.recyclerView.adapter = rowRepresentableAdapter
this.binding.recyclerView.adapter = rowRepresentableAdapter
}
override fun onRowSelected(position: Int, row: RowRepresentable, tag: Int) {

@ -8,11 +8,8 @@ import androidx.core.view.isVisible
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.chip.Chip
import kotlinx.android.synthetic.main.fragment_editable_data.appBar
import kotlinx.android.synthetic.main.fragment_editable_data.recyclerView
import kotlinx.android.synthetic.main.fragment_filters.*
import kotlinx.android.synthetic.main.fragment_filters.view.toolbar
import net.pokeranalytics.android.R
import net.pokeranalytics.android.databinding.FragmentFiltersBinding
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.realm.Filter
@ -44,9 +41,13 @@ open class FiltersFragment : RealmFragment(), RowRepresentableDelegate {
private var showMostUsedFiltersLayout = true
private var _binding: FragmentFiltersBinding? = null
private val binding get() = _binding!!
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_filters, container, false)
_binding = FragmentFiltersBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -102,6 +103,11 @@ open class FiltersFragment : RealmFragment(), RowRepresentableDelegate {
return true
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
/**
* Init UI
*/
@ -109,20 +115,20 @@ open class FiltersFragment : RealmFragment(), RowRepresentableDelegate {
setDisplayHomeAsUpEnabled(true)
this.appBar.toolbar.title = getString(R.string.filter)
this.binding.toolbar.title = getString(R.string.filter)
val viewManager = LinearLayoutManager(requireContext())
recyclerView.apply {
this.binding.recyclerView.apply {
setHasFixedSize(true)
layoutManager = viewManager
}
moreFilters.setOnClickListener {
this.binding.moreFilters.setOnClickListener {
LiveData.FILTER.subType = this.model.filterableType?.uniqueIdentifier
FiltersListActivity.newSelectInstance(this, false)
}
mostUsedFiltersLayout.isVisible = showMostUsedFiltersLayout
this.binding.mostUsedFiltersLayout.isVisible = showMostUsedFiltersLayout
}
/**
@ -133,7 +139,7 @@ open class FiltersFragment : RealmFragment(), RowRepresentableDelegate {
this.model.init(getRealm())
this.rowRepresentableAdapter = RowRepresentableAdapter(this.model, this)
this.recyclerView.adapter = rowRepresentableAdapter
this.binding.recyclerView.adapter = rowRepresentableAdapter
}
@ -157,11 +163,11 @@ open class FiltersFragment : RealmFragment(), RowRepresentableDelegate {
val currentFilterId = Preferences.getActiveFilterId(requireContext())
if (this.model.isUpdating || filters.isEmpty() || (filters.size == 1 && filters.first()?.id == currentFilterId)) {
mostUsedFiltersLayout.visibility = View.GONE
this.binding.mostUsedFiltersLayout.visibility = View.GONE
return
}
mostUsedFilters.removeAllViews()
this.binding.mostUsedFilters.removeAllViews()
filters.forEach { filter ->
if (nbChips < MOST_USED_FILTERS_DISPLAYED) {
@ -185,7 +191,7 @@ open class FiltersFragment : RealmFragment(), RowRepresentableDelegate {
finishActivityWithResult("")
}
}
mostUsedFilters.addView(chip)
this.binding.mostUsedFilters.addView(chip)
nbChips++
}
}
@ -249,7 +255,7 @@ open class FiltersFragment : RealmFragment(), RowRepresentableDelegate {
fun updateMostUsedFiltersVisibility(visible: Boolean) {
Timber.d("updateMostUsedFiltersVisibility: $visible")
showMostUsedFiltersLayout = visible
mostUsedFiltersLayout?.isVisible = visible
this.binding.mostUsedFiltersLayout.isVisible = visible
}
}

@ -4,9 +4,8 @@ import android.app.Activity
import android.content.Context
import android.content.Intent
import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetFragment
import net.pokeranalytics.android.ui.modules.filter.FilterHandler.Companion.INTENT_FILTER_UPDATE_FILTER_UI
import net.pokeranalytics.android.ui.modules.datalist.DataListFragment
import net.pokeranalytics.android.ui.modules.filter.FilterHandler.Companion.INTENT_FILTER_UPDATE_FILTER_UI
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.util.Preferences

@ -11,9 +11,8 @@ import android.view.animation.AccelerateDecelerateInterpolator
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import kotlinx.android.synthetic.main.fragment_hand_history.*
import kotlinx.android.synthetic.main.fragment_settings.recyclerView
import net.pokeranalytics.android.R
import net.pokeranalytics.android.databinding.FragmentHandHistoryBinding
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.handhistory.Position
@ -68,6 +67,9 @@ class EditorFragment : RealmFragment(), RowRepresentableDelegate, KeyboardListen
return this.model.isEdited
}
private var _binding: FragmentHandHistoryBinding? = null
private val binding get() = _binding!!
companion object {
fun newInstance(id: String? = null, configurationId: String? = null, attached: Boolean = false): EditorFragment {
@ -91,9 +93,10 @@ class EditorFragment : RealmFragment(), RowRepresentableDelegate, KeyboardListen
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_hand_history, container, false)
_binding = FragmentHandHistoryBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -137,7 +140,7 @@ class EditorFragment : RealmFragment(), RowRepresentableDelegate, KeyboardListen
// }
// val itemTouchHelper = ItemTouchHelper(swipeToDelete)
recyclerView.apply {
binding.recyclerView.apply {
setHasFixedSize(true)
layoutManager = SmoothScrollLinearLayoutManager(requireContext())
adapter = editorAdapter
@ -156,7 +159,7 @@ class EditorFragment : RealmFragment(), RowRepresentableDelegate, KeyboardListen
// At first, the selection is defined before the holder is bound,
// so we retrieve the editText inputConnection once the recycler view has been rendered
this.recyclerView.viewTreeObserver.addOnGlobalLayoutListener {
this.binding.recyclerView.viewTreeObserver.addOnGlobalLayoutListener {
when (this.model.currentKeyboard) {
HHKeyboard.AMOUNT -> {
val selection = this.model.currentSelection
@ -168,7 +171,7 @@ class EditorFragment : RealmFragment(), RowRepresentableDelegate, KeyboardListen
}
initKeyboardDefaultHeight()
this.keyboard.keyboardListener = this
this.binding.keyboard.keyboardListener = this
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
@ -227,6 +230,11 @@ class EditorFragment : RealmFragment(), RowRepresentableDelegate, KeyboardListen
return true
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun showReplayer() {
(this.activity as HandHistoryActivity).showReplayer(this.model.handHistory.id)
}
@ -295,10 +303,10 @@ class EditorFragment : RealmFragment(), RowRepresentableDelegate, KeyboardListen
val handRow = this.model.rowRepresentableForPosition(selection.index) as? HandHistoryRow
val holder =
recyclerView.findViewHolderForAdapterPosition(selection.index) as? EditorAdapter.RowHandHolder
binding.recyclerView.findViewHolderForAdapterPosition(selection.index) as? EditorAdapter.RowHandHolder
holder?.let {
val amountEditText = it.editTextForTag(selection.tag)
this.keyboard.setAmountEditText(
this.binding.keyboard.setAmountEditText(
amountEditText,
handRow?.amountForTag(this.model.handHistory, selection.tag)
)
@ -541,10 +549,10 @@ class EditorFragment : RealmFragment(), RowRepresentableDelegate, KeyboardListen
*/
private fun configureActionKeyboard() {
val availableActions = this.model.availableActions()
this.keyboard.setAvailableAction(availableActions)
this.binding.keyboard.setAvailableAction(availableActions)
val positions = this.model.positionsToAct()
this.keyboard.setPositions(positions)
this.binding.keyboard.setPositions(positions)
}
/***
@ -579,7 +587,7 @@ class EditorFragment : RealmFragment(), RowRepresentableDelegate, KeyboardListen
* We subtract 1 to give space and the ability to see the previously entered data
*/
private fun scrollToPosition(index: Int) {
this.recyclerView.smoothScrollToPosition(index - 1)
this.binding.recyclerView.smoothScrollToPosition(index - 1)
}
/***
@ -606,11 +614,11 @@ class EditorFragment : RealmFragment(), RowRepresentableDelegate, KeyboardListen
*/
private fun showKeyboard(keyboard: HHKeyboard, endHandler: (() -> (Unit))? = null) {
val lp = this.kbTopGuideline.layoutParams as ConstraintLayout.LayoutParams
val lp = this.binding.kbTopGuideline.layoutParams as ConstraintLayout.LayoutParams
if (lp.guideEnd == 0) {
this.animateKeyboard(true, endHandler)
}
this.keyboard.show(keyboard)
this.binding.keyboard.show(keyboard)
}
/***
@ -631,11 +639,11 @@ class EditorFragment : RealmFragment(), RowRepresentableDelegate, KeyboardListen
// set interpolator and updateListener to get the animated value
valueAnimator.addUpdateListener {
val lp = this.kbTopGuideline.layoutParams as ConstraintLayout.LayoutParams
val lp = this.binding.kbTopGuideline.layoutParams as ConstraintLayout.LayoutParams
// get the float value
lp.guideEnd = (it.animatedValue as Float).toInt()
// update layout params
this.kbTopGuideline.layoutParams = lp
this.binding.kbTopGuideline.layoutParams = lp
if (lp.guideEnd == end.toInt()) {
endHandler?.invoke()
@ -649,7 +657,7 @@ class EditorFragment : RealmFragment(), RowRepresentableDelegate, KeyboardListen
* Starts by hiding the keyboard
*/
private fun initKeyboardDefaultHeight() {
val lp = this.kbTopGuideline.layoutParams as ConstraintLayout.LayoutParams
val lp = this.binding.kbTopGuideline.layoutParams as ConstraintLayout.LayoutParams
lp.guideEnd = 0
}

@ -8,8 +8,8 @@ import android.widget.PopupWindow
import android.widget.Switch
import androidx.lifecycle.ViewModelProvider
import io.realm.Sort
import kotlinx.android.synthetic.main.fragment_replayer.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.databinding.FragmentReplayerBinding
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.realm.handhistory.HandHistory
import net.pokeranalytics.android.ui.fragment.components.RealmFragment
@ -38,6 +38,9 @@ class ReplayerFragment : RealmFragment() {
*/
private lateinit var model: ReplayerModel
private var _binding: FragmentReplayerBinding? = null
private val binding get() = _binding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -47,9 +50,10 @@ class ReplayerFragment : RealmFragment() {
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_replayer, container, false)
_binding = FragmentReplayerBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -79,6 +83,11 @@ class ReplayerFragment : RealmFragment() {
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun initData() {
val id = arguments?.getString(BundleKey.HAND_HISTORY_ID.value) ?: throw PAIllegalStateException("Attempt to start a replayer without hh id")
val hh = getRealm().findById<HandHistory>(id) ?: throw PAIllegalStateException("hh with id: $id not found")
@ -86,25 +95,25 @@ class ReplayerFragment : RealmFragment() {
}
private fun initUI() {
this.next_action.setOnClickListener {
this.binding.nextAction.setOnClickListener {
nextAction()
}
this.previous_action.setOnClickListener {
this.binding.previousAction.setOnClickListener {
previousAction()
}
this.next_hand.setOnClickListener {
this.binding.nextHand.setOnClickListener {
nextHand()
}
this.previous_hand.setOnClickListener {
this.binding.previousHand.setOnClickListener {
previousHand()
}
this.play_pause.setOnClickListener {
this.binding.playPause.setOnClickListener {
playOrPause()
}
this.speed.setOnClickListener {
this.binding.speed.setOnClickListener {
changeSpeed()
}
this.settings.setOnClickListener {
this.binding.settings.setOnClickListener {
openSettings()
}
@ -131,12 +140,12 @@ class ReplayerFragment : RealmFragment() {
private fun updateSpeedButtonText() {
val speedText = "${this.model.speedMultiplier.value}x"
this.speed.text = speedText
this.binding.speed.text = speedText
}
private fun loadHand(handHistory: HandHistory) {
val config = ReplayerAnimator(handHistory, false)
this.replayer.animator = config
this.binding.replayer.animator = config
this.model.animator = config
}
@ -164,18 +173,18 @@ class ReplayerFragment : RealmFragment() {
this.mainHandler.postDelayed(timerRunnable, 0L)
this.model.isPlaying = true
this.play_pause.setImageResource(R.drawable.ic_outline_pause)
this.binding.playPause.setImageResource(R.drawable.ic_outline_pause)
}
private fun pause() {
this.mainHandler.removeCallbacks(timerRunnable)
this.model.isPlaying = false
this.play_pause.setImageResource(R.drawable.ic_play_arrow)
this.binding.playPause.setImageResource(R.drawable.ic_play_arrow)
}
private fun nextAction() {
this.model.nextStep()
this.replayer.refresh()
this.binding.replayer.refresh()
if (this.model.isPlaying) {
this.mainHandler.postDelayed(timerRunnable, this.model.actionDelay)
@ -185,7 +194,7 @@ class ReplayerFragment : RealmFragment() {
private fun previousAction() {
this.model.previousStep()
this.replayer.refresh()
this.binding.replayer.refresh()
refreshPlayButtonIfNecessary()
}
@ -237,13 +246,13 @@ class ReplayerFragment : RealmFragment() {
switch.isChecked = Preferences.getShowVillainCards(requireContext())
switch.setOnCheckedChangeListener { _, isChecked ->
Preferences.setShowVillainCards(isChecked, requireContext())
this.replayer.refresh()
this.binding.replayer.refresh()
}
val popupWindow = PopupWindow(requireContext())
popupWindow.contentView = view
popupWindow.isFocusable = true
popupWindow.showAsDropDown(this.settings, 0, -300)
popupWindow.showAsDropDown(this.binding.settings, 0, -300)
}

@ -2,10 +2,10 @@ package net.pokeranalytics.android.ui.modules.handhistory.views
import android.content.Context
import android.view.LayoutInflater
import android.widget.ImageButton
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.view_hand_keyboard_action.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.handhistory.Position
@ -26,10 +26,15 @@ class KeyboardActionView(context: Context) : AbstractKeyboardView(context),
private var availableActions: Set<Action.Type> = setOf()
private var recyclerView: RecyclerView
private var closeButton: ImageButton
init {
LayoutInflater.from(context)
val view = LayoutInflater.from(context)
.inflate(R.layout.view_hand_keyboard_action, this, true)
this.recyclerView = view.findViewById<RecyclerView>(R.id.recyclerView)
this.closeButton = view.findViewById<ImageButton>(R.id.closeButton)
// Action recycler
val spanCount = 3
@ -39,15 +44,14 @@ class KeyboardActionView(context: Context) : AbstractKeyboardView(context),
val spacing = 2.px
val includeEdge = false
this.recyclerView.apply {
recyclerView.apply {
setHasFixedSize(true)
layoutManager = viewManager
adapter = dataAdapter
addItemDecoration(GridSpacingItemDecoration(spanCount, spacing, includeEdge))
}
this.closeButton.setOnClickListener {
closeButton.setOnClickListener {
this.keyboardListener?.closeKeyboard()
}
@ -61,7 +65,7 @@ class KeyboardActionView(context: Context) : AbstractKeyboardView(context),
this.positionAdapter = PositionAdapter(it)
} ?: throw PAIllegalStateException("keyboard listener not set")
this.recycler.apply {
recyclerView.apply {
setHasFixedSize(true)
layoutManager = positionViewManager
adapter = positionAdapter
@ -74,7 +78,7 @@ class KeyboardActionView(context: Context) : AbstractKeyboardView(context),
this.positionAdapter.positions = positions
}
override fun adapterRows(): List<RowRepresentable>? {
override fun adapterRows(): List<RowRepresentable> {
return Action.Type.defaultTypes
}
@ -99,7 +103,7 @@ class KeyboardActionView(context: Context) : AbstractKeyboardView(context),
this.dataAdapter.notifyDataSetChanged()
}
override fun textColor(position: Int, row: RowRepresentable): Int? {
override fun textColor(position: Int, row: RowRepresentable): Int {
return if (isEnabled(row, 0)) {
R.color.white
} else {

@ -4,9 +4,11 @@ import android.content.Context
import android.view.LayoutInflater
import android.view.inputmethod.EditorInfo
import android.view.inputmethod.InputConnection
import android.widget.Button
import android.widget.EditText
import android.widget.ImageView
import androidx.recyclerview.widget.GridLayoutManager
import kotlinx.android.synthetic.main.view_hand_keyboard_amount.view.*
import androidx.recyclerview.widget.RecyclerView
import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
@ -17,7 +19,6 @@ import net.pokeranalytics.android.ui.view.GridSpacingItemDecoration
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.util.extensions.noGroupingFormatted
import timber.log.Timber
import java.text.DecimalFormatSymbols
class NumericKey : RowRepresentable {
@ -77,9 +78,22 @@ class KeyboardAmountView(context: Context) : AbstractKeyboardView(context),
*/
private var inputConnection: InputConnection? = null
private var recyclerView: RecyclerView
private var nextButton: Button
private var kiloButton: Button
private var millionButton: Button
private var clearButton: Button
private var closeButton: ImageView
init {
LayoutInflater.from(context)
val view = LayoutInflater.from(context)
.inflate(R.layout.view_hand_keyboard_amount, this, true)
this.recyclerView = view.findViewById(R.id.recyclerView)
this.nextButton = view.findViewById(R.id.nextButton)
this.kiloButton = view.findViewById(R.id.kiloButton)
this.millionButton = view.findViewById(R.id.millionButton)
this.clearButton = view.findViewById(R.id.clearButton)
this.closeButton = view.findViewById(R.id.closeButton)
val viewManager = GridLayoutManager(context, 3)
this.dataAdapter = RowRepresentableAdapter(this, this)
@ -142,7 +156,7 @@ class KeyboardAmountView(context: Context) : AbstractKeyboardView(context),
}
override fun adapterRows(): List<RowRepresentable>? {
override fun adapterRows(): List<RowRepresentable> {
val keys = mutableListOf<NumericKey>()
(0 until 12).forEach { index ->
val key = when (index) {

@ -2,8 +2,10 @@ package net.pokeranalytics.android.ui.modules.handhistory.views
import android.content.Context
import android.view.LayoutInflater
import android.widget.Button
import android.widget.ImageButton
import androidx.recyclerview.widget.GridLayoutManager
import kotlinx.android.synthetic.main.view_hand_keyboard_card.view.*
import androidx.recyclerview.widget.RecyclerView
import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.realm.handhistory.Card
@ -20,10 +22,24 @@ class KeyboardCardView(context: Context) : AbstractKeyboardView(context) {
private lateinit var cardValueAdapter: CardValueAdapter
private lateinit var cardSuitAdapter: CardSuitAdapter
private var valueRecyclerView: RecyclerView
private var suitRecyclerView: RecyclerView
private var nextButton: Button
private var backSpaceButton: Button
private var clearButton: Button
private var closeButton: ImageButton
init {
LayoutInflater.from(context)
val view = LayoutInflater.from(context)
.inflate(R.layout.view_hand_keyboard_card, this, true)
this.valueRecyclerView = view.findViewById(R.id.valueRecyclerView)
this.suitRecyclerView = view.findViewById(R.id.suitRecyclerView)
this.backSpaceButton = view.findViewById(R.id.backSpaceButton)
this.nextButton = view.findViewById(R.id.nextButton)
this.clearButton = view.findViewById(R.id.clearButton)
this.closeButton = view.findViewById(R.id.closeButton)
this.nextButton.setOnClickListener {
this.keyboardListener?.cardSelectionEnded()

@ -1,8 +1,10 @@
package net.pokeranalytics.android.ui.modules.handhistory.views
import android.view.View
import android.widget.LinearLayout
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.row_hand_history_view.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.handhistory.Street
import net.pokeranalytics.android.model.realm.handhistory.HandHistory
@ -23,13 +25,15 @@ class RowHandHistoryViewHolder(itemView: View) : RecyclerView.ViewHolder(itemVie
val handHistory = row as HandHistory
itemView.cardsLayout.removeAllViews()
val cardsLayout = itemView.findViewById<LinearLayout>(R.id.cardsLayout)
cardsLayout.removeAllViews()
handHistory.cardViews(itemView.context, itemView.cardsLayout).forEach { view ->
itemView.cardsLayout.addView(view)
handHistory.cardViews(itemView.context, cardsLayout).forEach { view ->
cardsLayout.addView(view)
}
itemView.amount.text = handHistory.potSizeForStreet(Street.SUMMARY).formatted
val amount = itemView.findViewById<TextView>(R.id.amount)
amount.text = handHistory.potSizeForStreet(Street.SUMMARY).formatted
val heroWins = handHistory.heroWins
val colorId = when(heroWins) {
@ -38,12 +42,14 @@ class RowHandHistoryViewHolder(itemView: View) : RecyclerView.ViewHolder(itemVie
else -> R.color.kaki_light
}
itemView.amount.setTextColor(itemView.context.getColor(colorId))
amount.setTextColor(itemView.context.getColor(colorId))
val listener = View.OnClickListener {
delegate?.onRowSelected(position, row)
}
itemView.constraintLayout.setOnClickListener(listener)
val constraintLayout = itemView.findViewById<ConstraintLayout>(R.id.constraintLayout)
constraintLayout.setOnClickListener(listener)
}
}

@ -11,13 +11,13 @@ import androidx.appcompat.content.res.AppCompatResources
import androidx.interpolator.view.animation.FastOutSlowInInterpolator
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.DiffUtil
import kotlinx.android.synthetic.main.fragment_session.*
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.async
import kotlinx.coroutines.launch
import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.bankroll.BankrollReportManager
import net.pokeranalytics.android.calculus.optimalduration.CashGameOptimalDurationCalculator
import net.pokeranalytics.android.databinding.FragmentSessionBinding
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.extensions.SessionState
@ -69,6 +69,9 @@ class SessionFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRepr
}
}
private var _binding: FragmentSessionBinding? = null
private val binding get() = _binding!!
// private val coroutineContext: CoroutineContext
// get() = Dispatchers.Main
@ -93,9 +96,10 @@ class SessionFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRepr
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_session, container, false)
_binding = FragmentSessionBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -104,28 +108,33 @@ class SessionFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRepr
initUI()
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
/**
* Init UI
*/
private fun initUI() {
toolbar.title = if (currentSession.isTournament()) getString(R.string.tournament) else getString(R.string.cash_game)
collapsingToolbar.title = toolbar.title
binding.toolbar.title = if (currentSession.isTournament()) getString(R.string.tournament) else getString(R.string.cash_game)
binding.collapsingToolbar.title = binding.toolbar.title
sessionAdapter = RowRepresentableAdapter(this, this)
recyclerView.adapter = sessionAdapter
binding.recyclerView.adapter = sessionAdapter
updateSessionUI(true)
setDisplayHomeAsUpEnabled(true)
val viewManager = SmoothScrollLinearLayoutManager(requireContext())
recyclerView.apply {
binding.recyclerView.apply {
setHasFixedSize(true)
layoutManager = viewManager
}
floatingActionButton.setOnClickListener {
binding.floatingActionButton.setOnClickListener {
if (this.currentSession.isValidForSave()) {
sessionHasBeenUserCustomized = true
manageSessionState()
@ -279,6 +288,7 @@ class SessionFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRepr
val animationDuration = if (firstDisplay) 0L else 300L
val floatingActionButton = binding.floatingActionButton
when (currentSession.getState()) {
SessionState.PENDING, SessionState.PLANNED -> {
sessionMenu?.findItem(R.id.restart)?.isVisible = false
@ -345,17 +355,18 @@ class SessionFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRepr
* Update adapter UI
*/
private fun updateAdapterUI() {
this.adapterRows()?.let {
val diffResult = DiffUtil.calculateDiff(RowRepresentableDiffCallback(it, oldRows))
sessionAdapter.updateRows(diffResult)
oldRows.clear()
oldRows.addAll(it)
val rows = this.adapterRows()
val diffResult = DiffUtil.calculateDiff(RowRepresentableDiffCallback(rows, oldRows))
this.sessionAdapter.updateRows(diffResult)
this.oldRows.clear()
this.oldRows.addAll(rows)
// if (scrollToTop) {
// recyclerView.smoothScrollToPosition(0)
// }
}
}
/**
@ -373,7 +384,7 @@ class SessionFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRepr
}
currentSession.startOrContinue()
this.recyclerView.smoothScrollToPosition(0)
binding.recyclerView.smoothScrollToPosition(0)
}
SessionState.STARTED -> {
@ -493,7 +504,7 @@ class SessionFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRepr
// this.rowRepresentationForCurrentState = this.updatedRowRepresentationForCurrentState(requireContext())
}
override fun adapterRows(): List<RowRepresentable>? {
override fun adapterRows(): List<RowRepresentable> {
return this.model.rows
}

Loading…
Cancel
Save