Separate out chapters heading into separate adapter
This commit is contained in:
parent
1c33032721
commit
f2f6628693
5 changed files with 78 additions and 43 deletions
|
@ -0,0 +1,47 @@
|
|||
package eu.kanade.tachiyomi.ui.manga.chapter
|
||||
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.databinding.MangaChaptersHeaderBinding
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
|
||||
class MangaChaptersHeaderAdapter :
|
||||
RecyclerView.Adapter<MangaChaptersHeaderAdapter.HeaderViewHolder>() {
|
||||
|
||||
private var numChapters: Int? = null
|
||||
|
||||
private val scope = CoroutineScope(Job() + Dispatchers.Main)
|
||||
private lateinit var binding: MangaChaptersHeaderBinding
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HeaderViewHolder {
|
||||
binding = MangaChaptersHeaderBinding.inflate(LayoutInflater.from(parent.context), parent, false)
|
||||
return HeaderViewHolder(binding.root)
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int = 1
|
||||
|
||||
override fun onBindViewHolder(holder: HeaderViewHolder, position: Int) {
|
||||
holder.bind()
|
||||
}
|
||||
|
||||
fun setNumChapters(numChapters: Int) {
|
||||
this.numChapters = numChapters
|
||||
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
inner class HeaderViewHolder(private val view: View) : RecyclerView.ViewHolder(view) {
|
||||
fun bind() {
|
||||
binding.chaptersLabel.text = if (numChapters == null) {
|
||||
view.context.getString(R.string.chapters)
|
||||
} else {
|
||||
view.context.resources.getQuantityString(R.plurals.manga_num_chapters, numChapters!!, numChapters)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -68,7 +68,8 @@ class MangaInfoChaptersController(private val fromSource: Boolean = false) :
|
|||
|
||||
private val preferences: PreferencesHelper by injectLazy()
|
||||
|
||||
private var headerAdapter: MangaInfoHeaderAdapter? = null
|
||||
private var mangaInfoAdapter: MangaInfoHeaderAdapter? = null
|
||||
private var chaptersHeaderAdapter: MangaChaptersHeaderAdapter? = null
|
||||
private var chaptersAdapter: ChaptersAdapter? = null
|
||||
|
||||
/**
|
||||
|
@ -110,10 +111,11 @@ class MangaInfoChaptersController(private val fromSource: Boolean = false) :
|
|||
if (ctrl.manga == null || ctrl.source == null) return
|
||||
|
||||
// Init RecyclerView and adapter
|
||||
headerAdapter = MangaInfoHeaderAdapter(this, fromSource)
|
||||
mangaInfoAdapter = MangaInfoHeaderAdapter(this, fromSource)
|
||||
chaptersHeaderAdapter = MangaChaptersHeaderAdapter()
|
||||
chaptersAdapter = ChaptersAdapter(this, view.context)
|
||||
|
||||
binding.recycler.adapter = MergeAdapter(headerAdapter, chaptersAdapter)
|
||||
binding.recycler.adapter = MergeAdapter(mangaInfoAdapter, chaptersHeaderAdapter, chaptersAdapter)
|
||||
binding.recycler.layoutManager = LinearLayoutManager(view.context)
|
||||
binding.recycler.addItemDecoration(DividerItemDecoration(view.context, DividerItemDecoration.VERTICAL))
|
||||
binding.recycler.setHasFixedSize(true)
|
||||
|
@ -157,7 +159,8 @@ class MangaInfoChaptersController(private val fromSource: Boolean = false) :
|
|||
override fun onDestroyView(view: View) {
|
||||
destroyActionModeIfNeeded()
|
||||
binding.actionToolbar.destroy()
|
||||
headerAdapter = null
|
||||
mangaInfoAdapter = null
|
||||
chaptersHeaderAdapter = null
|
||||
chaptersAdapter = null
|
||||
super.onDestroyView(view)
|
||||
}
|
||||
|
@ -300,7 +303,7 @@ class MangaInfoChaptersController(private val fromSource: Boolean = false) :
|
|||
fun onNextMangaInfo(manga: Manga, source: Source) {
|
||||
if (manga.initialized) {
|
||||
// Update view.
|
||||
headerAdapter?.update(manga, source)
|
||||
mangaInfoAdapter?.update(manga, source)
|
||||
|
||||
// Skips directly to chapters list by default if navigated to from the library
|
||||
if (!fromSource) {
|
||||
|
@ -419,7 +422,7 @@ class MangaInfoChaptersController(private val fromSource: Boolean = false) :
|
|||
}
|
||||
}
|
||||
|
||||
headerAdapter?.notifyDataSetChanged()
|
||||
mangaInfoAdapter?.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
fun onCategoriesClick() {
|
||||
|
@ -511,8 +514,8 @@ class MangaInfoChaptersController(private val fromSource: Boolean = false) :
|
|||
fetchChaptersFromSource()
|
||||
}
|
||||
|
||||
val header = headerAdapter ?: return
|
||||
header.setNumChapters(chapters.size)
|
||||
val chaptersHeader = chaptersHeaderAdapter ?: return
|
||||
chaptersHeader.setNumChapters(chapters.size)
|
||||
|
||||
val adapter = chaptersAdapter ?: return
|
||||
adapter.updateDataSet(chapters)
|
||||
|
|
|
@ -42,7 +42,6 @@ class MangaInfoHeaderAdapter(
|
|||
|
||||
private var manga: Manga = controller.presenter.manga
|
||||
private var source: Source = controller.presenter.source
|
||||
private var numChapters: Int? = null
|
||||
|
||||
private val scope = CoroutineScope(Job() + Dispatchers.Main)
|
||||
private lateinit var binding: MangaInfoHeaderBinding
|
||||
|
@ -73,12 +72,6 @@ class MangaInfoHeaderAdapter(
|
|||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
fun setNumChapters(numChapters: Int) {
|
||||
this.numChapters = numChapters
|
||||
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
inner class HeaderViewHolder(private val view: View) : RecyclerView.ViewHolder(view) {
|
||||
fun bind() {
|
||||
// For rounded corners
|
||||
|
@ -174,7 +167,6 @@ class MangaInfoHeaderAdapter(
|
|||
.launchIn(scope)
|
||||
|
||||
setMangaInfo(manga, source)
|
||||
setChapterInfo()
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -345,14 +337,5 @@ class MangaInfoHeaderAdapter(
|
|||
isChecked = isFavorite
|
||||
}
|
||||
}
|
||||
|
||||
private fun setChapterInfo() {
|
||||
// Chapters heading
|
||||
binding.chaptersLabel.text = if (numChapters == null) {
|
||||
view.context.getString(R.string.chapters)
|
||||
} else {
|
||||
view.context.resources.getQuantityString(R.plurals.manga_num_chapters, numChapters!!, numChapters)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
20
app/src/main/res/layout/manga_chapters_header.xml
Normal file
20
app/src/main/res/layout/manga_chapters_header.xml
Normal file
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="16dp"
|
||||
android:paddingTop="16dp"
|
||||
android:paddingEnd="16dp"
|
||||
android:paddingBottom="8dp"
|
||||
tools:context=".ui.browse.source.browse.BrowseSourceController">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/chapters_label"
|
||||
style="@style/TextAppearance.Regular.SubHeading"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/chapters"
|
||||
android:textIsSelectable="false" />
|
||||
|
||||
</RelativeLayout>
|
|
@ -252,22 +252,4 @@
|
|||
|
||||
</FrameLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:paddingTop="16dp"
|
||||
android:paddingBottom="8dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/chapters_label"
|
||||
style="@style/TextAppearance.Regular.SubHeading"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/chapters"
|
||||
android:textIsSelectable="false" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
|
Reference in a new issue