Clean up preference extensions/items a bit
(cherry picked from commit cf14831fbe6d3b6b07d0fe185194d27d6ac6ae17) # Conflicts: # app/src/main/java/eu/kanade/presentation/more/settings/PreferenceItem.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt # app/src/main/java/eu/kanade/presentation/reader/settings/GeneralSettingsPage.kt # app/src/main/java/eu/kanade/presentation/reader/settings/ReadingModePage.kt # app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel.kt # app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/HttpPageLoader.kt
This commit is contained in:
parent
e9b15ce4a4
commit
a447b011d0
@ -31,7 +31,7 @@ class PreferenceMutableState<T>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun component2(): (T) -> Unit {
|
override fun component2(): (T) -> Unit {
|
||||||
return { preference.set(it) }
|
return preference::set
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package eu.kanade.domain.manga.interactor
|
package eu.kanade.domain.manga.interactor
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.util.preference.plusAssign
|
import tachiyomi.core.preference.plusAssign
|
||||||
import tachiyomi.domain.library.service.LibraryPreferences
|
import tachiyomi.domain.library.service.LibraryPreferences
|
||||||
|
|
||||||
class CreateSortTag(
|
class CreateSortTag(
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package eu.kanade.domain.source.interactor
|
package eu.kanade.domain.source.interactor
|
||||||
|
|
||||||
import eu.kanade.domain.source.service.SourcePreferences
|
import eu.kanade.domain.source.service.SourcePreferences
|
||||||
import eu.kanade.tachiyomi.util.preference.plusAssign
|
import tachiyomi.core.preference.plusAssign
|
||||||
|
|
||||||
class CreateSourceCategory(private val preferences: SourcePreferences) {
|
class CreateSourceCategory(private val preferences: SourcePreferences) {
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package eu.kanade.domain.source.interactor
|
package eu.kanade.domain.source.interactor
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.util.preference.plusAssign
|
import tachiyomi.core.preference.plusAssign
|
||||||
import tachiyomi.domain.UnsortedPreferences
|
import tachiyomi.domain.UnsortedPreferences
|
||||||
|
|
||||||
class CreateSourceRepo(private val preferences: UnsortedPreferences) {
|
class CreateSourceRepo(private val preferences: UnsortedPreferences) {
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package eu.kanade.domain.source.interactor
|
package eu.kanade.domain.source.interactor
|
||||||
|
|
||||||
import eu.kanade.domain.source.service.SourcePreferences
|
import eu.kanade.domain.source.service.SourcePreferences
|
||||||
import eu.kanade.tachiyomi.util.preference.minusAssign
|
|
||||||
import tachiyomi.core.preference.getAndSet
|
import tachiyomi.core.preference.getAndSet
|
||||||
|
import tachiyomi.core.preference.minusAssign
|
||||||
|
|
||||||
class DeleteSourceCategory(private val preferences: SourcePreferences) {
|
class DeleteSourceCategory(private val preferences: SourcePreferences) {
|
||||||
|
|
||||||
|
@ -19,7 +19,6 @@ import androidx.compose.ui.res.stringResource
|
|||||||
import androidx.compose.ui.util.fastForEach
|
import androidx.compose.ui.util.fastForEach
|
||||||
import eu.kanade.presentation.components.TabbedDialog
|
import eu.kanade.presentation.components.TabbedDialog
|
||||||
import eu.kanade.presentation.components.TabbedDialogPaddings
|
import eu.kanade.presentation.components.TabbedDialogPaddings
|
||||||
import eu.kanade.presentation.util.collectAsState
|
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.ui.library.LibrarySettingsScreenModel
|
import eu.kanade.tachiyomi.ui.library.LibrarySettingsScreenModel
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
@ -37,6 +36,7 @@ import tachiyomi.presentation.core.components.SettingsChipRow
|
|||||||
import tachiyomi.presentation.core.components.SliderItem
|
import tachiyomi.presentation.core.components.SliderItem
|
||||||
import tachiyomi.presentation.core.components.SortItem
|
import tachiyomi.presentation.core.components.SortItem
|
||||||
import tachiyomi.presentation.core.components.TriStateItem
|
import tachiyomi.presentation.core.components.TriStateItem
|
||||||
|
import tachiyomi.presentation.core.util.collectAsState
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun LibrarySettingsDialog(
|
fun LibrarySettingsDialog(
|
||||||
@ -257,60 +257,36 @@ private fun ColumnScope.DisplayPage(
|
|||||||
} else {
|
} else {
|
||||||
stringResource(R.string.label_default)
|
stringResource(R.string.label_default)
|
||||||
},
|
},
|
||||||
onChange = { columnPreference.set(it) },
|
onChange = columnPreference::set,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
HeadingItem(R.string.overlay_header)
|
HeadingItem(R.string.overlay_header)
|
||||||
val downloadBadge by screenModel.libraryPreferences.downloadBadge().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.action_display_download_badge),
|
label = stringResource(R.string.action_display_download_badge),
|
||||||
checked = downloadBadge,
|
pref = screenModel.libraryPreferences.downloadBadge(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(LibraryPreferences::downloadBadge)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
val localBadge by screenModel.libraryPreferences.localBadge().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.action_display_local_badge),
|
label = stringResource(R.string.action_display_local_badge),
|
||||||
checked = localBadge,
|
pref = screenModel.libraryPreferences.localBadge(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(LibraryPreferences::localBadge)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
val languageBadge by screenModel.libraryPreferences.languageBadge().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.action_display_language_badge),
|
label = stringResource(R.string.action_display_language_badge),
|
||||||
checked = languageBadge,
|
pref = screenModel.libraryPreferences.languageBadge(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(LibraryPreferences::languageBadge)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
val showContinueReadingButton by screenModel.libraryPreferences.showContinueReadingButton().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.action_display_show_continue_reading_button),
|
label = stringResource(R.string.action_display_show_continue_reading_button),
|
||||||
checked = showContinueReadingButton,
|
pref = screenModel.libraryPreferences.showContinueReadingButton(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(LibraryPreferences::showContinueReadingButton)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
HeadingItem(R.string.tabs_header)
|
HeadingItem(R.string.tabs_header)
|
||||||
val categoryTabs by screenModel.libraryPreferences.categoryTabs().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.action_display_show_tabs),
|
label = stringResource(R.string.action_display_show_tabs),
|
||||||
checked = categoryTabs,
|
pref = screenModel.libraryPreferences.categoryTabs(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(LibraryPreferences::categoryTabs)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
val categoryNumberOfItems by screenModel.libraryPreferences.categoryNumberOfItems().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.action_display_show_number_of_items),
|
label = stringResource(R.string.action_display_show_number_of_items),
|
||||||
checked = categoryNumberOfItems,
|
pref = screenModel.libraryPreferences.categoryNumberOfItems(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(LibraryPreferences::categoryNumberOfItems)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,10 +30,10 @@ import eu.kanade.presentation.more.settings.widget.PrefsHorizontalPadding
|
|||||||
import eu.kanade.presentation.more.settings.widget.SwitchPreferenceWidget
|
import eu.kanade.presentation.more.settings.widget.SwitchPreferenceWidget
|
||||||
import eu.kanade.presentation.more.settings.widget.TextPreferenceWidget
|
import eu.kanade.presentation.more.settings.widget.TextPreferenceWidget
|
||||||
import eu.kanade.presentation.more.settings.widget.TrackingPreferenceWidget
|
import eu.kanade.presentation.more.settings.widget.TrackingPreferenceWidget
|
||||||
import eu.kanade.presentation.util.collectAsState
|
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import tachiyomi.core.preference.PreferenceStore
|
import tachiyomi.core.preference.PreferenceStore
|
||||||
import tachiyomi.presentation.core.components.SliderItem
|
import tachiyomi.presentation.core.components.SliderItem
|
||||||
|
import tachiyomi.presentation.core.util.collectAsState
|
||||||
import tachiyomi.presentation.core.util.secondaryItemAlpha
|
import tachiyomi.presentation.core.util.secondaryItemAlpha
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
|
@ -46,7 +46,6 @@ import eu.kanade.domain.source.service.SourcePreferences.DataSaver
|
|||||||
import eu.kanade.presentation.more.settings.Preference
|
import eu.kanade.presentation.more.settings.Preference
|
||||||
import eu.kanade.presentation.more.settings.screen.advanced.ClearDatabaseScreen
|
import eu.kanade.presentation.more.settings.screen.advanced.ClearDatabaseScreen
|
||||||
import eu.kanade.presentation.more.settings.screen.debug.DebugInfoScreen
|
import eu.kanade.presentation.more.settings.screen.debug.DebugInfoScreen
|
||||||
import eu.kanade.presentation.util.collectAsState
|
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.core.security.SecurityPreferences
|
import eu.kanade.tachiyomi.core.security.SecurityPreferences
|
||||||
import eu.kanade.tachiyomi.data.cache.ChapterCache
|
import eu.kanade.tachiyomi.data.cache.ChapterCache
|
||||||
@ -96,6 +95,7 @@ import tachiyomi.domain.library.service.LibraryPreferences
|
|||||||
import tachiyomi.domain.manga.interactor.GetAllManga
|
import tachiyomi.domain.manga.interactor.GetAllManga
|
||||||
import tachiyomi.domain.manga.repository.MangaRepository
|
import tachiyomi.domain.manga.repository.MangaRepository
|
||||||
import tachiyomi.domain.source.service.SourceManager
|
import tachiyomi.domain.source.service.SourceManager
|
||||||
|
import tachiyomi.presentation.core.util.collectAsState
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
@ -21,7 +21,6 @@ import eu.kanade.domain.ui.model.TabletUiMode
|
|||||||
import eu.kanade.domain.ui.model.ThemeMode
|
import eu.kanade.domain.ui.model.ThemeMode
|
||||||
import eu.kanade.domain.ui.model.setAppCompatDelegateThemeMode
|
import eu.kanade.domain.ui.model.setAppCompatDelegateThemeMode
|
||||||
import eu.kanade.presentation.more.settings.Preference
|
import eu.kanade.presentation.more.settings.Preference
|
||||||
import eu.kanade.presentation.util.collectAsState
|
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
||||||
import eu.kanade.tachiyomi.util.system.toast
|
import eu.kanade.tachiyomi.util.system.toast
|
||||||
@ -29,6 +28,7 @@ import kotlinx.coroutines.flow.collectLatest
|
|||||||
import kotlinx.coroutines.flow.drop
|
import kotlinx.coroutines.flow.drop
|
||||||
import kotlinx.coroutines.flow.merge
|
import kotlinx.coroutines.flow.merge
|
||||||
import org.xmlpull.v1.XmlPullParser
|
import org.xmlpull.v1.XmlPullParser
|
||||||
|
import tachiyomi.presentation.core.util.collectAsState
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
|
@ -42,7 +42,6 @@ import androidx.core.net.toUri
|
|||||||
import com.hippo.unifile.UniFile
|
import com.hippo.unifile.UniFile
|
||||||
import eu.kanade.presentation.extensions.RequestStoragePermission
|
import eu.kanade.presentation.extensions.RequestStoragePermission
|
||||||
import eu.kanade.presentation.more.settings.Preference
|
import eu.kanade.presentation.more.settings.Preference
|
||||||
import eu.kanade.presentation.util.collectAsState
|
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.data.backup.BackupConst
|
import eu.kanade.tachiyomi.data.backup.BackupConst
|
||||||
import eu.kanade.tachiyomi.data.backup.BackupCreateJob
|
import eu.kanade.tachiyomi.data.backup.BackupCreateJob
|
||||||
@ -57,6 +56,7 @@ import kotlinx.coroutines.launch
|
|||||||
import tachiyomi.domain.backup.service.BackupPreferences
|
import tachiyomi.domain.backup.service.BackupPreferences
|
||||||
import tachiyomi.presentation.core.components.ScrollbarLazyColumn
|
import tachiyomi.presentation.core.components.ScrollbarLazyColumn
|
||||||
import tachiyomi.presentation.core.components.material.Divider
|
import tachiyomi.presentation.core.components.material.Divider
|
||||||
|
import tachiyomi.presentation.core.util.collectAsState
|
||||||
import tachiyomi.presentation.core.util.isScrolledToEnd
|
import tachiyomi.presentation.core.util.isScrolledToEnd
|
||||||
import tachiyomi.presentation.core.util.isScrolledToStart
|
import tachiyomi.presentation.core.util.isScrolledToStart
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
|
@ -14,12 +14,12 @@ import cafe.adriel.voyager.navigator.currentOrThrow
|
|||||||
import eu.kanade.domain.source.service.SourcePreferences
|
import eu.kanade.domain.source.service.SourcePreferences
|
||||||
import eu.kanade.domain.ui.UiPreferences
|
import eu.kanade.domain.ui.UiPreferences
|
||||||
import eu.kanade.presentation.more.settings.Preference
|
import eu.kanade.presentation.more.settings.Preference
|
||||||
import eu.kanade.presentation.util.collectAsState
|
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.ui.category.repos.RepoScreen
|
import eu.kanade.tachiyomi.ui.category.repos.RepoScreen
|
||||||
import eu.kanade.tachiyomi.ui.category.sources.SourceCategoryScreen
|
import eu.kanade.tachiyomi.ui.category.sources.SourceCategoryScreen
|
||||||
import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.authenticate
|
import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.authenticate
|
||||||
import tachiyomi.domain.UnsortedPreferences
|
import tachiyomi.domain.UnsortedPreferences
|
||||||
|
import tachiyomi.presentation.core.util.collectAsState
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
|
|
||||||
|
@ -22,12 +22,12 @@ import com.hippo.unifile.UniFile
|
|||||||
import eu.kanade.presentation.category.visualName
|
import eu.kanade.presentation.category.visualName
|
||||||
import eu.kanade.presentation.more.settings.Preference
|
import eu.kanade.presentation.more.settings.Preference
|
||||||
import eu.kanade.presentation.more.settings.widget.TriStateListDialog
|
import eu.kanade.presentation.more.settings.widget.TriStateListDialog
|
||||||
import eu.kanade.presentation.util.collectAsState
|
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import tachiyomi.domain.category.interactor.GetCategories
|
import tachiyomi.domain.category.interactor.GetCategories
|
||||||
import tachiyomi.domain.category.model.Category
|
import tachiyomi.domain.category.model.Category
|
||||||
import tachiyomi.domain.download.service.DownloadPreferences
|
import tachiyomi.domain.download.service.DownloadPreferences
|
||||||
|
import tachiyomi.presentation.core.util.collectAsState
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
@ -48,7 +48,6 @@ import androidx.compose.ui.window.DialogProperties
|
|||||||
import androidx.core.content.ContextCompat.startActivity
|
import androidx.core.content.ContextCompat.startActivity
|
||||||
import eu.kanade.presentation.library.components.SyncFavoritesWarningDialog
|
import eu.kanade.presentation.library.components.SyncFavoritesWarningDialog
|
||||||
import eu.kanade.presentation.more.settings.Preference
|
import eu.kanade.presentation.more.settings.Preference
|
||||||
import eu.kanade.presentation.util.collectAsState
|
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.ui.webview.WebViewActivity
|
import eu.kanade.tachiyomi.ui.webview.WebViewActivity
|
||||||
import eu.kanade.tachiyomi.util.system.toast
|
import eu.kanade.tachiyomi.util.system.toast
|
||||||
@ -58,7 +57,6 @@ import exh.eh.EHentaiUpdaterStats
|
|||||||
import exh.metadata.metadata.EHentaiSearchMetadata
|
import exh.metadata.metadata.EHentaiSearchMetadata
|
||||||
import exh.ui.login.EhLoginActivity
|
import exh.ui.login.EhLoginActivity
|
||||||
import exh.util.nullIfBlank
|
import exh.util.nullIfBlank
|
||||||
import kotlinx.serialization.decodeFromString
|
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
import logcat.LogPriority
|
import logcat.LogPriority
|
||||||
import tachiyomi.core.util.lang.launchNonCancellable
|
import tachiyomi.core.util.lang.launchNonCancellable
|
||||||
@ -71,6 +69,7 @@ import tachiyomi.domain.library.service.LibraryPreferences.Companion.DEVICE_ONLY
|
|||||||
import tachiyomi.domain.manga.interactor.DeleteFavoriteEntries
|
import tachiyomi.domain.manga.interactor.DeleteFavoriteEntries
|
||||||
import tachiyomi.domain.manga.interactor.GetExhFavoriteMangaWithMetadata
|
import tachiyomi.domain.manga.interactor.GetExhFavoriteMangaWithMetadata
|
||||||
import tachiyomi.domain.manga.interactor.GetFlatMetadataById
|
import tachiyomi.domain.manga.interactor.GetFlatMetadataById
|
||||||
|
import tachiyomi.presentation.core.util.collectAsState
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
import kotlin.time.Duration
|
import kotlin.time.Duration
|
||||||
|
@ -36,7 +36,6 @@ import cafe.adriel.voyager.navigator.currentOrThrow
|
|||||||
import eu.kanade.presentation.category.visualName
|
import eu.kanade.presentation.category.visualName
|
||||||
import eu.kanade.presentation.more.settings.Preference
|
import eu.kanade.presentation.more.settings.Preference
|
||||||
import eu.kanade.presentation.more.settings.widget.TriStateListDialog
|
import eu.kanade.presentation.more.settings.widget.TriStateListDialog
|
||||||
import eu.kanade.presentation.util.collectAsState
|
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.data.library.LibraryUpdateJob
|
import eu.kanade.tachiyomi.data.library.LibraryUpdateJob
|
||||||
import eu.kanade.tachiyomi.data.track.TrackManager
|
import eu.kanade.tachiyomi.data.track.TrackManager
|
||||||
@ -61,6 +60,7 @@ import tachiyomi.domain.library.service.LibraryPreferences.Companion.MANGA_NON_R
|
|||||||
import tachiyomi.domain.library.service.LibraryPreferences.Companion.MANGA_OUTSIDE_RELEASE_PERIOD
|
import tachiyomi.domain.library.service.LibraryPreferences.Companion.MANGA_OUTSIDE_RELEASE_PERIOD
|
||||||
import tachiyomi.domain.manga.interactor.MAX_GRACE_PERIOD
|
import tachiyomi.domain.manga.interactor.MAX_GRACE_PERIOD
|
||||||
import tachiyomi.presentation.core.components.WheelTextPicker
|
import tachiyomi.presentation.core.components.WheelTextPicker
|
||||||
|
import tachiyomi.presentation.core.util.collectAsState
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
|
|
||||||
|
@ -28,7 +28,6 @@ import androidx.compose.ui.res.stringResource
|
|||||||
import eu.kanade.domain.source.service.SourcePreferences
|
import eu.kanade.domain.source.service.SourcePreferences
|
||||||
import eu.kanade.domain.track.service.TrackPreferences
|
import eu.kanade.domain.track.service.TrackPreferences
|
||||||
import eu.kanade.presentation.more.settings.Preference
|
import eu.kanade.presentation.more.settings.Preference
|
||||||
import eu.kanade.presentation.util.collectAsState
|
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.data.library.LibraryUpdateJob
|
import eu.kanade.tachiyomi.data.library.LibraryUpdateJob
|
||||||
import eu.kanade.tachiyomi.source.online.all.MangaDex
|
import eu.kanade.tachiyomi.source.online.all.MangaDex
|
||||||
@ -42,6 +41,7 @@ import tachiyomi.core.util.lang.withUIContext
|
|||||||
import tachiyomi.core.util.system.logcat
|
import tachiyomi.core.util.system.logcat
|
||||||
import tachiyomi.domain.UnsortedPreferences
|
import tachiyomi.domain.UnsortedPreferences
|
||||||
import tachiyomi.presentation.core.components.material.padding
|
import tachiyomi.presentation.core.components.material.padding
|
||||||
|
import tachiyomi.presentation.core.util.collectAsState
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
|
|
||||||
|
@ -9,7 +9,6 @@ import androidx.compose.runtime.remember
|
|||||||
import androidx.compose.ui.platform.LocalView
|
import androidx.compose.ui.platform.LocalView
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import eu.kanade.presentation.more.settings.Preference
|
import eu.kanade.presentation.more.settings.Preference
|
||||||
import eu.kanade.presentation.util.collectAsState
|
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
|
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
|
||||||
import eu.kanade.tachiyomi.ui.reader.setting.ReaderBottomButton
|
import eu.kanade.tachiyomi.ui.reader.setting.ReaderBottomButton
|
||||||
@ -17,6 +16,7 @@ import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
|
|||||||
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType
|
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType
|
||||||
import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerConfig
|
import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerConfig
|
||||||
import eu.kanade.tachiyomi.util.system.isReleaseBuildType
|
import eu.kanade.tachiyomi.util.system.isReleaseBuildType
|
||||||
|
import tachiyomi.presentation.core.util.collectAsState
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
import java.text.NumberFormat
|
import java.text.NumberFormat
|
||||||
|
@ -47,7 +47,6 @@ import androidx.fragment.app.FragmentActivity
|
|||||||
import cafe.adriel.voyager.navigator.LocalNavigator
|
import cafe.adriel.voyager.navigator.LocalNavigator
|
||||||
import cafe.adriel.voyager.navigator.currentOrThrow
|
import cafe.adriel.voyager.navigator.currentOrThrow
|
||||||
import eu.kanade.presentation.more.settings.Preference
|
import eu.kanade.presentation.more.settings.Preference
|
||||||
import eu.kanade.presentation.util.collectAsState
|
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.core.security.SecurityPreferences
|
import eu.kanade.tachiyomi.core.security.SecurityPreferences
|
||||||
import eu.kanade.tachiyomi.ui.base.delegate.SecureActivityDelegate
|
import eu.kanade.tachiyomi.ui.base.delegate.SecureActivityDelegate
|
||||||
@ -55,6 +54,7 @@ import eu.kanade.tachiyomi.ui.category.biometric.BiometricTimesScreen
|
|||||||
import eu.kanade.tachiyomi.util.storage.CbzCrypto
|
import eu.kanade.tachiyomi.util.storage.CbzCrypto
|
||||||
import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.authenticate
|
import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.authenticate
|
||||||
import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.isAuthenticationSupported
|
import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.isAuthenticationSupported
|
||||||
|
import tachiyomi.presentation.core.util.collectAsState
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
|
|
||||||
|
@ -11,14 +11,13 @@ import androidx.core.graphics.alpha
|
|||||||
import androidx.core.graphics.blue
|
import androidx.core.graphics.blue
|
||||||
import androidx.core.graphics.green
|
import androidx.core.graphics.green
|
||||||
import androidx.core.graphics.red
|
import androidx.core.graphics.red
|
||||||
import eu.kanade.presentation.util.collectAsState
|
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
|
|
||||||
import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel
|
import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel
|
||||||
import tachiyomi.core.preference.getAndSet
|
import tachiyomi.core.preference.getAndSet
|
||||||
import tachiyomi.presentation.core.components.CheckboxItem
|
import tachiyomi.presentation.core.components.CheckboxItem
|
||||||
import tachiyomi.presentation.core.components.SettingsChipRow
|
import tachiyomi.presentation.core.components.SettingsChipRow
|
||||||
import tachiyomi.presentation.core.components.SliderItem
|
import tachiyomi.presentation.core.components.SliderItem
|
||||||
|
import tachiyomi.presentation.core.util.collectAsState
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel) {
|
internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel) {
|
||||||
@ -44,10 +43,7 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel)
|
|||||||
val customBrightness by screenModel.preferences.customBrightness().collectAsState()
|
val customBrightness by screenModel.preferences.customBrightness().collectAsState()
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_custom_brightness),
|
label = stringResource(R.string.pref_custom_brightness),
|
||||||
checked = customBrightness,
|
pref = screenModel.preferences.customBrightness(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::customBrightness)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -71,10 +67,7 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel)
|
|||||||
val colorFilter by screenModel.preferences.colorFilter().collectAsState()
|
val colorFilter by screenModel.preferences.colorFilter().collectAsState()
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_custom_color_filter),
|
label = stringResource(R.string.pref_custom_color_filter),
|
||||||
checked = colorFilter,
|
pref = screenModel.preferences.colorFilter(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::colorFilter)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
if (colorFilter) {
|
if (colorFilter) {
|
||||||
val colorFilterValue by screenModel.preferences.colorFilterValue().collectAsState()
|
val colorFilterValue by screenModel.preferences.colorFilterValue().collectAsState()
|
||||||
@ -135,21 +128,13 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val grayscale by screenModel.preferences.grayscale().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_grayscale),
|
label = stringResource(R.string.pref_grayscale),
|
||||||
checked = grayscale,
|
pref = screenModel.preferences.grayscale(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::grayscale)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
val invertedColors by screenModel.preferences.invertedColors().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_inverted_colors),
|
label = stringResource(R.string.pref_inverted_colors),
|
||||||
checked = invertedColors,
|
pref = screenModel.preferences.invertedColors(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::invertedColors)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,12 +6,11 @@ import androidx.compose.material3.Text
|
|||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import eu.kanade.presentation.util.collectAsState
|
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
|
|
||||||
import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel
|
import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel
|
||||||
import tachiyomi.presentation.core.components.CheckboxItem
|
import tachiyomi.presentation.core.components.CheckboxItem
|
||||||
import tachiyomi.presentation.core.components.SettingsChipRow
|
import tachiyomi.presentation.core.components.SettingsChipRow
|
||||||
|
import tachiyomi.presentation.core.util.collectAsState
|
||||||
|
|
||||||
private val themes = listOf(
|
private val themes = listOf(
|
||||||
R.string.black_background to 1,
|
R.string.black_background to 1,
|
||||||
@ -33,108 +32,65 @@ internal fun ColumnScope.GeneralPage(screenModel: ReaderSettingsScreenModel) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val showPageNumber by screenModel.preferences.showPageNumber().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_show_page_number),
|
label = stringResource(R.string.pref_show_page_number),
|
||||||
checked = showPageNumber,
|
pref = screenModel.preferences.showPageNumber(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::showPageNumber)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
val forceHorizontalSeekbar by screenModel.preferences.forceHorizontalSeekbar().collectAsState()
|
val forceHorizontalSeekbar by screenModel.preferences.forceHorizontalSeekbar().collectAsState()
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_force_horz_seekbar),
|
label = stringResource(R.string.pref_force_horz_seekbar),
|
||||||
checked = forceHorizontalSeekbar,
|
pref = screenModel.preferences.forceHorizontalSeekbar(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::forceHorizontalSeekbar)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if (!forceHorizontalSeekbar) {
|
if (!forceHorizontalSeekbar) {
|
||||||
val landscapeVerticalSeekbar by screenModel.preferences.landscapeVerticalSeekbar().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_show_vert_seekbar_landscape),
|
label = stringResource(R.string.pref_show_vert_seekbar_landscape),
|
||||||
checked = landscapeVerticalSeekbar,
|
pref = screenModel.preferences.landscapeVerticalSeekbar(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::landscapeVerticalSeekbar)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
val leftVerticalSeekbar by screenModel.preferences.leftVerticalSeekbar().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_left_handed_vertical_seekbar),
|
label = stringResource(R.string.pref_left_handed_vertical_seekbar),
|
||||||
checked = leftVerticalSeekbar,
|
pref = screenModel.preferences.leftVerticalSeekbar(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::leftVerticalSeekbar)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
// SY <--
|
// SY <--
|
||||||
|
|
||||||
val fullscreen by screenModel.preferences.fullscreen().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_fullscreen),
|
label = stringResource(R.string.pref_fullscreen),
|
||||||
checked = fullscreen,
|
pref = screenModel.preferences.fullscreen(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::fullscreen)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// TODO: hide if there's no cutout
|
// TODO: hide if there's no cutout
|
||||||
val cutoutShort by screenModel.preferences.cutoutShort().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_cutout_short),
|
label = stringResource(R.string.pref_cutout_short),
|
||||||
checked = cutoutShort,
|
pref = screenModel.preferences.cutoutShort(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::cutoutShort)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
val keepScreenOn by screenModel.preferences.keepScreenOn().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_keep_screen_on),
|
label = stringResource(R.string.pref_keep_screen_on),
|
||||||
checked = keepScreenOn,
|
pref = screenModel.preferences.keepScreenOn(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::keepScreenOn)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
val readWithLongTap by screenModel.preferences.readWithLongTap().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_read_with_long_tap),
|
label = stringResource(R.string.pref_read_with_long_tap),
|
||||||
checked = readWithLongTap,
|
pref = screenModel.preferences.readWithLongTap(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::readWithLongTap)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
val alwaysShowChapterTransition by screenModel.preferences.alwaysShowChapterTransition().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_always_show_chapter_transition),
|
label = stringResource(R.string.pref_always_show_chapter_transition),
|
||||||
checked = alwaysShowChapterTransition,
|
pref = screenModel.preferences.alwaysShowChapterTransition(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::alwaysShowChapterTransition)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
/*val pageTransitions by screenModel.preferences.pageTransitions().collectAsState()
|
/*CheckboxItem(
|
||||||
CheckboxItem(
|
|
||||||
label = stringResource(R.string.pref_page_transitions),
|
label = stringResource(R.string.pref_page_transitions),
|
||||||
checked = pageTransitions,
|
pref = screenModel.preferences.pageTransitions(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::pageTransitions)
|
|
||||||
},
|
|
||||||
)*/
|
)*/
|
||||||
val useAutoWebtoon by screenModel.preferences.useAutoWebtoon().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.auto_webtoon_mode),
|
label = stringResource(R.string.auto_webtoon_mode),
|
||||||
checked = useAutoWebtoon,
|
pref = screenModel.preferences.useAutoWebtoon(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::useAutoWebtoon)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
// SY <--
|
// SY <--
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,6 @@ import androidx.compose.runtime.remember
|
|||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import eu.kanade.domain.manga.model.orientationType
|
import eu.kanade.domain.manga.model.orientationType
|
||||||
import eu.kanade.domain.manga.model.readingModeType
|
import eu.kanade.domain.manga.model.readingModeType
|
||||||
import eu.kanade.presentation.util.collectAsState
|
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
|
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
|
||||||
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
|
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
|
||||||
@ -22,6 +21,7 @@ import tachiyomi.presentation.core.components.CheckboxItem
|
|||||||
import tachiyomi.presentation.core.components.HeadingItem
|
import tachiyomi.presentation.core.components.HeadingItem
|
||||||
import tachiyomi.presentation.core.components.SettingsChipRow
|
import tachiyomi.presentation.core.components.SettingsChipRow
|
||||||
import tachiyomi.presentation.core.components.SliderItem
|
import tachiyomi.presentation.core.components.SliderItem
|
||||||
|
import tachiyomi.presentation.core.util.collectAsState
|
||||||
import java.text.NumberFormat
|
import java.text.NumberFormat
|
||||||
|
|
||||||
private val readingModeOptions = ReadingModeType.entries.map { it.stringRes to it }
|
private val readingModeOptions = ReadingModeType.entries.map { it.stringRes to it }
|
||||||
@ -114,90 +114,56 @@ private fun ColumnScope.PagerViewerSettings(screenModel: ReaderSettingsScreenMod
|
|||||||
}
|
}
|
||||||
// SY <--
|
// SY <--
|
||||||
|
|
||||||
val cropBorders by screenModel.preferences.cropBorders().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_crop_borders),
|
label = stringResource(R.string.pref_crop_borders),
|
||||||
checked = cropBorders,
|
pref = screenModel.preferences.cropBorders(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::cropBorders)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
val landscapeZoom by screenModel.preferences.landscapeZoom().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_landscape_zoom),
|
label = stringResource(R.string.pref_landscape_zoom),
|
||||||
checked = landscapeZoom,
|
pref = screenModel.preferences.landscapeZoom(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::landscapeZoom)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
val navigateToPan by screenModel.preferences.navigateToPan().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_navigate_pan),
|
label = stringResource(R.string.pref_navigate_pan),
|
||||||
checked = navigateToPan,
|
pref = screenModel.preferences.navigateToPan(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::navigateToPan)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
val dualPageSplitPaged by screenModel.preferences.dualPageSplitPaged().collectAsState()
|
val dualPageSplitPaged by screenModel.preferences.dualPageSplitPaged().collectAsState()
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_dual_page_split),
|
label = stringResource(R.string.pref_dual_page_split),
|
||||||
checked = dualPageSplitPaged,
|
pref = screenModel.preferences.dualPageSplitPaged(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::dualPageSplitPaged)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if (dualPageSplitPaged) {
|
if (dualPageSplitPaged) {
|
||||||
val dualPageInvertPaged by screenModel.preferences.dualPageInvertPaged().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_dual_page_invert),
|
label = stringResource(R.string.pref_dual_page_invert),
|
||||||
checked = dualPageInvertPaged,
|
pref = screenModel.preferences.dualPageInvertPaged(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::dualPageInvertPaged)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val dualPageRotateToFit by screenModel.preferences.dualPageRotateToFit().collectAsState()
|
val dualPageRotateToFit by screenModel.preferences.dualPageRotateToFit().collectAsState()
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_page_rotate),
|
label = stringResource(R.string.pref_page_rotate),
|
||||||
checked = dualPageRotateToFit,
|
pref = screenModel.preferences.dualPageRotateToFit(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::dualPageRotateToFit)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if (dualPageRotateToFit) {
|
if (dualPageRotateToFit) {
|
||||||
val dualPageRotateToFitInvert by screenModel.preferences.dualPageRotateToFitInvert().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_page_rotate_invert),
|
label = stringResource(R.string.pref_page_rotate_invert),
|
||||||
checked = dualPageRotateToFitInvert,
|
pref = screenModel.preferences.dualPageRotateToFitInvert(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::dualPageRotateToFitInvert)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
val pageTransitionsPager by screenModel.preferences.pageTransitionsPager().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_page_transitions),
|
label = stringResource(R.string.pref_page_transitions),
|
||||||
checked = pageTransitionsPager,
|
pref = screenModel.preferences.pageTransitionsPager(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::pageTransitionsPager)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
val invertDoublePages by screenModel.preferences.invertDoublePages().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.invert_double_pages),
|
label = stringResource(R.string.invert_double_pages),
|
||||||
checked = invertDoublePages,
|
pref = screenModel.preferences.invertDoublePages(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::invertDoublePages)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
val centerMarginType by screenModel.preferences.centerMarginType().collectAsState()
|
val centerMarginType by screenModel.preferences.centerMarginType().collectAsState()
|
||||||
@ -240,84 +206,51 @@ private fun ColumnScope.WebtoonViewerSettings(screenModel: ReaderSettingsScreenM
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
val cropBordersWebtoon by screenModel.preferences.cropBordersWebtoon().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_crop_borders),
|
label = stringResource(R.string.pref_crop_borders),
|
||||||
checked = cropBordersWebtoon,
|
pref = screenModel.preferences.cropBordersWebtoon(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::cropBordersWebtoon)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
val smoothAutoScroll by screenModel.preferences.smoothAutoScroll().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_smooth_scroll),
|
label = stringResource(R.string.pref_smooth_scroll),
|
||||||
checked = smoothAutoScroll,
|
pref = screenModel.preferences.smoothAutoScroll(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::smoothAutoScroll)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
val pageTransitionsWebtoon by screenModel.preferences.pageTransitionsWebtoon().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_page_transitions),
|
label = stringResource(R.string.pref_page_transitions),
|
||||||
checked = pageTransitionsWebtoon,
|
pref = screenModel.preferences.pageTransitionsWebtoon(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::pageTransitionsWebtoon)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
val webtoonEnableZoomOut by screenModel.preferences.webtoonEnableZoomOut().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.enable_zoom_out),
|
label = stringResource(R.string.enable_zoom_out),
|
||||||
checked = webtoonEnableZoomOut,
|
pref = screenModel.preferences.webtoonEnableZoomOut(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::webtoonEnableZoomOut)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
// SY <--
|
// SY <--
|
||||||
|
|
||||||
val dualPageSplitWebtoon by screenModel.preferences.dualPageSplitWebtoon().collectAsState()
|
val dualPageSplitWebtoon by screenModel.preferences.dualPageSplitWebtoon().collectAsState()
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_dual_page_split),
|
label = stringResource(R.string.pref_dual_page_split),
|
||||||
checked = dualPageSplitWebtoon,
|
pref = screenModel.preferences.dualPageSplitWebtoon(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::dualPageSplitWebtoon)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if (dualPageSplitWebtoon) {
|
if (dualPageSplitWebtoon) {
|
||||||
val dualPageInvertWebtoon by screenModel.preferences.dualPageInvertWebtoon()
|
|
||||||
.collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_dual_page_invert),
|
label = stringResource(R.string.pref_dual_page_invert),
|
||||||
checked = dualPageInvertWebtoon,
|
pref = screenModel.preferences.dualPageInvertWebtoon(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::dualPageInvertWebtoon)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isReleaseBuildType) {
|
if (!isReleaseBuildType) {
|
||||||
val longStripSplitWebtoon by screenModel.preferences.longStripSplitWebtoon()
|
|
||||||
.collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_long_strip_split),
|
label = stringResource(R.string.pref_long_strip_split),
|
||||||
checked = longStripSplitWebtoon,
|
pref = screenModel.preferences.longStripSplitWebtoon(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::longStripSplitWebtoon)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val webtoonDoubleTapZoomEnabled by screenModel.preferences.webtoonDoubleTapZoomEnabled().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_double_tap_zoom),
|
label = stringResource(R.string.pref_double_tap_zoom),
|
||||||
checked = webtoonDoubleTapZoomEnabled,
|
pref = screenModel.preferences.webtoonDoubleTapZoomEnabled(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::webtoonDoubleTapZoomEnabled)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -326,13 +259,9 @@ private fun ColumnScope.WebtoonViewerSettings(screenModel: ReaderSettingsScreenM
|
|||||||
private fun ColumnScope.WebtoonWithGapsViewerSettings(screenModel: ReaderSettingsScreenModel) {
|
private fun ColumnScope.WebtoonWithGapsViewerSettings(screenModel: ReaderSettingsScreenModel) {
|
||||||
HeadingItem(R.string.vertical_plus_viewer)
|
HeadingItem(R.string.vertical_plus_viewer)
|
||||||
|
|
||||||
val cropBordersContinuousVertical by screenModel.preferences.cropBordersContinuousVertical().collectAsState()
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(R.string.pref_crop_borders),
|
label = stringResource(R.string.pref_crop_borders),
|
||||||
checked = cropBordersContinuousVertical,
|
pref = screenModel.preferences.cropBordersContinuousVertical(),
|
||||||
onClick = {
|
|
||||||
screenModel.togglePreference(ReaderPreferences::cropBordersContinuousVertical)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
// SY <--
|
// SY <--
|
||||||
|
@ -14,8 +14,6 @@ import eu.kanade.tachiyomi.network.NetworkPreferences
|
|||||||
import eu.kanade.tachiyomi.network.PREF_DOH_CLOUDFLARE
|
import eu.kanade.tachiyomi.network.PREF_DOH_CLOUDFLARE
|
||||||
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
|
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
|
||||||
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
|
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
|
||||||
import eu.kanade.tachiyomi.util.preference.minusAssign
|
|
||||||
import eu.kanade.tachiyomi.util.preference.plusAssign
|
|
||||||
import eu.kanade.tachiyomi.util.system.DeviceUtil
|
import eu.kanade.tachiyomi.util.system.DeviceUtil
|
||||||
import eu.kanade.tachiyomi.util.system.isReleaseBuildType
|
import eu.kanade.tachiyomi.util.system.isReleaseBuildType
|
||||||
import eu.kanade.tachiyomi.util.system.toast
|
import eu.kanade.tachiyomi.util.system.toast
|
||||||
@ -23,6 +21,8 @@ import eu.kanade.tachiyomi.util.system.workManager
|
|||||||
import tachiyomi.core.preference.PreferenceStore
|
import tachiyomi.core.preference.PreferenceStore
|
||||||
import tachiyomi.core.preference.TriState
|
import tachiyomi.core.preference.TriState
|
||||||
import tachiyomi.core.preference.getEnum
|
import tachiyomi.core.preference.getEnum
|
||||||
|
import tachiyomi.core.preference.minusAssign
|
||||||
|
import tachiyomi.core.preference.plusAssign
|
||||||
import tachiyomi.domain.backup.service.BackupPreferences
|
import tachiyomi.domain.backup.service.BackupPreferences
|
||||||
import tachiyomi.domain.library.service.LibraryPreferences
|
import tachiyomi.domain.library.service.LibraryPreferences
|
||||||
import tachiyomi.domain.library.service.LibraryPreferences.Companion.MANGA_NON_COMPLETED
|
import tachiyomi.domain.library.service.LibraryPreferences.Companion.MANGA_NON_COMPLETED
|
||||||
|
@ -12,7 +12,6 @@ import eu.kanade.tachiyomi.extension.model.LoadResult
|
|||||||
import eu.kanade.tachiyomi.extension.util.ExtensionInstallReceiver
|
import eu.kanade.tachiyomi.extension.util.ExtensionInstallReceiver
|
||||||
import eu.kanade.tachiyomi.extension.util.ExtensionInstaller
|
import eu.kanade.tachiyomi.extension.util.ExtensionInstaller
|
||||||
import eu.kanade.tachiyomi.extension.util.ExtensionLoader
|
import eu.kanade.tachiyomi.extension.util.ExtensionLoader
|
||||||
import eu.kanade.tachiyomi.util.preference.plusAssign
|
|
||||||
import eu.kanade.tachiyomi.util.system.toast
|
import eu.kanade.tachiyomi.util.system.toast
|
||||||
import exh.log.xLogD
|
import exh.log.xLogD
|
||||||
import exh.source.BlacklistedSources
|
import exh.source.BlacklistedSources
|
||||||
@ -30,6 +29,7 @@ import kotlinx.coroutines.flow.emptyFlow
|
|||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
import kotlinx.coroutines.flow.stateIn
|
import kotlinx.coroutines.flow.stateIn
|
||||||
import logcat.LogPriority
|
import logcat.LogPriority
|
||||||
|
import tachiyomi.core.preference.plusAssign
|
||||||
import tachiyomi.core.util.lang.launchNow
|
import tachiyomi.core.util.lang.launchNow
|
||||||
import tachiyomi.core.util.lang.withUIContext
|
import tachiyomi.core.util.lang.withUIContext
|
||||||
import tachiyomi.core.util.system.logcat
|
import tachiyomi.core.util.system.logcat
|
||||||
|
@ -7,11 +7,11 @@ import cafe.adriel.voyager.core.model.StateScreenModel
|
|||||||
import cafe.adriel.voyager.core.model.coroutineScope
|
import cafe.adriel.voyager.core.model.coroutineScope
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.core.security.SecurityPreferences
|
import eu.kanade.tachiyomi.core.security.SecurityPreferences
|
||||||
import eu.kanade.tachiyomi.util.preference.plusAssign
|
|
||||||
import kotlinx.coroutines.channels.Channel
|
import kotlinx.coroutines.channels.Channel
|
||||||
import kotlinx.coroutines.flow.collectLatest
|
import kotlinx.coroutines.flow.collectLatest
|
||||||
import kotlinx.coroutines.flow.receiveAsFlow
|
import kotlinx.coroutines.flow.receiveAsFlow
|
||||||
import kotlinx.coroutines.flow.update
|
import kotlinx.coroutines.flow.update
|
||||||
|
import tachiyomi.core.preference.plusAssign
|
||||||
import tachiyomi.core.util.lang.launchIO
|
import tachiyomi.core.util.lang.launchIO
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
|
@ -6,7 +6,6 @@ import cafe.adriel.voyager.core.model.coroutineScope
|
|||||||
import eu.kanade.core.preference.asState
|
import eu.kanade.core.preference.asState
|
||||||
import eu.kanade.domain.base.BasePreferences
|
import eu.kanade.domain.base.BasePreferences
|
||||||
import eu.kanade.tachiyomi.data.track.TrackManager
|
import eu.kanade.tachiyomi.data.track.TrackManager
|
||||||
import eu.kanade.tachiyomi.util.preference.toggle
|
|
||||||
import tachiyomi.core.preference.Preference
|
import tachiyomi.core.preference.Preference
|
||||||
import tachiyomi.core.preference.TriState
|
import tachiyomi.core.preference.TriState
|
||||||
import tachiyomi.core.preference.getAndSet
|
import tachiyomi.core.preference.getAndSet
|
||||||
@ -35,10 +34,6 @@ class LibrarySettingsScreenModel(
|
|||||||
val grouping by libraryPreferences.groupLibraryBy().asState(coroutineScope)
|
val grouping by libraryPreferences.groupLibraryBy().asState(coroutineScope)
|
||||||
|
|
||||||
// SY <--
|
// SY <--
|
||||||
fun togglePreference(preference: (LibraryPreferences) -> Preference<Boolean>) {
|
|
||||||
preference(libraryPreferences).toggle()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun toggleFilter(preference: (LibraryPreferences) -> Preference<TriState>) {
|
fun toggleFilter(preference: (LibraryPreferences) -> Preference<TriState>) {
|
||||||
preference(libraryPreferences).getAndSet {
|
preference(libraryPreferences).getAndSet {
|
||||||
it.next()
|
it.next()
|
||||||
|
@ -60,7 +60,6 @@ import eu.kanade.presentation.more.settings.screen.ConfigureExhDialog
|
|||||||
import eu.kanade.presentation.more.settings.screen.about.WhatsNewDialog
|
import eu.kanade.presentation.more.settings.screen.about.WhatsNewDialog
|
||||||
import eu.kanade.presentation.util.AssistContentScreen
|
import eu.kanade.presentation.util.AssistContentScreen
|
||||||
import eu.kanade.presentation.util.DefaultNavigatorScreenTransition
|
import eu.kanade.presentation.util.DefaultNavigatorScreenTransition
|
||||||
import eu.kanade.presentation.util.collectAsState
|
|
||||||
import eu.kanade.tachiyomi.BuildConfig
|
import eu.kanade.tachiyomi.BuildConfig
|
||||||
import eu.kanade.tachiyomi.data.cache.ChapterCache
|
import eu.kanade.tachiyomi.data.cache.ChapterCache
|
||||||
import eu.kanade.tachiyomi.data.download.DownloadCache
|
import eu.kanade.tachiyomi.data.download.DownloadCache
|
||||||
@ -100,6 +99,7 @@ import tachiyomi.domain.UnsortedPreferences
|
|||||||
import tachiyomi.domain.library.service.LibraryPreferences
|
import tachiyomi.domain.library.service.LibraryPreferences
|
||||||
import tachiyomi.domain.release.interactor.GetApplicationRelease
|
import tachiyomi.domain.release.interactor.GetApplicationRelease
|
||||||
import tachiyomi.presentation.core.components.material.Scaffold
|
import tachiyomi.presentation.core.components.material.Scaffold
|
||||||
|
import tachiyomi.presentation.core.util.collectAsState
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
|
@ -92,7 +92,6 @@ import eu.kanade.tachiyomi.ui.reader.viewer.pager.R2LPagerViewer
|
|||||||
import eu.kanade.tachiyomi.ui.reader.viewer.pager.VerticalPagerViewer
|
import eu.kanade.tachiyomi.ui.reader.viewer.pager.VerticalPagerViewer
|
||||||
import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonViewer
|
import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonViewer
|
||||||
import eu.kanade.tachiyomi.ui.webview.WebViewActivity
|
import eu.kanade.tachiyomi.ui.webview.WebViewActivity
|
||||||
import eu.kanade.tachiyomi.util.preference.toggle
|
|
||||||
import eu.kanade.tachiyomi.util.system.applySystemAnimatorScale
|
import eu.kanade.tachiyomi.util.system.applySystemAnimatorScale
|
||||||
import eu.kanade.tachiyomi.util.system.hasDisplayCutout
|
import eu.kanade.tachiyomi.util.system.hasDisplayCutout
|
||||||
import eu.kanade.tachiyomi.util.system.isLTR
|
import eu.kanade.tachiyomi.util.system.isLTR
|
||||||
@ -126,6 +125,7 @@ import kotlinx.coroutines.flow.sample
|
|||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import logcat.LogPriority
|
import logcat.LogPriority
|
||||||
import tachiyomi.core.Constants
|
import tachiyomi.core.Constants
|
||||||
|
import tachiyomi.core.preference.toggle
|
||||||
import tachiyomi.core.util.lang.launchIO
|
import tachiyomi.core.util.lang.launchIO
|
||||||
import tachiyomi.core.util.lang.launchNonCancellable
|
import tachiyomi.core.util.lang.launchNonCancellable
|
||||||
import tachiyomi.core.util.lang.withUIContext
|
import tachiyomi.core.util.lang.withUIContext
|
||||||
|
@ -66,9 +66,7 @@ internal class HttpPageLoader(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.filter { it.status == Page.State.QUEUE }
|
.filter { it.status == Page.State.QUEUE }
|
||||||
.collect {
|
.collect(::internalLoadPage)
|
||||||
_loadPage(it)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// EXH -->
|
// EXH -->
|
||||||
}
|
}
|
||||||
@ -109,32 +107,30 @@ internal class HttpPageLoader(
|
|||||||
/**
|
/**
|
||||||
* Loads a page through the queue. Handles re-enqueueing pages if they were evicted from the cache.
|
* Loads a page through the queue. Handles re-enqueueing pages if they were evicted from the cache.
|
||||||
*/
|
*/
|
||||||
override suspend fun loadPage(page: ReaderPage) {
|
override suspend fun loadPage(page: ReaderPage) = withIOContext {
|
||||||
withIOContext {
|
val imageUrl = page.imageUrl
|
||||||
val imageUrl = page.imageUrl
|
|
||||||
|
|
||||||
// Check if the image has been deleted
|
// Check if the image has been deleted
|
||||||
if (page.status == Page.State.READY && imageUrl != null && !chapterCache.isImageInCache(imageUrl)) {
|
if (page.status == Page.State.READY && imageUrl != null && !chapterCache.isImageInCache(imageUrl)) {
|
||||||
page.status = Page.State.QUEUE
|
page.status = Page.State.QUEUE
|
||||||
}
|
}
|
||||||
|
|
||||||
// Automatically retry failed pages when subscribed to this page
|
// Automatically retry failed pages when subscribed to this page
|
||||||
if (page.status == Page.State.ERROR) {
|
if (page.status == Page.State.ERROR) {
|
||||||
page.status = Page.State.QUEUE
|
page.status = Page.State.QUEUE
|
||||||
}
|
}
|
||||||
|
|
||||||
val queuedPages = mutableListOf<PriorityPage>()
|
val queuedPages = mutableListOf<PriorityPage>()
|
||||||
if (page.status == Page.State.QUEUE) {
|
if (page.status == Page.State.QUEUE) {
|
||||||
queuedPages += PriorityPage(page, 1).also { queue.offer(it) }
|
queuedPages += PriorityPage(page, 1).also { queue.offer(it) }
|
||||||
}
|
}
|
||||||
queuedPages += preloadNextPages(page, preloadSize)
|
queuedPages += preloadNextPages(page, preloadSize)
|
||||||
|
|
||||||
suspendCancellableCoroutine<Nothing> { continuation ->
|
suspendCancellableCoroutine<Nothing> { continuation ->
|
||||||
continuation.invokeOnCancellation {
|
continuation.invokeOnCancellation {
|
||||||
queuedPages.forEach {
|
queuedPages.forEach {
|
||||||
if (it.page.status == Page.State.QUEUE) {
|
if (it.page.status == Page.State.QUEUE) {
|
||||||
queue.remove(it)
|
queue.remove(it)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -169,8 +165,7 @@ internal class HttpPageLoader(
|
|||||||
queue.clear()
|
queue.clear()
|
||||||
|
|
||||||
// Cache current page list progress for online chapters to allow a faster reopen
|
// Cache current page list progress for online chapters to allow a faster reopen
|
||||||
val pages = chapter.pages
|
chapter.pages?.let { pages ->
|
||||||
if (pages != null) {
|
|
||||||
launchIO {
|
launchIO {
|
||||||
try {
|
try {
|
||||||
// Convert to pages without reader information
|
// Convert to pages without reader information
|
||||||
@ -212,7 +207,7 @@ internal class HttpPageLoader(
|
|||||||
*
|
*
|
||||||
* @param page the page whose source image has to be downloaded.
|
* @param page the page whose source image has to be downloaded.
|
||||||
*/
|
*/
|
||||||
private suspend fun _loadPage(page: ReaderPage) {
|
private suspend fun internalLoadPage(page: ReaderPage) {
|
||||||
try {
|
try {
|
||||||
if (page.imageUrl.isNullOrEmpty()) {
|
if (page.imageUrl.isNullOrEmpty()) {
|
||||||
page.status = Page.State.LOAD_PAGE
|
page.status = Page.State.LOAD_PAGE
|
||||||
|
@ -3,13 +3,11 @@ package eu.kanade.tachiyomi.ui.reader.setting
|
|||||||
import cafe.adriel.voyager.core.model.ScreenModel
|
import cafe.adriel.voyager.core.model.ScreenModel
|
||||||
import eu.kanade.presentation.util.ioCoroutineScope
|
import eu.kanade.presentation.util.ioCoroutineScope
|
||||||
import eu.kanade.tachiyomi.ui.reader.ReaderViewModel
|
import eu.kanade.tachiyomi.ui.reader.ReaderViewModel
|
||||||
import eu.kanade.tachiyomi.util.preference.toggle
|
|
||||||
import kotlinx.coroutines.flow.SharingStarted
|
import kotlinx.coroutines.flow.SharingStarted
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
import kotlinx.coroutines.flow.stateIn
|
import kotlinx.coroutines.flow.stateIn
|
||||||
import tachiyomi.core.preference.Preference
|
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
|
|
||||||
@ -29,8 +27,4 @@ class ReaderSettingsScreenModel(
|
|||||||
.map { it.manga }
|
.map { it.manga }
|
||||||
.distinctUntilChanged()
|
.distinctUntilChanged()
|
||||||
.stateIn(ioCoroutineScope, SharingStarted.Lazily, null)
|
.stateIn(ioCoroutineScope, SharingStarted.Lazily, null)
|
||||||
|
|
||||||
fun togglePreference(preference: (ReaderPreferences) -> Preference<Boolean>) {
|
|
||||||
preference(preferences).toggle()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,16 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.util.preference
|
|
||||||
|
|
||||||
import tachiyomi.core.preference.Preference
|
|
||||||
|
|
||||||
operator fun <T> Preference<Set<T>>.plusAssign(item: T) {
|
|
||||||
set(get() + item)
|
|
||||||
}
|
|
||||||
|
|
||||||
operator fun <T> Preference<Set<T>>.minusAssign(item: T) {
|
|
||||||
set(get() - item)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun Preference<Boolean>.toggle(): Boolean {
|
|
||||||
set(!get())
|
|
||||||
return get()
|
|
||||||
}
|
|
@ -18,7 +18,6 @@ import eu.kanade.tachiyomi.source.Source
|
|||||||
import eu.kanade.tachiyomi.source.online.all.NHentai
|
import eu.kanade.tachiyomi.source.online.all.NHentai
|
||||||
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
|
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
|
||||||
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
|
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
|
||||||
import eu.kanade.tachiyomi.util.preference.minusAssign
|
|
||||||
import eu.kanade.tachiyomi.util.system.DeviceUtil
|
import eu.kanade.tachiyomi.util.system.DeviceUtil
|
||||||
import eu.kanade.tachiyomi.util.system.isReleaseBuildType
|
import eu.kanade.tachiyomi.util.system.isReleaseBuildType
|
||||||
import eu.kanade.tachiyomi.util.system.workManager
|
import eu.kanade.tachiyomi.util.system.workManager
|
||||||
@ -43,6 +42,7 @@ import kotlinx.serialization.json.jsonPrimitive
|
|||||||
import tachiyomi.core.preference.PreferenceStore
|
import tachiyomi.core.preference.PreferenceStore
|
||||||
import tachiyomi.core.preference.TriState
|
import tachiyomi.core.preference.TriState
|
||||||
import tachiyomi.core.preference.getEnum
|
import tachiyomi.core.preference.getEnum
|
||||||
|
import tachiyomi.core.preference.minusAssign
|
||||||
import tachiyomi.core.util.system.logcat
|
import tachiyomi.core.util.system.logcat
|
||||||
import tachiyomi.data.DatabaseHandler
|
import tachiyomi.data.DatabaseHandler
|
||||||
import tachiyomi.data.category.categoryMapper
|
import tachiyomi.data.category.categoryMapper
|
||||||
|
@ -24,3 +24,16 @@ interface Preference<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline fun <reified T, R : T> Preference<T>.getAndSet(crossinline block: (T) -> R) = set(block(get()))
|
inline fun <reified T, R : T> Preference<T>.getAndSet(crossinline block: (T) -> R) = set(block(get()))
|
||||||
|
|
||||||
|
operator fun <T> Preference<Set<T>>.plusAssign(item: T) {
|
||||||
|
set(get() + item)
|
||||||
|
}
|
||||||
|
|
||||||
|
operator fun <T> Preference<Set<T>>.minusAssign(item: T) {
|
||||||
|
set(get() - item)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Preference<Boolean>.toggle(): Boolean {
|
||||||
|
set(!get())
|
||||||
|
return get()
|
||||||
|
}
|
||||||
|
@ -40,8 +40,11 @@ import androidx.compose.ui.graphics.painter.Painter
|
|||||||
import androidx.compose.ui.graphics.vector.ImageVector
|
import androidx.compose.ui.graphics.vector.ImageVector
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
|
import tachiyomi.core.preference.Preference
|
||||||
import tachiyomi.core.preference.TriState
|
import tachiyomi.core.preference.TriState
|
||||||
|
import tachiyomi.core.preference.toggle
|
||||||
import tachiyomi.presentation.core.theme.header
|
import tachiyomi.presentation.core.theme.header
|
||||||
|
import tachiyomi.presentation.core.util.collectAsState
|
||||||
|
|
||||||
object SettingsItemsPaddings {
|
object SettingsItemsPaddings {
|
||||||
val Horizontal = 24.dp
|
val Horizontal = 24.dp
|
||||||
@ -119,6 +122,19 @@ fun SortItem(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun CheckboxItem(
|
||||||
|
label: String,
|
||||||
|
pref: Preference<Boolean>,
|
||||||
|
) {
|
||||||
|
val checked by pref.collectAsState()
|
||||||
|
CheckboxItem(
|
||||||
|
label = label,
|
||||||
|
checked = checked,
|
||||||
|
onClick = { pref.toggle() },
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun CheckboxItem(
|
fun CheckboxItem(
|
||||||
label: String,
|
label: String,
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.presentation.util
|
package tachiyomi.presentation.core.util
|
||||||
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.State
|
import androidx.compose.runtime.State
|
Loading…
x
Reference in New Issue
Block a user