Use handle instead of long press for drag

This commit is contained in:
FooIbar authored and tarsin committed 2023-07-18 07:05:13 +08:00
1 parent 15a9c4ee45
commit fdbe06e8c5
2 files changed
+32 -2

No files matched your search

@@ -23,6 +23,7 @@ import android.graphics.Rect
import android.os.Bundle
import android.view.LayoutInflater
import android.view.MenuItem
import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import android.widget.Button
@@ -47,6 +48,7 @@ import androidx.core.view.GravityCompat
import androidx.drawerlayout.widget.DrawerLayout
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.ItemTouchHelper.ACTION_STATE_DRAG
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.SimpleItemAnimator
@@ -123,6 +125,7 @@ class DownloadsScene :
private val binding get() = _binding!!
private var mViewTransition: ViewTransition? = null
private var mAdapter: DownloadAdapter? = null
private var mItemTouchHelper: ItemTouchHelper? = null
private val tracker get() = mAdapter!!.tracker!!
private var mInitPosition = -1
private var mLabelAdapter: DownloadLabelAdapter? = null
@@ -298,7 +301,14 @@ class DownloadsScene :
recyclerView.scrollToPosition(mInitPosition)
mInitPosition = -1
}
val itemTouchHelper = ItemTouchHelper(object : ItemTouchHelper.Callback() {
mItemTouchHelper = ItemTouchHelper(object : ItemTouchHelper.Callback() {
override fun onSelectedChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) {
super.onSelectedChanged(viewHolder, actionState)
if (actionState == ACTION_STATE_DRAG) {
tracker.clearSelection()
}
}
override fun isLongPressDragEnabled() = false
override fun getMovementFlags(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int {
return makeMovementFlags(ItemTouchHelper.UP or ItemTouchHelper.DOWN, 0)
}
@@ -326,7 +336,7 @@ class DownloadsScene :
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {}
})
itemTouchHelper.attachToRecyclerView(recyclerView)
mItemTouchHelper!!.attachToRecyclerView(recyclerView)
fastScroller.attachToRecyclerView(recyclerView)
val handlerDrawable = HandlerDrawable()
handlerDrawable.setColor(theme.resolveColor(com.google.android.material.R.attr.colorPrimary))
@@ -356,6 +366,7 @@ class DownloadsScene :
mViewTransition = null
mAdapter = null
mLabelAdapter = null
mItemTouchHelper = null
_binding = null
}
@@ -794,6 +805,7 @@ class DownloadsScene :
}
}
@SuppressLint("ClickableViewAccessibility")
private inner class DownloadHolder(
private val binding: ItemDownloadBinding,
) : RecyclerView.ViewHolder(binding.root), View.OnClickListener {
@@ -805,6 +817,12 @@ class DownloadsScene :
binding.thumb.setMD3Content {
Spacer(modifier = Modifier.height(height).fillMaxWidth())
}
binding.handle.setOnTouchListener { _, event ->
if (event.actionMasked == MotionEvent.ACTION_DOWN) {
mItemTouchHelper!!.startDrag(this)
}
false
}
}
override fun onClick(v: View) {
+12
View File
@@ -76,6 +76,18 @@
android:textAllCaps="true"
android:textColor="@android:color/white" />
<ImageView
android:id="@+id/handle"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_alignBottom="@+id/thumb"
android:layout_toStartOf="@+id/actions"
android:background="?selectableItemBackgroundBorderless"
android:clickable="true"
android:focusable="true"
android:padding="8dp"
app:srcCompat="@drawable/ic_baseline_reorder_24" />
<FrameLayout
android:id="@+id/actions"
android:layout_width="wrap_content"