|
|
|
@ -6,14 +6,19 @@ import androidx.recyclerview.widget.DiffUtil |
|
|
|
|
import io.legado.app.R |
|
|
|
|
import io.legado.app.base.adapter.ItemViewHolder |
|
|
|
|
import io.legado.app.base.adapter.RecyclerAdapter |
|
|
|
|
import io.legado.app.data.entities.Book |
|
|
|
|
import io.legado.app.data.entities.BookChapter |
|
|
|
|
import io.legado.app.databinding.ItemChapterListBinding |
|
|
|
|
import io.legado.app.help.AppConfig |
|
|
|
|
import io.legado.app.help.ContentProcessor |
|
|
|
|
import io.legado.app.lib.theme.ThemeUtils |
|
|
|
|
import io.legado.app.lib.theme.accentColor |
|
|
|
|
import io.legado.app.utils.getCompatColor |
|
|
|
|
import io.legado.app.utils.gone |
|
|
|
|
import io.legado.app.utils.visible |
|
|
|
|
import kotlinx.coroutines.CoroutineScope |
|
|
|
|
import kotlinx.coroutines.Dispatchers.IO |
|
|
|
|
import kotlinx.coroutines.launch |
|
|
|
|
|
|
|
|
|
class ChapterListAdapter(context: Context, val callback: Callback) : |
|
|
|
|
RecyclerAdapter<BookChapter, ItemChapterListBinding>(context) { |
|
|
|
@ -44,6 +49,25 @@ class ChapterListAdapter(context: Context, val callback: Callback) : |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private val replaceRules |
|
|
|
|
get() = callback.book?.let { |
|
|
|
|
ContentProcessor.get(it.name, it.origin).getReplaceRules() |
|
|
|
|
} |
|
|
|
|
private val useReplace |
|
|
|
|
get() = AppConfig.tocUiUseReplace && callback.book?.getUseReplaceRule() == true |
|
|
|
|
|
|
|
|
|
fun upDisplayTile() { |
|
|
|
|
callback.scope.launch(IO) { |
|
|
|
|
val replaceRules = replaceRules |
|
|
|
|
val useReplace = useReplace |
|
|
|
|
getItems().forEach { |
|
|
|
|
if (displayTileMap[it.index] == null) { |
|
|
|
|
displayTileMap[it.index] = it.getDisplayTitle(replaceRules, useReplace) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun getViewBinding(parent: ViewGroup): ItemChapterListBinding { |
|
|
|
|
return ItemChapterListBinding.inflate(inflater, parent, false) |
|
|
|
|
} |
|
|
|
@ -53,7 +77,7 @@ class ChapterListAdapter(context: Context, val callback: Callback) : |
|
|
|
|
if (displayTile != null) { |
|
|
|
|
return displayTile |
|
|
|
|
} |
|
|
|
|
displayTile = chapter.getDisplayTitle() |
|
|
|
|
displayTile = chapter.getDisplayTitle(replaceRules, useReplace) |
|
|
|
|
displayTileMap[chapter.index] = displayTile |
|
|
|
|
return displayTile |
|
|
|
|
} |
|
|
|
@ -116,6 +140,7 @@ class ChapterListAdapter(context: Context, val callback: Callback) : |
|
|
|
|
|
|
|
|
|
interface Callback { |
|
|
|
|
val scope: CoroutineScope |
|
|
|
|
val book: Book? |
|
|
|
|
val isLocalBook: Boolean |
|
|
|
|
fun openChapter(bookChapter: BookChapter) |
|
|
|
|
fun durChapterIndex(): Int |
|
|
|
|