Add option to hide library category tabs

This commit is contained in:
arkon 2020-05-28 18:15:24 -04:00
parent 73dc51b3f6
commit 8c2b2f99bc
6 changed files with 63 additions and 11 deletions

View file

@ -147,6 +147,8 @@ object PreferenceKeys {
const val unreadBadge = "display_unread_badge" const val unreadBadge = "display_unread_badge"
const val categoryTabs = "display_category_tabs"
const val alwaysShowChapterTransition = "always_show_chapter_transition" const val alwaysShowChapterTransition = "always_show_chapter_transition"
const val searchPinnedSourcesOnly = "search_pinned_sources_only" const val searchPinnedSourcesOnly = "search_pinned_sources_only"

View file

@ -193,6 +193,8 @@ class PreferencesHelper(val context: Context) {
fun unreadBadge() = flowPrefs.getBoolean(Keys.unreadBadge, true) fun unreadBadge() = flowPrefs.getBoolean(Keys.unreadBadge, true)
fun categoryTabs() = flowPrefs.getBoolean(Keys.categoryTabs, true)
fun filterDownloaded() = flowPrefs.getBoolean(Keys.filterDownloaded, false) fun filterDownloaded() = flowPrefs.getBoolean(Keys.filterDownloaded, false)
fun filterUnread() = flowPrefs.getBoolean(Keys.filterUnread, false) fun filterUnread() = flowPrefs.getBoolean(Keys.filterUnread, false)

View file

@ -135,8 +135,26 @@ class LibraryController(
retainViewMode = RetainViewMode.RETAIN_DETACH retainViewMode = RetainViewMode.RETAIN_DETACH
} }
private var title: String? = null
set(value) {
if (field != value) {
field = value
setTitle()
}
}
override fun getTitle(): String? { override fun getTitle(): String? {
return resources?.getString(R.string.label_library) return title ?: resources?.getString(R.string.label_library)
}
private fun updateTitle() {
if (preferences.categoryTabs().get()) {
title = resources?.getString(R.string.label_library)
} else {
adapter?.categories?.get(binding.libraryPager.currentItem)?.let {
title = it.name
}
}
} }
override fun createPresenter(): LibraryPresenter { override fun createPresenter(): LibraryPresenter {
@ -157,6 +175,7 @@ class LibraryController(
.onEach { .onEach {
preferences.lastUsedCategory().set(it) preferences.lastUsedCategory().set(it)
activeCategory = it activeCategory = it
updateTitle()
} }
.launchIn(scope) .launchIn(scope)
@ -175,7 +194,8 @@ class LibraryController(
is LibrarySettingsSheet.Filter.FilterGroup -> onFilterChanged() is LibrarySettingsSheet.Filter.FilterGroup -> onFilterChanged()
is LibrarySettingsSheet.Sort.SortGroup -> onSortChanged() is LibrarySettingsSheet.Sort.SortGroup -> onSortChanged()
is LibrarySettingsSheet.Display.DisplayGroup -> reattachAdapter() is LibrarySettingsSheet.Display.DisplayGroup -> reattachAdapter()
is LibrarySettingsSheet.Display.BadgeGroup -> onBadgeChanged() is LibrarySettingsSheet.Display.BadgeGroup -> onBadgeSettingChanged()
is LibrarySettingsSheet.Display.TabsGroup -> onTabsSettingsChanged()
} }
} }
@ -254,7 +274,8 @@ class LibraryController(
// Restore active category. // Restore active category.
binding.libraryPager.setCurrentItem(activeCat, false) binding.libraryPager.setCurrentItem(activeCat, false)
tabsVisibilityRelay.call(categories.size > 1) // Trigger display of tabs
onTabsSettingsChanged()
// Delay the scroll position to allow the view to be properly measured. // Delay the scroll position to allow the view to be properly measured.
view.post { view.post {
@ -280,18 +301,20 @@ class LibraryController(
} }
} }
/**
* Called when a filter is changed.
*/
private fun onFilterChanged() { private fun onFilterChanged() {
presenter.requestFilterUpdate() presenter.requestFilterUpdate()
activity?.invalidateOptionsMenu() activity?.invalidateOptionsMenu()
} }
private fun onBadgeChanged() { private fun onBadgeSettingChanged() {
presenter.requestBadgesUpdate() presenter.requestBadgesUpdate()
} }
private fun onTabsSettingsChanged() {
tabsVisibilityRelay.call(preferences.categoryTabs().get() && adapter?.categories?.size ?: 0 > 1)
updateTitle()
}
/** /**
* Called when the sorting mode is changed. * Called when the sorting mode is changed.
*/ */

View file

@ -12,7 +12,7 @@ import eu.kanade.tachiyomi.widget.TabbedBottomSheetDialog
import uy.kohesive.injekt.injectLazy import uy.kohesive.injekt.injectLazy
class LibrarySettingsSheet( class LibrarySettingsSheet(
private val activity: Activity, activity: Activity,
onGroupClickListener: (ExtendedNavigationView.Group) -> Unit onGroupClickListener: (ExtendedNavigationView.Group) -> Unit
) : TabbedBottomSheetDialog(activity) { ) : TabbedBottomSheetDialog(activity) {
@ -178,7 +178,7 @@ class LibrarySettingsSheet(
Settings(context, attrs) { Settings(context, attrs) {
init { init {
setGroups(listOf(DisplayGroup(), BadgeGroup())) setGroups(listOf(DisplayGroup(), BadgeGroup(), TabsGroup()))
} }
inner class DisplayGroup : Group { inner class DisplayGroup : Group {
@ -187,7 +187,7 @@ class LibrarySettingsSheet(
private val comfortableGrid = Item.Radio(R.string.action_display_comfortable_grid, this) private val comfortableGrid = Item.Radio(R.string.action_display_comfortable_grid, this)
private val list = Item.Radio(R.string.action_display_list, this) private val list = Item.Radio(R.string.action_display_list, this)
override val header = null override val header = Item.Header(R.string.action_display_mode)
override val items = listOf(compactGrid, comfortableGrid, list) override val items = listOf(compactGrid, comfortableGrid, list)
override val footer = null override val footer = null
@ -222,7 +222,7 @@ class LibrarySettingsSheet(
private val downloadBadge = Item.CheckboxGroup(R.string.action_display_download_badge, this) private val downloadBadge = Item.CheckboxGroup(R.string.action_display_download_badge, this)
private val unreadBadge = Item.CheckboxGroup(R.string.action_display_unread_badge, this) private val unreadBadge = Item.CheckboxGroup(R.string.action_display_unread_badge, this)
override val header = null override val header = Item.Header(R.string.badges_header)
override val items = listOf(downloadBadge, unreadBadge) override val items = listOf(downloadBadge, unreadBadge)
override val footer = null override val footer = null
@ -241,6 +241,27 @@ class LibrarySettingsSheet(
adapter.notifyItemChanged(item) adapter.notifyItemChanged(item)
} }
} }
inner class TabsGroup : Group {
private val showTabs = Item.CheckboxGroup(R.string.action_display_show_tabs, this)
override val header = Item.Header(R.string.tabs_header)
override val items = listOf(showTabs)
override val footer = null
override fun initModels() {
showTabs.checked = preferences.categoryTabs().get()
}
override fun onItemClicked(item: Item) {
item as Item.CheckboxGroup
item.checked = !item.checked
when (item) {
showTabs -> preferences.categoryTabs().set((item.checked))
}
adapter.notifyItemChanged(item)
}
}
} }
open inner class Settings(context: Context, attrs: AttributeSet?) : open inner class Settings(context: Context, attrs: AttributeSet?) :

View file

@ -12,6 +12,7 @@ abstract class TabbedBottomSheetDialog(private val activity: Activity) : BottomS
val binding: CommonTabbedSheetBinding = CommonTabbedSheetBinding.inflate(activity.layoutInflater) val binding: CommonTabbedSheetBinding = CommonTabbedSheetBinding.inflate(activity.layoutInflater)
val adapter = LibrarySettingsSheetAdapter() val adapter = LibrarySettingsSheetAdapter()
binding.pager.offscreenPageLimit = 2
binding.pager.adapter = adapter binding.pager.adapter = adapter
binding.tabs.setupWithViewPager(binding.pager) binding.tabs.setupWithViewPager(binding.pager)

View file

@ -86,6 +86,7 @@
<string name="action_display_comfortable_grid">Comfortable grid</string> <string name="action_display_comfortable_grid">Comfortable grid</string>
<string name="action_display_download_badge">Download badges</string> <string name="action_display_download_badge">Download badges</string>
<string name="action_display_unread_badge">Unread badges</string> <string name="action_display_unread_badge">Unread badges</string>
<string name="action_display_show_tabs">Show category tabs</string>
<string name="action_hide">Hide</string> <string name="action_hide">Hide</string>
<string name="action_pin">Pin</string> <string name="action_pin">Pin</string>
<string name="action_unpin">Unpin</string> <string name="action_unpin">Unpin</string>
@ -418,6 +419,8 @@
<string name="local_source_badge">Local</string> <string name="local_source_badge">Local</string>
<string name="confirm_delete_manga">Are you sure you want to remove selected manga?</string> <string name="confirm_delete_manga">Are you sure you want to remove selected manga?</string>
<string name="also_delete_chapters">Also delete downloaded chapters</string> <string name="also_delete_chapters">Also delete downloaded chapters</string>
<string name="badges_header">Badges</string>
<string name="tabs_header">Tabs</string>
<!-- Catalogue fragment --> <!-- Catalogue fragment -->
<string name="source_requires_login">This source requires you to log in</string> <string name="source_requires_login">This source requires you to log in</string>