From eefcb4ef90e3be98625e463b348bea2c6a0ab34a Mon Sep 17 00:00:00 2001 From: Acclorite <2ma0bhpk@anonaddy.com> Date: Thu, 5 Jun 2025 22:40:27 +0300 Subject: [PATCH] refactor(ui): refactor ui layer --- .../book_story/core/crash/CrashHandler.kt | 2 +- .../book_story/core/data/CoreData.kt | 33 ++++ .../book_story/core/data/ExtensionsData.kt | 28 ++++ .../book_story/core/data/LinkData.kt | 15 ++ .../helpers/CollectionHelpers.kt} | 2 +- .../helpers/PrimitiveHelpers.kt} | 13 +- .../book_story/core/helpers/SortHelpers.kt | 18 ++ .../book_story/core/{ => log}/Log.kt | 2 +- .../book_story/data/parser/DocumentParser.kt | 6 +- .../book_story/data/parser/MarkdownParser.kt | 2 +- .../data/parser/epub/EpubTextParser.kt | 8 +- .../data/parser/pdf/PdfTextParser.kt | 2 +- .../data/parser/txt/TxtTextParser.kt | 2 +- .../repository/FileSystemRepositoryImpl.kt | 11 +- .../book_story/domain/model/library/Book.kt | 18 +- .../domain/model/reader/ColorPreset.kt | 12 +- .../domain/use_case/book/AddBookUseCase.kt | 6 +- .../book/CanResetCoverImageUseCase.kt | 4 +- .../domain/use_case/book/DeleteBookUseCase.kt | 6 +- .../domain/use_case/book/GetBookUseCase.kt | 4 +- .../domain/use_case/book/GetTextUseCase.kt | 4 +- .../use_case/book/ResetCoverImageUseCase.kt | 6 +- .../use_case/book/SearchBooksUseCase.kt | 4 +- .../domain/use_case/book/UpdateBookUseCase.kt | 4 +- .../use_case/book/UpdateCoverImageUseCase.kt | 6 +- .../use_case/category/AddCategoryUseCase.kt | 4 +- .../category/DeleteCategoryUseCase.kt | 2 +- .../use_case/category/GetCategoriesUseCase.kt | 4 +- .../category/GetCategorySortingUseCase.kt | 4 +- .../category/UpdateCategoriesOrderUseCase.kt | 2 +- .../category/UpdateCategorySortingUseCase.kt | 4 +- .../category/UpdateCategoryUseCase.kt | 2 +- .../color_preset/DeleteColorPresetUseCase.kt | 4 +- .../color_preset/GetColorPresetsUseCase.kt | 4 +- .../ReorderColorPresetsUseCase.kt | 4 +- .../color_preset/SelectColorPresetUseCase.kt | 4 +- .../color_preset/UpdateColorPresetUseCase.kt | 4 +- .../ChangeLanguagePreferenceUseCase.kt | 8 +- .../data_store/GetPreferencesUseCase.kt | 6 +- .../data_store/PutPreferenceUseCase.kt | 4 +- .../file_system/GetBookFromFileUseCase.kt | 4 +- .../file_system/SearchFilesUseCase.kt | 4 +- .../use_case/history/AddHistoryUseCase.kt | 4 +- .../use_case/history/DeleteHistoryUseCase.kt | 4 +- .../history/DeleteWholeHistoryUseCase.kt | 4 +- .../history/GetHistoryForBookUseCase.kt | 4 +- .../use_case/history/GetHistoryUseCase.kt | 4 +- .../GrantPersistableUriPermissionUseCase.kt | 4 +- .../ReleasePersistableUriPermissionUseCase.kt | 4 +- .../presentation/about/AboutModel.kt | 4 +- .../presentation/book_info/BookInfoModel.kt | 2 +- .../presentation/book_info/BookInfoState.kt | 3 +- .../presentation/browse/BrowseModel.kt | 4 +- .../presentation/crash/CrashScreen.kt | 6 +- .../presentation/history/HistoryModel.kt | 2 +- .../presentation/library/LibraryModel.kt | 2 +- .../book_story/presentation/main/MainModel.kt | 151 +++++++++-------- .../book_story/presentation/main/MainState.kt | 15 +- .../main/data/DataStoreData.kt} | 4 +- .../presentation/reader/ReaderModel.kt | 8 +- .../presentation/reader/ReaderScreen.kt | 10 +- .../presentation/reader/ReaderState.kt | 3 +- .../presentation/settings/SettingsModel.kt | 9 +- .../presentation/settings/SettingsState.kt | 3 +- .../presentation/start/StartScreen.kt | 6 +- .../book_story/ui/about/AboutBadges.kt | 6 +- .../book_story/ui/about/AboutLayout.kt | 16 +- .../book_story/ui/about/data/AboutData.kt | 51 ++++++ .../book_info/BookInfoDetailsBottomSheet.kt | 4 +- .../book_story/ui/book_info/BookInfoLayout.kt | 4 +- .../ui/book_info/BookInfoLayoutButton.kt | 2 +- .../ui/book_info/BookInfoLayoutDescription.kt | 2 +- .../ui/book_info/BookInfoLayoutInfoAuthor.kt | 2 +- .../ui/book_info/BookInfoLayoutInfoCover.kt | 2 +- .../book_info/BookInfoLayoutInfoProgress.kt | 2 +- .../ui/book_info/BookInfoLayoutInfoTitle.kt | 2 +- .../book_story/ui/browse/BrowseAddDialog.kt | 2 +- .../book_story/ui/browse/BrowseGridLayout.kt | 4 +- .../ui/browse/BrowseLayoutHeader.kt | 2 +- .../book_story/ui/browse/BrowseListLayout.kt | 4 +- .../common/LazyColumnWithScrollbar.kt | 4 +- .../common/LazyVerticalGridWithScrollbar.kt | 4 +- .../components/modal_drawer/ModalDrawer.kt | 6 +- .../common/constants/AboutBadgeConstants.kt | 48 ------ .../ui/common/constants/CommonConstants.kt | 41 ----- .../ui/common/constants/CreditConstants.kt | 98 ----------- .../ui/common/constants/HelpTipConstants.kt | 152 ----------------- .../ui/common/constants/LanguageConstants.kt | 29 ---- .../ui/common/constants/LinkConstants.kt | 24 --- .../ui/common/constants/ScrollbarConstants.kt | 38 ----- .../constants/SupportedExtensionConstants.kt | 24 --- .../ui/common/data/ScrollbarData.kt | 51 ++++++ .../LifecycleHelpers.kt} | 2 +- .../ModifierHelpers.kt} | 2 +- .../ToastHelpers.kt} | 2 +- .../book_story/ui/credits/CreditsLayout.kt | 4 +- .../book_story/ui/credits/data/CreditData.kt | 101 ++++++++++++ .../acclorite/book_story/ui/help/HelpItem.kt | 2 +- .../book_story/ui/help/HelpLayout.kt | 6 +- .../book_story/ui/help/data/HelpData.kt | 155 ++++++++++++++++++ .../book_story/ui/history/HistoryItem.kt | 2 +- .../book_story/ui/history/HistoryLayout.kt | 6 +- .../ui/library/LibraryBackHandler.kt | 4 +- .../book_story/ui/library/LibraryGridItem.kt | 2 +- .../ui/library/LibraryGridLayout.kt | 4 +- .../book_story/ui/library/LibraryListItem.kt | 2 +- .../ui/library/LibraryListLayout.kt | 4 +- .../book_story/ui/library/LibraryPager.kt | 2 +- .../book_story/ui/navigator/Navigator.kt | 2 +- .../book_story/ui/navigator/NavigatorTabs.kt | 2 +- .../book_story/ui/reader/ReaderBackHandler.kt | 2 +- .../book_story/ui/reader/ReaderBottomBar.kt | 2 +- .../ui/reader/ReaderChaptersDrawer.kt | 4 +- .../ui/reader/ReaderErrorPlaceholder.kt | 2 +- .../book_story/ui/reader/ReaderLayout.kt | 6 +- .../ui/reader/ReaderLayoutTextParagraph.kt | 2 +- .../ui/reader/ReaderSettingsBottomSheet.kt | 2 +- .../book_story/ui/reader/ReaderTopBar.kt | 4 +- .../data/ReaderData.kt} | 7 +- .../filter/components/BrowseFilterOption.kt | 4 +- .../scan/components/BrowseScanOption.kt | 4 +- .../general/components/AppLanguageOption.kt | 4 +- .../components/LibraryCategoriesOption.kt | 2 +- .../font/components/FontFamilyOption.kt | 6 +- .../reader/font/components/FontStyleOption.kt | 4 +- .../font/components/FontThicknessOption.kt | 4 +- .../book_story/ui/theme/ThemeLogger.kt | 2 +- 127 files changed, 773 insertions(+), 762 deletions(-) create mode 100644 app/src/main/java/ua/acclorite/book_story/core/data/CoreData.kt create mode 100644 app/src/main/java/ua/acclorite/book_story/core/data/ExtensionsData.kt create mode 100644 app/src/main/java/ua/acclorite/book_story/core/data/LinkData.kt rename app/src/main/java/ua/acclorite/book_story/{ui/common/util/CollectionExtensions.kt => core/helpers/CollectionHelpers.kt} (83%) rename app/src/main/java/ua/acclorite/book_story/{ui/common/util/PrimitiveExtensions.kt => core/helpers/PrimitiveHelpers.kt} (87%) create mode 100644 app/src/main/java/ua/acclorite/book_story/core/helpers/SortHelpers.kt rename app/src/main/java/ua/acclorite/book_story/core/{ => log}/Log.kt (91%) rename app/src/main/java/ua/acclorite/book_story/{ui/common/constants/DataStoreConstants.kt => presentation/main/data/DataStoreData.kt} (98%) create mode 100644 app/src/main/java/ua/acclorite/book_story/ui/about/data/AboutData.kt delete mode 100644 app/src/main/java/ua/acclorite/book_story/ui/common/constants/AboutBadgeConstants.kt delete mode 100644 app/src/main/java/ua/acclorite/book_story/ui/common/constants/CommonConstants.kt delete mode 100644 app/src/main/java/ua/acclorite/book_story/ui/common/constants/CreditConstants.kt delete mode 100644 app/src/main/java/ua/acclorite/book_story/ui/common/constants/HelpTipConstants.kt delete mode 100644 app/src/main/java/ua/acclorite/book_story/ui/common/constants/LanguageConstants.kt delete mode 100644 app/src/main/java/ua/acclorite/book_story/ui/common/constants/LinkConstants.kt delete mode 100644 app/src/main/java/ua/acclorite/book_story/ui/common/constants/ScrollbarConstants.kt delete mode 100644 app/src/main/java/ua/acclorite/book_story/ui/common/constants/SupportedExtensionConstants.kt create mode 100644 app/src/main/java/ua/acclorite/book_story/ui/common/data/ScrollbarData.kt rename app/src/main/java/ua/acclorite/book_story/ui/common/{util/LifecycleExtensions.kt => helpers/LifecycleHelpers.kt} (96%) rename app/src/main/java/ua/acclorite/book_story/ui/common/{util/ModifierExtensions.kt => helpers/ModifierHelpers.kt} (92%) rename app/src/main/java/ua/acclorite/book_story/ui/common/{util/ToastExtensions.kt => helpers/ToastHelpers.kt} (90%) create mode 100644 app/src/main/java/ua/acclorite/book_story/ui/credits/data/CreditData.kt create mode 100644 app/src/main/java/ua/acclorite/book_story/ui/help/data/HelpData.kt rename app/src/main/java/ua/acclorite/book_story/ui/{common/constants/FontConstants.kt => reader/data/ReaderData.kt} (97%) diff --git a/app/src/main/java/ua/acclorite/book_story/core/crash/CrashHandler.kt b/app/src/main/java/ua/acclorite/book_story/core/crash/CrashHandler.kt index ebfb4963..94258c11 100644 --- a/app/src/main/java/ua/acclorite/book_story/core/crash/CrashHandler.kt +++ b/app/src/main/java/ua/acclorite/book_story/core/crash/CrashHandler.kt @@ -9,7 +9,7 @@ package ua.acclorite.book_story.core.crash import android.content.Context import android.content.Intent import android.os.Process -import ua.acclorite.book_story.core.logE +import ua.acclorite.book_story.core.log.logE import ua.acclorite.book_story.presentation.crash.CrashActivity import kotlin.system.exitProcess diff --git a/app/src/main/java/ua/acclorite/book_story/core/data/CoreData.kt b/app/src/main/java/ua/acclorite/book_story/core/data/CoreData.kt new file mode 100644 index 00000000..d2d28808 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/core/data/CoreData.kt @@ -0,0 +1,33 @@ +/* + * Book's Story — free and open-source Material You eBook reader. + * Copyright (C) 2024-2025 Acclorite + * SPDX-License-Identifier: GPL-3.0-only + */ + +package ua.acclorite.book_story.core.data + +import kotlinx.collections.immutable.persistentListOf + +object CoreData { + val languages = persistentListOf( + Pair("en", "English"), + Pair("uk", "Українська"), + Pair("de", "Deutsch"), + Pair("ar", "اَلْعَرَبِيَّةُ"), + Pair("es", "Español"), + Pair("tr", "Türkçe"), + Pair("fr", "Français"), + Pair("pl", "Polski"), + Pair("it", "Italiano"), + Pair("zh", "汉语"), + Pair("hi", "हिन्दी"), + // Currently as "pt" (which is Portuguese) instead of "pt-BR" + Pair("pt", "Português (Brasil)"), + Pair("ta", "தமிழ்"), + Pair("ml", "മലയാളം"), + Pair("cs", "Čeština"), + Pair("ro", "Română"), + Pair("be", "Беларуская"), + Pair("ja", "日本語") + ) +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/core/data/ExtensionsData.kt b/app/src/main/java/ua/acclorite/book_story/core/data/ExtensionsData.kt new file mode 100644 index 00000000..0998b93c --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/core/data/ExtensionsData.kt @@ -0,0 +1,28 @@ +/* + * Book's Story — free and open-source Material You eBook reader. + * Copyright (C) 2024-2025 Acclorite + * SPDX-License-Identifier: GPL-3.0-only + */ + +package ua.acclorite.book_story.core.data + +import kotlinx.collections.immutable.persistentListOf + +object ExtensionsData { + val fileExtensions = persistentListOf( + ".epub", + ".pdf", + ".fb2", + ".txt", + ".html", + ".htm", + ".md" + ) + + val imageExtensions = persistentListOf( + ".png", + ".jpg", + ".jpeg", + ".gif" + ) +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/core/data/LinkData.kt b/app/src/main/java/ua/acclorite/book_story/core/data/LinkData.kt new file mode 100644 index 00000000..7b15ddcb --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/core/data/LinkData.kt @@ -0,0 +1,15 @@ +/* + * Book's Story — free and open-source Material You eBook reader. + * Copyright (C) 2024-2025 Acclorite + * SPDX-License-Identifier: GPL-3.0-only + */ + +package ua.acclorite.book_story.core.data + +object LinkData { + const val RELEASES = "https://www.github.com/Acclorite/book-story/releases/latest" + const val ISSUES = "https://www.github.com/Acclorite/book-story/issues" + const val CONTRIBUTORS = "https://github.com/Acclorite/book-story/graphs/contributors" + const val TRANSLATION = "https://hosted.weblate.org/projects/book-story" + const val SUPPORT = "https://patreon.com/Acclorite" +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/common/util/CollectionExtensions.kt b/app/src/main/java/ua/acclorite/book_story/core/helpers/CollectionHelpers.kt similarity index 83% rename from app/src/main/java/ua/acclorite/book_story/ui/common/util/CollectionExtensions.kt rename to app/src/main/java/ua/acclorite/book_story/core/helpers/CollectionHelpers.kt index 81887970..248c1720 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/common/util/CollectionExtensions.kt +++ b/app/src/main/java/ua/acclorite/book_story/core/helpers/CollectionHelpers.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.common.util +package ua.acclorite.book_story.core.helpers fun MutableList.addAll(calculation: () -> List) { addAll(calculation()) diff --git a/app/src/main/java/ua/acclorite/book_story/ui/common/util/PrimitiveExtensions.kt b/app/src/main/java/ua/acclorite/book_story/core/helpers/PrimitiveHelpers.kt similarity index 87% rename from app/src/main/java/ua/acclorite/book_story/ui/common/util/PrimitiveExtensions.kt rename to app/src/main/java/ua/acclorite/book_story/core/helpers/PrimitiveHelpers.kt index a1623622..bab1abf0 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/common/util/PrimitiveExtensions.kt +++ b/app/src/main/java/ua/acclorite/book_story/core/helpers/PrimitiveHelpers.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.common.util +package ua.acclorite.book_story.core.helpers fun String.removeTrailingZero(): String { if (!this.contains('.')) @@ -65,15 +65,4 @@ fun Char.isVisibleCharacter(): Boolean { else -> false } -} - -fun compareByWithOrder( - descending: Boolean, - selector: (T) -> Comparable<*>? -): Comparator { - return if (descending) { - compareByDescending(selector) - } else { - compareBy(selector) - } } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/core/helpers/SortHelpers.kt b/app/src/main/java/ua/acclorite/book_story/core/helpers/SortHelpers.kt new file mode 100644 index 00000000..80f97c32 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/core/helpers/SortHelpers.kt @@ -0,0 +1,18 @@ +/* + * Book's Story — free and open-source Material You eBook reader. + * Copyright (C) 2024-2025 Acclorite + * SPDX-License-Identifier: GPL-3.0-only + */ + +package ua.acclorite.book_story.core.helpers + +fun compareByWithOrder( + descending: Boolean, + selector: (T) -> Comparable<*>? +): Comparator { + return if (descending) { + compareByDescending(selector) + } else { + compareBy(selector) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/core/Log.kt b/app/src/main/java/ua/acclorite/book_story/core/log/Log.kt similarity index 91% rename from app/src/main/java/ua/acclorite/book_story/core/Log.kt rename to app/src/main/java/ua/acclorite/book_story/core/log/Log.kt index ac43efd1..b934bf5f 100644 --- a/app/src/main/java/ua/acclorite/book_story/core/Log.kt +++ b/app/src/main/java/ua/acclorite/book_story/core/log/Log.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.core +package ua.acclorite.book_story.core.log import android.util.Log diff --git a/app/src/main/java/ua/acclorite/book_story/data/parser/DocumentParser.kt b/app/src/main/java/ua/acclorite/book_story/data/parser/DocumentParser.kt index ef5cb8d5..32f42095 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/parser/DocumentParser.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/parser/DocumentParser.kt @@ -11,10 +11,10 @@ import android.graphics.BitmapFactory import androidx.compose.ui.graphics.asImageBitmap import kotlinx.coroutines.yield import org.jsoup.nodes.Document +import ua.acclorite.book_story.core.helpers.clearAllMarkdown +import ua.acclorite.book_story.core.helpers.clearMarkdown +import ua.acclorite.book_story.core.helpers.containsVisibleText import ua.acclorite.book_story.domain.model.reader.ReaderText -import ua.acclorite.book_story.ui.common.util.clearAllMarkdown -import ua.acclorite.book_story.ui.common.util.clearMarkdown -import ua.acclorite.book_story.ui.common.util.containsVisibleText import java.io.File import java.util.zip.ZipEntry import java.util.zip.ZipFile diff --git a/app/src/main/java/ua/acclorite/book_story/data/parser/MarkdownParser.kt b/app/src/main/java/ua/acclorite/book_story/data/parser/MarkdownParser.kt index a03098c1..47394f0a 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/parser/MarkdownParser.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/parser/MarkdownParser.kt @@ -23,7 +23,7 @@ import org.commonmark.node.Node import org.commonmark.node.StrongEmphasis import org.commonmark.node.Text import org.commonmark.parser.Parser -import ua.acclorite.book_story.ui.common.util.clearMarkdown +import ua.acclorite.book_story.core.helpers.clearMarkdown import javax.inject.Inject class MarkdownParser @Inject constructor( diff --git a/app/src/main/java/ua/acclorite/book_story/data/parser/epub/EpubTextParser.kt b/app/src/main/java/ua/acclorite/book_story/data/parser/epub/EpubTextParser.kt index 8e589653..8f41dd18 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/parser/epub/EpubTextParser.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/parser/epub/EpubTextParser.kt @@ -17,13 +17,13 @@ import kotlinx.coroutines.awaitAll import kotlinx.coroutines.withContext import kotlinx.coroutines.yield import org.jsoup.Jsoup +import ua.acclorite.book_story.core.data.ExtensionsData +import ua.acclorite.book_story.core.helpers.addAll +import ua.acclorite.book_story.core.helpers.containsVisibleText import ua.acclorite.book_story.data.model.file.CachedFile import ua.acclorite.book_story.data.parser.DocumentParser import ua.acclorite.book_story.data.parser.TextParser import ua.acclorite.book_story.domain.model.reader.ReaderText -import ua.acclorite.book_story.ui.common.constants.provideImageExtensions -import ua.acclorite.book_story.ui.common.util.addAll -import ua.acclorite.book_story.ui.common.util.containsVisibleText import java.io.File import java.util.concurrent.ConcurrentLinkedQueue import java.util.zip.ZipEntry @@ -60,7 +60,7 @@ class EpubTextParser @Inject constructor( val chapterEntries = zip.getChapterEntries(opfEntry) val imageEntries = zip.entries().toList().filter { - provideImageExtensions().any { format -> + ExtensionsData.imageExtensions.any { format -> it.name.endsWith(format, ignoreCase = true) } } diff --git a/app/src/main/java/ua/acclorite/book_story/data/parser/pdf/PdfTextParser.kt b/app/src/main/java/ua/acclorite/book_story/data/parser/pdf/PdfTextParser.kt index 46c10a2c..f5919651 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/parser/pdf/PdfTextParser.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/parser/pdf/PdfTextParser.kt @@ -12,11 +12,11 @@ import com.tom_roush.pdfbox.android.PDFBoxResourceLoader import com.tom_roush.pdfbox.pdmodel.PDDocument import com.tom_roush.pdfbox.text.PDFTextStripper import kotlinx.coroutines.yield +import ua.acclorite.book_story.core.helpers.clearAllMarkdown import ua.acclorite.book_story.data.model.file.CachedFile import ua.acclorite.book_story.data.parser.MarkdownParser import ua.acclorite.book_story.data.parser.TextParser import ua.acclorite.book_story.domain.model.reader.ReaderText -import ua.acclorite.book_story.ui.common.util.clearAllMarkdown import javax.inject.Inject private const val PDF_TAG = "PDF Parser" diff --git a/app/src/main/java/ua/acclorite/book_story/data/parser/txt/TxtTextParser.kt b/app/src/main/java/ua/acclorite/book_story/data/parser/txt/TxtTextParser.kt index 57277004..8606d554 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/parser/txt/TxtTextParser.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/parser/txt/TxtTextParser.kt @@ -10,11 +10,11 @@ import android.util.Log import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import kotlinx.coroutines.yield +import ua.acclorite.book_story.core.helpers.clearAllMarkdown import ua.acclorite.book_story.data.model.file.CachedFile import ua.acclorite.book_story.data.parser.MarkdownParser import ua.acclorite.book_story.data.parser.TextParser import ua.acclorite.book_story.domain.model.reader.ReaderText -import ua.acclorite.book_story.ui.common.util.clearAllMarkdown import javax.inject.Inject private const val TXT_TAG = "TXT Parser" diff --git a/app/src/main/java/ua/acclorite/book_story/data/repository/FileSystemRepositoryImpl.kt b/app/src/main/java/ua/acclorite/book_story/data/repository/FileSystemRepositoryImpl.kt index 7670606b..ab17b50f 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/repository/FileSystemRepositoryImpl.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/repository/FileSystemRepositoryImpl.kt @@ -6,6 +6,7 @@ package ua.acclorite.book_story.data.repository +import ua.acclorite.book_story.core.data.ExtensionsData import ua.acclorite.book_story.data.local.room.BookDao import ua.acclorite.book_story.data.mapper.file.FileMapper import ua.acclorite.book_story.data.model.file.CachedFile @@ -14,7 +15,6 @@ import ua.acclorite.book_story.data.parser.FileParser import ua.acclorite.book_story.domain.model.file.File import ua.acclorite.book_story.domain.repository.FileSystemRepository import ua.acclorite.book_story.domain.service.FileProvider -import ua.acclorite.book_story.ui.common.constants.provideExtensions import javax.inject.Inject import javax.inject.Singleton @@ -47,7 +47,14 @@ class FileSystemRepositoryImpl @Inject constructor( query: String, existingFiles: List ): Boolean { - if (provideExtensions().none { name.endsWith(it, ignoreCase = true) }) return false + if ( + ExtensionsData.fileExtensions.none { + name.endsWith( + it, + ignoreCase = true + ) + } + ) return false if (query.isNotBlank() && !name.contains(query.trim(), ignoreCase = true)) return false if (existingFiles.any { it.equals(path, ignoreCase = true) }) return false return true diff --git a/app/src/main/java/ua/acclorite/book_story/domain/model/library/Book.kt b/app/src/main/java/ua/acclorite/book_story/domain/model/library/Book.kt index 83b6e2b9..0334618d 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/model/library/Book.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/model/library/Book.kt @@ -30,4 +30,20 @@ data class Book( val lastOpened: Long?, val categories: List -) : Parcelable \ No newline at end of file +) : Parcelable { + companion object { + val default = Book( + id = -1, + title = "", + author = UIText.StringValue(""), + description = null, + filePath = "", + coverImage = null, + scrollIndex = 0, + scrollOffset = 0, + progress = 0f, + lastOpened = null, + categories = emptyList() + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/model/reader/ColorPreset.kt b/app/src/main/java/ua/acclorite/book_story/domain/model/reader/ColorPreset.kt index d7d89074..48c3773f 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/model/reader/ColorPreset.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/model/reader/ColorPreset.kt @@ -17,4 +17,14 @@ data class ColorPreset( val backgroundColor: Color, val fontColor: Color, val isSelected: Selected -) \ No newline at end of file +) { + companion object { + val default = ColorPreset( + id = -1, + name = null, + backgroundColor = Color(0xFFFAF8FF), // Blue Light Surface (hardcoded) + fontColor = Color(0xFF44464F), // Blue Light OnSurfaceVariant (hardcoded) + isSelected = false + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/AddBookUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/AddBookUseCase.kt index a97ddeab..5e72915c 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/AddBookUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/AddBookUseCase.kt @@ -8,9 +8,9 @@ package ua.acclorite.book_story.domain.use_case.book import androidx.core.net.toUri import ua.acclorite.book_story.core.CoverImage -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI -import ua.acclorite.book_story.core.logW +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI +import ua.acclorite.book_story.core.log.logW import ua.acclorite.book_story.domain.model.library.Book import ua.acclorite.book_story.domain.repository.BookRepository import ua.acclorite.book_story.domain.service.CoverImageHandler diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/CanResetCoverImageUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/CanResetCoverImageUseCase.kt index 1d2469fc..d2c2ac80 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/CanResetCoverImageUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/CanResetCoverImageUseCase.kt @@ -8,8 +8,8 @@ package ua.acclorite.book_story.domain.use_case.book import android.app.Application import android.graphics.BitmapFactory -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.repository.BookRepository import ua.acclorite.book_story.domain.service.CoverImageHandler import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/DeleteBookUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/DeleteBookUseCase.kt index 88b49296..6641f7d2 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/DeleteBookUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/DeleteBookUseCase.kt @@ -6,9 +6,9 @@ package ua.acclorite.book_story.domain.use_case.book -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI -import ua.acclorite.book_story.core.logW +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI +import ua.acclorite.book_story.core.log.logW import ua.acclorite.book_story.domain.model.library.Book import ua.acclorite.book_story.domain.repository.BookRepository import ua.acclorite.book_story.domain.repository.HistoryRepository diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/GetBookUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/GetBookUseCase.kt index 74e1dc1d..1bad210f 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/GetBookUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/GetBookUseCase.kt @@ -6,8 +6,8 @@ package ua.acclorite.book_story.domain.use_case.book -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.model.library.Book import ua.acclorite.book_story.domain.repository.BookRepository import ua.acclorite.book_story.domain.repository.HistoryRepository diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/GetTextUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/GetTextUseCase.kt index 54ccaa73..0a30eb3f 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/GetTextUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/GetTextUseCase.kt @@ -6,8 +6,8 @@ package ua.acclorite.book_story.domain.use_case.book -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.model.reader.ReaderText import ua.acclorite.book_story.domain.repository.BookRepository import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/ResetCoverImageUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/ResetCoverImageUseCase.kt index 77fe0af6..969b163a 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/ResetCoverImageUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/ResetCoverImageUseCase.kt @@ -7,9 +7,9 @@ package ua.acclorite.book_story.domain.use_case.book import androidx.core.net.toUri -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI -import ua.acclorite.book_story.core.logW +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI +import ua.acclorite.book_story.core.log.logW import ua.acclorite.book_story.domain.repository.BookRepository import ua.acclorite.book_story.domain.service.CoverImageHandler import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/SearchBooksUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/SearchBooksUseCase.kt index 3dfcdbe8..2de2e9dc 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/SearchBooksUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/SearchBooksUseCase.kt @@ -6,8 +6,8 @@ package ua.acclorite.book_story.domain.use_case.book -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.model.library.Book import ua.acclorite.book_story.domain.repository.BookRepository import ua.acclorite.book_story.domain.repository.HistoryRepository diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/UpdateBookUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/UpdateBookUseCase.kt index 970eb883..b0641afd 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/UpdateBookUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/UpdateBookUseCase.kt @@ -6,8 +6,8 @@ package ua.acclorite.book_story.domain.use_case.book -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.model.library.Book import ua.acclorite.book_story.domain.repository.BookRepository import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/UpdateCoverImageUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/UpdateCoverImageUseCase.kt index 7a0c4680..9edfcfea 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/UpdateCoverImageUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/UpdateCoverImageUseCase.kt @@ -8,9 +8,9 @@ package ua.acclorite.book_story.domain.use_case.book import androidx.core.net.toUri import ua.acclorite.book_story.core.CoverImage -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI -import ua.acclorite.book_story.core.logW +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI +import ua.acclorite.book_story.core.log.logW import ua.acclorite.book_story.domain.repository.BookRepository import ua.acclorite.book_story.domain.service.CoverImageHandler import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/AddCategoryUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/AddCategoryUseCase.kt index 4226e377..f0c0d26e 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/AddCategoryUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/AddCategoryUseCase.kt @@ -6,8 +6,8 @@ package ua.acclorite.book_story.domain.use_case.category -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.model.library.Category import ua.acclorite.book_story.domain.repository.CategoryRepository import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/DeleteCategoryUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/DeleteCategoryUseCase.kt index 13f66047..6cf7ac19 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/DeleteCategoryUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/DeleteCategoryUseCase.kt @@ -6,7 +6,7 @@ package ua.acclorite.book_story.domain.use_case.category -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.model.library.Category import ua.acclorite.book_story.domain.repository.CategoryRepository import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/GetCategoriesUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/GetCategoriesUseCase.kt index 274e7c84..00484ab5 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/GetCategoriesUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/GetCategoriesUseCase.kt @@ -6,8 +6,8 @@ package ua.acclorite.book_story.domain.use_case.category -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.model.library.Category import ua.acclorite.book_story.domain.repository.CategoryRepository import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/GetCategorySortingUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/GetCategorySortingUseCase.kt index 03889afd..1b7c203f 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/GetCategorySortingUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/GetCategorySortingUseCase.kt @@ -6,8 +6,8 @@ package ua.acclorite.book_story.domain.use_case.category -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.model.library.CategorySort import ua.acclorite.book_story.domain.repository.CategoryRepository import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/UpdateCategoriesOrderUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/UpdateCategoriesOrderUseCase.kt index e81f8800..51b456a3 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/UpdateCategoriesOrderUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/UpdateCategoriesOrderUseCase.kt @@ -6,7 +6,7 @@ package ua.acclorite.book_story.domain.use_case.category -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.model.library.Category import ua.acclorite.book_story.domain.repository.CategoryRepository import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/UpdateCategorySortingUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/UpdateCategorySortingUseCase.kt index 439bcf5e..d2b5b8f2 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/UpdateCategorySortingUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/UpdateCategorySortingUseCase.kt @@ -6,8 +6,8 @@ package ua.acclorite.book_story.domain.use_case.category -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.model.library.CategorySort import ua.acclorite.book_story.domain.repository.CategoryRepository import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/UpdateCategoryUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/UpdateCategoryUseCase.kt index 0f2ced1a..a4271859 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/UpdateCategoryUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/UpdateCategoryUseCase.kt @@ -6,7 +6,7 @@ package ua.acclorite.book_story.domain.use_case.category -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.model.library.Category import ua.acclorite.book_story.domain.repository.CategoryRepository import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/DeleteColorPresetUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/DeleteColorPresetUseCase.kt index ff9a9d85..86edf74b 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/DeleteColorPresetUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/DeleteColorPresetUseCase.kt @@ -6,8 +6,8 @@ package ua.acclorite.book_story.domain.use_case.color_preset -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.model.reader.ColorPreset import ua.acclorite.book_story.domain.repository.ColorPresetRepository import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/GetColorPresetsUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/GetColorPresetsUseCase.kt index 601ab326..e10f8bc2 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/GetColorPresetsUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/GetColorPresetsUseCase.kt @@ -6,8 +6,8 @@ package ua.acclorite.book_story.domain.use_case.color_preset -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.model.reader.ColorPreset import ua.acclorite.book_story.domain.repository.ColorPresetRepository import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/ReorderColorPresetsUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/ReorderColorPresetsUseCase.kt index d7d97c53..639ea337 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/ReorderColorPresetsUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/ReorderColorPresetsUseCase.kt @@ -6,8 +6,8 @@ package ua.acclorite.book_story.domain.use_case.color_preset -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.model.reader.ColorPreset import ua.acclorite.book_story.domain.repository.ColorPresetRepository import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/SelectColorPresetUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/SelectColorPresetUseCase.kt index c62a8f18..8d511cf4 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/SelectColorPresetUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/SelectColorPresetUseCase.kt @@ -6,8 +6,8 @@ package ua.acclorite.book_story.domain.use_case.color_preset -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.model.reader.ColorPreset import ua.acclorite.book_story.domain.repository.ColorPresetRepository import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/UpdateColorPresetUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/UpdateColorPresetUseCase.kt index 12987857..e2ed9cca 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/UpdateColorPresetUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/UpdateColorPresetUseCase.kt @@ -6,8 +6,8 @@ package ua.acclorite.book_story.domain.use_case.color_preset -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.model.reader.ColorPreset import ua.acclorite.book_story.domain.repository.ColorPresetRepository import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/data_store/ChangeLanguagePreferenceUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/data_store/ChangeLanguagePreferenceUseCase.kt index 2b9e88ea..2b39c8b9 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/data_store/ChangeLanguagePreferenceUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/data_store/ChangeLanguagePreferenceUseCase.kt @@ -8,10 +8,10 @@ package ua.acclorite.book_story.domain.use_case.data_store import androidx.appcompat.app.AppCompatDelegate import androidx.core.os.LocaleListCompat -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.repository.DataStoreRepository -import ua.acclorite.book_story.ui.common.constants.DataStoreConstants +import ua.acclorite.book_story.presentation.main.data.DataStoreData import javax.inject.Inject class ChangeLanguagePreferenceUseCase @Inject constructor( @@ -22,7 +22,7 @@ class ChangeLanguagePreferenceUseCase @Inject constructor( logI("Changing language preference.") dataStoreRepository.putPreference( - DataStoreConstants.LANGUAGE, + DataStoreData.LANGUAGE, language ).fold( onSuccess = { diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/data_store/GetPreferencesUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/data_store/GetPreferencesUseCase.kt index 418c6e4e..aea20ed2 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/data_store/GetPreferencesUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/data_store/GetPreferencesUseCase.kt @@ -10,9 +10,9 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.withContext -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI -import ua.acclorite.book_story.core.logW +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI +import ua.acclorite.book_story.core.log.logW import ua.acclorite.book_story.domain.repository.DataStoreRepository import ua.acclorite.book_story.presentation.main.MainState import java.util.concurrent.ConcurrentHashMap diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/data_store/PutPreferenceUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/data_store/PutPreferenceUseCase.kt index 0fd17bf8..60083212 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/data_store/PutPreferenceUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/data_store/PutPreferenceUseCase.kt @@ -7,8 +7,8 @@ package ua.acclorite.book_story.domain.use_case.data_store import androidx.datastore.preferences.core.Preferences -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.repository.DataStoreRepository import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/file_system/GetBookFromFileUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/file_system/GetBookFromFileUseCase.kt index f3471423..97f75e40 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/file_system/GetBookFromFileUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/file_system/GetBookFromFileUseCase.kt @@ -7,8 +7,8 @@ package ua.acclorite.book_story.domain.use_case.file_system import ua.acclorite.book_story.R -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.core.ui.UIText import ua.acclorite.book_story.data.model.common.NullableBook import ua.acclorite.book_story.data.model.common.NullableBook.NotNull diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/file_system/SearchFilesUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/file_system/SearchFilesUseCase.kt index 86500e3f..f0181647 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/file_system/SearchFilesUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/file_system/SearchFilesUseCase.kt @@ -6,8 +6,8 @@ package ua.acclorite.book_story.domain.use_case.file_system -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.model.file.File import ua.acclorite.book_story.domain.repository.FileSystemRepository import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/AddHistoryUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/AddHistoryUseCase.kt index fa27a8ba..a1f7ac27 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/AddHistoryUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/AddHistoryUseCase.kt @@ -6,8 +6,8 @@ package ua.acclorite.book_story.domain.use_case.history -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.model.history.History import ua.acclorite.book_story.domain.repository.HistoryRepository import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/DeleteHistoryUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/DeleteHistoryUseCase.kt index 95b87178..d0c2661d 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/DeleteHistoryUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/DeleteHistoryUseCase.kt @@ -6,8 +6,8 @@ package ua.acclorite.book_story.domain.use_case.history -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.model.history.History import ua.acclorite.book_story.domain.repository.HistoryRepository import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/DeleteWholeHistoryUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/DeleteWholeHistoryUseCase.kt index 78df36aa..14c99b51 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/DeleteWholeHistoryUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/DeleteWholeHistoryUseCase.kt @@ -6,8 +6,8 @@ package ua.acclorite.book_story.domain.use_case.history -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.repository.HistoryRepository import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/GetHistoryForBookUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/GetHistoryForBookUseCase.kt index 597af272..e4653180 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/GetHistoryForBookUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/GetHistoryForBookUseCase.kt @@ -6,8 +6,8 @@ package ua.acclorite.book_story.domain.use_case.history -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.model.history.History import ua.acclorite.book_story.domain.repository.HistoryRepository import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/GetHistoryUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/GetHistoryUseCase.kt index 890eba60..52a8f344 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/GetHistoryUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/GetHistoryUseCase.kt @@ -6,8 +6,8 @@ package ua.acclorite.book_story.domain.use_case.history -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.model.history.History import ua.acclorite.book_story.domain.repository.HistoryRepository import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/permission/GrantPersistableUriPermissionUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/permission/GrantPersistableUriPermissionUseCase.kt index 06cbc534..f1558e72 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/permission/GrantPersistableUriPermissionUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/permission/GrantPersistableUriPermissionUseCase.kt @@ -6,8 +6,8 @@ package ua.acclorite.book_story.domain.use_case.permission -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.repository.PermissionRepository import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/permission/ReleasePersistableUriPermissionUseCase.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/permission/ReleasePersistableUriPermissionUseCase.kt index 069d4238..2f9e6ece 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/permission/ReleasePersistableUriPermissionUseCase.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/permission/ReleasePersistableUriPermissionUseCase.kt @@ -6,8 +6,8 @@ package ua.acclorite.book_story.domain.use_case.permission -import ua.acclorite.book_story.core.logE -import ua.acclorite.book_story.core.logI +import ua.acclorite.book_story.core.log.logE +import ua.acclorite.book_story.core.log.logI import ua.acclorite.book_story.domain.repository.PermissionRepository import javax.inject.Inject diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutModel.kt b/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutModel.kt index 4284873b..22872e13 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutModel.kt @@ -16,8 +16,8 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import ua.acclorite.book_story.R -import ua.acclorite.book_story.ui.common.util.launchActivity -import ua.acclorite.book_story.ui.common.util.showToast +import ua.acclorite.book_story.ui.common.helpers.launchActivity +import ua.acclorite.book_story.ui.common.helpers.showToast import javax.inject.Inject @HiltViewModel diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoModel.kt b/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoModel.kt index d502f7b3..553054d8 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoModel.kt @@ -30,7 +30,7 @@ import ua.acclorite.book_story.domain.use_case.book.UpdateCoverImageUseCase import ua.acclorite.book_story.presentation.browse.BrowseScreen import ua.acclorite.book_story.presentation.history.HistoryScreen import ua.acclorite.book_story.presentation.library.LibraryScreen -import ua.acclorite.book_story.ui.common.util.showToast +import ua.acclorite.book_story.ui.common.helpers.showToast import javax.inject.Inject @HiltViewModel diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoState.kt b/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoState.kt index 23ab5541..7d1437fd 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoState.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoState.kt @@ -10,11 +10,10 @@ import androidx.compose.runtime.Immutable import ua.acclorite.book_story.core.BottomSheet import ua.acclorite.book_story.core.Dialog import ua.acclorite.book_story.domain.model.library.Book -import ua.acclorite.book_story.ui.common.constants.provideEmptyBook @Immutable data class BookInfoState( - val book: Book = provideEmptyBook(), + val book: Book = Book.default, val canResetCover: Boolean = false, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseModel.kt b/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseModel.kt index 736b2fa4..b51c9353 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseModel.kt @@ -23,6 +23,7 @@ import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext import kotlinx.coroutines.yield import ua.acclorite.book_story.R +import ua.acclorite.book_story.core.helpers.compareByWithOrder import ua.acclorite.book_story.data.model.common.NullableBook import ua.acclorite.book_story.domain.model.file.File import ua.acclorite.book_story.domain.use_case.book.AddBookUseCase @@ -32,8 +33,7 @@ import ua.acclorite.book_story.presentation.browse.model.BrowseSortOrder import ua.acclorite.book_story.presentation.browse.model.SelectableFile import ua.acclorite.book_story.presentation.library.LibraryScreen import ua.acclorite.book_story.presentation.library.model.SelectableNullableBook -import ua.acclorite.book_story.ui.common.util.compareByWithOrder -import ua.acclorite.book_story.ui.common.util.showToast +import ua.acclorite.book_story.ui.common.helpers.showToast import javax.inject.Inject @HiltViewModel diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/crash/CrashScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/crash/CrashScreen.kt index 2689af3c..905b120f 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/crash/CrashScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/crash/CrashScreen.kt @@ -21,9 +21,9 @@ import kotlinx.parcelize.Parcelize import ua.acclorite.book_story.R import ua.acclorite.book_story.core.crash.CrashUtils import ua.acclorite.book_story.presentation.navigator.Screen -import ua.acclorite.book_story.ui.common.util.LocalActivity -import ua.acclorite.book_story.ui.common.util.launchActivity -import ua.acclorite.book_story.ui.common.util.showToast +import ua.acclorite.book_story.ui.common.helpers.LocalActivity +import ua.acclorite.book_story.ui.common.helpers.launchActivity +import ua.acclorite.book_story.ui.common.helpers.showToast import ua.acclorite.book_story.ui.crash.CrashContent @Parcelize diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryModel.kt b/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryModel.kt index aa7c3ad3..31c1e502 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryModel.kt @@ -31,7 +31,7 @@ import ua.acclorite.book_story.domain.use_case.history.DeleteWholeHistoryUseCase import ua.acclorite.book_story.domain.use_case.history.GetHistoryUseCase import ua.acclorite.book_story.presentation.history.model.GroupedHistory import ua.acclorite.book_story.presentation.library.LibraryScreen -import ua.acclorite.book_story.ui.common.util.showToast +import ua.acclorite.book_story.ui.common.helpers.showToast import java.text.SimpleDateFormat import java.util.Calendar import java.util.Date diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryModel.kt b/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryModel.kt index 6f6481b7..139f904a 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryModel.kt @@ -29,7 +29,7 @@ import ua.acclorite.book_story.domain.use_case.book.UpdateBookUseCase import ua.acclorite.book_story.presentation.browse.BrowseScreen import ua.acclorite.book_story.presentation.history.HistoryScreen import ua.acclorite.book_story.presentation.library.model.SelectableBook -import ua.acclorite.book_story.ui.common.util.showToast +import ua.acclorite.book_story.ui.common.helpers.showToast import javax.inject.Inject @HiltViewModel diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/main/MainModel.kt b/app/src/main/java/ua/acclorite/book_story/presentation/main/MainModel.kt index 6122f1e1..e64dd9aa 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/main/MainModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/main/MainModel.kt @@ -30,6 +30,7 @@ import ua.acclorite.book_story.presentation.browse.model.BrowseSortOrder import ua.acclorite.book_story.presentation.library.model.LibraryLayout import ua.acclorite.book_story.presentation.library.model.LibrarySortOrder import ua.acclorite.book_story.presentation.library.model.LibraryTitlePosition +import ua.acclorite.book_story.presentation.main.data.DataStoreData import ua.acclorite.book_story.presentation.main.model.DarkTheme import ua.acclorite.book_story.presentation.main.model.HorizontalAlignment import ua.acclorite.book_story.presentation.main.model.PureDark @@ -40,10 +41,8 @@ import ua.acclorite.book_story.presentation.reader.model.ReaderHorizontalGesture import ua.acclorite.book_story.presentation.reader.model.ReaderProgressCount import ua.acclorite.book_story.presentation.reader.model.ReaderScreenOrientation import ua.acclorite.book_story.presentation.reader.model.ReaderTextAlignment -import ua.acclorite.book_story.ui.common.constants.DataStoreConstants -import ua.acclorite.book_story.ui.common.constants.provideFonts -import ua.acclorite.book_story.ui.common.constants.provideMainState -import ua.acclorite.book_story.ui.theme.toTheme +import ua.acclorite.book_story.ui.reader.data.ReaderData +import ua.acclorite.book_story.ui.theme.Theme import javax.inject.Inject @@ -63,7 +62,7 @@ class MainModel @Inject constructor( private val mainModelReady = MutableStateFlow(false) private val _state: MutableStateFlow = MutableStateFlow( - stateHandle[provideMainState()] ?: MainState() + stateHandle["main_state"] ?: MainState() ) val state = _state.asStateFlow() @@ -72,7 +71,7 @@ class MainModel @Inject constructor( is MainEvent.OnChangeLanguage -> handleLanguageUpdate(event) is MainEvent.OnChangeDarkTheme -> handleDatastoreUpdate( - key = DataStoreConstants.DARK_THEME, + key = DataStoreData.DARK_THEME, value = event.value, updateState = { it.copy(darkTheme = DarkTheme.valueOf(this)) @@ -80,7 +79,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangePureDark -> handleDatastoreUpdate( - key = DataStoreConstants.PURE_DARK, + key = DataStoreData.PURE_DARK, value = event.value, updateState = { it.copy(pureDark = PureDark.valueOf(this)) @@ -88,7 +87,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeThemeContrast -> handleDatastoreUpdate( - key = DataStoreConstants.THEME_CONTRAST, + key = DataStoreData.THEME_CONTRAST, value = event.value, updateState = { it.copy(themeContrast = ThemeContrast.valueOf(this)) @@ -96,19 +95,19 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeTheme -> handleDatastoreUpdate( - key = DataStoreConstants.THEME, + key = DataStoreData.THEME, value = event.value, updateState = { - it.copy(theme = toTheme()) + it.copy(theme = Theme.valueOf(this)) } ) is MainEvent.OnChangeFontFamily -> handleDatastoreUpdate( - key = DataStoreConstants.FONT, + key = DataStoreData.FONT, value = event.value, updateState = { it.copy( - fontFamily = provideFonts().run { + fontFamily = ReaderData.fonts.run { find { font -> font.id == event.value }?.id ?: get(0).id @@ -118,7 +117,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeFontStyle -> handleDatastoreUpdate( - key = DataStoreConstants.IS_ITALIC, + key = DataStoreData.IS_ITALIC, value = event.value, updateState = { it.copy(isItalic = this) @@ -126,7 +125,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeFontSize -> handleDatastoreUpdate( - key = DataStoreConstants.FONT_SIZE, + key = DataStoreData.FONT_SIZE, value = event.value, updateState = { it.copy(fontSize = this) @@ -134,7 +133,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeLineHeight -> handleDatastoreUpdate( - key = DataStoreConstants.LINE_HEIGHT, + key = DataStoreData.LINE_HEIGHT, value = event.value, updateState = { it.copy(lineHeight = this) @@ -142,7 +141,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeParagraphHeight -> handleDatastoreUpdate( - key = DataStoreConstants.PARAGRAPH_HEIGHT, + key = DataStoreData.PARAGRAPH_HEIGHT, value = event.value, updateState = { it.copy(paragraphHeight = this) @@ -150,7 +149,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeParagraphIndentation -> handleDatastoreUpdate( - key = DataStoreConstants.PARAGRAPH_INDENTATION, + key = DataStoreData.PARAGRAPH_INDENTATION, value = event.value, updateState = { it.copy(paragraphIndentation = this) @@ -158,7 +157,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeShowStartScreen -> handleDatastoreUpdate( - key = DataStoreConstants.SHOW_START_SCREEN, + key = DataStoreData.SHOW_START_SCREEN, value = event.value, updateState = { it.copy(showStartScreen = this) @@ -166,7 +165,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeSidePadding -> handleDatastoreUpdate( - key = DataStoreConstants.SIDE_PADDING, + key = DataStoreData.SIDE_PADDING, value = event.value, updateState = { it.copy(sidePadding = this) @@ -174,7 +173,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeDoubleClickTranslation -> handleDatastoreUpdate( - key = DataStoreConstants.DOUBLE_CLICK_TRANSLATION, + key = DataStoreData.DOUBLE_CLICK_TRANSLATION, value = event.value, updateState = { it.copy(doubleClickTranslation = this) @@ -182,7 +181,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeFastColorPresetChange -> handleDatastoreUpdate( - key = DataStoreConstants.FAST_COLOR_PRESET_CHANGE, + key = DataStoreData.FAST_COLOR_PRESET_CHANGE, value = event.value, updateState = { it.copy(fastColorPresetChange = this) @@ -190,7 +189,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeBrowseLayout -> handleDatastoreUpdate( - key = DataStoreConstants.BROWSE_LAYOUT, + key = DataStoreData.BROWSE_LAYOUT, value = event.value, updateState = { it.copy(browseLayout = BrowseLayout.valueOf(this)) @@ -198,7 +197,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeBrowseAutoGridSize -> handleDatastoreUpdate( - key = DataStoreConstants.BROWSE_AUTO_GRID_SIZE, + key = DataStoreData.BROWSE_AUTO_GRID_SIZE, value = event.value, updateState = { it.copy(browseAutoGridSize = this) @@ -206,7 +205,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeBrowseGridSize -> handleDatastoreUpdate( - key = DataStoreConstants.BROWSE_GRID_SIZE, + key = DataStoreData.BROWSE_GRID_SIZE, value = event.value, updateState = { it.copy(browseGridSize = this) @@ -214,7 +213,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeBrowseSortOrder -> handleDatastoreUpdate( - key = DataStoreConstants.BROWSE_SORT_ORDER, + key = DataStoreData.BROWSE_SORT_ORDER, value = event.value, updateState = { it.copy(browseSortOrder = BrowseSortOrder.valueOf(this)) @@ -222,7 +221,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeBrowseSortOrderDescending -> handleDatastoreUpdate( - key = DataStoreConstants.BROWSE_SORT_ORDER_DESCENDING, + key = DataStoreData.BROWSE_SORT_ORDER_DESCENDING, value = event.value, updateState = { it.copy(browseSortOrderDescending = this) @@ -234,7 +233,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeTextAlignment -> handleDatastoreUpdate( - key = DataStoreConstants.TEXT_ALIGNMENT, + key = DataStoreData.TEXT_ALIGNMENT, value = event.value, updateState = { it.copy(textAlignment = ReaderTextAlignment.valueOf(this)) @@ -242,7 +241,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeDoublePressExit -> handleDatastoreUpdate( - key = DataStoreConstants.DOUBLE_PRESS_EXIT, + key = DataStoreData.DOUBLE_PRESS_EXIT, value = event.value, updateState = { it.copy(doublePressExit = this) @@ -250,7 +249,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeLetterSpacing -> handleDatastoreUpdate( - key = DataStoreConstants.LETTER_SPACING, + key = DataStoreData.LETTER_SPACING, value = event.value, updateState = { it.copy(letterSpacing = this) @@ -258,7 +257,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeAbsoluteDark -> handleDatastoreUpdate( - key = DataStoreConstants.ABSOLUTE_DARK, + key = DataStoreData.ABSOLUTE_DARK, value = event.value, updateState = { it.copy(absoluteDark = this) @@ -266,7 +265,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeCutoutPadding -> handleDatastoreUpdate( - key = DataStoreConstants.CUTOUT_PADDING, + key = DataStoreData.CUTOUT_PADDING, value = event.value, updateState = { it.copy(cutoutPadding = this) @@ -274,7 +273,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeFullscreen -> handleDatastoreUpdate( - key = DataStoreConstants.FULLSCREEN, + key = DataStoreData.FULLSCREEN, value = event.value, updateState = { it.copy(fullscreen = this) @@ -282,7 +281,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeKeepScreenOn -> handleDatastoreUpdate( - key = DataStoreConstants.KEEP_SCREEN_ON, + key = DataStoreData.KEEP_SCREEN_ON, value = event.value, updateState = { it.copy(keepScreenOn = this) @@ -290,7 +289,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeVerticalPadding -> handleDatastoreUpdate( - key = DataStoreConstants.VERTICAL_PADDING, + key = DataStoreData.VERTICAL_PADDING, value = event.value, updateState = { it.copy(verticalPadding = this) @@ -298,7 +297,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeHideBarsOnFastScroll -> handleDatastoreUpdate( - key = DataStoreConstants.HIDE_BARS_ON_FAST_SCROLL, + key = DataStoreData.HIDE_BARS_ON_FAST_SCROLL, value = event.value, updateState = { it.copy(hideBarsOnFastScroll = this) @@ -306,7 +305,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangePerceptionExpander -> handleDatastoreUpdate( - key = DataStoreConstants.PERCEPTION_EXPANDER, + key = DataStoreData.PERCEPTION_EXPANDER, value = event.value, updateState = { it.copy(perceptionExpander = this) @@ -314,7 +313,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangePerceptionExpanderPadding -> handleDatastoreUpdate( - key = DataStoreConstants.PERCEPTION_EXPANDER_PADDING, + key = DataStoreData.PERCEPTION_EXPANDER_PADDING, value = event.value, updateState = { it.copy(perceptionExpanderPadding = this) @@ -322,7 +321,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangePerceptionExpanderThickness -> handleDatastoreUpdate( - key = DataStoreConstants.PERCEPTION_EXPANDER_THICKNESS, + key = DataStoreData.PERCEPTION_EXPANDER_THICKNESS, value = event.value, updateState = { it.copy(perceptionExpanderThickness = this) @@ -330,7 +329,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeScreenOrientation -> handleDatastoreUpdate( - key = DataStoreConstants.SCREEN_ORIENTATION, + key = DataStoreData.SCREEN_ORIENTATION, value = event.value, updateState = { it.copy(screenOrientation = ReaderScreenOrientation.valueOf(this)) @@ -338,7 +337,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeCustomScreenBrightness -> handleDatastoreUpdate( - key = DataStoreConstants.CUSTOM_SCREEN_BRIGHTNESS, + key = DataStoreData.CUSTOM_SCREEN_BRIGHTNESS, value = event.value, updateState = { it.copy(customScreenBrightness = this) @@ -346,7 +345,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeScreenBrightness -> handleDatastoreUpdate( - key = DataStoreConstants.SCREEN_BRIGHTNESS, + key = DataStoreData.SCREEN_BRIGHTNESS, value = event.value.toDouble(), updateState = { it.copy(screenBrightness = this.toFloat()) @@ -354,7 +353,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeHorizontalGesture -> handleDatastoreUpdate( - key = DataStoreConstants.HORIZONTAL_GESTURE, + key = DataStoreData.HORIZONTAL_GESTURE, value = event.value, updateState = { it.copy(horizontalGesture = ReaderHorizontalGesture.valueOf(this)) @@ -362,7 +361,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeHorizontalGestureScroll -> handleDatastoreUpdate( - key = DataStoreConstants.HORIZONTAL_GESTURE_SCROLL, + key = DataStoreData.HORIZONTAL_GESTURE_SCROLL, value = event.value.toDouble(), updateState = { it.copy(horizontalGestureScroll = this.toFloat()) @@ -370,7 +369,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeHorizontalGestureSensitivity -> handleDatastoreUpdate( - key = DataStoreConstants.HORIZONTAL_GESTURE_SENSITIVITY, + key = DataStoreData.HORIZONTAL_GESTURE_SENSITIVITY, value = event.value.toDouble(), updateState = { it.copy(horizontalGestureSensitivity = this.toFloat()) @@ -378,7 +377,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeBottomBarPadding -> handleDatastoreUpdate( - key = DataStoreConstants.BOTTOM_BAR_PADDING, + key = DataStoreData.BOTTOM_BAR_PADDING, value = event.value, updateState = { it.copy(bottomBarPadding = this) @@ -386,7 +385,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeHighlightedReading -> handleDatastoreUpdate( - key = DataStoreConstants.HIGHLIGHTED_READING, + key = DataStoreData.HIGHLIGHTED_READING, value = event.value, updateState = { it.copy(highlightedReading = this) @@ -394,7 +393,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeHighlightedReadingThickness -> handleDatastoreUpdate( - key = DataStoreConstants.HIGHLIGHTED_READING_THICKNESS, + key = DataStoreData.HIGHLIGHTED_READING_THICKNESS, value = event.value, updateState = { it.copy(highlightedReadingThickness = this) @@ -402,7 +401,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeChapterTitleAlignment -> handleDatastoreUpdate( - key = DataStoreConstants.CHAPTER_TITLE_ALIGNMENT, + key = DataStoreData.CHAPTER_TITLE_ALIGNMENT, value = event.value, updateState = { it.copy(chapterTitleAlignment = ReaderTextAlignment.valueOf(this)) @@ -410,7 +409,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeImages -> handleDatastoreUpdate( - key = DataStoreConstants.IMAGES, + key = DataStoreData.IMAGES, value = event.value, updateState = { it.copy(images = this) @@ -418,7 +417,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeImagesCornersRoundness -> handleDatastoreUpdate( - key = DataStoreConstants.IMAGES_CORNERS_ROUNDNESS, + key = DataStoreData.IMAGES_CORNERS_ROUNDNESS, value = event.value, updateState = { it.copy(imagesCornersRoundness = this) @@ -426,7 +425,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeImagesAlignment -> handleDatastoreUpdate( - key = DataStoreConstants.IMAGES_ALIGNMENT, + key = DataStoreData.IMAGES_ALIGNMENT, value = event.value, updateState = { it.copy(imagesAlignment = HorizontalAlignment.valueOf(this)) @@ -434,7 +433,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeImagesWidth -> handleDatastoreUpdate( - key = DataStoreConstants.IMAGES_WIDTH, + key = DataStoreData.IMAGES_WIDTH, value = event.value.toDouble(), updateState = { it.copy(imagesWidth = this.toFloat()) @@ -442,7 +441,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeImagesColorEffects -> handleDatastoreUpdate( - key = DataStoreConstants.IMAGES_COLOR_EFFECTS, + key = DataStoreData.IMAGES_COLOR_EFFECTS, value = event.value, updateState = { it.copy(imagesColorEffects = ReaderColorEffects.valueOf(this)) @@ -450,7 +449,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeProgressBar -> handleDatastoreUpdate( - key = DataStoreConstants.PROGRESS_BAR, + key = DataStoreData.PROGRESS_BAR, value = event.value, updateState = { it.copy(progressBar = this) @@ -458,7 +457,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeProgressBarPadding -> handleDatastoreUpdate( - key = DataStoreConstants.PROGRESS_BAR_PADDING, + key = DataStoreData.PROGRESS_BAR_PADDING, value = event.value, updateState = { it.copy(progressBarPadding = this) @@ -466,7 +465,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeProgressBarAlignment -> handleDatastoreUpdate( - key = DataStoreConstants.PROGRESS_BAR_ALIGNMENT, + key = DataStoreData.PROGRESS_BAR_ALIGNMENT, value = event.value, updateState = { it.copy(progressBarAlignment = HorizontalAlignment.valueOf(this)) @@ -474,7 +473,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeProgressBarFontSize -> handleDatastoreUpdate( - key = DataStoreConstants.PROGRESS_BAR_FONT_SIZE, + key = DataStoreData.PROGRESS_BAR_FONT_SIZE, value = event.value, updateState = { it.copy(progressBarFontSize = this) @@ -486,7 +485,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeFontThickness -> handleDatastoreUpdate( - key = DataStoreConstants.FONT_THICKNESS, + key = DataStoreData.FONT_THICKNESS, value = event.value, updateState = { it.copy(fontThickness = ReaderFontThickness.valueOf(this)) @@ -494,7 +493,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeProgressCount -> handleDatastoreUpdate( - key = DataStoreConstants.PROGRESS_COUNT, + key = DataStoreData.PROGRESS_COUNT, value = event.value, updateState = { it.copy(progressCount = ReaderProgressCount.valueOf(this)) @@ -502,7 +501,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeHorizontalGestureAlphaAnim -> handleDatastoreUpdate( - key = DataStoreConstants.HORIZONTAL_GESTURE_ALPHA_ANIM, + key = DataStoreData.HORIZONTAL_GESTURE_ALPHA_ANIM, value = event.value, updateState = { it.copy(horizontalGestureAlphaAnim = this) @@ -510,7 +509,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeHorizontalGesturePullAnim -> handleDatastoreUpdate( - key = DataStoreConstants.HORIZONTAL_GESTURE_PULL_ANIM, + key = DataStoreData.HORIZONTAL_GESTURE_PULL_ANIM, value = event.value, updateState = { it.copy(horizontalGesturePullAnim = this) @@ -518,7 +517,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeLibraryLayout -> handleDatastoreUpdate( - key = DataStoreConstants.LIBRARY_LAYOUT, + key = DataStoreData.LIBRARY_LAYOUT, value = event.value, updateState = { it.copy(libraryLayout = LibraryLayout.valueOf(this)) @@ -526,7 +525,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeLibraryAutoGridSize -> handleDatastoreUpdate( - key = DataStoreConstants.LIBRARY_AUTO_GRID_SIZE, + key = DataStoreData.LIBRARY_AUTO_GRID_SIZE, value = event.value, updateState = { it.copy(libraryAutoGridSize = this) @@ -534,7 +533,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeLibraryGridSize -> handleDatastoreUpdate( - key = DataStoreConstants.LIBRARY_GRID_SIZE, + key = DataStoreData.LIBRARY_GRID_SIZE, value = event.value, updateState = { it.copy(libraryGridSize = this) @@ -542,7 +541,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeLibraryReadButton -> handleDatastoreUpdate( - key = DataStoreConstants.LIBRARY_READ_BUTTON, + key = DataStoreData.LIBRARY_READ_BUTTON, value = event.value, updateState = { it.copy(libraryReadButton = this) @@ -550,7 +549,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeLibraryShowProgress -> handleDatastoreUpdate( - key = DataStoreConstants.LIBRARY_SHOW_PROGRESS, + key = DataStoreData.LIBRARY_SHOW_PROGRESS, value = event.value, updateState = { it.copy(libraryShowProgress = this) @@ -558,7 +557,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeLibraryTitlePosition -> handleDatastoreUpdate( - key = DataStoreConstants.LIBRARY_TITLE_POSITION, + key = DataStoreData.LIBRARY_TITLE_POSITION, value = event.value, updateState = { it.copy(libraryTitlePosition = LibraryTitlePosition.valueOf(this)) @@ -566,7 +565,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeLibraryShowBookCount -> handleDatastoreUpdate( - key = DataStoreConstants.LIBRARY_SHOW_BOOK_COUNT, + key = DataStoreData.LIBRARY_SHOW_BOOK_COUNT, value = event.value, updateState = { it.copy(libraryShowBookCount = this) @@ -574,7 +573,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeLibraryShowCategoryTabs -> handleDatastoreUpdate( - key = DataStoreConstants.LIBRARY_SHOW_CATEGORY_TABS, + key = DataStoreData.LIBRARY_SHOW_CATEGORY_TABS, value = event.value, updateState = { it.copy(libraryShowCategoryTabs = this) @@ -582,7 +581,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeLibraryAlwaysShowDefaultTab -> handleDatastoreUpdate( - key = DataStoreConstants.LIBRARY_ALWAYS_SHOW_DEFAULT_TAB, + key = DataStoreData.LIBRARY_ALWAYS_SHOW_DEFAULT_TAB, value = event.value, updateState = { it.copy(libraryAlwaysShowDefaultTab = this) @@ -590,7 +589,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeLibrarySortOrder -> handleDatastoreUpdate( - key = DataStoreConstants.LIBRARY_SORT_ORDER, + key = DataStoreData.LIBRARY_SORT_ORDER, value = event.value, updateState = { it.copy(librarySortOrder = LibrarySortOrder.valueOf(this)) @@ -598,7 +597,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeLibrarySortOrderDescending -> handleDatastoreUpdate( - key = DataStoreConstants.LIBRARY_SORT_ORDER_DESCENDING, + key = DataStoreData.LIBRARY_SORT_ORDER_DESCENDING, value = event.value, updateState = { it.copy(librarySortOrderDescending = this) @@ -606,7 +605,7 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeLibraryPerCategorySort -> handleDatastoreUpdate( - key = DataStoreConstants.LIBRARY_PER_CATEGORY_SORT, + key = DataStoreData.LIBRARY_PER_CATEGORY_SORT, value = event.value, updateState = { it.copy(libraryPerCategorySort = this) @@ -662,7 +661,7 @@ class MainModel @Inject constructor( set.remove(event.value) } handleDatastoreUpdate( - key = DataStoreConstants.BROWSE_INCLUDED_FILTER_ITEMS, + key = DataStoreData.BROWSE_INCLUDED_FILTER_ITEMS, value = set, updateState = { it.copy(browseIncludedFilterItems = toList()) @@ -678,7 +677,7 @@ class MainModel @Inject constructor( set.remove(event.value) } handleDatastoreUpdate( - key = DataStoreConstants.BROWSE_PINNED_PATHS, + key = DataStoreData.BROWSE_PINNED_PATHS, value = set, updateState = { it.copy(browsePinnedPaths = toList()) @@ -710,7 +709,7 @@ class MainModel @Inject constructor( ) { withContext(Dispatchers.Main.immediate) { _state.update { - stateHandle[provideMainState()] = function(it) + stateHandle["main_state"] = function(it) function(it) } } diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/main/MainState.kt b/app/src/main/java/ua/acclorite/book_story/presentation/main/MainState.kt index 956c250e..dbb64279 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/main/MainState.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/main/MainState.kt @@ -13,11 +13,13 @@ import androidx.annotation.Keep import androidx.compose.runtime.Immutable import androidx.datastore.preferences.core.Preferences import kotlinx.parcelize.Parcelize +import ua.acclorite.book_story.core.data.CoreData import ua.acclorite.book_story.presentation.browse.model.BrowseLayout import ua.acclorite.book_story.presentation.browse.model.BrowseSortOrder import ua.acclorite.book_story.presentation.library.model.LibraryLayout import ua.acclorite.book_story.presentation.library.model.LibrarySortOrder import ua.acclorite.book_story.presentation.library.model.LibraryTitlePosition +import ua.acclorite.book_story.presentation.main.data.DataStoreData import ua.acclorite.book_story.presentation.main.model.DarkTheme import ua.acclorite.book_story.presentation.main.model.HorizontalAlignment import ua.acclorite.book_story.presentation.main.model.PureDark @@ -28,11 +30,8 @@ import ua.acclorite.book_story.presentation.reader.model.ReaderHorizontalGesture import ua.acclorite.book_story.presentation.reader.model.ReaderProgressCount import ua.acclorite.book_story.presentation.reader.model.ReaderScreenOrientation import ua.acclorite.book_story.presentation.reader.model.ReaderTextAlignment -import ua.acclorite.book_story.ui.common.constants.DataStoreConstants -import ua.acclorite.book_story.ui.common.constants.provideFonts -import ua.acclorite.book_story.ui.common.constants.provideLanguages +import ua.acclorite.book_story.ui.reader.data.ReaderData import ua.acclorite.book_story.ui.theme.Theme -import ua.acclorite.book_story.ui.theme.toTheme import java.util.Locale /** @@ -47,7 +46,7 @@ data class MainState( // General Settings val language: String = provideDefaultValue { val locale = Locale.getDefault().language.take(2) - provideLanguages().any { locale == it.first }.run { + CoreData.languages.any { locale == it.first }.run { if (this) locale else "en"// Default language. } @@ -61,7 +60,7 @@ data class MainState( val doublePressExit: Boolean = provideDefaultValue { false }, // Reader Settings - val fontFamily: String = provideDefaultValue { provideFonts()[0].id }, + val fontFamily: String = provideDefaultValue { ReaderData.fonts[0].id }, val fontThickness: ReaderFontThickness = provideDefaultValue { ReaderFontThickness.NORMAL }, val isItalic: Boolean = provideDefaultValue { false }, val fontSize: Int = provideDefaultValue { 16 }, @@ -150,14 +149,14 @@ data class MainState( return (data[key.name] as? T)?.convert() ?: defaultState.default() } - return DataStoreConstants.run { + return DataStoreData.run { MainState( language = provideValue( LANGUAGE ) { language }, theme = provideValue( - THEME, convert = { toTheme() } + THEME, convert = { Theme.valueOf(this) } ) { theme }, darkTheme = provideValue( diff --git a/app/src/main/java/ua/acclorite/book_story/ui/common/constants/DataStoreConstants.kt b/app/src/main/java/ua/acclorite/book_story/presentation/main/data/DataStoreData.kt similarity index 98% rename from app/src/main/java/ua/acclorite/book_story/ui/common/constants/DataStoreConstants.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/main/data/DataStoreData.kt index 2d8d8217..0db9ceca 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/common/constants/DataStoreConstants.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/main/data/DataStoreData.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.common.constants +package ua.acclorite.book_story.presentation.main.data import androidx.datastore.preferences.core.booleanPreferencesKey import androidx.datastore.preferences.core.doublePreferencesKey @@ -12,7 +12,7 @@ import androidx.datastore.preferences.core.intPreferencesKey import androidx.datastore.preferences.core.stringPreferencesKey import androidx.datastore.preferences.core.stringSetPreferencesKey -object DataStoreConstants { +object DataStoreData { // General settings val LANGUAGE = stringPreferencesKey("language") val THEME = stringPreferencesKey("theme") diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderModel.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderModel.kt index fed3026c..534ebc8a 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderModel.kt @@ -35,6 +35,7 @@ import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext import kotlinx.coroutines.yield import ua.acclorite.book_story.R +import ua.acclorite.book_story.core.helpers.coerceAndPreventNaN import ua.acclorite.book_story.core.ui.UIText import ua.acclorite.book_story.domain.model.reader.ReaderText.Chapter import ua.acclorite.book_story.domain.use_case.book.GetBookUseCase @@ -44,10 +45,9 @@ import ua.acclorite.book_story.domain.use_case.history.GetHistoryForBookUseCase import ua.acclorite.book_story.presentation.history.HistoryScreen import ua.acclorite.book_story.presentation.library.LibraryScreen import ua.acclorite.book_story.presentation.reader.model.Checkpoint -import ua.acclorite.book_story.ui.common.util.coerceAndPreventNaN -import ua.acclorite.book_story.ui.common.util.launchActivity -import ua.acclorite.book_story.ui.common.util.setBrightness -import ua.acclorite.book_story.ui.common.util.showToast +import ua.acclorite.book_story.ui.common.helpers.launchActivity +import ua.acclorite.book_story.ui.common.helpers.setBrightness +import ua.acclorite.book_story.ui.common.helpers.showToast import javax.inject.Inject import kotlin.math.roundToInt diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScreen.kt index 57badd62..1082235c 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScreen.kt @@ -44,6 +44,7 @@ import androidx.core.view.WindowInsetsCompat import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import kotlinx.parcelize.Parcelize +import ua.acclorite.book_story.core.helpers.calculateProgress import ua.acclorite.book_story.presentation.book_info.BookInfoScreen import ua.acclorite.book_story.presentation.main.MainModel import ua.acclorite.book_story.presentation.navigator.Screen @@ -51,12 +52,11 @@ import ua.acclorite.book_story.presentation.reader.model.ReaderColorEffects import ua.acclorite.book_story.presentation.reader.model.ReaderProgressCount import ua.acclorite.book_story.presentation.reader.model.ReaderTextAlignment import ua.acclorite.book_story.presentation.settings.SettingsModel -import ua.acclorite.book_story.ui.common.constants.provideFonts -import ua.acclorite.book_story.ui.common.util.LocalActivity -import ua.acclorite.book_story.ui.common.util.calculateProgress -import ua.acclorite.book_story.ui.common.util.setBrightness +import ua.acclorite.book_story.ui.common.helpers.LocalActivity +import ua.acclorite.book_story.ui.common.helpers.setBrightness import ua.acclorite.book_story.ui.navigator.LocalNavigator import ua.acclorite.book_story.ui.reader.ReaderContent +import ua.acclorite.book_story.ui.reader.data.ReaderData import kotlin.math.roundToInt @Parcelize @@ -117,7 +117,7 @@ data class ReaderScreen(val bookId: Int) : Screen, Parcelable { } val fontFamily = remember(mainState.value.fontFamily) { - provideFonts().run { + ReaderData.fonts.run { find { it.id == mainState.value.fontFamily } ?: get(0) diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderState.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderState.kt index e40abf03..b5e80644 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderState.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderState.kt @@ -15,11 +15,10 @@ import ua.acclorite.book_story.domain.model.library.Book import ua.acclorite.book_story.domain.model.reader.ReaderText import ua.acclorite.book_story.domain.model.reader.ReaderText.Chapter import ua.acclorite.book_story.presentation.reader.model.Checkpoint -import ua.acclorite.book_story.ui.common.constants.provideEmptyBook @Immutable data class ReaderState( - val book: Book = provideEmptyBook(), + val book: Book = Book.default, val text: List = emptyList(), val listState: LazyListState = LazyListState(), diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsModel.kt b/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsModel.kt index da3250b8..d0c44173 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsModel.kt @@ -36,8 +36,7 @@ import ua.acclorite.book_story.domain.use_case.color_preset.SelectColorPresetUse import ua.acclorite.book_story.domain.use_case.color_preset.UpdateColorPresetUseCase import ua.acclorite.book_story.domain.use_case.permission.GrantPersistableUriPermissionUseCase import ua.acclorite.book_story.domain.use_case.permission.ReleasePersistableUriPermissionUseCase -import ua.acclorite.book_story.ui.common.constants.provideDefaultColorPreset -import ua.acclorite.book_story.ui.common.util.showToast +import ua.acclorite.book_story.ui.common.helpers.showToast import javax.inject.Inject import kotlin.random.Random @@ -79,7 +78,7 @@ class SettingsModel @Inject constructor( var colorPresets = getColorPresetsUseCase() if (colorPresets.isEmpty()) { - updateColorPresetUseCase(provideDefaultColorPreset()) + updateColorPresetUseCase(ColorPreset.default) getColorPresetsUseCase().first().select() colorPresets = getColorPresetsUseCase() } @@ -453,7 +452,7 @@ class SettingsModel @Inject constructor( addColorPresetJob = launch { yield() - val newColorPreset = provideDefaultColorPreset().copy( + val newColorPreset = ColorPreset.default.copy( backgroundColor = event.backgroundColor, fontColor = event.fontColor ) @@ -572,7 +571,7 @@ class SettingsModel @Inject constructor( val selectedPreset = presets.firstOrNull { it.isSelected } if (selectedPreset == null) { - return provideDefaultColorPreset() + return ColorPreset.default } return selectedPreset diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsState.kt b/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsState.kt index 6cb95461..746502c3 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsState.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsState.kt @@ -11,12 +11,11 @@ import androidx.compose.runtime.Immutable import ua.acclorite.book_story.domain.model.library.Category import ua.acclorite.book_story.domain.model.library.CategorySort import ua.acclorite.book_story.domain.model.reader.ColorPreset -import ua.acclorite.book_story.ui.common.constants.provideDefaultColorPreset @Immutable data class SettingsState( val colorPresets: List = emptyList(), - val selectedColorPreset: ColorPreset = provideDefaultColorPreset(), + val selectedColorPreset: ColorPreset = ColorPreset.default, val animateColorPreset: Boolean = false, val colorPresetListState: LazyListState = LazyListState(), diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/start/StartScreen.kt index 2173ac2d..061bcc4d 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/start/StartScreen.kt @@ -17,15 +17,15 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import kotlinx.parcelize.IgnoredOnParcel import kotlinx.parcelize.Parcelize +import ua.acclorite.book_story.core.data.CoreData import ua.acclorite.book_story.presentation.browse.BrowseScreen import ua.acclorite.book_story.presentation.help.HelpScreen import ua.acclorite.book_story.presentation.main.MainEvent import ua.acclorite.book_story.presentation.main.MainModel import ua.acclorite.book_story.presentation.navigator.Screen import ua.acclorite.book_story.presentation.navigator.StackEvent -import ua.acclorite.book_story.ui.common.constants.provideLanguages +import ua.acclorite.book_story.ui.common.helpers.LocalActivity import ua.acclorite.book_story.ui.common.model.ButtonItem -import ua.acclorite.book_story.ui.common.util.LocalActivity import ua.acclorite.book_story.ui.navigator.LocalNavigator import ua.acclorite.book_story.ui.start.StartContent @@ -61,7 +61,7 @@ object StartScreen : Screen, Parcelable { val stackEvent = remember { mutableStateOf(StackEvent.Default) } val languages = remember(mainState.value.language) { - provideLanguages().sortedBy { it.second }.map { + CoreData.languages.sortedBy { it.second }.map { ButtonItem( id = it.first, title = it.second, diff --git a/app/src/main/java/ua/acclorite/book_story/ui/about/AboutBadges.kt b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutBadges.kt index 578777ee..afa330dd 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/about/AboutBadges.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutBadges.kt @@ -19,8 +19,8 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R import ua.acclorite.book_story.presentation.about.AboutEvent -import ua.acclorite.book_story.ui.common.constants.provideAboutBadges -import ua.acclorite.book_story.ui.common.util.showToast +import ua.acclorite.book_story.ui.about.data.AboutData +import ua.acclorite.book_story.ui.common.helpers.showToast @Composable fun AboutBadges( @@ -38,7 +38,7 @@ fun AboutBadges( horizontalArrangement = Arrangement.spacedBy(13.dp) ) { items( - provideAboutBadges(), + AboutData.badges, key = { it.id } ) { badge -> AboutBadgeItem(badge = badge) { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/about/AboutLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutLayout.kt index 7ce9a4b5..c5ce92bd 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/about/AboutLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutLayout.kt @@ -26,13 +26,9 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R +import ua.acclorite.book_story.core.data.LinkData import ua.acclorite.book_story.presentation.about.AboutEvent import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar -import ua.acclorite.book_story.ui.common.constants.provideContributorsPage -import ua.acclorite.book_story.ui.common.constants.provideIssuesPage -import ua.acclorite.book_story.ui.common.constants.provideReleasesPage -import ua.acclorite.book_story.ui.common.constants.provideSupportPage -import ua.acclorite.book_story.ui.common.constants.provideTranslationPage @Composable fun AboutLayout( @@ -85,7 +81,7 @@ fun AboutLayout( ) { navigateToBrowserPage( AboutEvent.OnNavigateToBrowserPage( - page = provideReleasesPage(), + page = LinkData.RELEASES, context = context ) ) @@ -99,7 +95,7 @@ fun AboutLayout( ) { navigateToBrowserPage( AboutEvent.OnNavigateToBrowserPage( - page = provideIssuesPage(), + page = LinkData.ISSUES, context = context ) ) @@ -114,7 +110,7 @@ fun AboutLayout( ) { navigateToBrowserPage( AboutEvent.OnNavigateToBrowserPage( - page = provideContributorsPage(), + page = LinkData.CONTRIBUTORS, context = context ) ) @@ -146,7 +142,7 @@ fun AboutLayout( ) { navigateToBrowserPage( AboutEvent.OnNavigateToBrowserPage( - page = provideTranslationPage(), + page = LinkData.TRANSLATION, context = context ) ) @@ -160,7 +156,7 @@ fun AboutLayout( ) { navigateToBrowserPage( AboutEvent.OnNavigateToBrowserPage( - page = provideSupportPage(), + page = LinkData.SUPPORT, context = context ) ) diff --git a/app/src/main/java/ua/acclorite/book_story/ui/about/data/AboutData.kt b/app/src/main/java/ua/acclorite/book_story/ui/about/data/AboutData.kt new file mode 100644 index 00000000..08fb2426 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/ui/about/data/AboutData.kt @@ -0,0 +1,51 @@ +/* + * Book's Story — free and open-source Material You eBook reader. + * Copyright (C) 2024-2025 Acclorite + * SPDX-License-Identifier: GPL-3.0-only + */ + +package ua.acclorite.book_story.ui.about.data + +import kotlinx.collections.immutable.persistentListOf +import ua.acclorite.book_story.R +import ua.acclorite.book_story.ui.about.model.Badge + +object AboutData { + val badges = persistentListOf( + Badge( + id = "github", + drawable = R.drawable.github, + imageVector = null, + contentDescription = R.string.github_badge, + url = "https://www.github.com/Acclorite" + ), + Badge( + id = "reddit", + drawable = R.drawable.reddit, + imageVector = null, + contentDescription = R.string.reddit_badge, + url = "https://www.reddit.com/user/Acclorite/" + ), + Badge( + id = "tryzub", + drawable = R.drawable.tryzub, + imageVector = null, + contentDescription = R.string.tryzub_badge, + url = null + ), + Badge( + id = "gitlab", + drawable = R.drawable.gitlab, + imageVector = null, + contentDescription = R.string.gitlab_badge, + url = "https://www.gitlab.com/Acclorite" + ), + Badge( + id = "codeberg", + drawable = R.drawable.codeberg, + imageVector = null, + contentDescription = R.string.codeberg_badge, + url = "https://www.codeberg.org/Acclorite" + ) + ) +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoDetailsBottomSheet.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoDetailsBottomSheet.kt index c7f2fb3a..e9e65e5c 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoDetailsBottomSheet.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoDetailsBottomSheet.kt @@ -18,12 +18,12 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R +import ua.acclorite.book_story.core.data.ExtensionsData import ua.acclorite.book_story.data.model.file.CachedFileCompat import ua.acclorite.book_story.domain.model.library.Book import ua.acclorite.book_story.presentation.book_info.BookInfoEvent import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar import ua.acclorite.book_story.ui.common.components.modal_bottom_sheet.ModalBottomSheet -import ua.acclorite.book_story.ui.common.constants.provideExtensions import ua.acclorite.book_story.ui.settings.components.SettingsSubcategoryTitle import java.text.SimpleDateFormat import java.util.Date @@ -60,7 +60,7 @@ fun BookInfoDetailsBottomSheet( val fileExists = remember(cachedFile) { cachedFile.let { - it != null && it.canAccess() && !it.isDirectory && provideExtensions() + it != null && it.canAccess() && !it.isDirectory && ExtensionsData.fileExtensions .any { ext -> it.name.endsWith(ext, ignoreCase = true) } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayout.kt index 77882f61..551cd5a3 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayout.kt @@ -20,7 +20,7 @@ import androidx.compose.ui.unit.dp import ua.acclorite.book_story.domain.model.library.Book import ua.acclorite.book_story.presentation.book_info.BookInfoEvent import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar -import ua.acclorite.book_story.ui.common.constants.providePrimaryScrollbar +import ua.acclorite.book_story.ui.common.data.ScrollbarData @Composable fun BookInfoLayout( @@ -38,7 +38,7 @@ fun BookInfoLayout( LazyColumnWithScrollbar( modifier = Modifier.fillMaxSize(), state = listState, - scrollbarSettings = providePrimaryScrollbar(false), + scrollbarSettings = ScrollbarData.primaryScrollbar, contentPadding = PaddingValues(bottom = 18.dp) ) { item { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutButton.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutButton.kt index 314980f6..534a4910 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutButton.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutButton.kt @@ -15,9 +15,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R +import ua.acclorite.book_story.core.helpers.calculateProgress import ua.acclorite.book_story.domain.model.library.Book import ua.acclorite.book_story.ui.common.components.common.StyledText -import ua.acclorite.book_story.ui.common.util.calculateProgress @Composable fun BookInfoLayoutButton( diff --git a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutDescription.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutDescription.kt index 6b09fcb0..88bb5b34 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutDescription.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutDescription.kt @@ -42,7 +42,7 @@ import ua.acclorite.book_story.R import ua.acclorite.book_story.domain.model.library.Book import ua.acclorite.book_story.presentation.book_info.BookInfoEvent import ua.acclorite.book_story.ui.common.components.common.StyledText -import ua.acclorite.book_story.ui.common.util.noRippleClickable +import ua.acclorite.book_story.ui.common.helpers.noRippleClickable @Composable fun BookInfoLayoutDescription( diff --git a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoAuthor.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoAuthor.kt index c3730b95..6e981c9f 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoAuthor.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoAuthor.kt @@ -23,7 +23,7 @@ import ua.acclorite.book_story.R import ua.acclorite.book_story.domain.model.library.Book import ua.acclorite.book_story.presentation.book_info.BookInfoEvent import ua.acclorite.book_story.ui.common.components.common.StyledText -import ua.acclorite.book_story.ui.common.util.noRippleClickable +import ua.acclorite.book_story.ui.common.helpers.noRippleClickable @Composable fun BookInfoLayoutInfoAuthor( diff --git a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoCover.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoCover.kt index fd24c0ff..58ff881c 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoCover.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoCover.kt @@ -28,7 +28,7 @@ import ua.acclorite.book_story.R import ua.acclorite.book_story.domain.model.library.Book import ua.acclorite.book_story.presentation.book_info.BookInfoEvent import ua.acclorite.book_story.ui.common.components.common.AsyncCoverImage -import ua.acclorite.book_story.ui.common.util.noRippleClickable +import ua.acclorite.book_story.ui.common.helpers.noRippleClickable @Composable fun BookInfoLayoutInfoCover( diff --git a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoProgress.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoProgress.kt index 4071f59e..2c5a61be 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoProgress.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoProgress.kt @@ -17,9 +17,9 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp +import ua.acclorite.book_story.core.helpers.calculateProgress import ua.acclorite.book_story.domain.model.library.Book import ua.acclorite.book_story.ui.common.components.common.StyledText -import ua.acclorite.book_story.ui.common.util.calculateProgress @OptIn(ExperimentalMaterial3ExpressiveApi::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoTitle.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoTitle.kt index ed92f3a6..4dd994a3 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoTitle.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoTitle.kt @@ -13,7 +13,7 @@ import androidx.compose.ui.Modifier import ua.acclorite.book_story.domain.model.library.Book import ua.acclorite.book_story.presentation.book_info.BookInfoEvent import ua.acclorite.book_story.ui.common.components.common.StyledText -import ua.acclorite.book_story.ui.common.util.noRippleClickable +import ua.acclorite.book_story.ui.common.helpers.noRippleClickable @Composable fun BookInfoLayoutInfoTitle( diff --git a/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseAddDialog.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseAddDialog.kt index feecef1e..903a07c1 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseAddDialog.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseAddDialog.kt @@ -25,7 +25,7 @@ import ua.acclorite.book_story.presentation.browse.BrowseEvent import ua.acclorite.book_story.presentation.library.model.SelectableNullableBook import ua.acclorite.book_story.ui.common.components.dialog.Dialog import ua.acclorite.book_story.ui.common.components.progress_indicator.CircularProgressIndicator -import ua.acclorite.book_story.ui.common.util.showToast +import ua.acclorite.book_story.ui.common.helpers.showToast import java.util.UUID @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseGridLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseGridLayout.kt index 72e38701..8dec8785 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseGridLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseGridLayout.kt @@ -21,7 +21,7 @@ import ua.acclorite.book_story.presentation.browse.model.GroupedFiles import ua.acclorite.book_story.presentation.browse.model.SelectableFile import ua.acclorite.book_story.ui.common.components.common.LazyVerticalGridWithScrollbar import ua.acclorite.book_story.ui.common.components.common.header -import ua.acclorite.book_story.ui.common.constants.providePrimaryScrollbar +import ua.acclorite.book_story.ui.common.data.ScrollbarData @Composable fun BrowseGridLayout( @@ -38,7 +38,7 @@ fun BrowseGridLayout( state = gridState, modifier = Modifier.fillMaxSize(), contentPadding = PaddingValues(horizontal = 8.dp), - scrollbarSettings = providePrimaryScrollbar(false) + scrollbarSettings = ScrollbarData.primaryScrollbar ) { groupedFiles.forEach { group -> stickyHeader { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseLayoutHeader.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseLayoutHeader.kt index 2bb2df12..3f8683f1 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseLayoutHeader.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseLayoutHeader.kt @@ -24,7 +24,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R import ua.acclorite.book_story.ui.common.components.common.StyledText -import ua.acclorite.book_story.ui.common.util.noRippleClickable +import ua.acclorite.book_story.ui.common.helpers.noRippleClickable @Composable fun BrowseLayoutHeader( diff --git a/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseListLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseListLayout.kt index a397ca3c..3e107b56 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseListLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseListLayout.kt @@ -19,7 +19,7 @@ import androidx.compose.ui.unit.dp import ua.acclorite.book_story.presentation.browse.model.GroupedFiles import ua.acclorite.book_story.presentation.browse.model.SelectableFile import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar -import ua.acclorite.book_story.ui.common.constants.providePrimaryScrollbar +import ua.acclorite.book_story.ui.common.data.ScrollbarData @Composable fun BrowseListLayout( @@ -32,7 +32,7 @@ fun BrowseListLayout( state = listState, modifier = Modifier.fillMaxSize(), contentPadding = PaddingValues(horizontal = 8.dp), - scrollbarSettings = providePrimaryScrollbar(false) + scrollbarSettings = ScrollbarData.primaryScrollbar ) { groupedFiles.forEach { group -> stickyHeader { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/LazyColumnWithScrollbar.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/LazyColumnWithScrollbar.kt index c51d49e5..18121d80 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/LazyColumnWithScrollbar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/LazyColumnWithScrollbar.kt @@ -20,14 +20,14 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import my.nanihadesuka.compose.InternalLazyColumnScrollbar import my.nanihadesuka.compose.ScrollbarSettings -import ua.acclorite.book_story.ui.common.constants.provideSecondaryScrollbar +import ua.acclorite.book_story.ui.common.data.ScrollbarData @Composable fun LazyColumnWithScrollbar( modifier: Modifier = Modifier, parentModifier: Modifier = Modifier, state: LazyListState = rememberLazyListState(), - scrollbarSettings: ScrollbarSettings = provideSecondaryScrollbar(), + scrollbarSettings: ScrollbarSettings = ScrollbarData.secondaryScrollbar, enableScrollbar: Boolean = true, contentPadding: PaddingValues = PaddingValues(0.dp), verticalArrangement: Arrangement.Vertical = Arrangement.Top, diff --git a/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/LazyVerticalGridWithScrollbar.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/LazyVerticalGridWithScrollbar.kt index 41c7516c..bb1227da 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/LazyVerticalGridWithScrollbar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/LazyVerticalGridWithScrollbar.kt @@ -21,14 +21,14 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import my.nanihadesuka.compose.InternalLazyVerticalGridScrollbar import my.nanihadesuka.compose.ScrollbarSettings -import ua.acclorite.book_story.ui.common.constants.provideSecondaryScrollbar +import ua.acclorite.book_story.ui.common.data.ScrollbarData @Composable fun LazyVerticalGridWithScrollbar( modifier: Modifier = Modifier, columns: GridCells, state: LazyGridState = rememberLazyGridState(), - scrollbarSettings: ScrollbarSettings = provideSecondaryScrollbar(), + scrollbarSettings: ScrollbarSettings = ScrollbarData.secondaryScrollbar, enableScrollbar: Boolean = true, contentPadding: PaddingValues = PaddingValues(0.dp), verticalArrangement: Arrangement.Vertical = Arrangement.Top, diff --git a/app/src/main/java/ua/acclorite/book_story/ui/common/components/modal_drawer/ModalDrawer.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/modal_drawer/ModalDrawer.kt index 24f9ba90..bdbb3fc2 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/common/components/modal_drawer/ModalDrawer.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/modal_drawer/ModalDrawer.kt @@ -41,8 +41,8 @@ import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import ua.acclorite.book_story.ui.common.components.common.AnimatedVisibility import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar -import ua.acclorite.book_story.ui.common.constants.providePrimaryScrollbar -import ua.acclorite.book_story.ui.common.util.noRippleClickable +import ua.acclorite.book_story.ui.common.data.ScrollbarData +import ua.acclorite.book_story.ui.common.helpers.noRippleClickable /** * Modal Drawer. @@ -145,7 +145,7 @@ fun ModalDrawer( LazyColumnWithScrollbar( state = rememberLazyListState(startIndex), modifier = Modifier.fillMaxSize(), - scrollbarSettings = providePrimaryScrollbar(), + scrollbarSettings = ScrollbarData.primarySelectableScrollbar, contentPadding = PaddingValues(vertical = 9.dp) ) { content() diff --git a/app/src/main/java/ua/acclorite/book_story/ui/common/constants/AboutBadgeConstants.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/constants/AboutBadgeConstants.kt deleted file mode 100644 index 24b83725..00000000 --- a/app/src/main/java/ua/acclorite/book_story/ui/common/constants/AboutBadgeConstants.kt +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Book's Story — free and open-source Material You eBook reader. - * Copyright (C) 2024-2025 Acclorite - * SPDX-License-Identifier: GPL-3.0-only - */ - -package ua.acclorite.book_story.ui.common.constants - -import ua.acclorite.book_story.R -import ua.acclorite.book_story.ui.about.model.Badge - -fun provideAboutBadges() = listOf( - Badge( - id = "github", - drawable = R.drawable.github, - imageVector = null, - contentDescription = R.string.github_badge, - url = "https://www.github.com/Acclorite" - ), - Badge( - id = "reddit", - drawable = R.drawable.reddit, - imageVector = null, - contentDescription = R.string.reddit_badge, - url = "https://www.reddit.com/user/Acclorite/" - ), - Badge( - id = "tryzub", - drawable = R.drawable.tryzub, - imageVector = null, - contentDescription = R.string.tryzub_badge, - url = null - ), - Badge( - id = "gitlab", - drawable = R.drawable.gitlab, - imageVector = null, - contentDescription = R.string.gitlab_badge, - url = "https://www.gitlab.com/Acclorite" - ), - Badge( - id = "codeberg", - drawable = R.drawable.codeberg, - imageVector = null, - contentDescription = R.string.codeberg_badge, - url = "https://www.codeberg.org/Acclorite" - ), -) \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/common/constants/CommonConstants.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/constants/CommonConstants.kt deleted file mode 100644 index 8884853b..00000000 --- a/app/src/main/java/ua/acclorite/book_story/ui/common/constants/CommonConstants.kt +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Book's Story — free and open-source Material You eBook reader. - * Copyright (C) 2024-2025 Acclorite - * SPDX-License-Identifier: GPL-3.0-only - */ - -@file:Suppress("SameReturnValue") - -package ua.acclorite.book_story.ui.common.constants - -import androidx.compose.ui.graphics.Color -import ua.acclorite.book_story.core.ui.UIText -import ua.acclorite.book_story.domain.model.library.Book -import ua.acclorite.book_story.domain.model.reader.ColorPreset - -// Main State -fun provideMainState() = "main_state" - -// Empty Book -fun provideEmptyBook() = Book( - id = -1, - title = "", - author = UIText.StringValue(""), - description = null, - filePath = "", - coverImage = null, - scrollIndex = 0, - scrollOffset = 0, - progress = 0f, - lastOpened = null, - categories = emptyList() -) - -// Default Color Preset -fun provideDefaultColorPreset() = ColorPreset( - id = -1, - name = null, - backgroundColor = Color(0xFFFAF8FF), // Blue Light Surface (hardcoded) - fontColor = Color(0xFF44464F), // Blue Light OnSurfaceVariant (hardcoded) - isSelected = false -) \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/common/constants/CreditConstants.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/constants/CreditConstants.kt deleted file mode 100644 index 2e70e92f..00000000 --- a/app/src/main/java/ua/acclorite/book_story/ui/common/constants/CreditConstants.kt +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Book's Story — free and open-source Material You eBook reader. - * Copyright (C) 2024-2025 Acclorite - * SPDX-License-Identifier: GPL-3.0-only - */ - -package ua.acclorite.book_story.ui.common.constants - -import ua.acclorite.book_story.R -import ua.acclorite.book_story.core.ui.UIText -import ua.acclorite.book_story.ui.about.model.Credit - -fun provideCredits() = listOf( - Credit( - name = "Tachiyomi (Mihon)", - source = "GitHub", - credits = listOf( - UIText.StringResource(R.string.credits_design), - UIText.StringResource(R.string.credits_ideas), - UIText.StringValue("Readme") - ), - website = "https://www.github.com/mihonapp/mihon" - ), - Credit( - name = "Kitsune", - source = "GitHub", - credits = listOf( - UIText.StringResource(R.string.credits_updates), - UIText.StringResource(R.string.credits_ideas) - ), - website = "https://www.github.com/Drumber/Kitsune" - ), - Credit( - name = "Voyager", - source = "Voyager Website", - credits = listOf( - UIText.StringResource(R.string.credits_ideas) - ), - website = "https://voyager.adriel.cafe/" - ), - Credit( - name = "Material Design Icons", - source = "Google Fonts", - credits = listOf( - UIText.StringResource(R.string.credits_icon) - ), - website = "https://fonts.google.com/icons" - ), - Credit( - name = "Material Design Fonts", - source = "Google Fonts", - credits = listOf( - UIText.StringResource(R.string.credits_fonts) - ), - website = "https://fonts.google.com" - ), - Credit( - name = "Weblate", - source = "Hosted Weblate", - credits = listOf( - UIText.StringResource(R.string.credits_translation), - UIText.StringResource(R.string.credits_contribution) - ), - website = "https://hosted.weblate.org/projects/book-story" - ), - Credit( - name = "OpenDyslexic Font", - source = "OpenDyslexic Website", - credits = listOf( - UIText.StringResource(R.string.credits_fonts) - ), - website = "https://opendyslexic.org" - ), - Credit( - name = "GitLab Badge", - source = "Censorship Website", - credits = listOf( - UIText.StringResource(R.string.credits_icon) - ), - website = "https://censorship.no/en/index.html" - ), - Credit( - name = "GitHub Badge", - source = "GitHub", - credits = listOf( - UIText.StringResource(R.string.credits_icon) - ), - website = "https://github.com/Kunzisoft/Github-badge" - ), - Credit( - name = "Codeberg Badge", - source = "Codeberg", - credits = listOf( - UIText.StringResource(R.string.credits_icon) - ), - website = "https://codeberg.org/Codeberg/GetItOnCodeberg" - ), -) \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/common/constants/HelpTipConstants.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/constants/HelpTipConstants.kt deleted file mode 100644 index b9762dc6..00000000 --- a/app/src/main/java/ua/acclorite/book_story/ui/common/constants/HelpTipConstants.kt +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Book's Story — free and open-source Material You eBook reader. - * Copyright (C) 2024-2025 Acclorite - * SPDX-License-Identifier: GPL-3.0-only - */ - -package ua.acclorite.book_story.ui.common.constants - -import androidx.compose.ui.res.stringResource -import ua.acclorite.book_story.R -import ua.acclorite.book_story.ui.help.HelpAnnotation -import ua.acclorite.book_story.ui.help.model.HelpTip - -fun provideHelpTips() = listOf( - HelpTip( - title = R.string.help_title_how_to_add_books, - description = { - append(stringResource(id = R.string.help_desc_how_to_add_books_1) + " ") - - HelpAnnotation { - append(stringResource(id = R.string.help_desc_how_to_add_books_2)) - } - append(". ") - - append(stringResource(id = R.string.help_desc_how_to_add_books_3) + " ") - - HelpAnnotation { - append(stringResource(id = R.string.help_desc_how_to_add_books_4)) - } - append(".") - } - ), - - HelpTip( - title = R.string.help_title_how_to_customize_app, - description = { - append(stringResource(id = R.string.help_desc_how_to_customize_app_1) + " ") - - HelpAnnotation { - append(stringResource(id = R.string.help_desc_how_to_customize_app_2)) - } - append(". ") - - append(stringResource(id = R.string.help_desc_how_to_customize_app_3)) - } - ), - - HelpTip( - title = R.string.help_title_how_to_move_or_delete_books, - description = { - append(stringResource(id = R.string.help_desc_how_to_move_or_delete_books_1) + " ") - - HelpAnnotation { - append(stringResource(id = R.string.help_desc_how_to_move_or_delete_books_2)) - } - append(". ") - - append(stringResource(id = R.string.help_desc_how_to_move_or_delete_books_3)) - } - ), - - HelpTip( - title = R.string.help_title_how_to_edit_book, - description = { - append(stringResource(id = R.string.help_desc_how_to_edit_book_1) + " ") - - HelpAnnotation { - append(stringResource(id = R.string.help_desc_how_to_edit_book_2)) - } - append(" ") - - append(stringResource(id = R.string.help_desc_how_to_edit_book_3)) - } - ), - - HelpTip( - title = R.string.help_title_how_to_read_book, - description = { - append(stringResource(id = R.string.help_desc_how_to_read_book_1) + " ") - - HelpAnnotation { - append(stringResource(id = R.string.help_desc_how_to_read_book_2)) - } - append(". ") - - append(stringResource(id = R.string.help_desc_how_to_read_book_3)) - } - ), - - HelpTip( - title = R.string.help_title_how_to_customize_reader, - description = { - append(stringResource(id = R.string.help_desc_how_to_customize_reader_1) + " ") - - HelpAnnotation { - append(stringResource(id = R.string.help_desc_how_to_customize_reader_2)) - } - append(" ") - - append(stringResource(id = R.string.help_desc_how_to_customize_reader_3)) - } - ), - - HelpTip( - title = R.string.help_title_how_to_manage_history, - description = { - append(stringResource(id = R.string.help_desc_how_to_manage_history_1) + " ") - - HelpAnnotation { - append(stringResource(id = R.string.help_desc_how_to_manage_history_2)) - } - append(". ") - - append(stringResource(id = R.string.help_desc_how_to_manage_history_3)) - } - ), - - HelpTip( - title = R.string.help_title_how_to_use_tooltip, - description = { - append(stringResource(id = R.string.help_desc_how_to_use_tooltip_1)) - } - ), - - HelpTip( - title = R.string.help_title_how_to_use_double_click_translation, - description = { - append(stringResource(id = R.string.help_desc_how_to_use_double_click_translation_1)) - } - ), - - HelpTip( - title = R.string.help_title_how_to_create_color_presets, - description = { - append(stringResource(id = R.string.help_desc_how_to_create_color_presets_1)) - } - ), - - HelpTip( - title = R.string.help_title_how_to_use_color_presets, - description = { - append(stringResource(id = R.string.help_desc_how_to_use_color_presets_1)) - } - ), - - HelpTip( - title = R.string.help_title_how_to_use_perception_expander, - description = { - append(stringResource(id = R.string.help_desc_how_to_use_perception_expander_1)) - } - ), -) \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/common/constants/LanguageConstants.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/constants/LanguageConstants.kt deleted file mode 100644 index 2e41e677..00000000 --- a/app/src/main/java/ua/acclorite/book_story/ui/common/constants/LanguageConstants.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Book's Story — free and open-source Material You eBook reader. - * Copyright (C) 2024-2025 Acclorite - * SPDX-License-Identifier: GPL-3.0-only - */ - -package ua.acclorite.book_story.ui.common.constants - -fun provideLanguages() = listOf( - Pair("en", "English"), - Pair("uk", "Українська"), - Pair("de", "Deutsch"), - Pair("ar", "اَلْعَرَبِيَّةُ"), - Pair("es", "Español"), - Pair("tr", "Türkçe"), - Pair("fr", "Français"), - Pair("pl", "Polski"), - Pair("it", "Italiano"), - Pair("zh", "汉语"), - Pair("hi", "हिन्दी"), - // Currently as "pt" (which is Portuguese) instead of "pt-BR" - Pair("pt", "Português (Brasil)"), - Pair("ta", "தமிழ்"), - Pair("ml", "മലയാളം"), - Pair("cs", "Čeština"), - Pair("ro", "Română"), - Pair("be", "Беларуская"), - Pair("ja", "日本語"), -) \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/common/constants/LinkConstants.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/constants/LinkConstants.kt deleted file mode 100644 index 0b90e221..00000000 --- a/app/src/main/java/ua/acclorite/book_story/ui/common/constants/LinkConstants.kt +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Book's Story — free and open-source Material You eBook reader. - * Copyright (C) 2024-2025 Acclorite - * SPDX-License-Identifier: GPL-3.0-only - */ - -@file:Suppress("SameReturnValue") - -package ua.acclorite.book_story.ui.common.constants - -fun provideReleasesPage() = - "https://www.github.com/Acclorite/book-story/releases/latest" - -fun provideIssuesPage() = - "https://www.github.com/Acclorite/book-story/issues" - -fun provideContributorsPage() = - "https://github.com/Acclorite/book-story/graphs/contributors" - -fun provideTranslationPage() = - "https://hosted.weblate.org/projects/book-story" - -fun provideSupportPage() = - "https://patreon.com/Acclorite" \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/common/constants/ScrollbarConstants.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/constants/ScrollbarConstants.kt deleted file mode 100644 index 6158ef35..00000000 --- a/app/src/main/java/ua/acclorite/book_story/ui/common/constants/ScrollbarConstants.kt +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Book's Story — free and open-source Material You eBook reader. - * Copyright (C) 2024-2025 Acclorite - * SPDX-License-Identifier: GPL-3.0-only - */ - -package ua.acclorite.book_story.ui.common.constants - -import androidx.compose.material3.MaterialTheme -import androidx.compose.runtime.Composable -import androidx.compose.ui.graphics.RectangleShape -import androidx.compose.ui.unit.dp -import my.nanihadesuka.compose.ScrollbarSelectionMode -import my.nanihadesuka.compose.ScrollbarSettings - -@Composable -fun providePrimaryScrollbar(canSelect: Boolean = true) = ScrollbarSettings( - thumbUnselectedColor = MaterialTheme.colorScheme.secondary, - thumbSelectedColor = MaterialTheme.colorScheme.secondary.copy(0.8f), - hideDelayMillis = 2000, - durationAnimationMillis = 300, - selectionMode = if (canSelect) ScrollbarSelectionMode.Thumb else ScrollbarSelectionMode.Disabled, - thumbThickness = 8.dp, - scrollbarPadding = 4.dp -) - -@Composable -fun provideSecondaryScrollbar() = ScrollbarSettings( - thumbUnselectedColor = MaterialTheme.colorScheme.onSurfaceVariant.copy(0.5f), - hideDelayMillis = 500, - durationAnimationMillis = 200, - thumbMinLength = 0.4f, - selectionMode = ScrollbarSelectionMode.Disabled, - thumbThickness = 4.dp, - thumbShape = RectangleShape, - hideDisplacement = 0.dp, - scrollbarPadding = 0.dp -) \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/common/constants/SupportedExtensionConstants.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/constants/SupportedExtensionConstants.kt deleted file mode 100644 index 6ea585c4..00000000 --- a/app/src/main/java/ua/acclorite/book_story/ui/common/constants/SupportedExtensionConstants.kt +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Book's Story — free and open-source Material You eBook reader. - * Copyright (C) 2024-2025 Acclorite - * SPDX-License-Identifier: GPL-3.0-only - */ - -package ua.acclorite.book_story.ui.common.constants - -fun provideExtensions() = listOf( - ".epub", - ".pdf", - ".fb2", - ".txt", - ".html", - ".htm", - ".md" -) - -fun provideImageExtensions() = listOf( - ".png", - ".jpg", - ".jpeg", - ".gif" -) \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/common/data/ScrollbarData.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/data/ScrollbarData.kt new file mode 100644 index 00000000..99e17d96 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/data/ScrollbarData.kt @@ -0,0 +1,51 @@ +/* + * Book's Story — free and open-source Material You eBook reader. + * Copyright (C) 2024-2025 Acclorite + * SPDX-License-Identifier: GPL-3.0-only + */ + +package ua.acclorite.book_story.ui.common.data + +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.RectangleShape +import androidx.compose.ui.unit.dp +import my.nanihadesuka.compose.ScrollbarSelectionMode +import my.nanihadesuka.compose.ScrollbarSettings + +object ScrollbarData { + val primarySelectableScrollbar + @Composable get() = ScrollbarSettings( + thumbUnselectedColor = MaterialTheme.colorScheme.secondary, + thumbSelectedColor = MaterialTheme.colorScheme.secondary.copy(0.8f), + hideDelayMillis = 2000, + durationAnimationMillis = 300, + selectionMode = ScrollbarSelectionMode.Thumb, + thumbThickness = 8.dp, + scrollbarPadding = 4.dp + ) + + val primaryScrollbar + @Composable get() = ScrollbarSettings( + thumbUnselectedColor = MaterialTheme.colorScheme.secondary, + thumbSelectedColor = MaterialTheme.colorScheme.secondary.copy(0.8f), + hideDelayMillis = 2000, + durationAnimationMillis = 300, + selectionMode = ScrollbarSelectionMode.Disabled, + thumbThickness = 8.dp, + scrollbarPadding = 4.dp + ) + + val secondaryScrollbar + @Composable get() = ScrollbarSettings( + thumbUnselectedColor = MaterialTheme.colorScheme.onSurfaceVariant.copy(0.5f), + hideDelayMillis = 500, + durationAnimationMillis = 200, + thumbMinLength = 0.4f, + selectionMode = ScrollbarSelectionMode.Disabled, + thumbThickness = 4.dp, + thumbShape = RectangleShape, + hideDisplacement = 0.dp, + scrollbarPadding = 0.dp + ) +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/common/util/LifecycleExtensions.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/helpers/LifecycleHelpers.kt similarity index 96% rename from app/src/main/java/ua/acclorite/book_story/ui/common/util/LifecycleExtensions.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/helpers/LifecycleHelpers.kt index 0d0c21e7..62e39fa3 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/common/util/LifecycleExtensions.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/helpers/LifecycleHelpers.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.common.util +package ua.acclorite.book_story.ui.common.helpers import android.annotation.SuppressLint import android.content.Intent diff --git a/app/src/main/java/ua/acclorite/book_story/ui/common/util/ModifierExtensions.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/helpers/ModifierHelpers.kt similarity index 92% rename from app/src/main/java/ua/acclorite/book_story/ui/common/util/ModifierExtensions.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/helpers/ModifierHelpers.kt index d44cafc9..31f05597 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/common/util/ModifierExtensions.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/helpers/ModifierHelpers.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.common.util +package ua.acclorite.book_story.ui.common.helpers import androidx.compose.foundation.combinedClickable import androidx.compose.ui.Modifier diff --git a/app/src/main/java/ua/acclorite/book_story/ui/common/util/ToastExtensions.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/helpers/ToastHelpers.kt similarity index 90% rename from app/src/main/java/ua/acclorite/book_story/ui/common/util/ToastExtensions.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/helpers/ToastHelpers.kt index 70bab32c..5dab85f8 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/common/util/ToastExtensions.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/helpers/ToastHelpers.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.common.util +package ua.acclorite.book_story.ui.common.helpers import android.content.Context import android.widget.Toast diff --git a/app/src/main/java/ua/acclorite/book_story/ui/credits/CreditsLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/credits/CreditsLayout.kt index 09e2e537..bb664050 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/credits/CreditsLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/credits/CreditsLayout.kt @@ -16,7 +16,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import ua.acclorite.book_story.presentation.about.AboutEvent import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar -import ua.acclorite.book_story.ui.common.constants.provideCredits +import ua.acclorite.book_story.ui.credits.data.CreditData @Composable fun CreditsLayout( @@ -32,7 +32,7 @@ fun CreditsLayout( state = listState ) { items( - provideCredits(), + CreditData.credits, key = { it.name } ) { credit -> CreditItem(credit = credit) { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/credits/data/CreditData.kt b/app/src/main/java/ua/acclorite/book_story/ui/credits/data/CreditData.kt new file mode 100644 index 00000000..dea5ddc7 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/ui/credits/data/CreditData.kt @@ -0,0 +1,101 @@ +/* + * Book's Story — free and open-source Material You eBook reader. + * Copyright (C) 2024-2025 Acclorite + * SPDX-License-Identifier: GPL-3.0-only + */ + +package ua.acclorite.book_story.ui.credits.data + +import kotlinx.collections.immutable.persistentListOf +import ua.acclorite.book_story.R +import ua.acclorite.book_story.core.ui.UIText +import ua.acclorite.book_story.ui.about.model.Credit + +object CreditData { + val credits = persistentListOf( + Credit( + name = "Tachiyomi (Mihon)", + source = "GitHub", + credits = listOf( + UIText.StringResource(R.string.credits_design), + UIText.StringResource(R.string.credits_ideas), + UIText.StringValue("Readme") + ), + website = "https://www.github.com/mihonapp/mihon" + ), + Credit( + name = "Kitsune", + source = "GitHub", + credits = listOf( + UIText.StringResource(R.string.credits_updates), + UIText.StringResource(R.string.credits_ideas) + ), + website = "https://www.github.com/Drumber/Kitsune" + ), + Credit( + name = "Voyager", + source = "Voyager Website", + credits = listOf( + UIText.StringResource(R.string.credits_ideas) + ), + website = "https://voyager.adriel.cafe/" + ), + Credit( + name = "Material Design Icons", + source = "Google Fonts", + credits = listOf( + UIText.StringResource(R.string.credits_icon) + ), + website = "https://fonts.google.com/icons" + ), + Credit( + name = "Material Design Fonts", + source = "Google Fonts", + credits = listOf( + UIText.StringResource(R.string.credits_fonts) + ), + website = "https://fonts.google.com" + ), + Credit( + name = "Weblate", + source = "Hosted Weblate", + credits = listOf( + UIText.StringResource(R.string.credits_translation), + UIText.StringResource(R.string.credits_contribution) + ), + website = "https://hosted.weblate.org/projects/book-story" + ), + Credit( + name = "OpenDyslexic Font", + source = "OpenDyslexic Website", + credits = listOf( + UIText.StringResource(R.string.credits_fonts) + ), + website = "https://opendyslexic.org" + ), + Credit( + name = "GitLab Badge", + source = "Censorship Website", + credits = listOf( + UIText.StringResource(R.string.credits_icon) + ), + website = "https://censorship.no/en/index.html" + ), + Credit( + name = "GitHub Badge", + source = "GitHub", + credits = listOf( + UIText.StringResource(R.string.credits_icon) + ), + website = "https://github.com/Kunzisoft/Github-badge" + ), + Credit( + name = "Codeberg Badge", + source = "Codeberg", + credits = listOf( + UIText.StringResource(R.string.credits_icon) + ), + website = "https://codeberg.org/Codeberg/GetItOnCodeberg" + ) + ) +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/help/HelpItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/help/HelpItem.kt index 32db97d9..1807e0ad 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/help/HelpItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/help/HelpItem.kt @@ -39,8 +39,8 @@ import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R import ua.acclorite.book_story.ui.common.components.common.StyledText +import ua.acclorite.book_story.ui.common.helpers.noRippleClickable import ua.acclorite.book_story.ui.common.model.Position -import ua.acclorite.book_story.ui.common.util.noRippleClickable import ua.acclorite.book_story.ui.help.model.HelpTip import ua.acclorite.book_story.ui.theme.ExpandingTransition diff --git a/app/src/main/java/ua/acclorite/book_story/ui/help/HelpLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/help/HelpLayout.kt index 19bbe26d..dac7b527 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/help/HelpLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/help/HelpLayout.kt @@ -15,8 +15,8 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar -import ua.acclorite.book_story.ui.common.constants.provideHelpTips import ua.acclorite.book_story.ui.common.model.Position +import ua.acclorite.book_story.ui.help.data.HelpData @Composable fun HelpLayout( @@ -31,14 +31,14 @@ fun HelpLayout( contentPadding = PaddingValues(vertical = 16.dp) ) { itemsIndexed( - provideHelpTips(), + HelpData.tips, key = { _, helpTip -> helpTip.title } ) { index, helpTip -> HelpItem( helpTip = helpTip, position = when (index) { 0 -> Position.TOP - provideHelpTips().lastIndex -> Position.BOTTOM + HelpData.tips.lastIndex -> Position.BOTTOM else -> Position.CENTER } ) diff --git a/app/src/main/java/ua/acclorite/book_story/ui/help/data/HelpData.kt b/app/src/main/java/ua/acclorite/book_story/ui/help/data/HelpData.kt new file mode 100644 index 00000000..cf455ecd --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/ui/help/data/HelpData.kt @@ -0,0 +1,155 @@ +/* + * Book's Story — free and open-source Material You eBook reader. + * Copyright (C) 2024-2025 Acclorite + * SPDX-License-Identifier: GPL-3.0-only + */ + +package ua.acclorite.book_story.ui.help.data + +import androidx.compose.ui.res.stringResource +import kotlinx.collections.immutable.persistentListOf +import ua.acclorite.book_story.R +import ua.acclorite.book_story.ui.help.HelpAnnotation +import ua.acclorite.book_story.ui.help.model.HelpTip + +object HelpData { + val tips = persistentListOf( + HelpTip( + title = R.string.help_title_how_to_add_books, + description = { + append(stringResource(id = R.string.help_desc_how_to_add_books_1) + " ") + + HelpAnnotation { + append(stringResource(id = R.string.help_desc_how_to_add_books_2)) + } + append(". ") + + append(stringResource(id = R.string.help_desc_how_to_add_books_3) + " ") + + HelpAnnotation { + append(stringResource(id = R.string.help_desc_how_to_add_books_4)) + } + append(".") + } + ), + + HelpTip( + title = R.string.help_title_how_to_customize_app, + description = { + append(stringResource(id = R.string.help_desc_how_to_customize_app_1) + " ") + + HelpAnnotation { + append(stringResource(id = R.string.help_desc_how_to_customize_app_2)) + } + append(". ") + + append(stringResource(id = R.string.help_desc_how_to_customize_app_3)) + } + ), + + HelpTip( + title = R.string.help_title_how_to_move_or_delete_books, + description = { + append(stringResource(id = R.string.help_desc_how_to_move_or_delete_books_1) + " ") + + HelpAnnotation { + append(stringResource(id = R.string.help_desc_how_to_move_or_delete_books_2)) + } + append(". ") + + append(stringResource(id = R.string.help_desc_how_to_move_or_delete_books_3)) + } + ), + + HelpTip( + title = R.string.help_title_how_to_edit_book, + description = { + append(stringResource(id = R.string.help_desc_how_to_edit_book_1) + " ") + + HelpAnnotation { + append(stringResource(id = R.string.help_desc_how_to_edit_book_2)) + } + append(" ") + + append(stringResource(id = R.string.help_desc_how_to_edit_book_3)) + } + ), + + HelpTip( + title = R.string.help_title_how_to_read_book, + description = { + append(stringResource(id = R.string.help_desc_how_to_read_book_1) + " ") + + HelpAnnotation { + append(stringResource(id = R.string.help_desc_how_to_read_book_2)) + } + append(". ") + + append(stringResource(id = R.string.help_desc_how_to_read_book_3)) + } + ), + + HelpTip( + title = R.string.help_title_how_to_customize_reader, + description = { + append(stringResource(id = R.string.help_desc_how_to_customize_reader_1) + " ") + + HelpAnnotation { + append(stringResource(id = R.string.help_desc_how_to_customize_reader_2)) + } + append(" ") + + append(stringResource(id = R.string.help_desc_how_to_customize_reader_3)) + } + ), + + HelpTip( + title = R.string.help_title_how_to_manage_history, + description = { + append(stringResource(id = R.string.help_desc_how_to_manage_history_1) + " ") + + HelpAnnotation { + append(stringResource(id = R.string.help_desc_how_to_manage_history_2)) + } + append(". ") + + append(stringResource(id = R.string.help_desc_how_to_manage_history_3)) + } + ), + + HelpTip( + title = R.string.help_title_how_to_use_tooltip, + description = { + append(stringResource(id = R.string.help_desc_how_to_use_tooltip_1)) + } + ), + + HelpTip( + title = R.string.help_title_how_to_use_double_click_translation, + description = { + append(stringResource(id = R.string.help_desc_how_to_use_double_click_translation_1)) + } + ), + + HelpTip( + title = R.string.help_title_how_to_create_color_presets, + description = { + append(stringResource(id = R.string.help_desc_how_to_create_color_presets_1)) + } + ), + + HelpTip( + title = R.string.help_title_how_to_use_color_presets, + description = { + append(stringResource(id = R.string.help_desc_how_to_use_color_presets_1)) + } + ), + + HelpTip( + title = R.string.help_title_how_to_use_perception_expander, + description = { + append(stringResource(id = R.string.help_desc_how_to_use_perception_expander_1)) + } + ) + ) +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryItem.kt index aac1c837..c19701e9 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryItem.kt @@ -40,7 +40,7 @@ import ua.acclorite.book_story.domain.model.history.History import ua.acclorite.book_story.ui.common.components.common.AsyncCoverImage import ua.acclorite.book_story.ui.common.components.common.IconButton import ua.acclorite.book_story.ui.common.components.common.StyledText -import ua.acclorite.book_story.ui.common.util.noRippleClickable +import ua.acclorite.book_story.ui.common.helpers.noRippleClickable import java.text.SimpleDateFormat import java.util.Date import java.util.Locale diff --git a/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryLayout.kt index 47e13c52..a5fde1ac 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryLayout.kt @@ -20,8 +20,8 @@ import ua.acclorite.book_story.R import ua.acclorite.book_story.presentation.history.HistoryEvent import ua.acclorite.book_story.presentation.history.model.GroupedHistory import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar -import ua.acclorite.book_story.ui.common.constants.providePrimaryScrollbar -import ua.acclorite.book_story.ui.common.util.LocalActivity +import ua.acclorite.book_story.ui.common.data.ScrollbarData +import ua.acclorite.book_story.ui.common.helpers.LocalActivity import ua.acclorite.book_story.ui.settings.components.SettingsSubcategoryTitle import ua.acclorite.book_story.ui.theme.DefaultTransition @@ -42,7 +42,7 @@ fun HistoryLayout( LazyColumnWithScrollbar( modifier = Modifier.fillMaxSize(), state = listState, - scrollbarSettings = providePrimaryScrollbar(false) + scrollbarSettings = ScrollbarData.primaryScrollbar ) { item { Spacer(modifier = Modifier.height(12.dp)) diff --git a/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryBackHandler.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryBackHandler.kt index 4cba5d20..7a25c911 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryBackHandler.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryBackHandler.kt @@ -15,8 +15,8 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.launch import ua.acclorite.book_story.R import ua.acclorite.book_story.presentation.library.LibraryEvent -import ua.acclorite.book_story.ui.common.util.LocalActivity -import ua.acclorite.book_story.ui.common.util.showToast +import ua.acclorite.book_story.ui.common.helpers.LocalActivity +import ua.acclorite.book_story.ui.common.helpers.showToast @Composable fun LibraryBackHandler( diff --git a/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryGridItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryGridItem.kt index 5e1d2538..5a4bbdc2 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryGridItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryGridItem.kt @@ -39,11 +39,11 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R +import ua.acclorite.book_story.core.helpers.calculateProgress import ua.acclorite.book_story.presentation.library.model.LibraryTitlePosition import ua.acclorite.book_story.presentation.library.model.SelectableBook import ua.acclorite.book_story.ui.common.components.common.AsyncCoverImage import ua.acclorite.book_story.ui.common.components.common.StyledText -import ua.acclorite.book_story.ui.common.util.calculateProgress @Composable fun LibraryGridItem( diff --git a/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryGridLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryGridLayout.kt index 12ccdd85..a0a210a9 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryGridLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryGridLayout.kt @@ -16,7 +16,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import ua.acclorite.book_story.presentation.library.model.SelectableBook import ua.acclorite.book_story.ui.common.components.common.LazyVerticalGridWithScrollbar -import ua.acclorite.book_story.ui.common.constants.providePrimaryScrollbar +import ua.acclorite.book_story.ui.common.data.ScrollbarData @Composable fun LibraryGridLayout( @@ -29,7 +29,7 @@ fun LibraryGridLayout( columns = if (autoGridSize) GridCells.Adaptive(120.dp) else GridCells.Fixed(gridSize.coerceAtLeast(1)), modifier = Modifier.fillMaxSize(), - scrollbarSettings = providePrimaryScrollbar(false), + scrollbarSettings = ScrollbarData.primaryScrollbar, contentPadding = PaddingValues(8.dp) ) { items( diff --git a/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryListItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryListItem.kt index 926dc8be..3a41e49b 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryListItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryListItem.kt @@ -33,10 +33,10 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R +import ua.acclorite.book_story.core.helpers.calculateProgress import ua.acclorite.book_story.presentation.library.model.SelectableBook import ua.acclorite.book_story.ui.common.components.common.AsyncCoverImage import ua.acclorite.book_story.ui.common.components.common.StyledText -import ua.acclorite.book_story.ui.common.util.calculateProgress @Composable fun LibraryListItem( diff --git a/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryListLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryListLayout.kt index 222bae43..7cb6d2aa 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryListLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryListLayout.kt @@ -15,7 +15,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import ua.acclorite.book_story.presentation.library.model.SelectableBook import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar -import ua.acclorite.book_story.ui.common.constants.providePrimaryScrollbar +import ua.acclorite.book_story.ui.common.data.ScrollbarData @Composable fun LibraryListLayout( @@ -24,7 +24,7 @@ fun LibraryListLayout( ) { LazyColumnWithScrollbar( modifier = Modifier.fillMaxSize(), - scrollbarSettings = providePrimaryScrollbar(false), + scrollbarSettings = ScrollbarData.primaryScrollbar, contentPadding = PaddingValues(8.dp) ) { items( diff --git a/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryPager.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryPager.kt index 7844073e..9afb26f3 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryPager.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryPager.kt @@ -14,6 +14,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier +import ua.acclorite.book_story.core.helpers.compareByWithOrder import ua.acclorite.book_story.domain.model.library.Category import ua.acclorite.book_story.domain.model.library.CategorySort import ua.acclorite.book_story.presentation.library.LibraryEvent @@ -21,7 +22,6 @@ import ua.acclorite.book_story.presentation.library.model.LibraryLayout import ua.acclorite.book_story.presentation.library.model.LibrarySortOrder import ua.acclorite.book_story.presentation.library.model.LibraryTitlePosition import ua.acclorite.book_story.presentation.library.model.SelectableBook -import ua.acclorite.book_story.ui.common.util.compareByWithOrder import ua.acclorite.book_story.ui.theme.DefaultTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/ui/navigator/Navigator.kt b/app/src/main/java/ua/acclorite/book_story/ui/navigator/Navigator.kt index ae5b165b..fb68d45e 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/navigator/Navigator.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/navigator/Navigator.kt @@ -23,7 +23,7 @@ import kotlinx.coroutines.Dispatchers import ua.acclorite.book_story.presentation.navigator.Navigator import ua.acclorite.book_story.presentation.navigator.Screen import ua.acclorite.book_story.presentation.navigator.StackEvent -import ua.acclorite.book_story.ui.common.util.LocalActivity +import ua.acclorite.book_story.ui.common.helpers.LocalActivity @Composable fun rememberNavigator(initialScreen: Screen): Navigator { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/navigator/NavigatorTabs.kt b/app/src/main/java/ua/acclorite/book_story/ui/navigator/NavigatorTabs.kt index d181c2a8..29e6c496 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/navigator/NavigatorTabs.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/navigator/NavigatorTabs.kt @@ -27,7 +27,7 @@ import androidx.compose.ui.platform.LocalLayoutDirection import androidx.lifecycle.compose.collectAsStateWithLifecycle import kotlinx.coroutines.flow.receiveAsFlow import ua.acclorite.book_story.presentation.navigator.Screen -import ua.acclorite.book_story.ui.common.util.LocalActivity +import ua.acclorite.book_story.ui.common.helpers.LocalActivity @OptIn(ExperimentalMaterial3WindowSizeClassApi::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderBackHandler.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderBackHandler.kt index f603c853..7d78385d 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderBackHandler.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderBackHandler.kt @@ -9,7 +9,7 @@ package ua.acclorite.book_story.ui.reader import androidx.activity.compose.BackHandler import androidx.compose.runtime.Composable import ua.acclorite.book_story.presentation.reader.ReaderEvent -import ua.acclorite.book_story.ui.common.util.LocalActivity +import ua.acclorite.book_story.ui.common.helpers.LocalActivity @Composable fun ReaderBackHandler( diff --git a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderBottomBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderBottomBar.kt index 17ae28d5..615db865 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderBottomBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderBottomBar.kt @@ -36,8 +36,8 @@ import ua.acclorite.book_story.presentation.reader.ReaderEvent import ua.acclorite.book_story.presentation.reader.model.Checkpoint import ua.acclorite.book_story.ui.common.components.common.IconButton import ua.acclorite.book_story.ui.common.components.common.StyledText +import ua.acclorite.book_story.ui.common.helpers.noRippleClickable import ua.acclorite.book_story.ui.common.model.Direction -import ua.acclorite.book_story.ui.common.util.noRippleClickable import ua.acclorite.book_story.ui.theme.HorizontalExpandingTransition import ua.acclorite.book_story.ui.theme.readerBarsColor diff --git a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderChaptersDrawer.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderChaptersDrawer.kt index 549bf213..3e5e5aae 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderChaptersDrawer.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderChaptersDrawer.kt @@ -22,14 +22,14 @@ import androidx.compose.ui.draw.rotate import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R +import ua.acclorite.book_story.core.helpers.calculateProgress import ua.acclorite.book_story.domain.model.reader.ReaderText.Chapter import ua.acclorite.book_story.presentation.reader.ReaderEvent import ua.acclorite.book_story.ui.common.components.common.StyledText import ua.acclorite.book_story.ui.common.components.modal_drawer.ModalDrawer import ua.acclorite.book_story.ui.common.components.modal_drawer.ModalDrawerSelectableItem import ua.acclorite.book_story.ui.common.components.modal_drawer.ModalDrawerTitleItem -import ua.acclorite.book_story.ui.common.util.calculateProgress -import ua.acclorite.book_story.ui.common.util.noRippleClickable +import ua.acclorite.book_story.ui.common.helpers.noRippleClickable import ua.acclorite.book_story.ui.reader.model.ExpandableChapter import ua.acclorite.book_story.ui.theme.ExpandingTransition diff --git a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderErrorPlaceholder.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderErrorPlaceholder.kt index 3ceb5111..35d5025d 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderErrorPlaceholder.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderErrorPlaceholder.kt @@ -24,7 +24,7 @@ import ua.acclorite.book_story.presentation.reader.ReaderEvent import ua.acclorite.book_story.ui.common.components.placeholder.ErrorPlaceholder import ua.acclorite.book_story.ui.common.components.top_bar.TopAppBar import ua.acclorite.book_story.ui.common.components.top_bar.TopAppBarData -import ua.acclorite.book_story.ui.common.util.LocalActivity +import ua.acclorite.book_story.ui.common.helpers.LocalActivity import ua.acclorite.book_story.ui.navigator.NavigatorBackIconButton @OptIn(ExperimentalMaterial3Api::class) diff --git a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayout.kt index c0d7b911..b4622305 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayout.kt @@ -43,9 +43,9 @@ import ua.acclorite.book_story.ui.common.components.common.AnimatedVisibility import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar import ua.acclorite.book_story.ui.common.components.common.SelectionContainer import ua.acclorite.book_story.ui.common.components.common.SpacedItem -import ua.acclorite.book_story.ui.common.util.LocalActivity -import ua.acclorite.book_story.ui.common.util.noRippleClickable -import ua.acclorite.book_story.ui.common.util.showToast +import ua.acclorite.book_story.ui.common.helpers.LocalActivity +import ua.acclorite.book_story.ui.common.helpers.noRippleClickable +import ua.acclorite.book_story.ui.common.helpers.showToast import ua.acclorite.book_story.ui.reader.model.FontWithName @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayoutTextParagraph.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayoutTextParagraph.kt index c3599a0f..7314cc8a 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayoutTextParagraph.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayoutTextParagraph.kt @@ -28,7 +28,7 @@ import ua.acclorite.book_story.presentation.reader.ReaderEvent import ua.acclorite.book_story.presentation.reader.model.ReaderFontThickness import ua.acclorite.book_story.presentation.reader.model.ReaderTextAlignment import ua.acclorite.book_story.ui.common.components.common.StyledText -import ua.acclorite.book_story.ui.common.util.noRippleClickable +import ua.acclorite.book_story.ui.common.helpers.noRippleClickable import ua.acclorite.book_story.ui.reader.model.FontWithName @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderSettingsBottomSheet.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderSettingsBottomSheet.kt index 1535988d..8940d07a 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderSettingsBottomSheet.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderSettingsBottomSheet.kt @@ -28,7 +28,7 @@ import kotlinx.coroutines.launch import ua.acclorite.book_story.presentation.reader.ReaderEvent import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar import ua.acclorite.book_story.ui.common.components.modal_bottom_sheet.ModalBottomSheet -import ua.acclorite.book_story.ui.common.util.LocalActivity +import ua.acclorite.book_story.ui.common.helpers.LocalActivity import ua.acclorite.book_story.ui.settings.appearance.colors.ColorsSubcategory import ua.acclorite.book_story.ui.settings.reader.chapters.ChaptersSubcategory import ua.acclorite.book_story.ui.settings.reader.font.FontSubcategory diff --git a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderTopBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderTopBar.kt index 74d09ce1..030a23a6 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderTopBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderTopBar.kt @@ -35,8 +35,8 @@ import ua.acclorite.book_story.presentation.reader.ReaderEvent import ua.acclorite.book_story.presentation.settings.SettingsEvent import ua.acclorite.book_story.ui.common.components.common.IconButton import ua.acclorite.book_story.ui.common.components.common.StyledText -import ua.acclorite.book_story.ui.common.util.LocalActivity -import ua.acclorite.book_story.ui.common.util.noRippleClickable +import ua.acclorite.book_story.ui.common.helpers.LocalActivity +import ua.acclorite.book_story.ui.common.helpers.noRippleClickable import ua.acclorite.book_story.ui.theme.readerBarsColor @OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class) diff --git a/app/src/main/java/ua/acclorite/book_story/ui/common/constants/FontConstants.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/data/ReaderData.kt similarity index 97% rename from app/src/main/java/ua/acclorite/book_story/ui/common/constants/FontConstants.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/data/ReaderData.kt index a24cf1e4..10b0dde9 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/common/constants/FontConstants.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/data/ReaderData.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.common.constants +package ua.acclorite.book_story.ui.reader.data import androidx.annotation.FontRes import androidx.compose.ui.text.ExperimentalTextApi @@ -13,12 +13,13 @@ import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontVariation import androidx.compose.ui.text.font.FontWeight +import kotlinx.collections.immutable.persistentListOf import ua.acclorite.book_story.R import ua.acclorite.book_story.core.ui.UIText import ua.acclorite.book_story.ui.reader.model.FontWithName -fun provideFonts(): List { - return mutableListOf( +object ReaderData { + val fonts = persistentListOf( FontWithName( "default", UIText.StringResource(R.string.default_string), diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/filter/components/BrowseFilterOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/filter/components/BrowseFilterOption.kt index 74ea515c..06bce028 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/filter/components/BrowseFilterOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/filter/components/BrowseFilterOption.kt @@ -25,13 +25,13 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle +import ua.acclorite.book_story.core.data.ExtensionsData import ua.acclorite.book_story.presentation.main.MainEvent import ua.acclorite.book_story.presentation.main.MainModel import ua.acclorite.book_story.ui.common.components.common.StyledText -import ua.acclorite.book_story.ui.common.constants.provideExtensions fun LazyListScope.BrowseFilterOption() { - items(provideExtensions(), key = { it }) { + items(ExtensionsData.fileExtensions, key = { it }) { val mainModel = hiltViewModel() val state = mainModel.state.collectAsStateWithLifecycle() diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/scan/components/BrowseScanOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/scan/components/BrowseScanOption.kt index b31ec76e..b6cc3ade 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/scan/components/BrowseScanOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/scan/components/BrowseScanOption.kt @@ -44,8 +44,8 @@ import ua.acclorite.book_story.presentation.settings.SettingsEvent import ua.acclorite.book_story.presentation.settings.SettingsModel import ua.acclorite.book_story.ui.common.components.common.IconButton import ua.acclorite.book_story.ui.common.components.common.StyledText -import ua.acclorite.book_story.ui.common.util.noRippleClickable -import ua.acclorite.book_story.ui.common.util.showToast +import ua.acclorite.book_story.ui.common.helpers.noRippleClickable +import ua.acclorite.book_story.ui.common.helpers.showToast import ua.acclorite.book_story.ui.theme.dynamicListItemColor @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/general/components/AppLanguageOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/general/components/AppLanguageOption.kt index 8d1dca70..f11df697 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/general/components/AppLanguageOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/general/components/AppLanguageOption.kt @@ -12,10 +12,10 @@ import androidx.compose.ui.res.stringResource import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import ua.acclorite.book_story.R +import ua.acclorite.book_story.core.data.CoreData import ua.acclorite.book_story.presentation.main.MainEvent import ua.acclorite.book_story.presentation.main.MainModel import ua.acclorite.book_story.ui.common.components.settings.ChipsWithTitle -import ua.acclorite.book_story.ui.common.constants.provideLanguages import ua.acclorite.book_story.ui.common.model.ButtonItem @Composable @@ -25,7 +25,7 @@ fun AppLanguageOption() { ChipsWithTitle( title = stringResource(id = R.string.language_option), - chips = provideLanguages().sortedBy { it.second }.map { + chips = CoreData.languages.sortedBy { it.second }.map { ButtonItem( it.first, it.second, diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/library/categories/components/LibraryCategoriesOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/categories/components/LibraryCategoriesOption.kt index decdd88c..d54e4c72 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/library/categories/components/LibraryCategoriesOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/categories/components/LibraryCategoriesOption.kt @@ -55,7 +55,7 @@ import ua.acclorite.book_story.ui.common.components.common.IconButton import ua.acclorite.book_story.ui.common.components.common.StyledText import ua.acclorite.book_story.ui.common.components.dialog.Dialog import ua.acclorite.book_story.ui.common.components.dialog.DialogWithTextField -import ua.acclorite.book_story.ui.common.util.noRippleClickable +import ua.acclorite.book_story.ui.common.helpers.noRippleClickable import ua.acclorite.book_story.ui.theme.ExpandingTransition import ua.acclorite.book_story.ui.theme.dynamicListItemColor diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontFamilyOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontFamilyOption.kt index b04726ea..a8fd10cf 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontFamilyOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontFamilyOption.kt @@ -16,8 +16,8 @@ import ua.acclorite.book_story.R import ua.acclorite.book_story.presentation.main.MainEvent import ua.acclorite.book_story.presentation.main.MainModel import ua.acclorite.book_story.ui.common.components.settings.ChipsWithTitle -import ua.acclorite.book_story.ui.common.constants.provideFonts import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.reader.data.ReaderData @Composable fun FontFamilyOption() { @@ -25,7 +25,7 @@ fun FontFamilyOption() { val state = mainModel.state.collectAsStateWithLifecycle() val fontFamily = remember(state.value.fontFamily) { - provideFonts().run { + ReaderData.fonts.run { find { it.id == state.value.fontFamily } ?: get(0) @@ -34,7 +34,7 @@ fun FontFamilyOption() { ChipsWithTitle( title = stringResource(id = R.string.font_family_option), - chips = provideFonts() + chips = ReaderData.fonts .map { ButtonItem( id = it.id, diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontStyleOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontStyleOption.kt index c5aeaa79..158013ca 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontStyleOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontStyleOption.kt @@ -17,8 +17,8 @@ import ua.acclorite.book_story.R import ua.acclorite.book_story.presentation.main.MainEvent import ua.acclorite.book_story.presentation.main.MainModel import ua.acclorite.book_story.ui.common.components.settings.SegmentedButtonWithTitle -import ua.acclorite.book_story.ui.common.constants.provideFonts import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.reader.data.ReaderData @Composable fun FontStyleOption() { @@ -26,7 +26,7 @@ fun FontStyleOption() { val state = mainModel.state.collectAsStateWithLifecycle() val fontFamily = remember(state.value.fontFamily) { - provideFonts().run { + ReaderData.fonts.run { find { it.id == state.value.fontFamily } ?: get(0) diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontThicknessOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontThicknessOption.kt index 447497c3..5be8bb55 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontThicknessOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontThicknessOption.kt @@ -17,8 +17,8 @@ import ua.acclorite.book_story.presentation.main.MainEvent import ua.acclorite.book_story.presentation.main.MainModel import ua.acclorite.book_story.presentation.reader.model.ReaderFontThickness import ua.acclorite.book_story.ui.common.components.settings.ChipsWithTitle -import ua.acclorite.book_story.ui.common.constants.provideFonts import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.reader.data.ReaderData @Composable fun FontThicknessOption() { @@ -26,7 +26,7 @@ fun FontThicknessOption() { val state = mainModel.state.collectAsStateWithLifecycle() val fontFamily = remember(state.value.fontFamily) { - provideFonts().run { + ReaderData.fonts.run { find { it.id == state.value.fontFamily } ?: get(0) diff --git a/app/src/main/java/ua/acclorite/book_story/ui/theme/ThemeLogger.kt b/app/src/main/java/ua/acclorite/book_story/ui/theme/ThemeLogger.kt index cbc29b14..5f3e4cc8 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/theme/ThemeLogger.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/theme/ThemeLogger.kt @@ -11,7 +11,7 @@ package ua.acclorite.book_story.ui.theme import androidx.compose.material3.ColorScheme import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb -import ua.acclorite.book_story.core.logD +import ua.acclorite.book_story.core.log.logD /** * This function logs all the colors of the colorScheme.