mirror of
https://github.com/mihonapp/mihon.git
synced 2025-06-25 10:37:51 +02:00
Add offline mode (forced download filters; closes #2902)
This commit is contained in:
@ -99,6 +99,8 @@ object PreferenceKeys {
|
||||
|
||||
const val libraryUpdatePrioritization = "library_update_prioritization"
|
||||
|
||||
const val offlineMode = "pref_offline_mode"
|
||||
|
||||
const val filterDownloaded = "pref_filter_downloaded_key"
|
||||
|
||||
const val filterUnread = "pref_filter_unread_key"
|
||||
|
@ -183,6 +183,8 @@ class PreferencesHelper(val context: Context) {
|
||||
|
||||
fun downloadBadge() = rxPrefs.getBoolean(Keys.downloadBadge, false)
|
||||
|
||||
fun offlineMode() = flowPrefs.getBoolean(Keys.offlineMode, false)
|
||||
|
||||
fun filterDownloaded() = rxPrefs.getBoolean(Keys.filterDownloaded, false)
|
||||
|
||||
fun filterUnread() = rxPrefs.getBoolean(Keys.filterUnread, false)
|
||||
|
@ -111,10 +111,8 @@ class LibraryPresenter(
|
||||
* @param map the map to filter.
|
||||
*/
|
||||
private fun applyFilters(map: LibraryMap): LibraryMap {
|
||||
val filterDownloaded = preferences.filterDownloaded().getOrDefault()
|
||||
|
||||
val filterDownloaded = preferences.offlineMode().get() || preferences.filterDownloaded().getOrDefault()
|
||||
val filterUnread = preferences.filterUnread().getOrDefault()
|
||||
|
||||
val filterCompleted = preferences.filterCompleted().getOrDefault()
|
||||
|
||||
val filterFn: (LibraryItem) -> Boolean = f@{ item ->
|
||||
|
@ -96,7 +96,8 @@ class LibrarySettingsSheet(
|
||||
override val footer = Item.Separator()
|
||||
|
||||
override fun initModels() {
|
||||
downloaded.checked = preferences.filterDownloaded().getOrDefault()
|
||||
downloaded.checked = preferences.offlineMode().get() || preferences.filterDownloaded().getOrDefault()
|
||||
downloaded.enabled = !preferences.offlineMode().get()
|
||||
unread.checked = preferences.filterUnread().getOrDefault()
|
||||
completed.checked = preferences.filterCompleted().getOrDefault()
|
||||
}
|
||||
|
@ -155,6 +155,7 @@ class ChaptersController : NucleusController<ChaptersControllerBinding, Chapters
|
||||
menuFilterRead.isChecked = presenter.onlyRead()
|
||||
menuFilterUnread.isChecked = presenter.onlyUnread()
|
||||
menuFilterDownloaded.isChecked = presenter.onlyDownloaded()
|
||||
menuFilterDownloaded.isEnabled = !presenter.isOfflineMode()
|
||||
menuFilterBookmarked.isChecked = presenter.onlyBookmarked()
|
||||
|
||||
val filterSet = presenter.onlyRead() || presenter.onlyUnread() || presenter.onlyDownloaded() || presenter.onlyBookmarked()
|
||||
|
@ -366,11 +366,18 @@ class ChaptersPresenter(
|
||||
refreshChapters()
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether offline mode is enabled (i.e. force only downloaded content).
|
||||
*/
|
||||
fun isOfflineMode(): Boolean {
|
||||
return preferences.offlineMode().get()
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the display only downloaded filter is enabled.
|
||||
*/
|
||||
fun onlyDownloaded(): Boolean {
|
||||
return manga.downloadedFilter == Manga.SHOW_DOWNLOADED
|
||||
return isOfflineMode() || manga.downloadedFilter == Manga.SHOW_DOWNLOADED
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.ui.more
|
||||
|
||||
import androidx.preference.PreferenceScreen
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.ui.base.controller.RootController
|
||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
||||
@ -16,6 +17,7 @@ import eu.kanade.tachiyomi.util.preference.iconTint
|
||||
import eu.kanade.tachiyomi.util.preference.onClick
|
||||
import eu.kanade.tachiyomi.util.preference.preference
|
||||
import eu.kanade.tachiyomi.util.preference.preferenceCategory
|
||||
import eu.kanade.tachiyomi.util.preference.switchPreference
|
||||
import eu.kanade.tachiyomi.util.preference.titleRes
|
||||
import eu.kanade.tachiyomi.util.system.getResourceColor
|
||||
import eu.kanade.tachiyomi.util.system.openInBrowser
|
||||
@ -29,29 +31,38 @@ class MoreController : SettingsController(), RootController {
|
||||
|
||||
val tintColor = context.getResourceColor(R.attr.colorAccent)
|
||||
|
||||
badgePreference {
|
||||
titleRes = R.string.label_extensions
|
||||
iconRes = R.drawable.ic_extension_24dp
|
||||
switchPreference {
|
||||
key = Keys.offlineMode
|
||||
titleRes = R.string.label_offline_mode
|
||||
iconRes = R.drawable.ic_cloud_off_24dp
|
||||
iconTint = tintColor
|
||||
setBadge(Injekt.get<PreferencesHelper>().extensionUpdatesCount().get())
|
||||
onClick {
|
||||
router.pushController(ExtensionController().withFadeTransaction())
|
||||
}
|
||||
}
|
||||
preference {
|
||||
titleRes = R.string.label_download_queue
|
||||
iconRes = R.drawable.ic_file_download_black_24dp
|
||||
iconTint = tintColor
|
||||
onClick {
|
||||
router.pushController(DownloadController().withFadeTransaction())
|
||||
|
||||
preferenceCategory {
|
||||
badgePreference {
|
||||
titleRes = R.string.label_extensions
|
||||
iconRes = R.drawable.ic_extension_24dp
|
||||
iconTint = tintColor
|
||||
setBadge(Injekt.get<PreferencesHelper>().extensionUpdatesCount().get())
|
||||
onClick {
|
||||
router.pushController(ExtensionController().withFadeTransaction())
|
||||
}
|
||||
}
|
||||
}
|
||||
preference {
|
||||
titleRes = R.string.label_migration
|
||||
iconRes = R.drawable.ic_compare_arrows_black_24dp
|
||||
iconTint = tintColor
|
||||
onClick {
|
||||
router.pushController(MigrationController().withFadeTransaction())
|
||||
preference {
|
||||
titleRes = R.string.label_download_queue
|
||||
iconRes = R.drawable.ic_file_download_black_24dp
|
||||
iconTint = tintColor
|
||||
onClick {
|
||||
router.pushController(DownloadController().withFadeTransaction())
|
||||
}
|
||||
}
|
||||
preference {
|
||||
titleRes = R.string.label_migration
|
||||
iconRes = R.drawable.ic_compare_arrows_black_24dp
|
||||
iconTint = tintColor
|
||||
onClick {
|
||||
router.pushController(MigrationController().withFadeTransaction())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -40,7 +40,7 @@ open class ExtendedNavigationView @JvmOverloads constructor(
|
||||
/**
|
||||
* A checkbox.
|
||||
*/
|
||||
open class Checkbox(val resTitle: Int, var checked: Boolean = false) : Item()
|
||||
open class Checkbox(val resTitle: Int, var checked: Boolean = false, var enabled: Boolean = true) : Item()
|
||||
|
||||
/**
|
||||
* A checkbox belonging to a group. The group must handle selections and restrictions.
|
||||
@ -218,6 +218,7 @@ open class ExtendedNavigationView @JvmOverloads constructor(
|
||||
val item = items[position] as Item.CheckboxGroup
|
||||
holder.check.setText(item.resTitle)
|
||||
holder.check.isChecked = item.checked
|
||||
holder.check.isEnabled = item.enabled
|
||||
}
|
||||
is MultiStateHolder -> {
|
||||
val item = items[position] as Item.MultiStateGroup
|
||||
|
Reference in New Issue
Block a user