|
|
@ -5,10 +5,14 @@ import android.util.AttributeSet
|
|
|
|
import eu.kanade.tachiyomi.R
|
|
|
|
import eu.kanade.tachiyomi.R
|
|
|
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
|
|
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
|
|
|
import eu.kanade.tachiyomi.data.preference.getOrDefault
|
|
|
|
import eu.kanade.tachiyomi.data.preference.getOrDefault
|
|
|
|
|
|
|
|
import eu.kanade.tachiyomi.ui.catalogue.filter.TriStateItem
|
|
|
|
import eu.kanade.tachiyomi.widget.ExtendedNavigationView
|
|
|
|
import eu.kanade.tachiyomi.widget.ExtendedNavigationView
|
|
|
|
import eu.kanade.tachiyomi.widget.ExtendedNavigationView.Item.MultiSort.Companion.SORT_ASC
|
|
|
|
import eu.kanade.tachiyomi.widget.ExtendedNavigationView.Item.MultiSort.Companion.SORT_ASC
|
|
|
|
import eu.kanade.tachiyomi.widget.ExtendedNavigationView.Item.MultiSort.Companion.SORT_DESC
|
|
|
|
import eu.kanade.tachiyomi.widget.ExtendedNavigationView.Item.MultiSort.Companion.SORT_DESC
|
|
|
|
import eu.kanade.tachiyomi.widget.ExtendedNavigationView.Item.MultiSort.Companion.SORT_NONE
|
|
|
|
import eu.kanade.tachiyomi.widget.ExtendedNavigationView.Item.MultiSort.Companion.SORT_NONE
|
|
|
|
|
|
|
|
import eu.kanade.tachiyomi.widget.ExtendedNavigationView.Item.TriStateGroup.Companion.STATE_IGNORE
|
|
|
|
|
|
|
|
import eu.kanade.tachiyomi.widget.ExtendedNavigationView.Item.TriStateGroup.Companion.STATE_INCLUDE
|
|
|
|
|
|
|
|
import eu.kanade.tachiyomi.widget.ExtendedNavigationView.Item.TriStateGroup.Companion.STATE_EXCLUDE
|
|
|
|
import uy.kohesive.injekt.injectLazy
|
|
|
|
import uy.kohesive.injekt.injectLazy
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
@ -48,7 +52,7 @@ class LibraryNavigationView @JvmOverloads constructor(context: Context, attrs: A
|
|
|
|
* Returns true if there's at least one filter from [FilterGroup] active.
|
|
|
|
* Returns true if there's at least one filter from [FilterGroup] active.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
fun hasActiveFilters(): Boolean {
|
|
|
|
fun hasActiveFilters(): Boolean {
|
|
|
|
return (groups[0] as FilterGroup).items.any { it.checked }
|
|
|
|
return (groups[0] as FilterGroup).items.any { it.state != STATE_IGNORE }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
@ -69,11 +73,11 @@ class LibraryNavigationView @JvmOverloads constructor(context: Context, attrs: A
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
inner class FilterGroup : Group {
|
|
|
|
inner class FilterGroup : Group {
|
|
|
|
|
|
|
|
|
|
|
|
private val downloaded = Item.CheckboxGroup(R.string.action_filter_downloaded, this)
|
|
|
|
private val downloaded = Item.TriStateGroup(R.string.action_filter_downloaded, this)
|
|
|
|
|
|
|
|
|
|
|
|
private val unread = Item.CheckboxGroup(R.string.action_filter_unread, this)
|
|
|
|
private val unread = Item.TriStateGroup(R.string.action_filter_unread, this)
|
|
|
|
|
|
|
|
|
|
|
|
private val completed = Item.CheckboxGroup(R.string.completed, this)
|
|
|
|
private val completed = Item.TriStateGroup(R.string.completed, this)
|
|
|
|
|
|
|
|
|
|
|
|
override val items = listOf(downloaded, unread, completed)
|
|
|
|
override val items = listOf(downloaded, unread, completed)
|
|
|
|
|
|
|
|
|
|
|
@ -82,18 +86,28 @@ class LibraryNavigationView @JvmOverloads constructor(context: Context, attrs: A
|
|
|
|
override val footer = Item.Separator()
|
|
|
|
override val footer = Item.Separator()
|
|
|
|
|
|
|
|
|
|
|
|
override fun initModels() {
|
|
|
|
override fun initModels() {
|
|
|
|
downloaded.checked = preferences.filterDownloaded().getOrDefault()
|
|
|
|
try {
|
|
|
|
unread.checked = preferences.filterUnread().getOrDefault()
|
|
|
|
downloaded.state = preferences.filterDownloaded().getOrDefault()
|
|
|
|
completed.checked = preferences.filterCompleted().getOrDefault()
|
|
|
|
unread.state = preferences.filterUnread().getOrDefault()
|
|
|
|
|
|
|
|
completed.state = preferences.filterCompleted().getOrDefault()
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
catch (e: Exception) {
|
|
|
|
|
|
|
|
preferences.upgradeFilters()
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
override fun onItemClicked(item: Item) {
|
|
|
|
override fun onItemClicked(item: Item) {
|
|
|
|
item as Item.CheckboxGroup
|
|
|
|
item as Item.TriStateGroup
|
|
|
|
item.checked = !item.checked
|
|
|
|
val newState = when (item.state) {
|
|
|
|
|
|
|
|
STATE_IGNORE -> STATE_INCLUDE
|
|
|
|
|
|
|
|
STATE_INCLUDE -> STATE_EXCLUDE
|
|
|
|
|
|
|
|
else -> STATE_IGNORE
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
item.state = newState
|
|
|
|
when (item) {
|
|
|
|
when (item) {
|
|
|
|
downloaded -> preferences.filterDownloaded().set(item.checked)
|
|
|
|
downloaded -> preferences.filterDownloaded().set(item.state)
|
|
|
|
unread -> preferences.filterUnread().set(item.checked)
|
|
|
|
unread -> preferences.filterUnread().set(item.state)
|
|
|
|
completed -> preferences.filterCompleted().set(item.checked)
|
|
|
|
completed -> preferences.filterCompleted().set(item.state)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
adapter.notifyItemChanged(item)
|
|
|
|
adapter.notifyItemChanged(item)
|
|
|
|