option to add manga count to the category headers

closes
This commit is contained in:
Jays2Kings 2021-07-02 21:37:04 -04:00
parent 1e138ab476
commit 226bb18d46
8 changed files with 41 additions and 2 deletions

View File

@ -198,6 +198,8 @@ object PreferenceKeys {
const val showLibraryUpdateErrors = "show_library_update_errors" const val showLibraryUpdateErrors = "show_library_update_errors"
const val categoryNumberOfItems = "display_number_of_items"
const val alwaysShowChapterTransition = "always_show_chapter_transition" const val alwaysShowChapterTransition = "always_show_chapter_transition"
const val hideBottomNavOnScroll = "hide_bottom_nav_on_scroll" const val hideBottomNavOnScroll = "hide_bottom_nav_on_scroll"

View File

@ -355,6 +355,8 @@ class PreferencesHelper(val context: Context) {
fun unreadBadgeType() = flowPrefs.getInt("unread_badge_type", 2) fun unreadBadgeType() = flowPrefs.getInt("unread_badge_type", 2)
fun categoryNumberOfItems() = flowPrefs.getBoolean(Keys.categoryNumberOfItems, false)
fun hideStartReadingButton() = flowPrefs.getBoolean("hide_reading_button", false) fun hideStartReadingButton() = flowPrefs.getBoolean("hide_reading_button", false)
fun alwaysShowChapterTransition() = flowPrefs.getBoolean(Keys.alwaysShowChapterTransition, true) fun alwaysShowChapterTransition() = flowPrefs.getBoolean(Keys.alwaysShowChapterTransition, true)

View File

@ -27,10 +27,19 @@ class LibraryCategoryAdapter(val controller: LibraryController) :
val sourceManager by injectLazy<SourceManager>() val sourceManager by injectLazy<SourceManager>()
private val preferences: PreferencesHelper by injectLazy()
var showNumber = preferences.categoryNumberOfItems().get()
init { init {
setDisplayHeadersAtStartUp(true) setDisplayHeadersAtStartUp(true)
} }
/**
* The number of manga in each category.
*/
var itemsPerCategory: Map<Int, Int> = emptyMap()
/** /**
* The list of manga in this category. * The list of manga in this category.
*/ */
@ -51,6 +60,10 @@ class LibraryCategoryAdapter(val controller: LibraryController) :
mangas = list.toList() mangas = list.toList()
performFilter() performFilter()
itemsPerCategory = headerItems.map { header ->
(header as LibraryHeaderItem).catId to getSectionItemPositions(header).size
}.toMap()
} }
/** /**

View File

@ -905,6 +905,13 @@ class LibraryController(
adapter.notifyDataSetChanged() adapter.notifyDataSetChanged()
} }
.launchIn(viewScope) .launchIn(viewScope)
preferences.categoryNumberOfItems().asFlow()
.drop(1)
.onEach {
adapter.showNumber = it
adapter.notifyDataSetChanged()
}
.launchIn(viewScope)
} }
override fun onChangeStarted(handler: ControllerChangeHandler, type: ControllerChangeType) { override fun onChangeStarted(handler: ControllerChangeHandler, type: ControllerChangeType) {

View File

@ -1,5 +1,6 @@
package eu.kanade.tachiyomi.ui.library package eu.kanade.tachiyomi.ui.library
import android.annotation.SuppressLint
import android.app.Activity import android.app.Activity
import android.graphics.Color import android.graphics.Color
import android.util.TypedValue import android.util.TypedValue
@ -58,6 +59,7 @@ class LibraryHeaderHolder(val view: View, private val adapter: LibraryCategoryAd
} }
} }
@SuppressLint("SetTextI18n")
fun bind(item: LibraryHeaderItem) { fun bind(item: LibraryHeaderItem) {
val index = adapter.headerItems.indexOf(item) val index = adapter.headerItems.indexOf(item)
val previousIsCollapsed = val previousIsCollapsed =
@ -79,8 +81,11 @@ class LibraryHeaderHolder(val view: View, private val adapter: LibraryCategoryAd
} }
val category = item.category val category = item.category
if (category.isAlone && !category.isDynamic) binding.categoryTitle.text = "" binding.categoryTitle.text =
else binding.categoryTitle.text = category.name if (category.isAlone && !category.isDynamic) { "" } else { category.name } +
if (adapter.showNumber && !category.isHidden) {
" (${adapter.itemsPerCategory[item.catId]})"
} else { "" }
if (category.sourceId != null) { if (category.sourceId != null) {
val icon = adapter.sourceManager.get(category.sourceId!!)?.icon() val icon = adapter.sourceManager.get(category.sourceId!!)?.icon()
icon?.setBounds(0, 0, 32.dpToPx, 32.dpToPx) icon?.setBounds(0, 0, 32.dpToPx, 32.dpToPx)

View File

@ -29,6 +29,7 @@ class LibraryCategoryView @JvmOverloads constructor(context: Context, attrs: Att
dynamicToBottom.bindToPreference(preferences.collapsedDynamicAtBottom()) { dynamicToBottom.bindToPreference(preferences.collapsedDynamicAtBottom()) {
controller?.presenter?.getLibrary() controller?.presenter?.getLibrary()
} }
showNumberOfItems.bindToPreference(preferences.categoryNumberOfItems())
val hideHopper = min( val hideHopper = min(
2, 2,
preferences.hideHopper().get().toInt() * 2 + preferences.autohideHopper().get() preferences.hideHopper().get().toInt() * 2 + preferences.autohideHopper().get()

View File

@ -35,6 +35,14 @@
android:layout_marginEnd="12dp" android:layout_marginEnd="12dp"
android:text="@string/move_dynamic_to_bottom" /> android:text="@string/move_dynamic_to_bottom" />
<com.google.android.material.checkbox.MaterialCheckBox
android:id="@+id/show_number_of_items"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:text="@string/show_number_of_items" />
<eu.kanade.tachiyomi.widget.MaterialSpinnerView <eu.kanade.tachiyomi.widget.MaterialSpinnerView
android:id="@+id/hide_hopper_spinner" android:id="@+id/hide_hopper_spinner"
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@ -129,6 +129,7 @@
<string name="no_matches_for_filters">No matches found for your current filters</string> <string name="no_matches_for_filters">No matches found for your current filters</string>
<string name="show_all_categories">Show all categories</string> <string name="show_all_categories">Show all categories</string>
<string name="move_dynamic_to_bottom">Move collapsed dynamic categories to bottom</string> <string name="move_dynamic_to_bottom">Move collapsed dynamic categories to bottom</string>
<string name="show_number_of_items">Show number of items</string>
<string name="when_grouping_by_sources_tags">When grouping library by sources, status, etc.</string> <string name="when_grouping_by_sources_tags">When grouping library by sources, status, etc.</string>
<string name="always_show_current_category">Always show current category</string> <string name="always_show_current_category">Always show current category</string>
<string name="category_hopper_long_press">Category hopper long-press action</string> <string name="category_hopper_long_press">Category hopper long-press action</string>