mirror of
https://git.mihon.tech/mihonapp/mihon
synced 2024-11-27 17:49:16 +03:00
Add option to hide library category tabs
This commit is contained in:
parent
73dc51b3f6
commit
8c2b2f99bc
6 changed files with 63 additions and 11 deletions
|
@ -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"
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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?) :
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Reference in a new issue