Horis hace 2 años
padre
commit
00ec4372d2

+ 11 - 11
app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt

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

+ 2 - 2
app/src/main/java/io/legado/app/ui/main/bookshelf/style1/books/BaseBooksAdapter.kt

@@ -10,8 +10,8 @@ import io.legado.app.data.entities.Book
 abstract class BaseBooksAdapter<VB : ViewBinding>(context: Context) :
     DiffRecyclerAdapter<Book, VB>(context) {
 
-    override val diffItemCallback: DiffUtil.ItemCallback<Book>
-        get() = object : DiffUtil.ItemCallback<Book>() {
+    override val diffItemCallback: DiffUtil.ItemCallback<Book> =
+        object : DiffUtil.ItemCallback<Book>() {
 
             override fun areItemsTheSame(oldItem: Book, newItem: Book): Boolean {
                 return oldItem.name == newItem.name

+ 2 - 2
app/src/main/java/io/legado/app/ui/main/bookshelf/style1/books/BooksAdapterList.kt

@@ -40,12 +40,12 @@ class BooksAdapterList(
             upRefresh(binding, item)
             upLastUpdateTime(binding, item)
         } else {
-            tvRead.text = item.durChapterTitle
-            tvLast.text = item.latestChapterTitle
             bundle.keySet().forEach {
                 when (it) {
                     "name" -> tvName.text = item.name
                     "author" -> tvAuthor.text = item.author
+                    "dur" -> tvRead.text = item.durChapterTitle
+                    "last" -> tvLast.text = item.latestChapterTitle
                     "cover" -> ivCover.load(
                         item.getDisplayCover(),
                         item.name,

+ 4 - 0
app/src/main/java/io/legado/app/ui/widget/text/BadgeView.kt

@@ -106,6 +106,10 @@ class BadgeView @JvmOverloads constructor(
     }
 
     override fun setBackgroundColor(color: Int) {
+        val background = background
+        if (background is ShapeDrawable && background.paint.color == color) {
+            return
+        }
         setBackground(radius, color)
     }
 

+ 3 - 2
app/src/main/java/io/legado/app/utils/LogUtils.kt

@@ -7,7 +7,7 @@ import io.legado.app.BuildConfig
 import io.legado.app.help.config.AppConfig
 import splitties.init.appCtx
 import java.text.SimpleDateFormat
-import java.util.*
+import java.util.Date
 import java.util.logging.FileHandler
 import java.util.logging.Level
 import java.util.logging.LogRecord
@@ -40,7 +40,8 @@ object LogUtils {
     private val fileHandler by lazy {
         val root = appCtx.externalCacheDir ?: return@lazy null
         val logFolder = FileUtils.createFolderIfNotExist(root, "logs")
-        val logPath = FileUtils.getPath(root = logFolder, "appLog")
+        val date = getCurrentDateStr(TIME_PATTERN)
+        val logPath = FileUtils.getPath(root = logFolder, "appLog-$date.txt")
         FileHandler(logPath, 10240, 10).apply {
             formatter = object : java.util.logging.Formatter() {
                 override fun format(record: LogRecord): String {