From 935b6576d007c3c44f6a297eea0de8a63f215dd9 Mon Sep 17 00:00:00 2001 From: arkon Date: Sat, 18 Feb 2023 19:00:19 -0500 Subject: [PATCH] Minor settings sheet cleanup (cherry picked from commit 07fdb74fbc9ae2afa67e427bb4a94860c7a2d8e6) # Conflicts: # app/src/main/java/eu/kanade/domain/library/service/LibraryPreferences.kt # app/src/main/java/eu/kanade/presentation/manga/ChapterSettingsDialog.kt # app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsSheet.kt --- .../library/service/LibraryPreferences.kt | 14 +- .../manga/ChapterSettingsDialog.kt | 149 +++++++++--------- .../java/eu/kanade/tachiyomi/Migrations.kt | 4 +- .../ui/library/LibraryScreenModel.kt | 32 ++-- .../ui/library/LibrarySettingsSheet.kt | 10 +- .../widget/ExtendedNavigationView.kt | 12 +- .../library/model/LibraryDisplayMode.kt | 4 +- .../domain/library/model/LibrarySort.kt | 7 +- 8 files changed, 115 insertions(+), 117 deletions(-) diff --git a/app/src/main/java/eu/kanade/domain/library/service/LibraryPreferences.kt b/app/src/main/java/eu/kanade/domain/library/service/LibraryPreferences.kt index 3d9052ee5..38e8e1f0c 100644 --- a/app/src/main/java/eu/kanade/domain/library/service/LibraryPreferences.kt +++ b/app/src/main/java/eu/kanade/domain/library/service/LibraryPreferences.kt @@ -39,21 +39,21 @@ class LibraryPreferences( // region Filter - fun filterDownloaded() = preferenceStore.getInt("pref_filter_library_downloaded", ExtendedNavigationView.Item.TriStateGroup.State.IGNORE.value) + fun filterDownloaded() = preferenceStore.getInt("pref_filter_library_downloaded", ExtendedNavigationView.Item.TriStateGroup.State.DISABLED.value) - fun filterUnread() = preferenceStore.getInt("pref_filter_library_unread", ExtendedNavigationView.Item.TriStateGroup.State.IGNORE.value) + fun filterUnread() = preferenceStore.getInt("pref_filter_library_unread", ExtendedNavigationView.Item.TriStateGroup.State.DISABLED.value) - fun filterStarted() = preferenceStore.getInt("pref_filter_library_started", ExtendedNavigationView.Item.TriStateGroup.State.IGNORE.value) + fun filterStarted() = preferenceStore.getInt("pref_filter_library_started", ExtendedNavigationView.Item.TriStateGroup.State.DISABLED.value) - fun filterBookmarked() = preferenceStore.getInt("pref_filter_library_bookmarked", ExtendedNavigationView.Item.TriStateGroup.State.IGNORE.value) + fun filterBookmarked() = preferenceStore.getInt("pref_filter_library_bookmarked", ExtendedNavigationView.Item.TriStateGroup.State.DISABLED.value) - fun filterCompleted() = preferenceStore.getInt("pref_filter_library_completed", ExtendedNavigationView.Item.TriStateGroup.State.IGNORE.value) + fun filterCompleted() = preferenceStore.getInt("pref_filter_library_completed", ExtendedNavigationView.Item.TriStateGroup.State.DISABLED.value) // SY --> - fun filterLewd() = preferenceStore.getInt("pref_filter_library_lewd", ExtendedNavigationView.Item.TriStateGroup.State.IGNORE.value) + fun filterLewd() = preferenceStore.getInt("pref_filter_library_lewd", ExtendedNavigationView.Item.TriStateGroup.State.DISABLED.value) // SY <-- - fun filterTracking(name: Int) = preferenceStore.getInt("pref_filter_library_tracked_$name", ExtendedNavigationView.Item.TriStateGroup.State.IGNORE.value) + fun filterTracking(name: Int) = preferenceStore.getInt("pref_filter_library_tracked_$name", ExtendedNavigationView.Item.TriStateGroup.State.DISABLED.value) // endregion diff --git a/app/src/main/java/eu/kanade/presentation/manga/ChapterSettingsDialog.kt b/app/src/main/java/eu/kanade/presentation/manga/ChapterSettingsDialog.kt index 9aa0d8eec..709d6de38 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/ChapterSettingsDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/ChapterSettingsDialog.kt @@ -3,6 +3,7 @@ package eu.kanade.presentation.manga import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding @@ -113,56 +114,7 @@ fun ChapterSettingsDialog( } @Composable -private fun SetAsDefaultDialog( - onDismissRequest: () -> Unit, - onConfirmed: (optionalChecked: Boolean) -> Unit, -) { - var optionalChecked by rememberSaveable { mutableStateOf(false) } - AlertDialog( - onDismissRequest = onDismissRequest, - title = { Text(text = stringResource(R.string.chapter_settings)) }, - text = { - Column( - verticalArrangement = Arrangement.spacedBy(12.dp), - ) { - Text(text = stringResource(R.string.confirm_set_chapter_settings)) - - Row( - modifier = Modifier - .clickable { optionalChecked = !optionalChecked } - .padding(vertical = 8.dp) - .fillMaxWidth(), - horizontalArrangement = Arrangement.spacedBy(12.dp), - verticalAlignment = Alignment.CenterVertically, - ) { - Checkbox( - checked = optionalChecked, - onCheckedChange = null, - ) - Text(text = stringResource(R.string.also_set_chapter_settings_for_library)) - } - } - }, - dismissButton = { - TextButton(onClick = onDismissRequest) { - Text(text = stringResource(android.R.string.cancel)) - } - }, - confirmButton = { - TextButton( - onClick = { - onConfirmed(optionalChecked) - onDismissRequest() - }, - ) { - Text(text = stringResource(android.R.string.ok)) - } - }, - ) -} - -@Composable -private fun FilterPage( +private fun ColumnScope.FilterPage( downloadFilter: TriStateFilter, onDownloadFilterChanged: ((TriStateFilter) -> Unit)?, unreadFilter: TriStateFilter, @@ -223,41 +175,86 @@ private fun SetScanlatorsItem( // SY <-- @Composable -private fun SortPage( +private fun ColumnScope.SortPage( sortingMode: Long, sortDescending: Boolean, onItemSelected: (Long) -> Unit, ) { - SortItem( - label = stringResource(R.string.sort_by_source), - sortDescending = sortDescending.takeIf { sortingMode == Manga.CHAPTER_SORTING_SOURCE }, - onClick = { onItemSelected(Manga.CHAPTER_SORTING_SOURCE) }, - ) - SortItem( - label = stringResource(R.string.sort_by_number), - sortDescending = sortDescending.takeIf { sortingMode == Manga.CHAPTER_SORTING_NUMBER }, - onClick = { onItemSelected(Manga.CHAPTER_SORTING_NUMBER) }, - ) - SortItem( - label = stringResource(R.string.sort_by_upload_date), - sortDescending = sortDescending.takeIf { sortingMode == Manga.CHAPTER_SORTING_UPLOAD_DATE }, - onClick = { onItemSelected(Manga.CHAPTER_SORTING_UPLOAD_DATE) }, - ) + listOf( + R.string.sort_by_source to Manga.CHAPTER_SORTING_SOURCE, + R.string.sort_by_number to Manga.CHAPTER_SORTING_NUMBER, + R.string.sort_by_upload_date to Manga.CHAPTER_SORTING_UPLOAD_DATE, + ).map { (titleRes, mode) -> + SortItem( + label = stringResource(titleRes), + sortDescending = sortDescending.takeIf { sortingMode == mode }, + onClick = { onItemSelected(mode) }, + ) + } } @Composable -private fun DisplayPage( +private fun ColumnScope.DisplayPage( displayMode: Long, onItemSelected: (Long) -> Unit, ) { - RadioItem( - label = stringResource(R.string.show_title), - selected = displayMode == Manga.CHAPTER_DISPLAY_NAME, - onClick = { onItemSelected(Manga.CHAPTER_DISPLAY_NAME) }, - ) - RadioItem( - label = stringResource(R.string.show_chapter_number), - selected = displayMode == Manga.CHAPTER_DISPLAY_NUMBER, - onClick = { onItemSelected(Manga.CHAPTER_DISPLAY_NUMBER) }, + listOf( + R.string.show_title to Manga.CHAPTER_DISPLAY_NAME, + R.string.show_chapter_number to Manga.CHAPTER_DISPLAY_NUMBER, + ).map { (titleRes, mode) -> + RadioItem( + label = stringResource(titleRes), + selected = displayMode == mode, + onClick = { onItemSelected(mode) }, + ) + } +} + +@Composable +private fun SetAsDefaultDialog( + onDismissRequest: () -> Unit, + onConfirmed: (optionalChecked: Boolean) -> Unit, +) { + var optionalChecked by rememberSaveable { mutableStateOf(false) } + AlertDialog( + onDismissRequest = onDismissRequest, + title = { Text(text = stringResource(R.string.chapter_settings)) }, + text = { + Column( + verticalArrangement = Arrangement.spacedBy(12.dp), + ) { + Text(text = stringResource(R.string.confirm_set_chapter_settings)) + + Row( + modifier = Modifier + .clickable { optionalChecked = !optionalChecked } + .padding(vertical = 8.dp) + .fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(12.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + Checkbox( + checked = optionalChecked, + onCheckedChange = null, + ) + Text(text = stringResource(R.string.also_set_chapter_settings_for_library)) + } + } + }, + dismissButton = { + TextButton(onClick = onDismissRequest) { + Text(text = stringResource(android.R.string.cancel)) + } + }, + confirmButton = { + TextButton( + onClick = { + onConfirmed(optionalChecked) + onDismissRequest() + }, + ) { + Text(text = stringResource(android.R.string.ok)) + } + }, ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt b/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt index 016fa3f21..7f028fb9c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt @@ -116,9 +116,9 @@ object Migrations { fun convertBooleanPrefToTriState(key: String): Int { val oldPrefValue = prefs.getBoolean(key, false) return if (oldPrefValue) { - ExtendedNavigationView.Item.TriStateGroup.State.INCLUDE.value + ExtendedNavigationView.Item.TriStateGroup.State.ENABLED_IS.value } else { - ExtendedNavigationView.Item.TriStateGroup.State.IGNORE.value + ExtendedNavigationView.Item.TriStateGroup.State.DISABLED.value } } prefs.edit { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt index 3c1d55580..541fbd733 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt @@ -229,8 +229,8 @@ class LibraryScreenModel( prefs.filterStarted or prefs.filterBookmarked or prefs.filterCompleted - ) != TriStateGroup.State.IGNORE.value - val b = trackFilter.values.any { it != TriStateGroup.State.IGNORE.value } + ) != TriStateGroup.State.DISABLED.value + val b = trackFilter.values.any { it != TriStateGroup.State.DISABLED.value } a || b } .distinctUntilChanged() @@ -282,8 +282,8 @@ class LibraryScreenModel( val isNotLoggedInAnyTrack = loggedInTrackServices.isEmpty() - val excludedTracks = loggedInTrackServices.mapNotNull { if (it.value == TriStateGroup.State.EXCLUDE.value) it.key else null } - val includedTracks = loggedInTrackServices.mapNotNull { if (it.value == TriStateGroup.State.INCLUDE.value) it.key else null } + val excludedTracks = loggedInTrackServices.mapNotNull { if (it.value == TriStateGroup.State.ENABLED_NOT.value) it.key else null } + val includedTracks = loggedInTrackServices.mapNotNull { if (it.value == TriStateGroup.State.ENABLED_IS.value) it.key else null } val trackFiltersIsIgnored = includedTracks.isEmpty() && excludedTracks.isEmpty() // SY --> @@ -291,12 +291,12 @@ class LibraryScreenModel( // SY <-- val filterFnDownloaded: (LibraryItem) -> Boolean = downloaded@{ - if (!downloadedOnly && filterDownloaded == TriStateGroup.State.IGNORE.value) return@downloaded true + if (!downloadedOnly && filterDownloaded == TriStateGroup.State.DISABLED.value) return@downloaded true val isDownloaded = it.libraryManga.manga.isLocal() || it.downloadCount > 0 || downloadManager.getDownloadCount(it.libraryManga.manga) > 0 - return@downloaded if (downloadedOnly || filterDownloaded == TriStateGroup.State.INCLUDE.value) { + return@downloaded if (downloadedOnly || filterDownloaded == TriStateGroup.State.ENABLED_IS.value) { isDownloaded } else { !isDownloaded @@ -304,10 +304,10 @@ class LibraryScreenModel( } val filterFnUnread: (LibraryItem) -> Boolean = unread@{ - if (filterUnread == TriStateGroup.State.IGNORE.value) return@unread true + if (filterUnread == TriStateGroup.State.DISABLED.value) return@unread true val isUnread = it.libraryManga.unreadCount > 0 - return@unread if (filterUnread == TriStateGroup.State.INCLUDE.value) { + return@unread if (filterUnread == TriStateGroup.State.ENABLED_IS.value) { isUnread } else { !isUnread @@ -315,10 +315,10 @@ class LibraryScreenModel( } val filterFnStarted: (LibraryItem) -> Boolean = started@{ - if (filterStarted == TriStateGroup.State.IGNORE.value) return@started true + if (filterStarted == TriStateGroup.State.DISABLED.value) return@started true val hasStarted = it.libraryManga.hasStarted - return@started if (filterStarted == TriStateGroup.State.INCLUDE.value) { + return@started if (filterStarted == TriStateGroup.State.ENABLED_IS.value) { hasStarted } else { !hasStarted @@ -326,10 +326,10 @@ class LibraryScreenModel( } val filterFnBookmarked: (LibraryItem) -> Boolean = bookmarked@{ - if (filterBookmarked == TriStateGroup.State.IGNORE.value) return@bookmarked true + if (filterBookmarked == TriStateGroup.State.DISABLED.value) return@bookmarked true val hasBookmarks = it.libraryManga.hasBookmarks - return@bookmarked if (filterBookmarked == TriStateGroup.State.INCLUDE.value) { + return@bookmarked if (filterBookmarked == TriStateGroup.State.ENABLED_IS.value) { hasBookmarks } else { !hasBookmarks @@ -337,10 +337,10 @@ class LibraryScreenModel( } val filterFnCompleted: (LibraryItem) -> Boolean = completed@{ - if (filterCompleted == TriStateGroup.State.IGNORE.value) return@completed true + if (filterCompleted == TriStateGroup.State.DISABLED.value) return@completed true val isCompleted = it.libraryManga.manga.status.toInt() == SManga.COMPLETED - return@completed if (filterCompleted == TriStateGroup.State.INCLUDE.value) { + return@completed if (filterCompleted == TriStateGroup.State.ENABLED_IS.value) { isCompleted } else { !isCompleted @@ -369,10 +369,10 @@ class LibraryScreenModel( // SY --> val filterFnLewd: (LibraryItem) -> Boolean = lewd@{ - if (filterLewd == TriStateGroup.State.IGNORE.value) return@lewd true + if (filterLewd == TriStateGroup.State.DISABLED.value) return@lewd true val isLewd = it.libraryManga.manga.isLewd() - return@lewd if (filterLewd == TriStateGroup.State.INCLUDE.value) { + return@lewd if (filterLewd == TriStateGroup.State.ENABLED_IS.value) { isLewd } else { !isLewd diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsSheet.kt index b72df41e8..5414cd272 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsSheet.kt @@ -113,7 +113,7 @@ class LibrarySettingsSheet( * Returns true if there's at least one filter from [FilterGroup] active. */ fun hasActiveFilters(): Boolean { - return filterGroup.items.filterIsInstance().any { it.state != State.IGNORE.value } + return filterGroup.items.filterIsInstance().any { it.state != State.DISABLED.value } } inner class FilterGroup : Group { @@ -153,7 +153,7 @@ class LibrarySettingsSheet( override fun initModels() { if (preferences.downloadedOnly().get()) { - downloaded.state = State.INCLUDE.value + downloaded.state = State.ENABLED_IS.value downloaded.enabled = false } else { downloaded.state = libraryPreferences.filterDownloaded().get() @@ -176,9 +176,9 @@ class LibrarySettingsSheet( override fun onItemClicked(item: Item) { item as Item.TriStateGroup val newState = when (item.state) { - State.IGNORE.value -> State.INCLUDE.value - State.INCLUDE.value -> State.EXCLUDE.value - State.EXCLUDE.value -> State.IGNORE.value + State.DISABLED.value -> State.ENABLED_IS.value + State.ENABLED_IS.value -> State.ENABLED_NOT.value + State.ENABLED_NOT.value -> State.DISABLED.value else -> throw Exception("Unknown State") } item.state = newState diff --git a/app/src/main/java/eu/kanade/tachiyomi/widget/ExtendedNavigationView.kt b/app/src/main/java/eu/kanade/tachiyomi/widget/ExtendedNavigationView.kt index 69a6b83f2..8ca3a1021 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/widget/ExtendedNavigationView.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/widget/ExtendedNavigationView.kt @@ -133,16 +133,16 @@ open class ExtendedNavigationView @JvmOverloads constructor( class TriStateGroup(resId: Int, group: Group) : MultiStateGroup(resId, group) { enum class State(val value: Int) { - IGNORE(0), - INCLUDE(1), - EXCLUDE(2), + DISABLED(0), + ENABLED_IS(1), + ENABLED_NOT(2), } override fun getStateDrawable(context: Context): Drawable? { return when (state) { - State.IGNORE.value -> tintVector(context, R.drawable.ic_check_box_outline_blank_24dp, R.attr.colorControlNormal) - State.INCLUDE.value -> tintVector(context, R.drawable.ic_check_box_24dp) - State.EXCLUDE.value -> tintVector(context, R.drawable.ic_check_box_x_24dp) + State.DISABLED.value -> tintVector(context, R.drawable.ic_check_box_outline_blank_24dp, R.attr.colorControlNormal) + State.ENABLED_IS.value -> tintVector(context, R.drawable.ic_check_box_24dp) + State.ENABLED_NOT.value -> tintVector(context, R.drawable.ic_check_box_x_24dp) else -> throw Exception("Unknown state") } } diff --git a/domain/src/main/java/tachiyomi/domain/library/model/LibraryDisplayMode.kt b/domain/src/main/java/tachiyomi/domain/library/model/LibraryDisplayMode.kt index 236d00235..9cefa81c9 100644 --- a/domain/src/main/java/tachiyomi/domain/library/model/LibraryDisplayMode.kt +++ b/domain/src/main/java/tachiyomi/domain/library/model/LibraryDisplayMode.kt @@ -55,5 +55,5 @@ sealed class LibraryDisplayMode( } } -val Category.display: LibraryDisplayMode - get() = LibraryDisplayMode.valueOf(flags) +val Category?.display: LibraryDisplayMode + get() = LibraryDisplayMode.valueOf(this?.flags) diff --git a/domain/src/main/java/tachiyomi/domain/library/model/LibrarySort.kt b/domain/src/main/java/tachiyomi/domain/library/model/LibrarySort.kt index 52f412bcb..be6ade594 100644 --- a/domain/src/main/java/tachiyomi/domain/library/model/LibrarySort.kt +++ b/domain/src/main/java/tachiyomi/domain/library/model/LibrarySort.kt @@ -73,7 +73,8 @@ data class LibrarySort( val directions = setOf(Direction.Ascending, Direction.Descending) val default = LibrarySort(Type.Alphabetical, Direction.Ascending) - fun valueOf(flag: Long): LibrarySort { + fun valueOf(flag: Long?): LibrarySort { + if (flag == null) return default return LibrarySort( Type.valueOf(flag), Direction.valueOf(flag), @@ -123,5 +124,5 @@ data class LibrarySort( } } -val Category.sort: LibrarySort - get() = LibrarySort.valueOf(flags) +val Category?.sort: LibrarySort + get() = LibrarySort.valueOf(this?.flags)