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.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
/** /**
* Swipe to delete callback * 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) { ItemTouchHelper.SimpleCallback(ItemTouchHelper.ACTION_STATE_IDLE, ItemTouchHelper.START or ItemTouchHelper.END) {
override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean { 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, c: Canvas, recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder,
dX: Float, dY: Float, actionState: Int, isCurrentlyActive: Boolean dX: Float, dY: Float, actionState: Int, isCurrentlyActive: Boolean
) { ) {
val foregroundView = viewHolder.itemView.findViewById<View?>(net.pokeranalytics.android.R.id.foreground) val foregroundView = viewHolder.itemView.findViewById<View?>(R.id.foreground)
val backgroundView = viewHolder.itemView.findViewById<View?>(net.pokeranalytics.android.R.id.background) val backgroundView = viewHolder.itemView.findViewById<View?>(R.id.background)
foregroundView?.let { foregroundView?.let {
getDefaultUIUtil().onDraw(c, recyclerView, foregroundView, dX, dY, actionState, isCurrentlyActive) getDefaultUIUtil().onDraw(c, recyclerView, foregroundView, dX, dY, actionState, isCurrentlyActive)
backgroundView?.findViewById<View?>(R.id.leftIcon)?.isVisible = dX > 0 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) { 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 { foregroundView?.let {
getDefaultUIUtil().clearView(foregroundView) getDefaultUIUtil().clearView(foregroundView)
} }
@ -46,7 +45,7 @@ class SwipeToDeleteCallback(var adapter: RowRepresentableAdapter, var onDelete:
override fun onSelectedChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) { override fun onSelectedChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) {
viewHolder?.let { 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 { foregroundView?.let {
getDefaultUIUtil().onSelected(foregroundView) getDefaultUIUtil().onSelected(foregroundView)
} }
@ -58,11 +57,29 @@ class SwipeToDeleteCallback(var adapter: RowRepresentableAdapter, var onDelete:
actionState: Int, isCurrentlyActive: Boolean actionState: Int, isCurrentlyActive: Boolean
) { ) {
viewHolder?.let { 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 { foregroundView?.let {
getDefaultUIUtil().onDrawOver(c, recyclerView, foregroundView, dX, dY, actionState, isCurrentlyActive) 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()) val viewManager = LinearLayoutManager(requireContext())
this.dataListAdapter = RowRepresentableAdapter(this.model, this) this.dataListAdapter = RowRepresentableAdapter(this.model, this)
val swipeToDelete = SwipeToDeleteCallback(this.dataListAdapter) { position -> val swipeToDelete = SwipeToDeleteCallback { position ->
val item = this.model.items[position] val item = this.model.items[position]
if (item != null) { if (item != null) {
val itemId = item.id val itemId = item.id
@ -121,12 +121,6 @@ open class DataListFragment : DeletableItemFragment(), RowRepresentableDelegate
requestCode = RequestCode.NEW_DATA.value requestCode = RequestCode.NEW_DATA.value
) )
// EditableDataActivity.newInstance(
// requireContext(),
// dataType = this.model.dataType,
// primaryKey = null
// )
} }
this.addButton.isVisible = this.model.showAddButton 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) { inner class RowActionReadHolder(itemView: View) : RowHandHolder(itemView) {
init { 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) { inner class RowPlayerSetupHolder(itemView: View) : AbstractRowHandPlayerSetup(itemView) {
init { init {

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

@ -923,4 +923,22 @@ class HandHistoryViewModel : ViewModel(), RowRepresentableDataSource, CardCentra
this.handHistory.heroIndex = this.sortedActions.positions.indexOf(position) 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