diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/FeedSessionRowRepresentableAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/FeedSessionRowRepresentableAdapter.kt index 912d926e..14a76ced 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/FeedSessionRowRepresentableAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/FeedSessionRowRepresentableAdapter.kt @@ -82,9 +82,11 @@ class FeedSessionRowRepresentableAdapter( itemView.sessionRow.setOnClickListener(listener) itemView.sessionRow.setOnLongClickListener { - itemView.showContextMenu() + adapter.delegate?.onRowLongClick(itemView, row, adapterPosition) + return@setOnLongClickListener true } } + } /** diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt index ad37ff4f..00eb4d9c 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt @@ -1,5 +1,6 @@ package net.pokeranalytics.android.ui.adapter +import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView @@ -11,6 +12,8 @@ interface RowRepresentableDelegate { fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean = false) {} fun onRowValueChanged(value: Any?, row: RowRepresentable) {} fun onRowDeleted(row: RowRepresentable) {} + fun onRowLongClick(itemView: View, row: RowRepresentable, position: Int) {} + } /** diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt index ac716528..032cc365 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt @@ -29,7 +29,6 @@ import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.fragment.components.FilterableFragment import net.pokeranalytics.android.ui.interfaces.FilterActivityRequestCode import net.pokeranalytics.android.ui.interfaces.FilterableType -import net.pokeranalytics.android.ui.view.ContextMenuRecyclerView import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.SmoothScrollLinearLayoutManager import net.pokeranalytics.android.util.Preferences @@ -56,6 +55,8 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { } + private var menuPosition: Int = 0 + private var currentTab = Tab.SESSIONS private lateinit var feedSessionAdapter: FeedSessionRowRepresentableAdapter @@ -101,16 +102,23 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { } + override fun onRowLongClick(itemView: View, row: RowRepresentable, position: Int) { + super.onRowLongClick(itemView, row, position) + + this.menuPosition = position + itemView.showContextMenu() + } + override fun onContextItemSelected(item: MenuItem?): Boolean { when (item?.itemId) { R.id.duplicate -> { - val info = item.menuInfo as ContextMenuRecyclerView.RecyclerViewContextMenuInfo - val sessionId = this.feedSessionAdapter.sessionIdForPosition(info.position) + + val sessionId = this.feedSessionAdapter.sessionIdForPosition(menuPosition) if (sessionId != null) { createNewSession(true, sessionId = sessionId, duplicate = true) } else { - throw PAIllegalStateException("Session not found for duplicate at position: ${info.position}") + throw PAIllegalStateException("Session not found for duplicate at position: ${menuPosition}") } } else -> { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/ContextMenuRecyclerView.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/ContextMenuRecyclerView.kt deleted file mode 100644 index a473357d..00000000 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/ContextMenuRecyclerView.kt +++ /dev/null @@ -1,37 +0,0 @@ -package net.pokeranalytics.android.ui.view - -import android.content.Context -import android.util.AttributeSet -import android.view.ContextMenu -import android.view.View -import androidx.recyclerview.widget.RecyclerView - - -class ContextMenuRecyclerView : RecyclerView { - - constructor(context: Context, attributeSet: AttributeSet?, defStyle: Int) : super(context, attributeSet, defStyle) - constructor(context: Context, attributeSet: AttributeSet?) : super(context, attributeSet) - constructor(context: Context) : super(context) - - private var mContextMenuInfo: RecyclerViewContextMenuInfo? = null - - override fun getContextMenuInfo(): ContextMenu.ContextMenuInfo? { - return mContextMenuInfo - } - - override fun showContextMenuForChild(originalView: View): Boolean { - - val longPressPosition = getChildAdapterPosition(originalView) - val longPressId = adapter?.getItemId(longPressPosition) - - if (longPressPosition >= 0 && longPressId != null) { - mContextMenuInfo = RecyclerViewContextMenuInfo(longPressPosition, longPressId) - return super.showContextMenuForChild(originalView) - } - return false - } - - class RecyclerViewContextMenuInfo(val position: Int, val id: Long) : ContextMenu.ContextMenuInfo - -} - diff --git a/app/src/main/res/layout/fragment_feed.xml b/app/src/main/res/layout/fragment_feed.xml index 8fd01704..db34795c 100644 --- a/app/src/main/res/layout/fragment_feed.xml +++ b/app/src/main/res/layout/fragment_feed.xml @@ -57,7 +57,7 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/appBar" /> -