From 057f15be5525d4818356020bce786e4e20ce0034 Mon Sep 17 00:00:00 2001 From: Laurent Date: Fri, 6 Mar 2020 15:12:48 +0100 Subject: [PATCH] cleanup --- .../ui/helpers/SwipeToDeleteCallback.kt | 33 +++++++--- .../ui/modules/datalist/DataListFragment.kt | 8 +-- .../modules/handhistory/HandHistoryAdapter.kt | 66 +++++++++---------- .../handhistory/HandHistoryFragment.kt | 9 ++- .../handhistory/model/HandHistoryViewModel.kt | 18 +++++ 5 files changed, 85 insertions(+), 49 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/helpers/SwipeToDeleteCallback.kt b/app/src/main/java/net/pokeranalytics/android/ui/helpers/SwipeToDeleteCallback.kt index 510242f6..7dacff9c 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/helpers/SwipeToDeleteCallback.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/helpers/SwipeToDeleteCallback.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(net.pokeranalytics.android.R.id.foreground) - val backgroundView = viewHolder.itemView.findViewById(net.pokeranalytics.android.R.id.background) + val foregroundView = viewHolder.itemView.findViewById(R.id.foreground) + val backgroundView = viewHolder.itemView.findViewById(R.id.background) foregroundView?.let { getDefaultUIUtil().onDraw(c, recyclerView, foregroundView, dX, dY, actionState, isCurrentlyActive) backgroundView?.findViewById(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(net.pokeranalytics.android.R.id.foreground) + val foregroundView = viewHolder.itemView.findViewById(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(net.pokeranalytics.android.R.id.foreground) + val foregroundView = viewHolder.itemView.findViewById(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(net.pokeranalytics.android.R.id.foreground) + val foregroundView = viewHolder.itemView.findViewById(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) +// } +// } + } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/datalist/DataListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/datalist/DataListFragment.kt index 9d93fe44..99dc0cd2 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/datalist/DataListFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/datalist/DataListFragment.kt @@ -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 diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/HandHistoryAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/HandHistoryAdapter.kt index 55daa8cc..325d0f27 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/HandHistoryAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/HandHistoryAdapter.kt @@ -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 { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/HandHistoryFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/HandHistoryFragment.kt index 8e5e9d91..e2c767dd 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/HandHistoryFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/HandHistoryFragment.kt @@ -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) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/HandHistoryViewModel.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/HandHistoryViewModel.kt index ac0e182c..a59b51b3 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/HandHistoryViewModel.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/HandHistoryViewModel.kt @@ -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() + } + } + } + } + } + } \ No newline at end of file