|
|
@@ -5,16 +5,15 @@ import android.content.Context
|
|
|
import android.util.SparseArray
|
|
|
import android.view.LayoutInflater
|
|
|
import android.view.ViewGroup
|
|
|
-import androidx.core.os.postDelayed
|
|
|
import androidx.recyclerview.widget.DiffUtil
|
|
|
import androidx.recyclerview.widget.GridLayoutManager
|
|
|
import androidx.recyclerview.widget.RecyclerView
|
|
|
import androidx.viewbinding.ViewBinding
|
|
|
import io.legado.app.help.coroutine.Coroutine
|
|
|
import io.legado.app.utils.buildMainHandler
|
|
|
-import kotlinx.coroutines.ensureActive
|
|
|
+import kotlinx.coroutines.withTimeoutOrNull
|
|
|
import splitties.views.onLongClick
|
|
|
-import java.util.*
|
|
|
+import java.util.Collections
|
|
|
|
|
|
/**
|
|
|
* Created by Invincible on 2017/11/24.
|
|
|
@@ -152,9 +151,16 @@ abstract class RecyclerAdapter<ITEM, VB : ViewBinding>(protected val context: Co
|
|
|
}
|
|
|
diffJob?.cancel()
|
|
|
diffJob = Coroutine.async {
|
|
|
- val diffResult = DiffUtil.calculateDiff(callback)
|
|
|
- ensureActive()
|
|
|
+ val diffResult = if (skipDiff) withTimeoutOrNull(500L) {
|
|
|
+ DiffUtil.calculateDiff(callback)
|
|
|
+ } else {
|
|
|
+ DiffUtil.calculateDiff(callback)
|
|
|
+ }
|
|
|
handler.post {
|
|
|
+ if (diffResult == null) {
|
|
|
+ setItems(items)
|
|
|
+ return@post
|
|
|
+ }
|
|
|
if (this@RecyclerAdapter.items.isNotEmpty()) {
|
|
|
this@RecyclerAdapter.items.clear()
|
|
|
}
|
|
|
@@ -165,12 +171,6 @@ abstract class RecyclerAdapter<ITEM, VB : ViewBinding>(protected val context: Co
|
|
|
onCurrentListChanged()
|
|
|
}
|
|
|
}
|
|
|
- if (skipDiff) handler.postDelayed(500) {
|
|
|
- if (diffJob?.isCompleted == false) {
|
|
|
- diffJob?.cancel()
|
|
|
- setItems(items)
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
}
|
|
|
|