Laurent 6 years ago
parent 1e73c0ec4b
commit 057f15be55
  1. 33
      app/src/main/java/net/pokeranalytics/android/ui/helpers/SwipeToDeleteCallback.kt
  2. 8
      app/src/main/java/net/pokeranalytics/android/ui/modules/datalist/DataListFragment.kt
  3. 66
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/HandHistoryAdapter.kt
  4. 9
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/HandHistoryFragment.kt
  5. 18
      app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/HandHistoryViewModel.kt

@ -6,12 +6,12 @@ import androidx.core.view.isVisible
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
/**
* Swipe to delete callback
*/
class SwipeToDeleteCallback(var adapter: RowRepresentableAdapter, var onDelete: ((position: Int) -> Unit)? = null) :
class SwipeToDeleteCallback(private var onDelete: ((position: Int) -> Unit)? = null) :
ItemTouchHelper.SimpleCallback(ItemTouchHelper.ACTION_STATE_IDLE, ItemTouchHelper.START or ItemTouchHelper.END) {
override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
@ -27,8 +27,8 @@ class SwipeToDeleteCallback(var adapter: RowRepresentableAdapter, var onDelete:
c: Canvas, recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder,
dX: Float, dY: Float, actionState: Int, isCurrentlyActive: Boolean
) {
val foregroundView = viewHolder.itemView.findViewById<View?>(net.pokeranalytics.android.R.id.foreground)
val backgroundView = viewHolder.itemView.findViewById<View?>(net.pokeranalytics.android.R.id.background)
val foregroundView = viewHolder.itemView.findViewById<View?>(R.id.foreground)
val backgroundView = viewHolder.itemView.findViewById<View?>(R.id.background)
foregroundView?.let {
getDefaultUIUtil().onDraw(c, recyclerView, foregroundView, dX, dY, actionState, isCurrentlyActive)
backgroundView?.findViewById<View?>(R.id.leftIcon)?.isVisible = dX > 0
@ -36,9 +36,8 @@ class SwipeToDeleteCallback(var adapter: RowRepresentableAdapter, var onDelete:
}
}
override fun clearView(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder) {
val foregroundView = viewHolder.itemView.findViewById<View?>(net.pokeranalytics.android.R.id.foreground)
val foregroundView = viewHolder.itemView.findViewById<View?>(R.id.foreground)
foregroundView?.let {
getDefaultUIUtil().clearView(foregroundView)
}
@ -46,7 +45,7 @@ class SwipeToDeleteCallback(var adapter: RowRepresentableAdapter, var onDelete:
override fun onSelectedChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) {
viewHolder?.let {
val foregroundView = viewHolder.itemView.findViewById<View?>(net.pokeranalytics.android.R.id.foreground)
val foregroundView = viewHolder.itemView.findViewById<View?>(R.id.foreground)
foregroundView?.let {
getDefaultUIUtil().onSelected(foregroundView)
}
@ -58,11 +57,29 @@ class SwipeToDeleteCallback(var adapter: RowRepresentableAdapter, var onDelete:
actionState: Int, isCurrentlyActive: Boolean
) {
viewHolder?.let {
val foregroundView = viewHolder.itemView.findViewById<View?>(net.pokeranalytics.android.R.id.foreground)
val foregroundView = viewHolder.itemView.findViewById<View?>(R.id.foreground)
foregroundView?.let {
getDefaultUIUtil().onDrawOver(c, recyclerView, foregroundView, dX, dY, actionState, isCurrentlyActive)
}
}
}
// override fun getMovementFlags(
// recyclerView: RecyclerView,
// viewHolder: RecyclerView.ViewHolder
// ): Int {
// // Set movement flags based on the layout manager
// // Set movement flags based on the layout manager
// return if (viewHolder is HandHistoryAdapter.RowPlayerSetupHolder) {
// val dragFlags =
// ItemTouchHelper.UP or ItemTouchHelper.DOWN or ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT
// val swipeFlags = 0
// ItemTouchHelper.Callback.makeMovementFlags(dragFlags, swipeFlags)
// } else {
// val dragFlags = ItemTouchHelper.UP or ItemTouchHelper.DOWN
// val swipeFlags = ItemTouchHelper.START or ItemTouchHelper.END
// ItemTouchHelper.Callback.makeMovementFlags(dragFlags, swipeFlags)
// }
// }
}

@ -94,7 +94,7 @@ open class DataListFragment : DeletableItemFragment(), RowRepresentableDelegate
val viewManager = LinearLayoutManager(requireContext())
this.dataListAdapter = RowRepresentableAdapter(this.model, this)
val swipeToDelete = SwipeToDeleteCallback(this.dataListAdapter) { position ->
val swipeToDelete = SwipeToDeleteCallback { position ->
val item = this.model.items[position]
if (item != null) {
val itemId = item.id
@ -121,12 +121,6 @@ open class DataListFragment : DeletableItemFragment(), RowRepresentableDelegate
requestCode = RequestCode.NEW_DATA.value
)
// EditableDataActivity.newInstance(
// requireContext(),
// dataType = this.model.dataType,
// primaryKey = null
// )
}
this.addButton.isVisible = this.model.showAddButton

@ -346,6 +346,39 @@ class HandHistoryAdapter(
}
}
inner class RowPositionHolder(itemView: View) : RowHandHolder(itemView) {
private var positionAdapter: PositionAdapter = PositionAdapter()
private var positionViewManager: LinearLayoutManager =
LinearLayoutManager(itemView.context, RecyclerView.HORIZONTAL, false)
init {
itemView.position_recycler.apply {
setHasFixedSize(true)
layoutManager = positionViewManager
adapter = positionAdapter
}
}
override fun onBind(position: Int, row: RowRepresentable, adapter: RecyclerAdapter) {
super.onBind(position, row, adapter)
this.positionAdapter.positions = adapter.dataSource.contentForRow(row, itemView.context, Position::class)
this.positionAdapter.setOnClickListener { pos ->
adapter.delegate?.onRowValueChanged(pos, row)
this.positionAdapter.notifyDataSetChanged()
}
itemView.title.text = adapter.dataSource.charSequenceForRow(row, itemView.context)
if (row == HandRowType.HERO_POSITION) {
val heroIndex = adapter.dataSource.intForRow(row)
positionAdapter.setSelectedPosition(heroIndex)
}
}
}
inner class RowActionReadHolder(itemView: View) : RowHandHolder(itemView) {
init {
@ -525,39 +558,6 @@ class HandHistoryAdapter(
}
inner class RowPositionHolder(itemView: View) : RowHandHolder(itemView) {
private var positionAdapter: PositionAdapter = PositionAdapter()
private var positionViewManager: LinearLayoutManager =
LinearLayoutManager(itemView.context, RecyclerView.HORIZONTAL, false)
init {
itemView.position_recycler.apply {
setHasFixedSize(true)
layoutManager = positionViewManager
adapter = positionAdapter
}
}
override fun onBind(position: Int, row: RowRepresentable, adapter: RecyclerAdapter) {
super.onBind(position, row, adapter)
this.positionAdapter.positions = adapter.dataSource.contentForRow(row, itemView.context, Position::class)
this.positionAdapter.setOnClickListener { pos ->
adapter.delegate?.onRowValueChanged(pos, row)
this.positionAdapter.notifyDataSetChanged()
}
itemView.title.text = adapter.dataSource.charSequenceForRow(row, itemView.context)
if (row == HandRowType.HERO_POSITION) {
val heroIndex = adapter.dataSource.intForRow(row)
positionAdapter.setSelectedPosition(heroIndex)
}
}
}
inner class RowPlayerSetupHolder(itemView: View) : AbstractRowHandPlayerSetup(itemView) {
init {

@ -127,10 +127,16 @@ class HandHistoryFragment : RealmFragment(), RowRepresentableDelegate, KeyboardL
this.handHistoryAdapter = HandHistoryAdapter(this.model,this)
// val swipeToDelete = SwipeToDeleteCallback { position ->
// this.model.deleteIfPossible(position)
// }
// val itemTouchHelper = ItemTouchHelper(swipeToDelete)
recyclerView.apply {
setHasFixedSize(true)
layoutManager = SmoothScrollLinearLayoutManager(requireContext())
adapter = handHistoryAdapter
// itemTouchHelper.attachToRecyclerView(this)
}
this.model.selectionLiveData.observeForever { selection ->
@ -360,7 +366,8 @@ class HandHistoryFragment : RealmFragment(), RowRepresentableDelegate, KeyboardL
}
HandRowType.HERO_POSITION -> {
this.model.setHeroPosition(value as Position)
this.handHistoryAdapter.notifyItemChanged(this.indexOfRowRepresentable(row))
this.handHistoryAdapter.notifyDataSetChanged()
// this.handHistoryAdapter.notifyItemChanged(this.indexOfRowRepresentable(row))
}
HandRowType.PLAYER_POSITION -> {
this.model.createPlayerSetupForPosition(value as Position)

@ -923,4 +923,22 @@ class HandHistoryViewModel : ViewModel(), RowRepresentableDataSource, CardCentra
this.handHistory.heroIndex = this.sortedActions.positions.indexOf(position)
}
/***
* Tries to deletes the row at the given [position]
*/
fun deleteIfPossible(position: Int) {
when (val row = this.rowRepresentables[position]) {
is PlayerSetupRow -> {
val playerSetup = this.handHistory.playerSetupForPosition(row.positionIndex) ?: throw PAIllegalStateException("Attempt to delete an null object")
this.handHistory.playerSetups.remove(playerSetup)
this.handHistory.realm?.let {
it.executeTransaction {
playerSetup.deleteFromRealm()
}
}
}
}
}
}
Loading…
Cancel
Save