Simplifies duplicate menu system and possibly fixes a crash

od
Laurent 6 years ago
parent 84e985e120
commit 02ebf78188
  1. 4
      app/src/main/java/net/pokeranalytics/android/ui/adapter/FeedSessionRowRepresentableAdapter.kt
  2. 3
      app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt
  3. 16
      app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt
  4. 37
      app/src/main/java/net/pokeranalytics/android/ui/view/ContextMenuRecyclerView.kt
  5. 2
      app/src/main/res/layout/fragment_feed.xml

@ -82,9 +82,11 @@ class FeedSessionRowRepresentableAdapter(
itemView.sessionRow.setOnClickListener(listener)
itemView.sessionRow.setOnLongClickListener {
itemView.showContextMenu()
adapter.delegate?.onRowLongClick(itemView, row, adapterPosition)
return@setOnLongClickListener true
}
}
}
/**

@ -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) {}
}
/**

@ -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 -> {

@ -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
}

@ -57,7 +57,7 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/appBar" />
<net.pokeranalytics.android.ui.view.ContextMenuRecyclerView
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/menuRecyclerView"
android:layout_width="0dp"
android:layout_height="0dp"

Loading…
Cancel
Save