diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt
index 5fa53120b..d84e5b87d 100644
--- a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt
+++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt
@@ -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) {
diff --git a/app/src/main/res/layout/item_download.xml b/app/src/main/res/layout/item_download.xml
index 91fc126ac..deeabe199 100644
--- a/app/src/main/res/layout/item_download.xml
+++ b/app/src/main/res/layout/item_download.xml
@@ -76,6 +76,18 @@
android:textAllCaps="true"
android:textColor="@android:color/white" />
+
+