diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 684215ac..08742c3c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -37,7 +37,7 @@ MutableList.addAll(calculation: () -> List) { addAll(calculation()) diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/util/PrimitiveExtensions.kt b/app/src/main/java/ua/acclorite/book_story/core/helpers/PrimitiveHelpers.kt similarity index 86% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/util/PrimitiveExtensions.kt rename to app/src/main/java/ua/acclorite/book_story/core/helpers/PrimitiveHelpers.kt index ffdc9fff..bab1abf0 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/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.presentation.core.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/Log.kt b/app/src/main/java/ua/acclorite/book_story/core/log/Log.kt new file mode 100644 index 00000000..b934bf5f --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/core/log/Log.kt @@ -0,0 +1,25 @@ +/* + * 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.log + +import android.util.Log + +fun logI(message: String) { + Log.i("INFO", message) +} + +fun logD(message: String) { + Log.d("DEBUG", message) +} + +fun logW(message: String) { + Log.w("WARNING", message) +} + +fun logE(message: String) { + Log.e("ERROR", message) +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/ui/UIText.kt b/app/src/main/java/ua/acclorite/book_story/core/ui/UIText.kt similarity index 96% rename from app/src/main/java/ua/acclorite/book_story/domain/ui/UIText.kt rename to app/src/main/java/ua/acclorite/book_story/core/ui/UIText.kt index 672d49e6..8a87d1aa 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/ui/UIText.kt +++ b/app/src/main/java/ua/acclorite/book_story/core/ui/UIText.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.ui +package ua.acclorite.book_story.core.ui import android.content.Context import android.os.Parcelable diff --git a/app/src/main/java/ua/acclorite/book_story/data/di/RepositoryModule.kt b/app/src/main/java/ua/acclorite/book_story/data/di/RepositoryModule.kt index 130a9e70..f1ec15ae 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/di/RepositoryModule.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/di/RepositoryModule.kt @@ -20,6 +20,8 @@ import ua.acclorite.book_story.data.mapper.category_sort.CategorySortMapper import ua.acclorite.book_story.data.mapper.category_sort.CategorySortSortMapperImpl import ua.acclorite.book_story.data.mapper.color_preset.ColorPresetMapper import ua.acclorite.book_story.data.mapper.color_preset.ColorPresetMapperImpl +import ua.acclorite.book_story.data.mapper.file.FileMapper +import ua.acclorite.book_story.data.mapper.file.FileMapperImpl import ua.acclorite.book_story.data.mapper.history.HistoryMapper import ua.acclorite.book_story.data.mapper.history.HistoryMapperImpl import ua.acclorite.book_story.data.parser.FileParser @@ -123,6 +125,12 @@ abstract class RepositoryModule { categorySortSortMapperImpl: CategorySortSortMapperImpl ): CategorySortMapper + @Binds + @Singleton + abstract fun bindFileMapper( + fileMapperImpl: FileMapperImpl + ): FileMapper + @Binds @Singleton abstract fun bindFileParser( diff --git a/app/src/main/java/ua/acclorite/book_story/data/di/ServiceModule.kt b/app/src/main/java/ua/acclorite/book_story/data/di/ServiceModule.kt new file mode 100644 index 00000000..2db94b37 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/data/di/ServiceModule.kt @@ -0,0 +1,34 @@ +/* + * 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.data.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import ua.acclorite.book_story.data.service.CoverImageHandlerImpl +import ua.acclorite.book_story.data.service.FileProviderImpl +import ua.acclorite.book_story.domain.service.CoverImageHandler +import ua.acclorite.book_story.domain.service.FileProvider +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +abstract class ServiceModule { + + @Binds + @Singleton + abstract fun bindFileProvider( + fileProviderImpl: FileProviderImpl + ): FileProvider + + @Binds + @Singleton + abstract fun bindCoverImageHandler( + coverImageHandlerImpl: CoverImageHandlerImpl + ): CoverImageHandler +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/data/local/dto/CategorySortEntity.kt b/app/src/main/java/ua/acclorite/book_story/data/local/dto/CategorySortEntity.kt index f83ea3df..44f53cf9 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/local/dto/CategorySortEntity.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/local/dto/CategorySortEntity.kt @@ -8,7 +8,7 @@ package ua.acclorite.book_story.data.local.dto import androidx.room.Entity import androidx.room.PrimaryKey -import ua.acclorite.book_story.domain.library.display.LibrarySortOrder +import ua.acclorite.book_story.presentation.library.model.LibrarySortOrder @Entity data class CategorySortEntity( diff --git a/app/src/main/java/ua/acclorite/book_story/data/local/room/BookDao.kt b/app/src/main/java/ua/acclorite/book_story/data/local/room/BookDao.kt index 66740373..f510431f 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/local/room/BookDao.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/local/room/BookDao.kt @@ -40,16 +40,13 @@ interface BookDao { suspend fun searchBooks(query: String): List @Query("SELECT * FROM bookentity WHERE id=:id") - suspend fun findBookById(id: Int): BookEntity - - @Query("SELECT * FROM bookentity WHERE id IN (:ids)") - suspend fun findBooksById(ids: List): List + suspend fun findBookById(id: Int): BookEntity? @Delete - suspend fun deleteBooks(books: List) + suspend fun deleteBook(book: BookEntity): Int @Update - suspend fun updateBooks(books: List) + suspend fun updateBook(book: BookEntity): Int /* - - - - - - - - - - - - - - - - - - - - - - */ @@ -58,21 +55,21 @@ interface BookDao { suspend fun getHistory(): List @Query("SELECT * FROM historyentity WHERE bookId = :bookId ORDER BY time DESC LIMIT 1") - fun getLatestHistoryForBook(bookId: Int): HistoryEntity? + fun getHistoryForBook(bookId: Int): HistoryEntity? @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insertHistory( - history: List + history: HistoryEntity ) @Query("DELETE FROM historyentity") - suspend fun deleteWholeHistory() + suspend fun deleteWholeHistory(): Int @Query("DELETE FROM historyentity WHERE bookId = :bookId") - suspend fun deleteBookHistory(bookId: Int) + suspend fun deleteHistoryForBook(bookId: Int): Int @Delete - suspend fun deleteHistory(history: List) + suspend fun deleteHistory(history: HistoryEntity): Int /* - - - - - - - - - - - - - - - - - - - - - - */ diff --git a/app/src/main/java/ua/acclorite/book_story/data/mapper/book/BookMapper.kt b/app/src/main/java/ua/acclorite/book_story/data/mapper/book/BookMapper.kt index 91d07075..c6c31b75 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/mapper/book/BookMapper.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/mapper/book/BookMapper.kt @@ -7,10 +7,9 @@ package ua.acclorite.book_story.data.mapper.book import ua.acclorite.book_story.data.local.dto.BookEntity -import ua.acclorite.book_story.domain.library.book.Book +import ua.acclorite.book_story.domain.model.library.Book interface BookMapper { - suspend fun toBookEntity(book: Book): BookEntity - - suspend fun toBook(bookEntity: BookEntity): Book + fun toBookEntity(book: Book): BookEntity + fun toBook(bookEntity: BookEntity): Book } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/data/mapper/book/BookMapperImpl.kt b/app/src/main/java/ua/acclorite/book_story/data/mapper/book/BookMapperImpl.kt index e2ceaa20..911620eb 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/mapper/book/BookMapperImpl.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/mapper/book/BookMapperImpl.kt @@ -8,13 +8,13 @@ package ua.acclorite.book_story.data.mapper.book import androidx.core.net.toUri import ua.acclorite.book_story.R +import ua.acclorite.book_story.core.ui.UIText import ua.acclorite.book_story.data.local.dto.BookEntity -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.ui.UIText +import ua.acclorite.book_story.domain.model.library.Book import javax.inject.Inject class BookMapperImpl @Inject constructor() : BookMapper { - override suspend fun toBookEntity(book: Book): BookEntity { + override fun toBookEntity(book: Book): BookEntity { return BookEntity( id = book.id, title = book.title, @@ -29,7 +29,7 @@ class BookMapperImpl @Inject constructor() : BookMapper { ) } - override suspend fun toBook(bookEntity: BookEntity): Book { + override fun toBook(bookEntity: BookEntity): Book { return Book( id = bookEntity.id, title = bookEntity.title, diff --git a/app/src/main/java/ua/acclorite/book_story/data/mapper/category/CategoryMapper.kt b/app/src/main/java/ua/acclorite/book_story/data/mapper/category/CategoryMapper.kt index a76be73a..71de96da 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/mapper/category/CategoryMapper.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/mapper/category/CategoryMapper.kt @@ -7,10 +7,9 @@ package ua.acclorite.book_story.data.mapper.category import ua.acclorite.book_story.data.local.dto.CategoryEntity -import ua.acclorite.book_story.domain.library.category.Category +import ua.acclorite.book_story.domain.model.library.Category interface CategoryMapper { - suspend fun toCategoryEntity(category: Category): CategoryEntity - - suspend fun toCategory(categoryEntity: CategoryEntity): Category + fun toCategoryEntity(category: Category): CategoryEntity + fun toCategory(categoryEntity: CategoryEntity): Category } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/data/mapper/category/CategoryMapperImpl.kt b/app/src/main/java/ua/acclorite/book_story/data/mapper/category/CategoryMapperImpl.kt index d0f9238e..fd8f4f71 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/mapper/category/CategoryMapperImpl.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/mapper/category/CategoryMapperImpl.kt @@ -7,11 +7,11 @@ package ua.acclorite.book_story.data.mapper.category import ua.acclorite.book_story.data.local.dto.CategoryEntity -import ua.acclorite.book_story.domain.library.category.Category +import ua.acclorite.book_story.domain.model.library.Category import javax.inject.Inject class CategoryMapperImpl @Inject constructor() : CategoryMapper { - override suspend fun toCategoryEntity(category: Category): CategoryEntity { + override fun toCategoryEntity(category: Category): CategoryEntity { return CategoryEntity( id = category.id, title = category.title, @@ -19,7 +19,7 @@ class CategoryMapperImpl @Inject constructor() : CategoryMapper { ) } - override suspend fun toCategory(categoryEntity: CategoryEntity): Category { + override fun toCategory(categoryEntity: CategoryEntity): Category { return Category( id = categoryEntity.id, title = categoryEntity.title, diff --git a/app/src/main/java/ua/acclorite/book_story/data/mapper/category_sort/CategorySortMapper.kt b/app/src/main/java/ua/acclorite/book_story/data/mapper/category_sort/CategorySortMapper.kt index a0666058..36a10ba9 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/mapper/category_sort/CategorySortMapper.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/mapper/category_sort/CategorySortMapper.kt @@ -7,10 +7,9 @@ package ua.acclorite.book_story.data.mapper.category_sort import ua.acclorite.book_story.data.local.dto.CategorySortEntity -import ua.acclorite.book_story.domain.library.category.CategorySort +import ua.acclorite.book_story.domain.model.library.CategorySort interface CategorySortMapper { - suspend fun toCategorySortEntity(categorySort: CategorySort): CategorySortEntity - - suspend fun toCategorySort(categorySortEntity: CategorySortEntity): CategorySort + fun toCategorySortEntity(categorySort: CategorySort): CategorySortEntity + fun toCategorySort(categorySortEntity: CategorySortEntity): CategorySort } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/data/mapper/category_sort/CategorySortSortMapperImpl.kt b/app/src/main/java/ua/acclorite/book_story/data/mapper/category_sort/CategorySortSortMapperImpl.kt index be5e7c70..069b44a1 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/mapper/category_sort/CategorySortSortMapperImpl.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/mapper/category_sort/CategorySortSortMapperImpl.kt @@ -7,11 +7,11 @@ package ua.acclorite.book_story.data.mapper.category_sort import ua.acclorite.book_story.data.local.dto.CategorySortEntity -import ua.acclorite.book_story.domain.library.category.CategorySort +import ua.acclorite.book_story.domain.model.library.CategorySort import javax.inject.Inject class CategorySortSortMapperImpl @Inject constructor() : CategorySortMapper { - override suspend fun toCategorySortEntity(categorySort: CategorySort): CategorySortEntity { + override fun toCategorySortEntity(categorySort: CategorySort): CategorySortEntity { return CategorySortEntity( categoryId = categorySort.categoryId, sortOrder = categorySort.sortOrder, @@ -19,7 +19,7 @@ class CategorySortSortMapperImpl @Inject constructor() : CategorySortMapper { ) } - override suspend fun toCategorySort(categorySortEntity: CategorySortEntity): CategorySort { + override fun toCategorySort(categorySortEntity: CategorySortEntity): CategorySort { return CategorySort( categoryId = categorySortEntity.categoryId, sortOrder = categorySortEntity.sortOrder, diff --git a/app/src/main/java/ua/acclorite/book_story/data/mapper/color_preset/ColorPresetMapper.kt b/app/src/main/java/ua/acclorite/book_story/data/mapper/color_preset/ColorPresetMapper.kt index caa23bac..03a7915b 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/mapper/color_preset/ColorPresetMapper.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/mapper/color_preset/ColorPresetMapper.kt @@ -7,10 +7,9 @@ package ua.acclorite.book_story.data.mapper.color_preset import ua.acclorite.book_story.data.local.dto.ColorPresetEntity -import ua.acclorite.book_story.domain.reader.ColorPreset +import ua.acclorite.book_story.domain.model.reader.ColorPreset interface ColorPresetMapper { - suspend fun toColorPresetEntity(colorPreset: ColorPreset, order: Int): ColorPresetEntity - - suspend fun toColorPreset(colorPresetEntity: ColorPresetEntity): ColorPreset + fun toColorPresetEntity(colorPreset: ColorPreset, order: Int): ColorPresetEntity + fun toColorPreset(colorPresetEntity: ColorPresetEntity): ColorPreset } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/data/mapper/color_preset/ColorPresetMapperImpl.kt b/app/src/main/java/ua/acclorite/book_story/data/mapper/color_preset/ColorPresetMapperImpl.kt index 566426a7..012038b0 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/mapper/color_preset/ColorPresetMapperImpl.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/mapper/color_preset/ColorPresetMapperImpl.kt @@ -8,11 +8,11 @@ package ua.acclorite.book_story.data.mapper.color_preset import androidx.compose.ui.graphics.Color import ua.acclorite.book_story.data.local.dto.ColorPresetEntity -import ua.acclorite.book_story.domain.reader.ColorPreset +import ua.acclorite.book_story.domain.model.reader.ColorPreset import javax.inject.Inject class ColorPresetMapperImpl @Inject constructor() : ColorPresetMapper { - override suspend fun toColorPresetEntity( + override fun toColorPresetEntity( colorPreset: ColorPreset, order: Int ): ColorPresetEntity { @@ -27,7 +27,7 @@ class ColorPresetMapperImpl @Inject constructor() : ColorPresetMapper { ) } - override suspend fun toColorPreset(colorPresetEntity: ColorPresetEntity): ColorPreset { + override fun toColorPreset(colorPresetEntity: ColorPresetEntity): ColorPreset { return ColorPreset( id = colorPresetEntity.id!!, name = colorPresetEntity.name, diff --git a/app/src/main/java/ua/acclorite/book_story/data/mapper/file/FileMapper.kt b/app/src/main/java/ua/acclorite/book_story/data/mapper/file/FileMapper.kt new file mode 100644 index 00000000..44d77443 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/data/mapper/file/FileMapper.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.data.mapper.file + +import ua.acclorite.book_story.data.model.file.CachedFile +import ua.acclorite.book_story.domain.model.file.File + +interface FileMapper { + fun toCachedFile(file: File): CachedFile + fun toFile(cachedFile: CachedFile): File +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/data/mapper/file/FileMapperImpl.kt b/app/src/main/java/ua/acclorite/book_story/data/mapper/file/FileMapperImpl.kt new file mode 100644 index 00000000..161ca48c --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/data/mapper/file/FileMapperImpl.kt @@ -0,0 +1,43 @@ +/* + * 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.data.mapper.file + +import android.app.Application +import androidx.core.net.toUri +import ua.acclorite.book_story.data.model.file.CachedFile +import ua.acclorite.book_story.data.model.file.CachedFileCompat +import ua.acclorite.book_story.domain.model.file.File +import javax.inject.Inject + +class FileMapperImpl @Inject constructor( + private val application: Application +) : FileMapper { + override fun toCachedFile(file: File): CachedFile { + return CachedFileCompat.fromUri( + context = application, + uri = file.uri.toUri(), + builder = CachedFileCompat.build( + name = file.name, + path = file.path, + size = file.size, + lastModified = file.lastModified, + isDirectory = file.isDirectory + ) + ) + } + + override fun toFile(cachedFile: CachedFile): File { + return File( + name = cachedFile.name, + uri = cachedFile.uri.toString(), + path = cachedFile.path, + size = cachedFile.size, + lastModified = cachedFile.lastModified, + isDirectory = cachedFile.isDirectory + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/data/mapper/history/HistoryMapper.kt b/app/src/main/java/ua/acclorite/book_story/data/mapper/history/HistoryMapper.kt index b2720343..aa606d4f 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/mapper/history/HistoryMapper.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/mapper/history/HistoryMapper.kt @@ -7,7 +7,7 @@ package ua.acclorite.book_story.data.mapper.history import ua.acclorite.book_story.data.local.dto.HistoryEntity -import ua.acclorite.book_story.domain.history.History +import ua.acclorite.book_story.domain.model.history.History interface HistoryMapper { suspend fun toHistoryEntity(history: History): HistoryEntity diff --git a/app/src/main/java/ua/acclorite/book_story/data/mapper/history/HistoryMapperImpl.kt b/app/src/main/java/ua/acclorite/book_story/data/mapper/history/HistoryMapperImpl.kt index a0d00720..60736be8 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/mapper/history/HistoryMapperImpl.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/mapper/history/HistoryMapperImpl.kt @@ -7,7 +7,7 @@ package ua.acclorite.book_story.data.mapper.history import ua.acclorite.book_story.data.local.dto.HistoryEntity -import ua.acclorite.book_story.domain.history.History +import ua.acclorite.book_story.domain.model.history.History import javax.inject.Inject class HistoryMapperImpl @Inject constructor() : HistoryMapper { diff --git a/app/src/main/java/ua/acclorite/book_story/domain/library/book/NullableBook.kt b/app/src/main/java/ua/acclorite/book_story/data/model/common/NullableBook.kt similarity index 81% rename from app/src/main/java/ua/acclorite/book_story/domain/library/book/NullableBook.kt rename to app/src/main/java/ua/acclorite/book_story/data/model/common/NullableBook.kt index 3547a5e6..e0aca6ac 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/library/book/NullableBook.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/model/common/NullableBook.kt @@ -4,10 +4,11 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.library.book +package ua.acclorite.book_story.data.model.common import androidx.compose.runtime.Immutable -import ua.acclorite.book_story.domain.ui.UIText +import ua.acclorite.book_story.core.ui.UIText +import ua.acclorite.book_story.data.model.library.BookWithCover @Immutable sealed class NullableBook( diff --git a/app/src/main/java/ua/acclorite/book_story/domain/file/CachedFile.kt b/app/src/main/java/ua/acclorite/book_story/data/model/file/CachedFile.kt similarity index 98% rename from app/src/main/java/ua/acclorite/book_story/domain/file/CachedFile.kt rename to app/src/main/java/ua/acclorite/book_story/data/model/file/CachedFile.kt index 5cbae56e..19b577a2 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/file/CachedFile.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/model/file/CachedFile.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.file +package ua.acclorite.book_story.data.model.file import android.content.Context import android.net.Uri @@ -168,7 +168,7 @@ class CachedFile( } /** - * Copies the file to [context].cacheDir and provides [java.io.File]. + * Copies the file to [context].cacheDir and provides [File]. * * @return null if the file is directory or failed */ diff --git a/app/src/main/java/ua/acclorite/book_story/domain/file/CachedFileBuilder.kt b/app/src/main/java/ua/acclorite/book_story/data/model/file/CachedFileBuilder.kt similarity index 88% rename from app/src/main/java/ua/acclorite/book_story/domain/file/CachedFileBuilder.kt rename to app/src/main/java/ua/acclorite/book_story/data/model/file/CachedFileBuilder.kt index a12699c8..c3b98bde 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/file/CachedFileBuilder.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/model/file/CachedFileBuilder.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.file +package ua.acclorite.book_story.data.model.file import androidx.compose.runtime.Immutable diff --git a/app/src/main/java/ua/acclorite/book_story/domain/file/CachedFileCompat.kt b/app/src/main/java/ua/acclorite/book_story/data/model/file/CachedFileCompat.kt similarity index 98% rename from app/src/main/java/ua/acclorite/book_story/domain/file/CachedFileCompat.kt rename to app/src/main/java/ua/acclorite/book_story/data/model/file/CachedFileCompat.kt index 206b8cc6..cc2a817d 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/file/CachedFileCompat.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/model/file/CachedFileCompat.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.file +package ua.acclorite.book_story.data.model.file import android.content.Context import android.net.Uri diff --git a/app/src/main/java/ua/acclorite/book_story/domain/library/book/BookWithCover.kt b/app/src/main/java/ua/acclorite/book_story/data/model/library/BookWithCover.kt similarity index 65% rename from app/src/main/java/ua/acclorite/book_story/domain/library/book/BookWithCover.kt rename to app/src/main/java/ua/acclorite/book_story/data/model/library/BookWithCover.kt index b13339df..b779c13a 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/library/book/BookWithCover.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/model/library/BookWithCover.kt @@ -4,10 +4,11 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.library.book +package ua.acclorite.book_story.data.model.library import androidx.compose.runtime.Immutable -import ua.acclorite.book_story.domain.util.CoverImage +import ua.acclorite.book_story.core.CoverImage +import ua.acclorite.book_story.domain.model.library.Book @Immutable data class BookWithCover( 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 d2369470..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.domain.reader.ReaderText -import ua.acclorite.book_story.presentation.core.util.clearAllMarkdown -import ua.acclorite.book_story.presentation.core.util.clearMarkdown -import ua.acclorite.book_story.presentation.core.util.containsVisibleText +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 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/FileParser.kt b/app/src/main/java/ua/acclorite/book_story/data/parser/FileParser.kt index 1628a4f7..f082a027 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/parser/FileParser.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/parser/FileParser.kt @@ -6,8 +6,8 @@ package ua.acclorite.book_story.data.parser -import ua.acclorite.book_story.domain.file.CachedFile -import ua.acclorite.book_story.domain.library.book.BookWithCover +import ua.acclorite.book_story.data.model.file.CachedFile +import ua.acclorite.book_story.data.model.library.BookWithCover interface FileParser { diff --git a/app/src/main/java/ua/acclorite/book_story/data/parser/FileParserImpl.kt b/app/src/main/java/ua/acclorite/book_story/data/parser/FileParserImpl.kt index bf31dfc5..a91ebbef 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/parser/FileParserImpl.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/parser/FileParserImpl.kt @@ -7,13 +7,13 @@ package ua.acclorite.book_story.data.parser import android.util.Log +import ua.acclorite.book_story.data.model.file.CachedFile +import ua.acclorite.book_story.data.model.library.BookWithCover import ua.acclorite.book_story.data.parser.epub.EpubFileParser import ua.acclorite.book_story.data.parser.fb2.Fb2FileParser import ua.acclorite.book_story.data.parser.html.HtmlFileParser import ua.acclorite.book_story.data.parser.pdf.PdfFileParser import ua.acclorite.book_story.data.parser.txt.TxtFileParser -import ua.acclorite.book_story.domain.file.CachedFile -import ua.acclorite.book_story.domain.library.book.BookWithCover import javax.inject.Inject private const val FILE_PARSER = "File Parser" 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 d670bf5e..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.presentation.core.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/TextParser.kt b/app/src/main/java/ua/acclorite/book_story/data/parser/TextParser.kt index 5b6c22f2..969a51f7 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/parser/TextParser.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/parser/TextParser.kt @@ -6,8 +6,8 @@ package ua.acclorite.book_story.data.parser -import ua.acclorite.book_story.domain.file.CachedFile -import ua.acclorite.book_story.domain.reader.ReaderText +import ua.acclorite.book_story.data.model.file.CachedFile +import ua.acclorite.book_story.domain.model.reader.ReaderText interface TextParser { diff --git a/app/src/main/java/ua/acclorite/book_story/data/parser/TextParserImpl.kt b/app/src/main/java/ua/acclorite/book_story/data/parser/TextParserImpl.kt index c9f476b3..9f6916cd 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/parser/TextParserImpl.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/parser/TextParserImpl.kt @@ -9,13 +9,13 @@ package ua.acclorite.book_story.data.parser import android.util.Log import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext +import ua.acclorite.book_story.data.model.file.CachedFile import ua.acclorite.book_story.data.parser.epub.EpubTextParser import ua.acclorite.book_story.data.parser.html.HtmlTextParser import ua.acclorite.book_story.data.parser.pdf.PdfTextParser import ua.acclorite.book_story.data.parser.txt.TxtTextParser import ua.acclorite.book_story.data.parser.xml.XmlTextParser -import ua.acclorite.book_story.domain.file.CachedFile -import ua.acclorite.book_story.domain.reader.ReaderText +import ua.acclorite.book_story.domain.model.reader.ReaderText import javax.inject.Inject private const val TEXT_PARSER = "Text Parser" diff --git a/app/src/main/java/ua/acclorite/book_story/data/parser/epub/EpubFileParser.kt b/app/src/main/java/ua/acclorite/book_story/data/parser/epub/EpubFileParser.kt index 7e1a215d..0093bae8 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/parser/epub/EpubFileParser.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/parser/epub/EpubFileParser.kt @@ -12,11 +12,11 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import org.jsoup.Jsoup import ua.acclorite.book_story.R +import ua.acclorite.book_story.core.ui.UIText +import ua.acclorite.book_story.data.model.file.CachedFile +import ua.acclorite.book_story.data.model.library.BookWithCover import ua.acclorite.book_story.data.parser.FileParser -import ua.acclorite.book_story.domain.file.CachedFile -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.library.book.BookWithCover -import ua.acclorite.book_story.domain.ui.UIText +import ua.acclorite.book_story.domain.model.library.Book import java.io.File import java.util.zip.ZipFile import javax.inject.Inject 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 b8e475ba..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.file.CachedFile -import ua.acclorite.book_story.domain.reader.ReaderText -import ua.acclorite.book_story.presentation.core.constants.provideImageExtensions -import ua.acclorite.book_story.presentation.core.util.addAll -import ua.acclorite.book_story.presentation.core.util.containsVisibleText +import ua.acclorite.book_story.domain.model.reader.ReaderText 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/fb2/Fb2FileParser.kt b/app/src/main/java/ua/acclorite/book_story/data/parser/fb2/Fb2FileParser.kt index f125bae5..ce50fd5f 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/parser/fb2/Fb2FileParser.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/parser/fb2/Fb2FileParser.kt @@ -9,11 +9,11 @@ package ua.acclorite.book_story.data.parser.fb2 import org.jsoup.Jsoup import org.jsoup.parser.Parser import ua.acclorite.book_story.R +import ua.acclorite.book_story.core.ui.UIText +import ua.acclorite.book_story.data.model.file.CachedFile +import ua.acclorite.book_story.data.model.library.BookWithCover import ua.acclorite.book_story.data.parser.FileParser -import ua.acclorite.book_story.domain.file.CachedFile -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.library.book.BookWithCover -import ua.acclorite.book_story.domain.ui.UIText +import ua.acclorite.book_story.domain.model.library.Book import javax.inject.Inject class Fb2FileParser @Inject constructor() : FileParser { diff --git a/app/src/main/java/ua/acclorite/book_story/data/parser/html/HtmlFileParser.kt b/app/src/main/java/ua/acclorite/book_story/data/parser/html/HtmlFileParser.kt index 2e9d5266..b51bbaba 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/parser/html/HtmlFileParser.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/parser/html/HtmlFileParser.kt @@ -9,11 +9,11 @@ package ua.acclorite.book_story.data.parser.html import org.jsoup.Jsoup import org.jsoup.parser.Parser import ua.acclorite.book_story.R +import ua.acclorite.book_story.core.ui.UIText +import ua.acclorite.book_story.data.model.file.CachedFile +import ua.acclorite.book_story.data.model.library.BookWithCover import ua.acclorite.book_story.data.parser.FileParser -import ua.acclorite.book_story.domain.file.CachedFile -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.library.book.BookWithCover -import ua.acclorite.book_story.domain.ui.UIText +import ua.acclorite.book_story.domain.model.library.Book import javax.inject.Inject class HtmlFileParser @Inject constructor() : FileParser { diff --git a/app/src/main/java/ua/acclorite/book_story/data/parser/html/HtmlTextParser.kt b/app/src/main/java/ua/acclorite/book_story/data/parser/html/HtmlTextParser.kt index 7c6b0256..c8043c73 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/parser/html/HtmlTextParser.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/parser/html/HtmlTextParser.kt @@ -10,10 +10,10 @@ import android.util.Log import kotlinx.coroutines.yield import org.jsoup.Jsoup import org.jsoup.parser.Parser +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.file.CachedFile -import ua.acclorite.book_story.domain.reader.ReaderText +import ua.acclorite.book_story.domain.model.reader.ReaderText import javax.inject.Inject private const val HTML_TAG = "HTML Parser" diff --git a/app/src/main/java/ua/acclorite/book_story/data/parser/pdf/PdfFileParser.kt b/app/src/main/java/ua/acclorite/book_story/data/parser/pdf/PdfFileParser.kt index 2807ad1f..bd13dd39 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/parser/pdf/PdfFileParser.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/parser/pdf/PdfFileParser.kt @@ -10,11 +10,11 @@ import android.app.Application import com.tom_roush.pdfbox.android.PDFBoxResourceLoader import com.tom_roush.pdfbox.pdmodel.PDDocument import ua.acclorite.book_story.R +import ua.acclorite.book_story.core.ui.UIText +import ua.acclorite.book_story.data.model.file.CachedFile +import ua.acclorite.book_story.data.model.library.BookWithCover import ua.acclorite.book_story.data.parser.FileParser -import ua.acclorite.book_story.domain.file.CachedFile -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.library.book.BookWithCover -import ua.acclorite.book_story.domain.ui.UIText +import ua.acclorite.book_story.domain.model.library.Book import javax.inject.Inject class PdfFileParser @Inject constructor( 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 6ec5e951..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.file.CachedFile -import ua.acclorite.book_story.domain.reader.ReaderText -import ua.acclorite.book_story.presentation.core.util.clearAllMarkdown +import ua.acclorite.book_story.domain.model.reader.ReaderText 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/TxtFileParser.kt b/app/src/main/java/ua/acclorite/book_story/data/parser/txt/TxtFileParser.kt index 86620a16..17fc2883 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/parser/txt/TxtFileParser.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/parser/txt/TxtFileParser.kt @@ -7,11 +7,11 @@ package ua.acclorite.book_story.data.parser.txt import ua.acclorite.book_story.R +import ua.acclorite.book_story.core.ui.UIText +import ua.acclorite.book_story.data.model.file.CachedFile +import ua.acclorite.book_story.data.model.library.BookWithCover import ua.acclorite.book_story.data.parser.FileParser -import ua.acclorite.book_story.domain.file.CachedFile -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.library.book.BookWithCover -import ua.acclorite.book_story.domain.ui.UIText +import ua.acclorite.book_story.domain.model.library.Book import javax.inject.Inject class TxtFileParser @Inject constructor() : FileParser { 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 9c7f025d..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.file.CachedFile -import ua.acclorite.book_story.domain.reader.ReaderText -import ua.acclorite.book_story.presentation.core.util.clearAllMarkdown +import ua.acclorite.book_story.domain.model.reader.ReaderText import javax.inject.Inject private const val TXT_TAG = "TXT Parser" diff --git a/app/src/main/java/ua/acclorite/book_story/data/parser/xml/XmlTextParser.kt b/app/src/main/java/ua/acclorite/book_story/data/parser/xml/XmlTextParser.kt index 736c5f89..57a0625f 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/parser/xml/XmlTextParser.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/parser/xml/XmlTextParser.kt @@ -10,10 +10,10 @@ import android.util.Log import kotlinx.coroutines.yield import org.jsoup.Jsoup import org.jsoup.parser.Parser +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.file.CachedFile -import ua.acclorite.book_story.domain.reader.ReaderText +import ua.acclorite.book_story.domain.model.reader.ReaderText import javax.inject.Inject private const val XML_TAG = "XML Parser" diff --git a/app/src/main/java/ua/acclorite/book_story/data/repository/BookRepositoryImpl.kt b/app/src/main/java/ua/acclorite/book_story/data/repository/BookRepositoryImpl.kt index 181b33ba..cc973a36 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/repository/BookRepositoryImpl.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/repository/BookRepositoryImpl.kt @@ -6,399 +6,62 @@ package ua.acclorite.book_story.data.repository -import android.app.Application -import android.graphics.Bitmap -import android.graphics.BitmapFactory -import android.net.Uri -import android.provider.MediaStore -import android.util.Log -import androidx.core.net.toUri -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext +import ua.acclorite.book_story.core.CoverImage import ua.acclorite.book_story.data.local.room.BookDao import ua.acclorite.book_story.data.mapper.book.BookMapper import ua.acclorite.book_story.data.parser.FileParser import ua.acclorite.book_story.data.parser.TextParser -import ua.acclorite.book_story.domain.file.CachedFileCompat -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.library.book.BookWithCover -import ua.acclorite.book_story.domain.reader.ReaderText +import ua.acclorite.book_story.domain.model.library.Book +import ua.acclorite.book_story.domain.model.reader.ReaderText import ua.acclorite.book_story.domain.repository.BookRepository -import ua.acclorite.book_story.domain.util.CoverImage -import java.io.BufferedOutputStream -import java.io.ByteArrayOutputStream -import java.io.File -import java.io.FileOutputStream -import java.util.UUID +import ua.acclorite.book_story.domain.service.FileProvider import javax.inject.Inject import javax.inject.Singleton -private const val GET_TEXT = "GET TEXT, REPO" -private const val GET_BOOKS = "GET BOOKS, REPO" -private const val GET_BOOKS_BY_ID = "GET BOOKS, REPO" -private const val INSERT_BOOK = "INSERT BOOK, REPO" -private const val UPDATE_BOOK = "UPDATE BOOK, REPO" -private const val DELETE_BOOKS = "DELETE BOOKS, REPO" -private const val CAN_RESET_COVER = "CAN RESET COVER, REPO" -private const val RESET_COVER = "RESET COVER, REPO" - -@Suppress("DEPRECATION") @Singleton class BookRepositoryImpl @Inject constructor( - private val application: Application, private val database: BookDao, - private val bookMapper: BookMapper, - private val fileParser: FileParser, - private val textParser: TextParser + private val textParser: TextParser, + private val fileProvider: FileProvider ) : BookRepository { - /** - * Get all books matching [query] from database. - * Empty [query] equals to all books. - */ - override suspend fun getBooks(query: String): List { - Log.i(GET_BOOKS, "Searching for books with query: \"$query\".") - val books = database.searchBooks(query) + override suspend fun searchBooks(query: String): Result> = runCatching { + database.searchBooks(query).map { bookMapper.toBook(it) } + } - Log.i(GET_BOOKS, "Found ${books.size} books.") - return books.map { entity -> - val book = bookMapper.toBook(entity) - val lastHistory = database.getLatestHistoryForBook( - book.id - ) - - book.copy( - lastOpened = lastHistory?.time - ) + override suspend fun getBook(bookId: Int): Result = runCatching { + database.findBookById(bookId).let { + if (it == null) throw NoSuchElementException("Couldn't get book [$bookId].") + else bookMapper.toBook(it) } } - /** - * Get all books that match given [ids]. - */ - override suspend fun getBooksById(ids: List): List { - Log.i(GET_BOOKS_BY_ID, "Getting books with ids: $ids.") - val books = database.findBooksById(ids) + override suspend fun getText(bookId: Int): Result> { + return getBook(bookId) + .mapCatching { fileProvider.getFileFromBook(it).getOrThrow() } + .mapCatching { textParser.parse(it) } + } - return books.map { entity -> - val book = bookMapper.toBook(entity) - val lastHistory = database.getLatestHistoryForBook( - book.id - ) + override suspend fun addBook(book: Book): Result = runCatching { + database.insertBook(bookMapper.toBookEntity(book)) + } - book.copy( - lastOpened = lastHistory?.time - ) + override suspend fun updateBook(book: Book): Result = runCatching { + database.updateBook(bookMapper.toBookEntity(book)).also { + if (it == 0) throw Exception("Could not update book in database.") } } - /** - * Loads text from the book. Already formatted. - */ - override suspend fun getBookText(bookId: Int): List { - if (bookId == -1) return emptyList() - - val book = database.findBookById(bookId) - val cachedFile = CachedFileCompat.fromFullPath( - context = application, - path = book.filePath, - builder = CachedFileCompat.build( - name = book.filePath.substringAfterLast(File.separator), - path = book.filePath, - isDirectory = false - ) - ) - - if (cachedFile == null || !cachedFile.canAccess()) { - Log.e(GET_TEXT, "File [$bookId] does not exist") - return emptyList() + override suspend fun deleteBook(book: Book): Result = runCatching { + database.deleteBook(bookMapper.toBookEntity(book)).also { + if (it == 0) throw Exception("Could not delete book in database.") } - - val readerText = textParser.parse(cachedFile) - - if ( - readerText.filterIsInstance().isEmpty() || - readerText.filterIsInstance().isEmpty() - ) { - Log.e(GET_TEXT, "Could not load text from [$bookId].") - return emptyList() - } - - Log.i(GET_TEXT, "Successfully loaded text of [$bookId] with markdown.") - return readerText } - /** - * Inserts book in database. - * Creates covers folder, which contains cover. - */ - override suspend fun insertBook( - bookWithCover: BookWithCover - ) { - Log.i(INSERT_BOOK, "Inserting ${bookWithCover.book.title}.") - - val filesDir = application.filesDir - val coversDir = File(filesDir, "covers") - - if (!coversDir.exists()) { - Log.i(INSERT_BOOK, "Created covers folder.") - coversDir.mkdirs() - } - - var coverUri = "" - - if (bookWithCover.coverImage != null) { - try { - coverUri = "${UUID.randomUUID()}.webp" - val cover = File(coversDir, coverUri) - - withContext(Dispatchers.IO) { - BufferedOutputStream(FileOutputStream(cover)).use { output -> - bookWithCover.coverImage - .copy(Bitmap.Config.RGB_565, false) - .compress(Bitmap.CompressFormat.WEBP, 20, output) - .let { success -> - if (success) return@let - throw Exception("Couldn't save cover image") - } - } - } - } catch (e: Exception) { - Log.e(INSERT_BOOK, "Could not save cover.") - coverUri = "" - e.printStackTrace() - } - } - - val updatedBook = bookWithCover.book.copy( - coverImage = if (coverUri.isNotBlank()) { - Uri.fromFile(File("$coversDir/$coverUri")) - } else null - ) - - val bookToInsert = bookMapper.toBookEntity(updatedBook) - database.insertBook(bookToInsert) - Log.i(INSERT_BOOK, "Successfully inserted book.") - } - - /** - * Update book without cover image. - */ - override suspend fun updateBook(book: Book) { - val entity = database.findBookById(book.id) - database.updateBooks( - listOf( - bookMapper.toBookEntity( - book.copy( - coverImage = entity.image?.toUri() - ) - ) - ) - ) - } - - /** - * Update cover image of the book. Deletes old cover and replaces with new. - */ - override suspend fun updateCoverImageOfBook( - bookWithOldCover: Book, - newCoverImage: CoverImage? - ) { - Log.i(UPDATE_BOOK, "Updating cover image: ${bookWithOldCover.title}.") - - val book = database.findBookById(bookWithOldCover.id) - var uri: String? = null - - val filesDir = application.filesDir - val coversDir = File(filesDir, "covers") - - if (!coversDir.exists()) { - Log.i(UPDATE_BOOK, "Created covers folder.") - coversDir.mkdirs() - } - - if (newCoverImage != null) { - try { - uri = "${UUID.randomUUID()}.webp" - val cover = File(coversDir, uri) - - withContext(Dispatchers.IO) { - BufferedOutputStream(FileOutputStream(cover)).use { output -> - newCoverImage - .copy(Bitmap.Config.RGB_565, false) - .compress(Bitmap.CompressFormat.WEBP, 20, output) - .let { success -> - if (success) return@let - throw Exception("Couldn't save cover image") - } - } - } - } catch (e: Exception) { - Log.e(UPDATE_BOOK, "Could not save new cover.") - e.printStackTrace() - return - } - } - - if (book.image != null) { - try { - val fileToDelete = File( - "$coversDir${File.separator}${book.image.substringAfterLast(File.separator)}" - ) - - if (fileToDelete.exists()) { - fileToDelete.delete() - } - } catch (e: Exception) { - Log.e(UPDATE_BOOK, "Could not delete old cover.") - e.printStackTrace() - } - } - - val newCoverImageUri = if (uri != null) { - Uri.fromFile(File("$coversDir/$uri")) - } else { - null - } - - val bookWithNewCover = bookWithOldCover.copy( - coverImage = newCoverImageUri - ) - - database.updateBooks( - listOf( - bookMapper.toBookEntity( - bookWithNewCover - ) - ) - ) - Log.i(UPDATE_BOOK, "Successfully updated cover image.") - } - - /** - * Delete books. - * Also deletes cover image and text from internal storage. - */ - override suspend fun deleteBooks(books: List) { - Log.i(DELETE_BOOKS, "Deleting books.") - - val filesDir = application.filesDir - val coversDir = File(filesDir, "covers") - - if (!coversDir.exists()) { - Log.i(DELETE_BOOKS, "Created covers folder.") - coversDir.mkdirs() - } - - database.deleteBooks( - books.map { - val book = database.findBookById(it.id) - - if (book.image != null) { - try { - val fileToDelete = File( - "$coversDir${File.separator}${book.image.substringAfterLast(File.separator)}" - ) - - if (fileToDelete.exists()) { - fileToDelete.delete() - } - } catch (e: Exception) { - Log.e(DELETE_BOOKS, "Could not delete cover image.") - e.printStackTrace() - } - } - - book - } - ) - - Log.i(DELETE_BOOKS, "Successfully deleted books.") - } - - /** - * @return Whether can reset cover image (restore default). - */ - override suspend fun canResetCover(bookId: Int): Boolean { - val book = database.findBookById(bookId) - - val cachedFile = CachedFileCompat.fromFullPath( - application, - book.filePath, - builder = CachedFileCompat.build( - name = book.filePath.substringAfterLast(File.separator), - path = book.filePath, - isDirectory = false - ) - ) - - if (cachedFile == null || !cachedFile.canAccess()) { - return false - } - - val defaultCoverUncompressed = fileParser.parse(cachedFile)?.coverImage - ?: return false - - if (book.image == null) { - Log.i(CAN_RESET_COVER, "Can reset cover image. (current is null)") - return true - } - - val stream = ByteArrayOutputStream() - defaultCoverUncompressed.copy(Bitmap.Config.RGB_565, false).compress( - Bitmap.CompressFormat.WEBP, - 20, - stream - ) - val byteArray = stream.toByteArray() - val defaultCover = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.size) - - val currentCover = try { - MediaStore.Images.Media.getBitmap( - application.contentResolver, - book.image.toUri() - ) - } catch (e: Exception) { - Log.i(CAN_RESET_COVER, "Can reset cover image. (could not get current)") - e.printStackTrace() - return true - } - - return !defaultCover.sameAs(currentCover) - } - - /** - * Reset cover image to default. - * If there is no default cover, returns false. - */ - override suspend fun resetCoverImage(bookId: Int): Boolean { - if (!canResetCover(bookId)) { - Log.w(RESET_COVER, "Cannot reset cover image.") - return false - } - - val book = database.findBookById(bookId) - val cachedFile = CachedFileCompat.fromFullPath( - application, - book.filePath, - builder = CachedFileCompat.build( - name = book.filePath.substringAfterLast(File.separator), - path = book.filePath, - isDirectory = false - ) - ) - - if (cachedFile == null || !cachedFile.canAccess()) { - return false - } - - val defaultCover = fileParser.parse(cachedFile)?.coverImage - ?: return false - updateCoverImageOfBook(bookMapper.toBook(book), defaultCover) - - Log.i(RESET_COVER, "Successfully reset cover image.") - return true + override suspend fun getDefaultCover(book: Book): Result = runCatching { + return fileProvider.getFileFromBook(book) + .mapCatching { fileParser.parse(it)?.coverImage } } } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/data/repository/CategoryRepositoryImpl.kt b/app/src/main/java/ua/acclorite/book_story/data/repository/CategoryRepositoryImpl.kt index 34f5e1d9..50dfce92 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/repository/CategoryRepositoryImpl.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/repository/CategoryRepositoryImpl.kt @@ -9,8 +9,8 @@ package ua.acclorite.book_story.data.repository import ua.acclorite.book_story.data.local.room.BookDao import ua.acclorite.book_story.data.mapper.category.CategoryMapper import ua.acclorite.book_story.data.mapper.category_sort.CategorySortMapper -import ua.acclorite.book_story.domain.library.category.Category -import ua.acclorite.book_story.domain.library.category.CategorySort +import ua.acclorite.book_story.domain.model.library.Category +import ua.acclorite.book_story.domain.model.library.CategorySort import ua.acclorite.book_story.domain.repository.CategoryRepository import javax.inject.Inject import javax.inject.Singleton @@ -22,7 +22,7 @@ class CategoryRepositoryImpl @Inject constructor( private val categorySortMapper: CategorySortMapper, ) : CategoryRepository { - override suspend fun insertCategory(category: Category) { + override suspend fun addCategory(category: Category): Result = runCatching { database.insertCategory( categoryMapper.toCategoryEntity( category.copy( @@ -32,39 +32,41 @@ class CategoryRepositoryImpl @Inject constructor( ) } - override suspend fun getCategories(): List { - return database.getCategories().map { categoryMapper.toCategory(it) }.sortedBy { it.order } + override suspend fun getCategories(): Result> = runCatching { + database.getCategories().map { categoryMapper.toCategory(it) }.sortedBy { it.order } } - override suspend fun updateCategoryTitle(id: Int, title: String) { + override suspend fun updateCategory(category: Category): Result = runCatching { database.updateCategoryTitle( - id = id, - title = title + id = category.id, + title = category.title ) - updateCategoriesOrder(getCategories()) + updateOrder(getCategories().getOrThrow()) } - override suspend fun updateCategoriesOrder(categories: List) { - categories.mapIndexed { index, category -> + override suspend fun updateOrder(categories: List): Result = runCatching { + categories.forEachIndexed { index, category -> database.updateCategoryOrder(category.id, index) } } - override suspend fun deleteCategory(category: Category) { + override suspend fun deleteCategory(category: Category): Result = runCatching { database.deleteCategory(categoryMapper.toCategoryEntity(category)) database.deleteCategorySortEntity(category.id) - updateCategoriesOrder(getCategories()) + updateOrder(getCategories().getOrThrow()) } - override suspend fun updateCategorySortEntity(categorySort: CategorySort) { + override suspend fun updateCategorySorting( + categorySort: CategorySort + ): Result = runCatching { database.updateCategorySort( categorySortMapper.toCategorySortEntity(categorySort) ) } - override suspend fun getCategorySortEntities(): List { - return database.getCategorySortEntities().map { + override suspend fun getCategorySorting(): Result> = runCatching { + database.getCategorySortEntities().map { categorySortMapper.toCategorySort(it) } } diff --git a/app/src/main/java/ua/acclorite/book_story/data/repository/ColorPresetRepositoryImpl.kt b/app/src/main/java/ua/acclorite/book_story/data/repository/ColorPresetRepositoryImpl.kt index a42ebab8..b8230bce 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/repository/ColorPresetRepositoryImpl.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/repository/ColorPresetRepositoryImpl.kt @@ -8,7 +8,7 @@ package ua.acclorite.book_story.data.repository import ua.acclorite.book_story.data.local.room.BookDao import ua.acclorite.book_story.data.mapper.color_preset.ColorPresetMapper -import ua.acclorite.book_story.domain.reader.ColorPreset +import ua.acclorite.book_story.domain.model.reader.ColorPreset import ua.acclorite.book_story.domain.repository.ColorPresetRepository import javax.inject.Inject import javax.inject.Singleton @@ -20,64 +20,51 @@ import javax.inject.Singleton @Singleton class ColorPresetRepositoryImpl @Inject constructor( private val database: BookDao, - private val colorPresetMapper: ColorPresetMapper ) : ColorPresetRepository { - /** - * Update color preset. - */ - override suspend fun updateColorPreset(colorPreset: ColorPreset) { + override suspend fun getColorPresets(): Result> = runCatching { + database.getColorPresets() + .sortedBy { it.order } + .map { colorPresetMapper.toColorPreset(it) } + } + + override suspend fun updateColorPreset( + colorPreset: ColorPreset + ): Result = runCatching { database.updateColorPreset( colorPresetMapper.toColorPresetEntity( - colorPreset, - if (colorPreset.id != -1) database.getColorPresetOrder(colorPreset.id) + colorPreset = colorPreset, + order = if (colorPreset.id != -1) database.getColorPresetOrder(colorPreset.id) else database.getColorPresetsSize() ) ) } - /** - * Select color preset. Only one can be selected at time. - */ - override suspend fun selectColorPreset(colorPreset: ColorPreset) { + override suspend fun selectColorPreset( + colorPreset: ColorPreset + ): Result = runCatching { database.getColorPresets().map { - it.copy( - isSelected = it.id == colorPreset.id - ) + it.copy(isSelected = it.id == colorPreset.id) }.forEach { database.updateColorPreset(it) } } - /** - * Get all color presets. - * Sorted by order (either manual or newest ones at the end). - */ - override suspend fun getColorPresets(): List { - return database.getColorPresets() - .sortedBy { it.order } - .map { colorPresetMapper.toColorPreset(it) } - } - - /** - * Reorder color presets. - * Changes the order of the color presets. - */ - override suspend fun reorderColorPresets(orderedColorPresets: List) { + override suspend fun reorderColorPresets( + colorPresets: List + ): Result = runCatching { database.deleteColorPresets() - - orderedColorPresets.forEachIndexed { index, colorPreset -> + colorPresets.forEachIndexed { index, colorPreset -> database.updateColorPreset( colorPresetMapper.toColorPresetEntity(colorPreset, order = index) ) } } - /** - * Delete color preset. - */ - override suspend fun deleteColorPreset(colorPreset: ColorPreset) { + override suspend fun deleteColorPreset( + colorPreset: ColorPreset + ): Result = runCatching { database.deleteColorPreset( colorPresetMapper.toColorPresetEntity( colorPreset, -1 diff --git a/app/src/main/java/ua/acclorite/book_story/data/repository/DataStoreRepositoryImpl.kt b/app/src/main/java/ua/acclorite/book_story/data/repository/DataStoreRepositoryImpl.kt index 4b57ff61..501a38a8 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/repository/DataStoreRepositoryImpl.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/repository/DataStoreRepositoryImpl.kt @@ -6,22 +6,12 @@ package ua.acclorite.book_story.data.repository -import android.util.Log import androidx.datastore.preferences.core.Preferences -import kotlinx.coroutines.CompletableDeferred -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.async -import kotlinx.coroutines.awaitAll -import kotlinx.coroutines.withContext import ua.acclorite.book_story.data.local.data_store.DataStore import ua.acclorite.book_story.domain.repository.DataStoreRepository -import ua.acclorite.book_story.ui.main.MainState -import java.util.concurrent.ConcurrentHashMap import javax.inject.Inject import javax.inject.Singleton -private const val GET_ALL_SETTINGS = "GET SETTINGS, REPO" - /** * Data Store repository. * Manages all [DataStore] related work. @@ -31,42 +21,20 @@ class DataStoreRepositoryImpl @Inject constructor( private val dataStore: DataStore ) : DataStoreRepository { - /** - * Puts DataStore constant to [DataStore]. - */ - override suspend fun putDataToDataStore(key: Preferences.Key, value: T) { + override suspend fun putPreference( + key: Preferences.Key, + value: T + ): Result = runCatching { dataStore.putData(key, value) } - /** - * Gets all settings from DataStore and returns [MainState]. - */ - override suspend fun getAllSettings(): MainState { - Log.i(GET_ALL_SETTINGS, "Getting all settings.") - val result = CompletableDeferred() + override suspend fun getPreference( + key: Preferences.Key + ): Result = runCatching { + dataStore.getNullableData(key) ?: throw NoSuchElementException("Could not get preference.") + } - withContext(Dispatchers.Default) { - val keys = dataStore.getAllData() - val data = ConcurrentHashMap() - - Log.i(GET_ALL_SETTINGS, "Got ${keys?.size} settings keys.") - - val jobs = keys?.map { key -> - async { - val nullableData = dataStore.getNullableData(key) - - if (nullableData == null) { - data.remove(key.name) - } else { - data[key.name] = nullableData - } - } - } - jobs?.awaitAll() - - result.complete(MainState.initialize(data)) - } - - return result.await() + override suspend fun getAllPreferences(): Result>> = runCatching { + dataStore.getAllData() ?: throw NoSuchElementException("Could not get all preferences.") } } \ No newline at end of file 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 6a7b84bb..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,149 +6,75 @@ package ua.acclorite.book_story.data.repository -import android.app.Application -import android.util.Log -import ua.acclorite.book_story.R +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 +import ua.acclorite.book_story.data.model.library.BookWithCover import ua.acclorite.book_story.data.parser.FileParser -import ua.acclorite.book_story.domain.browse.file.SelectableFile -import ua.acclorite.book_story.domain.file.CachedFile -import ua.acclorite.book_story.domain.file.CachedFileCompat -import ua.acclorite.book_story.domain.library.book.NullableBook -import ua.acclorite.book_story.domain.library.book.NullableBook.NotNull -import ua.acclorite.book_story.domain.library.book.NullableBook.Null +import ua.acclorite.book_story.domain.model.file.File import ua.acclorite.book_story.domain.repository.FileSystemRepository -import ua.acclorite.book_story.domain.ui.UIText -import ua.acclorite.book_story.presentation.core.constants.provideExtensions -import java.util.UUID +import ua.acclorite.book_story.domain.service.FileProvider import javax.inject.Inject import javax.inject.Singleton -private const val GET_BOOK_FROM_FILE = "BOOK FROM FILE, REPO" -private const val GET_FILES = "FILES, REPO" - /** * File System repository. * Manages all File System related work. */ @Singleton class FileSystemRepositoryImpl @Inject constructor( - private val application: Application, private val database: BookDao, - private val fileParser: FileParser + private val fileMapper: FileMapper, + private val fileParser: FileParser, + private val fileProvider: FileProvider ) : FileSystemRepository { - /** - * Gets all matching files from device. - * Filters by [query] and sorts out not supported file formats and already added files. - */ - override suspend fun getFiles(query: String): List { - Log.i(GET_FILES, "Getting files from device, query: \"$query\".") + override suspend fun searchFiles(query: String): Result> { + return fileProvider.getStorageFiles().mapCatching { storages -> + val existingFiles = database.searchBooks("").map { it.filePath } - val existingPaths = database - .searchBooks("") - .map { it.filePath } - val supportedExtensions = provideExtensions() - - /** - * Verify that [CachedFile] is valid and can be shown correctly. - */ - fun CachedFile.isValid(): Boolean { - // First: Ensuring supported extension - supportedExtensions.any { ext -> - name.endsWith(ext, ignoreCase = true) - }.let { if (!it) return false } - - // Second: Ensuring query to match - if (query.isNotBlank()) { - name.contains(query.trim(), ignoreCase = true).let { - if (!it) return false - } - } - - // Third: Ensuring that a file is not added already - existingPaths.none { existingPath -> - existingPath.equals(path, ignoreCase = true) - }.let { if (!it) return false } - - return true - } - - fun CachedFile.getSelectableFilesFromStorage(): List { - val selectableFiles = mutableListOf() - - walk { file -> - if (!file.isValid()) return@walk - - selectableFiles.add( - SelectableFile( - data = file, - selected = false - ) + storages.map { storage -> + storage.getFilesFromStorage( + query = query, + existingFiles = existingFiles ) - } - - return selectableFiles - } - - fun getAllStorages(): List { - return application.contentResolver.persistedUriPermissions.mapNotNull { permission -> - val storage = CachedFileCompat.fromUri( - application, - permission.uri, - builder = CachedFileCompat.build( - name = UUID.randomUUID().toString(), - size = 0, - lastModified = 0 - ) - ) - if (!storage.isDirectory) return@mapNotNull null - - storage - }.let { storages -> - storages.filter { storage -> - storages.none { - it.path != storage.path && storage.path.startsWith( - it.path, - ignoreCase = true - ) - } - } - } - } - - return try { - val storages = getAllStorages() - val files = mutableListOf() - - for (storage in storages) { - files.addAll(storage.getSelectableFilesFromStorage()) - } - - Log.i(GET_FILES, "Successfully got all matching files.") - files - } catch (e: Exception) { - e.printStackTrace() - Log.e(GET_FILES, "Couldn't get all matching files.") - - emptyList() + }.flatten() } } - /** - * Gets book from given file. If error happened, returns [NullableBook.Null]. - */ - override suspend fun getBookFromFile(cachedFile: CachedFile): NullableBook { - val parsedBook = fileParser.parse(cachedFile) - if (parsedBook == null) { - Log.e(GET_BOOK_FROM_FILE, "Parsed file(${cachedFile.name}) is null.") - return Null( - cachedFile.name, - UIText.StringResource(R.string.error_something_went_wrong) - ) - } + private fun CachedFile.isValid( + query: String, + existingFiles: List + ): Boolean { + 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 + } - Log.i(GET_BOOK_FROM_FILE, "Successfully got book from file.") - return NotNull(bookWithCover = parsedBook) + private fun CachedFile.getFilesFromStorage( + query: String, + existingFiles: List + ): List { + val files = mutableListOf() + walk { cachedFile -> + if (cachedFile.isValid(query, existingFiles)) { + files.add(fileMapper.toFile(cachedFile)) + } + } + return files + } + + override suspend fun getBookFromFile(file: File): Result = runCatching { + fileParser.parse(fileMapper.toCachedFile(file)) + ?: throw Exception("Could not parse ${file.name}.") } } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/data/repository/HistoryRepositoryImpl.kt b/app/src/main/java/ua/acclorite/book_story/data/repository/HistoryRepositoryImpl.kt index c35de84a..5b0d7b6b 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/repository/HistoryRepositoryImpl.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/repository/HistoryRepositoryImpl.kt @@ -8,78 +8,47 @@ package ua.acclorite.book_story.data.repository import ua.acclorite.book_story.data.local.room.BookDao import ua.acclorite.book_story.data.mapper.history.HistoryMapper -import ua.acclorite.book_story.domain.history.History +import ua.acclorite.book_story.domain.model.history.History import ua.acclorite.book_story.domain.repository.HistoryRepository import javax.inject.Inject import javax.inject.Singleton -/** - * History repository. - * Manages all [History] related work. - */ @Singleton class HistoryRepositoryImpl @Inject constructor( private val database: BookDao, - - private val historyMapper: HistoryMapper, + private val historyMapper: HistoryMapper ) : HistoryRepository { - /** - * Insert history in database. - */ - override suspend fun insertHistory(history: History) { - database.insertHistory( - listOf( - historyMapper.toHistoryEntity( - history - ) - ) - ) - } - - /** - * Get all history from database. - */ - override suspend fun getHistory(): List { - return database.getHistory().map { - historyMapper.toHistory( - it - ) + override suspend fun getHistoryForBook(bookId: Int): Result = runCatching { + database.getHistoryForBook(bookId).let { + if (it == null) throw NoSuchElementException("Could not get history from [$bookId].") + else historyMapper.toHistory(it) } } - /** - * Get latest history of the matching [bookId]. - */ - override suspend fun getLatestBookHistory(bookId: Int): History? { - val history = database.getLatestHistoryForBook(bookId) - return history?.let { historyMapper.toHistory(it) } + override suspend fun addHistory(history: History): Result = runCatching { + database.insertHistory(historyMapper.toHistoryEntity(history)) } - /** - * Delete whole history. - */ - override suspend fun deleteWholeHistory() { - database.deleteWholeHistory() + override suspend fun getHistory(): Result> = runCatching { + database.getHistory().map { historyMapper.toHistory(it) } } - /** - * Delete all history of the matching [bookId]. - */ - override suspend fun deleteBookHistory(bookId: Int) { - database.deleteBookHistory(bookId) + override suspend fun deleteWholeHistory(): Result = runCatching { + database.deleteWholeHistory().also { + if (it == 0) throw Exception("Could not delete whole history in database.") + } } - /** - * Delete specific history item. - */ - override suspend fun deleteHistory(history: History) { - database.deleteHistory( - listOf( - historyMapper.toHistoryEntity( - history - ) - ) - ) + override suspend fun deleteHistoryForBook(bookId: Int): Result = runCatching { + database.deleteHistoryForBook(bookId = bookId).also { + if (it == 0) throw Exception("Could not delete history for book [$bookId] in database.") + } + } + + override suspend fun deleteHistory(history: History): Result = runCatching { + database.deleteHistory(historyMapper.toHistoryEntity(history)).also { + if (it == 0) throw Exception("Could not delete history in database.") + } } } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/data/repository/PermissionRepositoryImpl.kt b/app/src/main/java/ua/acclorite/book_story/data/repository/PermissionRepositoryImpl.kt index 198ba4a5..1753665c 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/repository/PermissionRepositoryImpl.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/repository/PermissionRepositoryImpl.kt @@ -8,45 +8,27 @@ package ua.acclorite.book_story.data.repository import android.app.Application import android.content.Intent -import android.net.Uri -import android.util.Log +import androidx.core.net.toUri import ua.acclorite.book_story.domain.repository.PermissionRepository import javax.inject.Inject import javax.inject.Singleton -private const val GRANT_URI = "GRANT URI PERM, REPO" -private const val RELEASE_URI = "RELEASE URI PERM, REPO" - @Singleton class PermissionRepositoryImpl @Inject constructor( private val application: Application ) : PermissionRepository { - override suspend fun grantPersistableUriPermission(uri: Uri) { - Log.i(GRANT_URI, "Granting persistable uri permission to \"${uri.path}\" URI.") - - try { - application.contentResolver.takePersistableUriPermission( - uri, - Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION - ) - } catch (e: Exception) { - e.printStackTrace() - Log.e(GRANT_URI, "Could not grant URI permission.") - } + override suspend fun grantPersistableUriPermission(uri: String): Result = runCatching { + application.contentResolver.takePersistableUriPermission( + uri.toUri(), + Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION + ) } - override suspend fun releasePersistableUriPermission(uri: Uri) { - Log.i(RELEASE_URI, "Releasing persistable uri permission from \"${uri.path}\" URI.") - - try { - application.contentResolver.releasePersistableUriPermission( - uri, - Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION - ) - } catch (e: Exception) { - e.printStackTrace() - Log.w(RELEASE_URI, "No granted URI permission found.") - } + override suspend fun releasePersistableUriPermission(uri: String): Result = runCatching { + application.contentResolver.releasePersistableUriPermission( + uri.toUri(), + Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION + ) } } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/data/service/CoverImageHandlerImpl.kt b/app/src/main/java/ua/acclorite/book_story/data/service/CoverImageHandlerImpl.kt new file mode 100644 index 00000000..744650cf --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/data/service/CoverImageHandlerImpl.kt @@ -0,0 +1,68 @@ +/* + * 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.data.service + +import android.app.Application +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.net.Uri +import androidx.core.net.toFile +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import ua.acclorite.book_story.core.CoverImage +import ua.acclorite.book_story.domain.service.CoverImageHandler +import java.io.BufferedOutputStream +import java.io.ByteArrayOutputStream +import java.io.File +import java.io.FileOutputStream +import java.util.UUID +import javax.inject.Inject + +class CoverImageHandlerImpl @Inject constructor( + application: Application +) : CoverImageHandler { + + private val filesDir: File = application.filesDir + private val coversDir = File(filesDir, "covers") + + override suspend fun saveCover(coverImage: CoverImage): Result = runCatching { + if (!coversDir.exists()) { + coversDir.mkdirs() + } + + val coverUri = "${UUID.randomUUID()}.webp" + val cover = File(coversDir, coverUri) + + withContext(Dispatchers.IO) { + BufferedOutputStream(FileOutputStream(cover)).use { output -> + coverImage + .copy(Bitmap.Config.RGB_565, false) + .compress(Bitmap.CompressFormat.WEBP, 20, output) + .let { success -> + if (success) return@let + throw Exception("Couldn't save cover image.") + } + } + } + + cover + } + + override suspend fun deleteCover(coverImage: Uri): Result = runCatching { + coverImage.toFile().apply { + if (exists() && !delete()) throw Exception("Couldn't delete cover image.") + } + } + + override suspend fun compressCover(coverImage: CoverImage): Result = runCatching { + val stream = ByteArrayOutputStream() + coverImage.copy(Bitmap.Config.RGB_565, false) + .compress(Bitmap.CompressFormat.WEBP, 20, stream) + val byteArray = stream.toByteArray() + BitmapFactory.decodeByteArray(byteArray, 0, byteArray.size) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/data/service/FileProviderImpl.kt b/app/src/main/java/ua/acclorite/book_story/data/service/FileProviderImpl.kt new file mode 100644 index 00000000..70940e37 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/data/service/FileProviderImpl.kt @@ -0,0 +1,58 @@ +/* + * 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.data.service + +import android.app.Application +import ua.acclorite.book_story.data.model.file.CachedFile +import ua.acclorite.book_story.data.model.file.CachedFileCompat +import ua.acclorite.book_story.domain.model.library.Book +import ua.acclorite.book_story.domain.service.FileProvider +import javax.inject.Inject + +class FileProviderImpl @Inject constructor( + private val application: Application +) : FileProvider { + + override fun getFileFromBook(book: Book): Result = runCatching { + CachedFileCompat.fromFullPath( + context = application, + path = book.filePath, + builder = CachedFileCompat.build( + name = book.filePath.substringAfterLast(java.io.File.separator), + path = book.filePath, + isDirectory = false + ) + ).let { file -> + if (file == null || !file.canAccess()) { + throw NoSuchElementException("Could not load CachedFile.") + } + + file + } + } + + override fun getStorageFiles(): Result> = runCatching { + application.contentResolver.persistedUriPermissions.mapNotNull { permission -> + val storage = CachedFileCompat.fromUri( + application, + permission.uri + ) + if (!storage.isDirectory) return@mapNotNull null + + storage + }.let { storages -> + storages.filter { storage -> + storages.none { + it.path != storage.path && storage.path.startsWith( + it.path, + ignoreCase = true + ) + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/browse/file/SelectableFile.kt b/app/src/main/java/ua/acclorite/book_story/domain/browse/file/SelectableFile.kt deleted file mode 100644 index 8bd0a292..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/browse/file/SelectableFile.kt +++ /dev/null @@ -1,17 +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.domain.browse.file - -import androidx.compose.runtime.Immutable -import ua.acclorite.book_story.domain.file.CachedFile -import ua.acclorite.book_story.domain.util.Selected - -@Immutable -data class SelectableFile( - val data: CachedFile, - val selected: Selected -) \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/model/file/File.kt b/app/src/main/java/ua/acclorite/book_story/domain/model/file/File.kt new file mode 100644 index 00000000..223add8f --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/model/file/File.kt @@ -0,0 +1,19 @@ +/* + * 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.domain.model.file + +import androidx.compose.runtime.Immutable + +@Immutable +data class File( + val name: String, + val uri: String, + val path: String, + val size: Long, + val lastModified: Long, + val isDirectory: Boolean +) \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/history/History.kt b/app/src/main/java/ua/acclorite/book_story/domain/model/history/History.kt similarity index 73% rename from app/src/main/java/ua/acclorite/book_story/domain/history/History.kt rename to app/src/main/java/ua/acclorite/book_story/domain/model/history/History.kt index 5dbd4aeb..c997bc93 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/history/History.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/model/history/History.kt @@ -4,10 +4,10 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.history +package ua.acclorite.book_story.domain.model.history import androidx.compose.runtime.Immutable -import ua.acclorite.book_story.domain.library.book.Book +import ua.acclorite.book_story.domain.model.library.Book @Immutable data class History( diff --git a/app/src/main/java/ua/acclorite/book_story/domain/library/book/Book.kt b/app/src/main/java/ua/acclorite/book_story/domain/model/library/Book.kt similarity index 54% rename from app/src/main/java/ua/acclorite/book_story/domain/library/book/Book.kt rename to app/src/main/java/ua/acclorite/book_story/domain/model/library/Book.kt index 3919bb1c..0334618d 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/library/book/Book.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/model/library/Book.kt @@ -4,13 +4,13 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.library.book +package ua.acclorite.book_story.domain.model.library import android.net.Uri import android.os.Parcelable import androidx.compose.runtime.Immutable import kotlinx.parcelize.Parcelize -import ua.acclorite.book_story.domain.ui.UIText +import ua.acclorite.book_story.core.ui.UIText @Parcelize @Immutable @@ -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/library/category/Category.kt b/app/src/main/java/ua/acclorite/book_story/domain/model/library/Category.kt similarity index 84% rename from app/src/main/java/ua/acclorite/book_story/domain/library/category/Category.kt rename to app/src/main/java/ua/acclorite/book_story/domain/model/library/Category.kt index b58c17a9..c8ab1cdb 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/library/category/Category.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/model/library/Category.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.library.category +package ua.acclorite.book_story.domain.model.library import androidx.compose.runtime.Immutable diff --git a/app/src/main/java/ua/acclorite/book_story/domain/library/category/CategorySort.kt b/app/src/main/java/ua/acclorite/book_story/domain/model/library/CategorySort.kt similarity index 72% rename from app/src/main/java/ua/acclorite/book_story/domain/library/category/CategorySort.kt rename to app/src/main/java/ua/acclorite/book_story/domain/model/library/CategorySort.kt index 20ffca8e..bcb6d8e8 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/library/category/CategorySort.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/model/library/CategorySort.kt @@ -4,10 +4,10 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.library.category +package ua.acclorite.book_story.domain.model.library import androidx.compose.runtime.Immutable -import ua.acclorite.book_story.domain.library.display.LibrarySortOrder +import ua.acclorite.book_story.presentation.library.model.LibrarySortOrder @Immutable data class CategorySort( 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 new file mode 100644 index 00000000..48c3773f --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/model/reader/ColorPreset.kt @@ -0,0 +1,30 @@ +/* + * 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.domain.model.reader + +import androidx.compose.runtime.Immutable +import androidx.compose.ui.graphics.Color +import ua.acclorite.book_story.core.Selected + +@Immutable +data class ColorPreset( + val id: Int, + val name: String?, + val backgroundColor: Color, + val fontColor: Color, + val isSelected: Selected +) { + 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/reader/ReaderText.kt b/app/src/main/java/ua/acclorite/book_story/domain/model/reader/ReaderText.kt similarity index 93% rename from app/src/main/java/ua/acclorite/book_story/domain/reader/ReaderText.kt rename to app/src/main/java/ua/acclorite/book_story/domain/model/reader/ReaderText.kt index 0f18cd6d..dfbc0a56 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/reader/ReaderText.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/model/reader/ReaderText.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.reader +package ua.acclorite.book_story.domain.model.reader import androidx.compose.runtime.Immutable import androidx.compose.ui.graphics.ImageBitmap diff --git a/app/src/main/java/ua/acclorite/book_story/domain/navigator/Navigator.kt b/app/src/main/java/ua/acclorite/book_story/domain/navigator/Navigator.kt deleted file mode 100644 index 2d7dc94c..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/navigator/Navigator.kt +++ /dev/null @@ -1,81 +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.domain.navigator - -import androidx.lifecycle.SavedStateHandle -import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject -import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.flow.SharingStarted -import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.map -import kotlinx.coroutines.flow.stateIn - -@HiltViewModel(assistedFactory = Navigator.Factory::class) -class Navigator @AssistedInject constructor( - private val savedStateHandle: SavedStateHandle, - @Assisted private val initialScreen: Screen -) : ViewModel() { - - val items = savedStateHandle.getStateFlow("items", mutableListOf(initialScreen)) - private fun StateFlow>.removeLast() { - savedStateHandle["items"] = value.dropLast(1) - } - - private fun StateFlow>.add(item: Screen) { - savedStateHandle["items"] = value + item - } - - val lastItem = items.map { - it.lastOrNull() ?: initialScreen - }.stateIn( - scope = viewModelScope, - started = SharingStarted.Eagerly, - initialValue = initialScreen - ) - - val lastEvent = savedStateHandle.getStateFlow("stack_event", StackEvent.Default) - private fun changeStackEvent(stackEvent: StackEvent) { - savedStateHandle["stack_event"] = stackEvent - } - - - fun push( - targetScreen: Screen, - popping: Boolean = false, - saveInBackStack: Boolean = true - ) { - if (lastItem.value::class == targetScreen::class) return - if (!saveInBackStack) items.removeLast() - - changeStackEvent( - if (popping) StackEvent.Pop - else StackEvent.Default - ) - - if (lastItem.value::class == targetScreen::class) items.removeLast() - items.add(targetScreen) - } - - fun pop(popping: Boolean = true) { - if (items.value.count() > 1) { - changeStackEvent( - if (popping) StackEvent.Pop - else StackEvent.Default - ) - items.removeLast() - } - } - - @AssistedFactory - interface Factory { - fun create(startScreen: Screen): Navigator - } -} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/reader/ColorPreset.kt b/app/src/main/java/ua/acclorite/book_story/domain/reader/ColorPreset.kt deleted file mode 100644 index fdabd137..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/reader/ColorPreset.kt +++ /dev/null @@ -1,20 +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.domain.reader - -import androidx.compose.runtime.Immutable -import androidx.compose.ui.graphics.Color -import ua.acclorite.book_story.domain.util.Selected - -@Immutable -data class ColorPreset( - val id: Int, - val name: String?, - val backgroundColor: Color, - val fontColor: Color, - val isSelected: Selected -) \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/repository/BookRepository.kt b/app/src/main/java/ua/acclorite/book_story/domain/repository/BookRepository.kt index dd647021..f5cf5d3f 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/repository/BookRepository.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/repository/BookRepository.kt @@ -6,47 +6,36 @@ package ua.acclorite.book_story.domain.repository -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.library.book.BookWithCover -import ua.acclorite.book_story.domain.reader.ReaderText -import ua.acclorite.book_story.domain.util.CoverImage +import ua.acclorite.book_story.core.CoverImage +import ua.acclorite.book_story.domain.model.library.Book +import ua.acclorite.book_story.domain.model.reader.ReaderText interface BookRepository { - - suspend fun getBooks( + suspend fun searchBooks( query: String - ): List + ): Result> - suspend fun getBooksById( - ids: List - ): List - - suspend fun getBookText( + suspend fun getBook( bookId: Int - ): List + ): Result - suspend fun insertBook( - bookWithCover: BookWithCover - ) + suspend fun getText( + bookId: Int + ): Result> + + suspend fun addBook( + book: Book + ): Result suspend fun updateBook( book: Book - ) + ): Result - suspend fun updateCoverImageOfBook( - bookWithOldCover: Book, - newCoverImage: CoverImage? - ) + suspend fun deleteBook( + book: Book + ): Result - suspend fun deleteBooks( - books: List - ) - - suspend fun canResetCover( - bookId: Int - ): Boolean - - suspend fun resetCoverImage( - bookId: Int - ): Boolean + suspend fun getDefaultCover( + book: Book + ): Result } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/repository/CategoryRepository.kt b/app/src/main/java/ua/acclorite/book_story/domain/repository/CategoryRepository.kt index 358dd678..3634682e 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/repository/CategoryRepository.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/repository/CategoryRepository.kt @@ -6,33 +6,31 @@ package ua.acclorite.book_story.domain.repository -import ua.acclorite.book_story.domain.library.category.Category -import ua.acclorite.book_story.domain.library.category.CategorySort +import ua.acclorite.book_story.domain.model.library.Category +import ua.acclorite.book_story.domain.model.library.CategorySort interface CategoryRepository { - - suspend fun insertCategory( + suspend fun addCategory( category: Category - ) + ): Result - suspend fun getCategories(): List + suspend fun getCategories(): Result> - suspend fun updateCategoryTitle( - id: Int, - title: String - ) + suspend fun updateCategory( + category: Category + ): Result - suspend fun updateCategoriesOrder( + suspend fun updateOrder( categories: List - ) + ): Result suspend fun deleteCategory( category: Category - ) + ): Result - suspend fun updateCategorySortEntity( + suspend fun updateCategorySorting( categorySort: CategorySort - ) + ): Result - suspend fun getCategorySortEntities(): List + suspend fun getCategorySorting(): Result> } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/repository/ColorPresetRepository.kt b/app/src/main/java/ua/acclorite/book_story/domain/repository/ColorPresetRepository.kt index 57604a59..45f17bcb 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/repository/ColorPresetRepository.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/repository/ColorPresetRepository.kt @@ -6,25 +6,24 @@ package ua.acclorite.book_story.domain.repository -import ua.acclorite.book_story.domain.reader.ColorPreset +import ua.acclorite.book_story.domain.model.reader.ColorPreset interface ColorPresetRepository { + suspend fun getColorPresets(): Result> suspend fun updateColorPreset( colorPreset: ColorPreset - ) + ): Result suspend fun selectColorPreset( colorPreset: ColorPreset - ) - - suspend fun getColorPresets(): List + ): Result suspend fun reorderColorPresets( - orderedColorPresets: List - ) + colorPresets: List + ): Result suspend fun deleteColorPreset( colorPreset: ColorPreset - ) + ): Result } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/repository/DataStoreRepository.kt b/app/src/main/java/ua/acclorite/book_story/domain/repository/DataStoreRepository.kt index a07370df..17111b8b 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/repository/DataStoreRepository.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/repository/DataStoreRepository.kt @@ -7,14 +7,16 @@ package ua.acclorite.book_story.domain.repository import androidx.datastore.preferences.core.Preferences -import ua.acclorite.book_story.ui.main.MainState interface DataStoreRepository { - - suspend fun putDataToDataStore( + suspend fun putPreference( key: Preferences.Key, value: T - ) + ): Result - suspend fun getAllSettings(): MainState + suspend fun getPreference( + key: Preferences.Key, + ): Result + + suspend fun getAllPreferences(): Result>> } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/repository/FileSystemRepository.kt b/app/src/main/java/ua/acclorite/book_story/domain/repository/FileSystemRepository.kt index 610c45e3..b55ae026 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/repository/FileSystemRepository.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/repository/FileSystemRepository.kt @@ -6,17 +6,15 @@ package ua.acclorite.book_story.domain.repository -import ua.acclorite.book_story.domain.browse.file.SelectableFile -import ua.acclorite.book_story.domain.file.CachedFile -import ua.acclorite.book_story.domain.library.book.NullableBook +import ua.acclorite.book_story.data.model.library.BookWithCover +import ua.acclorite.book_story.domain.model.file.File interface FileSystemRepository { - - suspend fun getFiles( + suspend fun searchFiles( query: String = "" - ): List + ): Result> suspend fun getBookFromFile( - cachedFile: CachedFile - ): NullableBook + file: File + ): Result } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/repository/HistoryRepository.kt b/app/src/main/java/ua/acclorite/book_story/domain/repository/HistoryRepository.kt index 09f5754f..621ec8cd 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/repository/HistoryRepository.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/repository/HistoryRepository.kt @@ -6,27 +6,26 @@ package ua.acclorite.book_story.domain.repository -import ua.acclorite.book_story.domain.history.History +import ua.acclorite.book_story.domain.model.history.History interface HistoryRepository { + suspend fun getHistoryForBook( + bookId: Int + ): Result - suspend fun insertHistory( + suspend fun addHistory( history: History - ) + ): Result - suspend fun getHistory(): List + suspend fun getHistory(): Result> - suspend fun getLatestBookHistory( + suspend fun deleteWholeHistory(): Result + + suspend fun deleteHistoryForBook( bookId: Int - ): History? - - suspend fun deleteWholeHistory() - - suspend fun deleteBookHistory( - bookId: Int - ) + ): Result suspend fun deleteHistory( history: History - ) + ): Result } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/repository/PermissionRepository.kt b/app/src/main/java/ua/acclorite/book_story/domain/repository/PermissionRepository.kt index 05014e9e..b3924be5 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/repository/PermissionRepository.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/repository/PermissionRepository.kt @@ -6,15 +6,12 @@ package ua.acclorite.book_story.domain.repository -import android.net.Uri - interface PermissionRepository { - suspend fun grantPersistableUriPermission( - uri: Uri - ) + uri: String + ): Result suspend fun releasePersistableUriPermission( - uri: Uri - ) + uri: String + ): Result } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/service/CoverImageHandler.kt b/app/src/main/java/ua/acclorite/book_story/domain/service/CoverImageHandler.kt new file mode 100644 index 00000000..7268d413 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/service/CoverImageHandler.kt @@ -0,0 +1,17 @@ +/* + * 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.domain.service + +import android.net.Uri +import ua.acclorite.book_story.core.CoverImage +import java.io.File + +interface CoverImageHandler { + suspend fun saveCover(coverImage: CoverImage): Result + suspend fun deleteCover(coverImage: Uri): Result + suspend fun compressCover(coverImage: CoverImage): Result +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/service/FileProvider.kt b/app/src/main/java/ua/acclorite/book_story/domain/service/FileProvider.kt new file mode 100644 index 00000000..300e31d8 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/service/FileProvider.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.domain.service + +import ua.acclorite.book_story.data.model.file.CachedFile +import ua.acclorite.book_story.domain.model.library.Book + +interface FileProvider { + fun getFileFromBook(book: Book): Result + fun getStorageFiles(): Result> +} \ 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 new file mode 100644 index 00000000..5e72915c --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/AddBookUseCase.kt @@ -0,0 +1,49 @@ +/* + * 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.domain.use_case.book + +import androidx.core.net.toUri +import ua.acclorite.book_story.core.CoverImage +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 +import javax.inject.Inject + +class AddBookUseCase @Inject constructor( + private val bookRepository: BookRepository, + private val coverImageHandler: CoverImageHandler +) { + + suspend operator fun invoke(book: Book, coverImage: CoverImage?) { + logI("Inserting [${book.title}].") + + val coverImageUri = coverImage?.let { + coverImageHandler.saveCover(it).fold( + onSuccess = { + logI("Successfully saved cover image of [${book.title}].") + it.toUri() + }, + onFailure = { + logW("Could not save cover image with error: ${it.message}") + null + } + ) + } + + bookRepository.addBook(book = book.copy(coverImage = coverImageUri)).fold( + onSuccess = { + logI("Successfully inserted [${book.title}].") + }, + onFailure = { + logE("Could not insert [${book.title}] with error: ${it.message}") + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/CanResetCover.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/CanResetCover.kt deleted file mode 100644 index 209bf6be..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/CanResetCover.kt +++ /dev/null @@ -1,19 +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.domain.use_case.book - -import ua.acclorite.book_story.domain.repository.BookRepository -import javax.inject.Inject - -class CanResetCover @Inject constructor( - private val repository: BookRepository -) { - - suspend fun execute(bookId: Int): Boolean { - return repository.canResetCover(bookId) - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..d2c2ac80 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/CanResetCoverImageUseCase.kt @@ -0,0 +1,57 @@ +/* + * 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.domain.use_case.book + +import android.app.Application +import android.graphics.BitmapFactory +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 + +class CanResetCoverImageUseCase @Inject constructor( + private val application: Application, + private val bookRepository: BookRepository, + private val coverImageHandler: CoverImageHandler +) { + + suspend operator fun invoke(bookId: Int): Boolean { + logI("Checking if can reset cover image of [$bookId].") + + bookRepository.getBook(bookId).mapCatching { book -> + // Getting default cover image + val defaultCoverImage = bookRepository.getDefaultCover(book).getOrThrow() + if (defaultCoverImage == null) { + return@mapCatching true + } + + // Return true if current cover is null (and default is not) + if (book.coverImage == null) { + return@mapCatching true + } + + // Getting compressed cover images + val compressedDefaultCoverImage = + coverImageHandler.compressCover(defaultCoverImage).getOrThrow() + val compressedCoverImage = application.contentResolver + .openInputStream(book.coverImage) + ?.use { BitmapFactory.decodeStream(it) } + + !compressedDefaultCoverImage.sameAs(compressedCoverImage) + }.fold( + onSuccess = { + logI("Can reset cover image of [$bookId]: $it.") + return it + }, + onFailure = { + logE("Could not check if can reset cover image of [$bookId] with error: ${it.message}") + return false + } + ) + } +} \ No newline at end of file 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 new file mode 100644 index 00000000..6641f7d2 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/DeleteBookUseCase.kt @@ -0,0 +1,47 @@ +/* + * 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.domain.use_case.book + +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 +import ua.acclorite.book_story.domain.service.CoverImageHandler +import javax.inject.Inject + +class DeleteBookUseCase @Inject constructor( + private val bookRepository: BookRepository, + private val historyRepository: HistoryRepository, + private val coverImageHandler: CoverImageHandler +) { + + suspend operator fun invoke(book: Book) { + logI("Deleting [${book.title}].") + + // Deleting cover image + book.coverImage?.let { coverImageHandler.deleteCover(it) }?.onFailure { + logW("Could not delete cover image with error: ${it.message}") + } + + // Deleting history + historyRepository.deleteHistoryForBook(bookId = book.id).onFailure { + logW("Could not delete history for [${book.title}] with error: ${it.message}") + } + + // Deleting book + bookRepository.deleteBook(book).fold( + onSuccess = { + logI("Successfully deleted [${book.title}].") + }, + onFailure = { + logE("Could not delete [${book.title}] with error: ${it.message}") + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/DeleteBooks.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/DeleteBooks.kt deleted file mode 100644 index f3d3cee8..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/DeleteBooks.kt +++ /dev/null @@ -1,25 +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.domain.use_case.book - -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.repository.BookRepository -import ua.acclorite.book_story.domain.repository.HistoryRepository -import javax.inject.Inject - -class DeleteBooks @Inject constructor( - private val bookRepository: BookRepository, - private val historyRepository: HistoryRepository -) { - - suspend fun execute(books: List) { - bookRepository.deleteBooks(books) - books.forEach { - historyRepository.deleteBookHistory(it.id) - } - } -} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/GetBookById.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/GetBookById.kt deleted file mode 100644 index eed8e0cf..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/GetBookById.kt +++ /dev/null @@ -1,20 +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.domain.use_case.book - -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.repository.BookRepository -import javax.inject.Inject - -class GetBookById @Inject constructor( - private val repository: BookRepository -) { - - suspend fun execute(id: Int): Book? { - return repository.getBooksById(listOf(id)).firstOrNull() - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..1bad210f --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/GetBookUseCase.kt @@ -0,0 +1,39 @@ +/* + * 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.domain.use_case.book + +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 +import javax.inject.Inject + +class GetBookUseCase @Inject constructor( + private val bookRepository: BookRepository, + private val historyRepository: HistoryRepository +) { + + suspend operator fun invoke(bookId: Int): Book? { + logI("Getting book: [$bookId].") + + bookRepository.getBook(bookId).fold( + onSuccess = { book -> + val history = historyRepository.getHistoryForBook(book.id).getOrNull() + + logI("Successfully got book: [$bookId].") + return book.copy( + lastOpened = history?.time + ) + }, + onFailure = { + logE("Could not get book [$bookId] with error: ${it.message}") + return null + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/GetBooks.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/GetBooks.kt deleted file mode 100644 index 9e951303..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/GetBooks.kt +++ /dev/null @@ -1,20 +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.domain.use_case.book - -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.repository.BookRepository -import javax.inject.Inject - -class GetBooks @Inject constructor( - private val repository: BookRepository -) { - - suspend fun execute(query: String): List { - return repository.getBooks(query) - } -} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/GetBooksById.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/GetBooksById.kt deleted file mode 100644 index e84d6a37..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/GetBooksById.kt +++ /dev/null @@ -1,20 +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.domain.use_case.book - -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.repository.BookRepository -import javax.inject.Inject - -class GetBooksById @Inject constructor( - private val repository: BookRepository -) { - - suspend fun execute(ids: List): List { - return repository.getBooksById(ids) - } -} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/GetText.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/GetText.kt deleted file mode 100644 index 1ad98d71..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/GetText.kt +++ /dev/null @@ -1,20 +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.domain.use_case.book - -import ua.acclorite.book_story.domain.reader.ReaderText -import ua.acclorite.book_story.domain.repository.BookRepository -import javax.inject.Inject - -class GetText @Inject constructor( - private val repository: BookRepository -) { - - suspend fun execute(bookId: Int): List { - return repository.getBookText(bookId = bookId) - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..0a30eb3f --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/GetTextUseCase.kt @@ -0,0 +1,43 @@ +/* + * 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.domain.use_case.book + +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 + +class GetTextUseCase @Inject constructor( + private val bookRepository: BookRepository +) { + + suspend operator fun invoke(bookId: Int): List { + logI("Getting text from: [$bookId].") + if (bookId == -1) return emptyList() + + bookRepository.getText(bookId).mapCatching { readerText -> + if ( + readerText.filterIsInstance().isEmpty() || + readerText.filterIsInstance().isEmpty() + ) { + throw Exception("ReaderText is empty.") + } + + readerText + }.fold( + onSuccess = { + logI("Successfully loaded text from [$bookId] with markdown.") + return it + }, + onFailure = { + logE("Could not load text with exception: ${it.message}") + return emptyList() + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/InsertBook.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/InsertBook.kt deleted file mode 100644 index 18af20f7..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/InsertBook.kt +++ /dev/null @@ -1,20 +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.domain.use_case.book - -import ua.acclorite.book_story.domain.library.book.BookWithCover -import ua.acclorite.book_story.domain.repository.BookRepository -import javax.inject.Inject - -class InsertBook @Inject constructor( - private val repository: BookRepository -) { - - suspend fun execute(bookWithCover: BookWithCover) { - repository.insertBook(bookWithCover) - } -} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/ResetCoverImage.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/ResetCoverImage.kt deleted file mode 100644 index 88cdc4f6..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/ResetCoverImage.kt +++ /dev/null @@ -1,19 +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.domain.use_case.book - -import ua.acclorite.book_story.domain.repository.BookRepository -import javax.inject.Inject - -class ResetCoverImage @Inject constructor( - private val repository: BookRepository -) { - - suspend fun execute(bookId: Int): Boolean { - return repository.resetCoverImage(bookId) - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..969b163a --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/ResetCoverImageUseCase.kt @@ -0,0 +1,56 @@ +/* + * 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.domain.use_case.book + +import androidx.core.net.toUri +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 + +class ResetCoverImageUseCase @Inject constructor( + private val bookRepository: BookRepository, + private val coverImageHandler: CoverImageHandler +) { + + suspend operator fun invoke(bookId: Int): Boolean { + logI("Resetting cover image of [$bookId].") + + bookRepository.getBook(bookId).mapCatching { book -> + // Getting default cover image + val defaultCoverImage = bookRepository.getDefaultCover(book).getOrThrow() + if (defaultCoverImage == null) { + throw NoSuchElementException("Could not find default cover image") + } + + // Deleting old cover + book.coverImage?.let { coverImageHandler.deleteCover(it) }?.onFailure { + logW("Could not delete old cover image with error: ${it.message}") + } + + // Resetting cover + val newCoverImage = defaultCoverImage.let { + coverImageHandler.saveCover(it).getOrThrow() + } + + book.copy(coverImage = newCoverImage.toUri()) + }.mapCatching { newBook -> + bookRepository.updateBook(newBook).getOrThrow() + }.fold( + onSuccess = { + logI("Successfully reset cover image of [$bookId].") + return true + }, + onFailure = { + logE("Could not reset cover image of [$bookId] with error: ${it.message}") + return false + } + ) + } +} \ No newline at end of file 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 new file mode 100644 index 00000000..2de2e9dc --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/SearchBooksUseCase.kt @@ -0,0 +1,41 @@ +/* + * 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.domain.use_case.book + +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 +import javax.inject.Inject + +class SearchBooksUseCase @Inject constructor( + private val bookRepository: BookRepository, + private val historyRepository: HistoryRepository +) { + + suspend operator fun invoke(query: String): List { + logI("Searching for books with query: \"$query\".") + + return bookRepository.searchBooks(query).fold( + onSuccess = { books -> + logI("Successfully found [${books.size}] books.") + books.map { book -> + val history = historyRepository.getHistoryForBook(book.id).getOrNull() + + book.copy( + lastOpened = history?.time + ) + } + }, + onFailure = { + logE("Could not find books with error: ${it.message}") + emptyList() + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/UpdateBook.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/UpdateBook.kt deleted file mode 100644 index 451c70b0..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/UpdateBook.kt +++ /dev/null @@ -1,20 +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.domain.use_case.book - -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.repository.BookRepository -import javax.inject.Inject - -class UpdateBook @Inject constructor( - private val repository: BookRepository -) { - - suspend fun execute(book: Book) { - repository.updateBook(book) - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..b0641afd --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/UpdateBookUseCase.kt @@ -0,0 +1,31 @@ +/* + * 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.domain.use_case.book + +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 + +class UpdateBookUseCase @Inject constructor( + private val bookRepository: BookRepository +) { + + suspend operator fun invoke(book: Book) { + logI("Updating [${book.title}].") + + bookRepository.updateBook(book).fold( + onSuccess = { + logI("Successfully updated [${book.title}].") + }, + onFailure = { + logE("Could not update [${book.title}] with error: ${it.message}") + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/UpdateCoverImageOfBook.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/UpdateCoverImageOfBook.kt deleted file mode 100644 index 54cd71cc..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/UpdateCoverImageOfBook.kt +++ /dev/null @@ -1,21 +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.domain.use_case.book - -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.repository.BookRepository -import ua.acclorite.book_story.domain.util.CoverImage -import javax.inject.Inject - -class UpdateCoverImageOfBook @Inject constructor( - private val repository: BookRepository -) { - - suspend fun execute(bookWithOldCover: Book, newCoverImage: CoverImage?) { - repository.updateCoverImageOfBook(bookWithOldCover, newCoverImage) - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..9edfcfea --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/book/UpdateCoverImageUseCase.kt @@ -0,0 +1,49 @@ +/* + * 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.domain.use_case.book + +import androidx.core.net.toUri +import ua.acclorite.book_story.core.CoverImage +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 + +class UpdateCoverImageUseCase @Inject constructor( + private val bookRepository: BookRepository, + private val coverImageHandler: CoverImageHandler +) { + + suspend operator fun invoke(bookId: Int, coverImage: CoverImage?) { + logI("Updating cover image of [$bookId].") + + bookRepository.getBook(bookId).mapCatching { book -> + // Deleting old cover + book.coverImage?.let { coverImageHandler.deleteCover(it) }?.onFailure { + logW("Could not delete old cover image with error: ${it.message}") + } + + // Saving new cover + val newCoverImage = coverImage?.let { + coverImageHandler.saveCover(it).getOrThrow() + } + + book.copy(coverImage = newCoverImage?.toUri()) + }.mapCatching { newBook -> + bookRepository.updateBook(newBook).getOrThrow() + }.fold( + onSuccess = { + logI("Successfully updated cover image of [$bookId].") + }, + onFailure = { + logE("Could not update cover image of [$bookId] with error: ${it.message}") + } + ) + } +} \ No newline at end of file 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 new file mode 100644 index 00000000..f0c0d26e --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/AddCategoryUseCase.kt @@ -0,0 +1,31 @@ +/* + * 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.domain.use_case.category + +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 + +class AddCategoryUseCase @Inject constructor( + private val categoryRepository: CategoryRepository +) { + + suspend operator fun invoke(title: String) { + logI("Inserting [${title}] category.") + + categoryRepository.addCategory(Category(title = title)).fold( + onSuccess = { + logI("Successfully inserted [${title}] category.") + }, + onFailure = { + logE("Could not insert [${title}] category with error: ${it.message}") + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/DeleteCategory.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/DeleteCategory.kt deleted file mode 100644 index fd0cad50..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/DeleteCategory.kt +++ /dev/null @@ -1,20 +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.domain.use_case.category - -import ua.acclorite.book_story.domain.library.category.Category -import ua.acclorite.book_story.domain.repository.CategoryRepository -import javax.inject.Inject - -class DeleteCategory @Inject constructor( - private val repository: CategoryRepository -) { - - suspend fun execute(category: Category) { - repository.deleteCategory(category) - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..6cf7ac19 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/DeleteCategoryUseCase.kt @@ -0,0 +1,30 @@ +/* + * 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.domain.use_case.category + +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 + +class DeleteCategoryUseCase @Inject constructor( + private val categoryRepository: CategoryRepository +) { + + suspend operator fun invoke(category: Category) { + logI("Deleting category [${category.id}].") + + categoryRepository.deleteCategory(category).fold( + onSuccess = { + logI("Successfully deleted category [${category.id}].") + }, + onFailure = { + logI("Could not delete category [${category.id}] with error: ${it.message}") + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/GetCategories.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/GetCategories.kt deleted file mode 100644 index 3162d0ef..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/GetCategories.kt +++ /dev/null @@ -1,20 +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.domain.use_case.category - -import ua.acclorite.book_story.domain.library.category.Category -import ua.acclorite.book_story.domain.repository.CategoryRepository -import javax.inject.Inject - -class GetCategories @Inject constructor( - private val repository: CategoryRepository -) { - - suspend fun execute(): List { - return repository.getCategories() - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..00484ab5 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/GetCategoriesUseCase.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.domain.use_case.category + +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 + +class GetCategoriesUseCase @Inject constructor( + private val categoryRepository: CategoryRepository +) { + + suspend operator fun invoke(): List { + logI("Getting all categories.") + + return categoryRepository.getCategories().fold( + onSuccess = { + logI("Successfully got [${it.size}] categories.") + it + }, + onFailure = { + logE("Could not get categories with error: ${it.message}") + emptyList() + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/GetCategorySort.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/GetCategorySort.kt deleted file mode 100644 index 451c669b..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/GetCategorySort.kt +++ /dev/null @@ -1,20 +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.domain.use_case.category - -import ua.acclorite.book_story.domain.library.category.CategorySort -import ua.acclorite.book_story.domain.repository.CategoryRepository -import javax.inject.Inject - -class GetCategorySort @Inject constructor( - private val repository: CategoryRepository -) { - - suspend fun execute(): List { - return repository.getCategorySortEntities() - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..1b7c203f --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/GetCategorySortingUseCase.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.domain.use_case.category + +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 + +class GetCategorySortingUseCase @Inject constructor( + private val categoryRepository: CategoryRepository +) { + + suspend operator fun invoke(): List { + logI("Getting category sorting.") + + return categoryRepository.getCategorySorting().fold( + onSuccess = { + logI("Successfully got category sorting.") + it + }, + onFailure = { + logE("Could not get category sorting with error: ${it.message}") + emptyList() + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/InsertCategory.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/InsertCategory.kt deleted file mode 100644 index 10a5f0f3..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/InsertCategory.kt +++ /dev/null @@ -1,20 +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.domain.use_case.category - -import ua.acclorite.book_story.domain.library.category.Category -import ua.acclorite.book_story.domain.repository.CategoryRepository -import javax.inject.Inject - -class InsertCategory @Inject constructor( - private val repository: CategoryRepository -) { - - suspend fun execute(category: Category) { - repository.insertCategory(category) - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..51b456a3 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/UpdateCategoriesOrderUseCase.kt @@ -0,0 +1,30 @@ +/* + * 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.domain.use_case.category + +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 + +class UpdateCategoriesOrderUseCase @Inject constructor( + private val categoryRepository: CategoryRepository +) { + + suspend operator fun invoke(categories: List) { + logI("Updating order of [${categories.size}] categories.") + + categoryRepository.updateOrder(categories).fold( + onSuccess = { + logI("Successfully updated order of [${categories.size}] categories.") + }, + onFailure = { + logI("Could not update order of [${categories.size}] categories with error: ${it.message}") + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/UpdateCategoryOrder.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/UpdateCategoryOrder.kt deleted file mode 100644 index ea29aac2..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/UpdateCategoryOrder.kt +++ /dev/null @@ -1,20 +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.domain.use_case.category - -import ua.acclorite.book_story.domain.library.category.Category -import ua.acclorite.book_story.domain.repository.CategoryRepository -import javax.inject.Inject - -class UpdateCategoryOrder @Inject constructor( - private val repository: CategoryRepository -) { - - suspend fun execute(categories: List) { - repository.updateCategoriesOrder(categories) - } -} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/UpdateCategorySort.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/UpdateCategorySort.kt deleted file mode 100644 index 3216a4a9..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/UpdateCategorySort.kt +++ /dev/null @@ -1,20 +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.domain.use_case.category - -import ua.acclorite.book_story.domain.library.category.CategorySort -import ua.acclorite.book_story.domain.repository.CategoryRepository -import javax.inject.Inject - -class UpdateCategorySort @Inject constructor( - private val repository: CategoryRepository -) { - - suspend fun execute(categorySort: CategorySort) { - repository.updateCategorySortEntity(categorySort) - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..d2b5b8f2 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/UpdateCategorySortingUseCase.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.domain.use_case.category + +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 + +class UpdateCategorySortingUseCase @Inject constructor( + private val categoryRepository: CategoryRepository +) { + + suspend operator fun invoke(categorySort: CategorySort) { + logI("Updating category sorting of [${categorySort.categoryId}].") + + categoryRepository.updateCategorySorting(categorySort).fold( + onSuccess = { + logI("Successfully updated category sorting of [${categorySort.categoryId}].") + }, + onFailure = { + logE( + "Could not update category sorting of [${categorySort.categoryId}] with error: ${it.message}" + ) + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/UpdateCategoryTitle.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/UpdateCategoryTitle.kt deleted file mode 100644 index f16cf210..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/UpdateCategoryTitle.kt +++ /dev/null @@ -1,19 +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.domain.use_case.category - -import ua.acclorite.book_story.domain.repository.CategoryRepository -import javax.inject.Inject - -class UpdateCategoryTitle @Inject constructor( - private val repository: CategoryRepository -) { - - suspend fun execute(id: Int, title: String) { - repository.updateCategoryTitle(id, title) - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..a4271859 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/category/UpdateCategoryUseCase.kt @@ -0,0 +1,30 @@ +/* + * 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.domain.use_case.category + +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 + +class UpdateCategoryUseCase @Inject constructor( + private val categoryRepository: CategoryRepository +) { + + suspend operator fun invoke(categoryId: Int, newTitle: String) { + logI("Updating category [$categoryId].") + + categoryRepository.updateCategory(Category(id = categoryId, title = newTitle)).fold( + onSuccess = { + logI("Successfully updated [$categoryId].") + }, + onFailure = { + logI("Could not update [$categoryId] with error: ${it.message}") + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/DeleteColorPreset.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/DeleteColorPreset.kt deleted file mode 100644 index 3b12db02..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/DeleteColorPreset.kt +++ /dev/null @@ -1,20 +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.domain.use_case.color_preset - -import ua.acclorite.book_story.domain.reader.ColorPreset -import ua.acclorite.book_story.domain.repository.ColorPresetRepository -import javax.inject.Inject - -class DeleteColorPreset @Inject constructor( - private val repository: ColorPresetRepository -) { - - suspend fun execute(colorPreset: ColorPreset) { - repository.deleteColorPreset(colorPreset) - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..86edf74b --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/DeleteColorPresetUseCase.kt @@ -0,0 +1,31 @@ +/* + * 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.domain.use_case.color_preset + +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 + +class DeleteColorPresetUseCase @Inject constructor( + private val colorPresetRepository: ColorPresetRepository +) { + + suspend operator fun invoke(colorPreset: ColorPreset) { + logI("Deleting [${colorPreset.id}] color preset.") + + colorPresetRepository.deleteColorPreset(colorPreset).fold( + onSuccess = { + logI("Successfully deleted [${colorPreset.id}] color preset.") + }, + onFailure = { + logE("Could not delete [${colorPreset.id}] color preset with error: ${it.message}") + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/GetColorPresets.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/GetColorPresets.kt deleted file mode 100644 index f7e2f044..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/GetColorPresets.kt +++ /dev/null @@ -1,20 +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.domain.use_case.color_preset - -import ua.acclorite.book_story.domain.reader.ColorPreset -import ua.acclorite.book_story.domain.repository.ColorPresetRepository -import javax.inject.Inject - -class GetColorPresets @Inject constructor( - private val repository: ColorPresetRepository -) { - - suspend fun execute(): List { - return repository.getColorPresets() - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..e10f8bc2 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/GetColorPresetsUseCase.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.domain.use_case.color_preset + +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 + +class GetColorPresetsUseCase @Inject constructor( + private val colorPresetRepository: ColorPresetRepository +) { + + suspend operator fun invoke(): List { + logI("Getting color presets.") + + return colorPresetRepository.getColorPresets().fold( + onSuccess = { + logI("Successfully got [${it.size}] color presets.") + it + }, + onFailure = { + logE("Could not get color presets with error: ${it.message}") + emptyList() + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/ReorderColorPresets.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/ReorderColorPresets.kt deleted file mode 100644 index e81de1c9..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/ReorderColorPresets.kt +++ /dev/null @@ -1,20 +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.domain.use_case.color_preset - -import ua.acclorite.book_story.domain.reader.ColorPreset -import ua.acclorite.book_story.domain.repository.ColorPresetRepository -import javax.inject.Inject - -class ReorderColorPresets @Inject constructor( - private val repository: ColorPresetRepository -) { - - suspend fun execute(reorderedColorPresets: List) { - repository.reorderColorPresets(reorderedColorPresets) - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..639ea337 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/ReorderColorPresetsUseCase.kt @@ -0,0 +1,31 @@ +/* + * 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.domain.use_case.color_preset + +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 + +class ReorderColorPresetsUseCase @Inject constructor( + private val colorPresetRepository: ColorPresetRepository +) { + + suspend operator fun invoke(colorPresets: List) { + logI("Reordering [${colorPresets.size}] color presets.") + + colorPresetRepository.reorderColorPresets(colorPresets).fold( + onSuccess = { + logI("Successfully reordered [${colorPresets.size}] color presets.") + }, + onFailure = { + logE("Could not reorder [${colorPresets.size}] color presets with error: ${it.message}") + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/SelectColorPreset.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/SelectColorPreset.kt deleted file mode 100644 index cfcee6a5..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/SelectColorPreset.kt +++ /dev/null @@ -1,20 +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.domain.use_case.color_preset - -import ua.acclorite.book_story.domain.reader.ColorPreset -import ua.acclorite.book_story.domain.repository.ColorPresetRepository -import javax.inject.Inject - -class SelectColorPreset @Inject constructor( - private val repository: ColorPresetRepository -) { - - suspend fun execute(colorPreset: ColorPreset) { - repository.selectColorPreset(colorPreset) - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..8d511cf4 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/SelectColorPresetUseCase.kt @@ -0,0 +1,31 @@ +/* + * 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.domain.use_case.color_preset + +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 + +class SelectColorPresetUseCase @Inject constructor( + private val colorPresetRepository: ColorPresetRepository +) { + + suspend operator fun invoke(colorPreset: ColorPreset) { + logI("Selecting [${colorPreset.id}] color preset.") + + colorPresetRepository.selectColorPreset(colorPreset).fold( + onSuccess = { + logI("Successfully selected [${colorPreset.id}] color preset.") + }, + onFailure = { + logE("Could not select [${colorPreset.id}] color preset with error: ${it.message}") + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/UpdateColorPreset.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/UpdateColorPreset.kt deleted file mode 100644 index 0eaa66b6..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/UpdateColorPreset.kt +++ /dev/null @@ -1,20 +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.domain.use_case.color_preset - -import ua.acclorite.book_story.domain.reader.ColorPreset -import ua.acclorite.book_story.domain.repository.ColorPresetRepository -import javax.inject.Inject - -class UpdateColorPreset @Inject constructor( - private val repository: ColorPresetRepository -) { - - suspend fun execute(colorPreset: ColorPreset) { - repository.updateColorPreset(colorPreset) - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..e2ed9cca --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/color_preset/UpdateColorPresetUseCase.kt @@ -0,0 +1,31 @@ +/* + * 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.domain.use_case.color_preset + +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 + +class UpdateColorPresetUseCase @Inject constructor( + private val colorPresetRepository: ColorPresetRepository +) { + + suspend operator fun invoke(colorPreset: ColorPreset) { + logI("Updating [${colorPreset.id}] color preset.") + + colorPresetRepository.updateColorPreset(colorPreset).fold( + onSuccess = { + logI("Successfully updated [${colorPreset.id}] color preset.") + }, + onFailure = { + logE("Could not update [${colorPreset.id}] color preset with error: ${it.message}") + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/data_store/ChangeLanguage.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/data_store/ChangeLanguage.kt deleted file mode 100644 index 91c9078c..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/data_store/ChangeLanguage.kt +++ /dev/null @@ -1,28 +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.domain.use_case.data_store - -import androidx.appcompat.app.AppCompatDelegate -import androidx.core.os.LocaleListCompat -import ua.acclorite.book_story.domain.repository.DataStoreRepository -import ua.acclorite.book_story.presentation.core.constants.DataStoreConstants -import javax.inject.Inject - -class ChangeLanguage @Inject constructor( - private val repository: DataStoreRepository -) { - - suspend fun execute(language: String) { - val appLocale = LocaleListCompat.forLanguageTags(language) - AppCompatDelegate.setApplicationLocales(appLocale) - - repository.putDataToDataStore( - DataStoreConstants.LANGUAGE, - language - ) - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..2b39c8b9 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/data_store/ChangeLanguagePreferenceUseCase.kt @@ -0,0 +1,39 @@ +/* + * 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.domain.use_case.data_store + +import androidx.appcompat.app.AppCompatDelegate +import androidx.core.os.LocaleListCompat +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.presentation.main.data.DataStoreData +import javax.inject.Inject + +class ChangeLanguagePreferenceUseCase @Inject constructor( + private val dataStoreRepository: DataStoreRepository +) { + + suspend operator fun invoke(language: String) { + logI("Changing language preference.") + + dataStoreRepository.putPreference( + DataStoreData.LANGUAGE, + language + ).fold( + onSuccess = { + logI("Successfully changed language preference.") + + val appLocale = LocaleListCompat.forLanguageTags(language) + AppCompatDelegate.setApplicationLocales(appLocale) + }, + onFailure = { + logE("Could not change language preference with error: ${it.message}") + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/data_store/GetAllSettings.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/data_store/GetAllSettings.kt deleted file mode 100644 index 3496167e..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/data_store/GetAllSettings.kt +++ /dev/null @@ -1,20 +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.domain.use_case.data_store - -import ua.acclorite.book_story.domain.repository.DataStoreRepository -import ua.acclorite.book_story.ui.main.MainState -import javax.inject.Inject - -class GetAllSettings @Inject constructor( - private val repository: DataStoreRepository -) { - - suspend fun execute(): MainState { - return repository.getAllSettings() - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..aea20ed2 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/data_store/GetPreferencesUseCase.kt @@ -0,0 +1,62 @@ +/* + * 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.domain.use_case.data_store + +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.withContext +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 +import javax.inject.Inject + +class GetPreferencesUseCase @Inject constructor( + private val dataStoreRepository: DataStoreRepository +) { + + suspend operator fun invoke(): MainState { + logI("Getting all preferences (MainState).") + + return withContext(Dispatchers.Default) { + dataStoreRepository.getAllPreferences().mapCatching { keys -> + logI("Got [${keys.size}] preference keys.") + + val preferences = ConcurrentHashMap() + keys.map { key -> + async { + dataStoreRepository.getPreference(key).fold( + onSuccess = { + it?.let { preference -> + preferences[key.name] = preference + } + }, + onFailure = { + logW("Could not get [${key.name}] preference.") + preferences.remove(key.name) + } + ) + } + }.awaitAll() + + MainState.initialize(preferences) + }.fold( + onSuccess = { + logI("Successfully got all preferences (MainState).") + it + }, + onFailure = { + logE("Could not get all preferences (MainState) with error: ${it.message}") + MainState() + } + ) + } + } +} \ No newline at end of file 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 new file mode 100644 index 00000000..60083212 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/data_store/PutPreferenceUseCase.kt @@ -0,0 +1,31 @@ +/* + * 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.domain.use_case.data_store + +import androidx.datastore.preferences.core.Preferences +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 + +class PutPreferenceUseCase @Inject constructor( + private val dataStoreRepository: DataStoreRepository +) { + + suspend operator fun invoke(key: Preferences.Key, value: T) { + logI("Putting preference [${key.name}].") + + dataStoreRepository.putPreference(key, value).fold( + onSuccess = { + logI("Successfully put preference [${key.name}].") + }, + onFailure = { + logE("Could not put preference [${key.name}] with error: ${it.message}") + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/data_store/SetDatastore.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/data_store/SetDatastore.kt deleted file mode 100644 index 5defb507..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/data_store/SetDatastore.kt +++ /dev/null @@ -1,20 +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.domain.use_case.data_store - -import androidx.datastore.preferences.core.Preferences -import ua.acclorite.book_story.domain.repository.DataStoreRepository -import javax.inject.Inject - -class SetDatastore @Inject constructor( - private val repository: DataStoreRepository -) { - - suspend fun execute(key: Preferences.Key, value: T) { - repository.putDataToDataStore(key, value) - } -} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/file_system/GetBookFromFile.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/file_system/GetBookFromFile.kt deleted file mode 100644 index 794f3bfa..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/file_system/GetBookFromFile.kt +++ /dev/null @@ -1,21 +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.domain.use_case.file_system - -import ua.acclorite.book_story.domain.file.CachedFile -import ua.acclorite.book_story.domain.library.book.NullableBook -import ua.acclorite.book_story.domain.repository.FileSystemRepository -import javax.inject.Inject - -class GetBookFromFile @Inject constructor( - private val repository: FileSystemRepository -) { - - suspend fun execute(cachedFile: CachedFile): NullableBook { - return repository.getBookFromFile(cachedFile) - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..97f75e40 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/file_system/GetBookFromFileUseCase.kt @@ -0,0 +1,41 @@ +/* + * 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.domain.use_case.file_system + +import ua.acclorite.book_story.R +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 +import ua.acclorite.book_story.data.model.common.NullableBook.Null +import ua.acclorite.book_story.domain.model.file.File +import ua.acclorite.book_story.domain.repository.FileSystemRepository +import javax.inject.Inject + +class GetBookFromFileUseCase @Inject constructor( + private val fileSystemRepository: FileSystemRepository +) { + + suspend operator fun invoke(file: File): NullableBook { + logI("Getting book from [${file.name}] file.") + + return fileSystemRepository.getBookFromFile(file).fold( + onSuccess = { + logI("Successfully got [${it.book.title}] book from file.") + NotNull(it) + }, + onFailure = { + logE("Could not get book from file with error: ${it.message}") + Null( + file.name, + UIText.StringResource(R.string.error_something_went_wrong) + ) + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/file_system/GetFiles.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/file_system/GetFiles.kt deleted file mode 100644 index 901b6f4a..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/file_system/GetFiles.kt +++ /dev/null @@ -1,20 +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.domain.use_case.file_system - -import ua.acclorite.book_story.domain.browse.file.SelectableFile -import ua.acclorite.book_story.domain.repository.FileSystemRepository -import javax.inject.Inject - -class GetFiles @Inject constructor( - private val repository: FileSystemRepository -) { - - suspend fun execute(query: String): List { - return repository.getFiles(query) - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..f0181647 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/file_system/SearchFilesUseCase.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.domain.use_case.file_system + +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 + +class SearchFilesUseCase @Inject constructor( + private val fileSystemRepository: FileSystemRepository +) { + + suspend operator fun invoke(query: String = ""): List { + logI("Searching for files with query: \"$query\".") + + return fileSystemRepository.searchFiles(query).fold( + onSuccess = { + logI("Successfully found [${it.size}] files.") + it + }, + onFailure = { + logE("Could not find files with error: ${it.message}") + emptyList() + } + ) + } +} \ No newline at end of file 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 new file mode 100644 index 00000000..a1f7ac27 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/AddHistoryUseCase.kt @@ -0,0 +1,31 @@ +/* + * 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.domain.use_case.history + +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 + +class AddHistoryUseCase @Inject constructor( + private val historyRepository: HistoryRepository +) { + + suspend operator fun invoke(history: History) { + logI("Inserting history for [${history.bookId}].") + + historyRepository.addHistory(history = history).fold( + onSuccess = { + logI("Successfully inserted history for [${history.bookId}].") + }, + onFailure = { + logE("Could not insert history for [${history.bookId}] with error: ${it.message}") + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/DeleteHistory.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/DeleteHistory.kt deleted file mode 100644 index 1ebda6f8..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/DeleteHistory.kt +++ /dev/null @@ -1,20 +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.domain.use_case.history - -import ua.acclorite.book_story.domain.history.History -import ua.acclorite.book_story.domain.repository.HistoryRepository -import javax.inject.Inject - -class DeleteHistory @Inject constructor( - private val repository: HistoryRepository -) { - - suspend fun execute(history: History) { - repository.deleteHistory(history) - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..d0c2661d --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/DeleteHistoryUseCase.kt @@ -0,0 +1,31 @@ +/* + * 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.domain.use_case.history + +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 + +class DeleteHistoryUseCase @Inject constructor( + private val historyRepository: HistoryRepository +) { + + suspend operator fun invoke(history: History) { + logI("Deleting history [${history.id}].") + + return historyRepository.deleteHistory(history).fold( + onSuccess = { + logI("Successfully deleted history [${history.id}].") + }, + onFailure = { + logE("Could not delete history [${history.id}] with error: ${it.message}") + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/DeleteWholeHistory.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/DeleteWholeHistory.kt deleted file mode 100644 index 8cf0d43b..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/DeleteWholeHistory.kt +++ /dev/null @@ -1,19 +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.domain.use_case.history - -import ua.acclorite.book_story.domain.repository.HistoryRepository -import javax.inject.Inject - -class DeleteWholeHistory @Inject constructor( - private val repository: HistoryRepository -) { - - suspend fun execute() { - repository.deleteWholeHistory() - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..14c99b51 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/DeleteWholeHistoryUseCase.kt @@ -0,0 +1,30 @@ +/* + * 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.domain.use_case.history + +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 + +class DeleteWholeHistoryUseCase @Inject constructor( + private val historyRepository: HistoryRepository +) { + + suspend operator fun invoke() { + logI("Deleting whole history.") + + return historyRepository.deleteWholeHistory().fold( + onSuccess = { + logI("Successfully deleted whole history.") + }, + onFailure = { + logE("Could not delete whole history with error: ${it.message}") + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/GetHistory.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/GetHistory.kt deleted file mode 100644 index c66a6dc9..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/GetHistory.kt +++ /dev/null @@ -1,20 +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.domain.use_case.history - -import ua.acclorite.book_story.domain.history.History -import ua.acclorite.book_story.domain.repository.HistoryRepository -import javax.inject.Inject - -class GetHistory @Inject constructor( - private val repository: HistoryRepository -) { - - suspend fun execute(): List { - return repository.getHistory() - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..e4653180 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/GetHistoryForBookUseCase.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.domain.use_case.history + +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 + +class GetHistoryForBookUseCase @Inject constructor( + private val historyRepository: HistoryRepository +) { + + suspend operator fun invoke(bookId: Int): History? { + logI("Getting history for [$bookId].") + + return historyRepository.getHistoryForBook(bookId = bookId).fold( + onSuccess = { + logI("Successfully got history for [$bookId].") + it + }, + onFailure = { + logE("Could not get history for [$bookId] with error: ${it.message}") + null + } + ) + } +} \ No newline at end of file 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 new file mode 100644 index 00000000..52a8f344 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/GetHistoryUseCase.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.domain.use_case.history + +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 + +class GetHistoryUseCase @Inject constructor( + private val historyRepository: HistoryRepository +) { + + suspend operator fun invoke(): List { + logI("Getting all history.") + + return historyRepository.getHistory().fold( + onSuccess = { + logI("Successfully got ${it.size} history entries.") + it + }, + onFailure = { + logE("Could not get history entries with error: ${it.message}") + emptyList() + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/GetLatestHistory.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/GetLatestHistory.kt deleted file mode 100644 index 2ecb8aa5..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/GetLatestHistory.kt +++ /dev/null @@ -1,20 +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.domain.use_case.history - -import ua.acclorite.book_story.domain.history.History -import ua.acclorite.book_story.domain.repository.HistoryRepository -import javax.inject.Inject - -class GetLatestHistory @Inject constructor( - private val repository: HistoryRepository -) { - - suspend fun execute(bookId: Int): History? { - return repository.getLatestBookHistory(bookId) - } -} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/InsertHistory.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/InsertHistory.kt deleted file mode 100644 index 4db16edf..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/history/InsertHistory.kt +++ /dev/null @@ -1,20 +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.domain.use_case.history - -import ua.acclorite.book_story.domain.history.History -import ua.acclorite.book_story.domain.repository.HistoryRepository -import javax.inject.Inject - -class InsertHistory @Inject constructor( - private val repository: HistoryRepository -) { - - suspend fun execute(history: History) { - repository.insertHistory(history) - } -} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/permission/GrantPersistableUriPermission.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/permission/GrantPersistableUriPermission.kt deleted file mode 100644 index 2d802f50..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/permission/GrantPersistableUriPermission.kt +++ /dev/null @@ -1,20 +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.domain.use_case.permission - -import android.net.Uri -import ua.acclorite.book_story.domain.repository.PermissionRepository -import javax.inject.Inject - -class GrantPersistableUriPermission @Inject constructor( - private val repository: PermissionRepository -) { - - suspend fun execute(uri: Uri) { - repository.grantPersistableUriPermission(uri) - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..f1558e72 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/permission/GrantPersistableUriPermissionUseCase.kt @@ -0,0 +1,30 @@ +/* + * 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.domain.use_case.permission + +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 + +class GrantPersistableUriPermissionUseCase @Inject constructor( + private val permissionRepository: PermissionRepository +) { + + suspend operator fun invoke(uri: String) { + logI("Granting persistable URI permission to \"$uri\".") + + permissionRepository.grantPersistableUriPermission(uri).fold( + onSuccess = { + logI("Successfully granted persistable URI permission to \"$uri\".") + }, + onFailure = { + logE("Could not grant persistable URI permission to \"$uri\" with error: ${it.message}.") + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/permission/ReleasePersistableUriPermission.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/permission/ReleasePersistableUriPermission.kt deleted file mode 100644 index b7c7c106..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/permission/ReleasePersistableUriPermission.kt +++ /dev/null @@ -1,20 +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.domain.use_case.permission - -import android.net.Uri -import ua.acclorite.book_story.domain.repository.PermissionRepository -import javax.inject.Inject - -class ReleasePersistableUriPermission @Inject constructor( - private val repository: PermissionRepository -) { - - suspend fun execute(uri: Uri) { - repository.releasePersistableUriPermission(uri) - } -} \ No newline at end of file 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 new file mode 100644 index 00000000..2f9e6ece --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/permission/ReleasePersistableUriPermissionUseCase.kt @@ -0,0 +1,30 @@ +/* + * 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.domain.use_case.permission + +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 + +class ReleasePersistableUriPermissionUseCase @Inject constructor( + private val permissionRepository: PermissionRepository +) { + + suspend operator fun invoke(uri: String) { + logI("Releasing persistable URI permission from \"$uri\".") + + permissionRepository.releasePersistableUriPermission(uri).fold( + onSuccess = { + logI("Successfully released persistable URI permission from \"$uri\".") + }, + onFailure = { + logE("Could not release persistable URI permission from \"$uri\" with error: ${it.message}.") + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/about/AboutEvent.kt b/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutEvent.kt similarity index 88% rename from app/src/main/java/ua/acclorite/book_story/ui/about/AboutEvent.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/about/AboutEvent.kt index 626574df..b7c01768 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/about/AboutEvent.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutEvent.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.about +package ua.acclorite.book_story.presentation.about import android.content.Context import androidx.compose.runtime.Immutable diff --git a/app/src/main/java/ua/acclorite/book_story/ui/about/AboutModel.kt b/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutModel.kt similarity index 88% rename from app/src/main/java/ua/acclorite/book_story/ui/about/AboutModel.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/about/AboutModel.kt index d2be6c7b..22872e13 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/about/AboutModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutModel.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.about +package ua.acclorite.book_story.presentation.about import android.content.Intent import androidx.activity.ComponentActivity @@ -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.presentation.core.util.launchActivity -import ua.acclorite.book_story.presentation.core.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/ui/about/AboutScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutScreen.kt similarity index 72% rename from app/src/main/java/ua/acclorite/book_story/ui/about/AboutScreen.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/about/AboutScreen.kt index fc5b0fe8..16c36132 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/about/AboutScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutScreen.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.about +package ua.acclorite.book_story.presentation.about import android.os.Parcelable import androidx.compose.material3.ExperimentalMaterial3Api @@ -12,12 +12,12 @@ import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import androidx.hilt.navigation.compose.hiltViewModel import kotlinx.parcelize.Parcelize -import ua.acclorite.book_story.domain.navigator.Screen -import ua.acclorite.book_story.presentation.about.AboutContent -import ua.acclorite.book_story.presentation.core.components.top_bar.collapsibleTopAppBarScrollBehavior -import ua.acclorite.book_story.presentation.navigator.LocalNavigator -import ua.acclorite.book_story.ui.credits.CreditsScreen -import ua.acclorite.book_story.ui.licenses.LicensesScreen +import ua.acclorite.book_story.presentation.credits.CreditsScreen +import ua.acclorite.book_story.presentation.licenses.LicensesScreen +import ua.acclorite.book_story.presentation.navigator.Screen +import ua.acclorite.book_story.ui.about.AboutContent +import ua.acclorite.book_story.ui.common.components.top_bar.collapsibleTopAppBarScrollBehavior +import ua.acclorite.book_story.ui.navigator.LocalNavigator @Parcelize object AboutScreen : Screen, Parcelable { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoEvent.kt b/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoEvent.kt similarity index 92% rename from app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoEvent.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoEvent.kt index 3ba33ac1..8ae17e60 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoEvent.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoEvent.kt @@ -4,13 +4,13 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.book_info +package ua.acclorite.book_story.presentation.book_info import android.content.Context import android.net.Uri import androidx.compose.runtime.Immutable -import ua.acclorite.book_story.domain.library.category.Category -import ua.acclorite.book_story.domain.ui.UIText +import ua.acclorite.book_story.core.ui.UIText +import ua.acclorite.book_story.domain.model.library.Category @Immutable sealed class BookInfoEvent { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoModel.kt b/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoModel.kt similarity index 86% rename from app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoModel.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoModel.kt index 10a391b9..553054d8 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoModel.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.book_info +package ua.acclorite.book_story.presentation.book_info import android.graphics.BitmapFactory import androidx.lifecycle.ViewModel @@ -21,26 +21,26 @@ import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext import kotlinx.coroutines.yield import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.use_case.book.CanResetCover -import ua.acclorite.book_story.domain.use_case.book.DeleteBooks -import ua.acclorite.book_story.domain.use_case.book.GetBookById -import ua.acclorite.book_story.domain.use_case.book.ResetCoverImage -import ua.acclorite.book_story.domain.use_case.book.UpdateBook -import ua.acclorite.book_story.domain.use_case.book.UpdateCoverImageOfBook -import ua.acclorite.book_story.presentation.core.util.showToast -import ua.acclorite.book_story.ui.browse.BrowseScreen -import ua.acclorite.book_story.ui.history.HistoryScreen -import ua.acclorite.book_story.ui.library.LibraryScreen +import ua.acclorite.book_story.domain.use_case.book.CanResetCoverImageUseCase +import ua.acclorite.book_story.domain.use_case.book.DeleteBookUseCase +import ua.acclorite.book_story.domain.use_case.book.GetBookUseCase +import ua.acclorite.book_story.domain.use_case.book.ResetCoverImageUseCase +import ua.acclorite.book_story.domain.use_case.book.UpdateBookUseCase +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.helpers.showToast import javax.inject.Inject @HiltViewModel class BookInfoModel @Inject constructor( - private val getBookById: GetBookById, - private val updateBook: UpdateBook, - private val canResetCover: CanResetCover, - private val updateCoverImageOfBook: UpdateCoverImageOfBook, - private val resetCoverImage: ResetCoverImage, - private val deleteBooks: DeleteBooks + private val updateCoverImageUseCase: UpdateCoverImageUseCase, + private val updateBookUseCase: UpdateBookUseCase, + private val getBookUseCase: GetBookUseCase, + private val deleteBookUseCase: DeleteBookUseCase, + private val canResetCoverImageUseCase: CanResetCoverImageUseCase, + private val resetCoverImageUseCase: ResetCoverImageUseCase ) : ViewModel() { private val mutex = Mutex() @@ -76,14 +76,10 @@ class BookInfoModel @Inject constructor( BitmapFactory.decodeStream(it) } ?: return@launch - updateCoverImageOfBook.execute( - _state.value.book, - image - ) + updateCoverImageUseCase(_state.value.book.id, image) - val newCoverImage = getBookById.execute( - _state.value.book.id - )?.coverImage ?: return@launch + val newCoverImage = getBookUseCase(_state.value.book.id)?.coverImage + ?: return@launch _state.update { it.copy( @@ -91,7 +87,7 @@ class BookInfoModel @Inject constructor( coverImage = newCoverImage ), bottomSheet = null, - canResetCover = canResetCover.execute(bookId = it.book.id) + canResetCover = canResetCoverImageUseCase(it.book.id) ) } @@ -107,7 +103,7 @@ class BookInfoModel @Inject constructor( is BookInfoEvent.OnResetCover -> { launch { - val result = resetCoverImage.execute(_state.value.book.id) + val result = resetCoverImageUseCase(_state.value.book.id) if (!result) { withContext(Dispatchers.Main) { @@ -117,7 +113,7 @@ class BookInfoModel @Inject constructor( return@launch } - val book = getBookById.execute(_state.value.book.id) + val book = getBookUseCase(_state.value.book.id) if (book == null) { withContext(Dispatchers.Main) { @@ -151,17 +147,14 @@ class BookInfoModel @Inject constructor( return@launch } - updateCoverImageOfBook.execute( - bookWithOldCover = _state.value.book, - newCoverImage = null - ) + updateCoverImageUseCase(_state.value.book.id, null) _state.update { it.copy( book = it.book.copy( coverImage = null ), bottomSheet = null, - canResetCover = canResetCover.execute(bookId = it.book.id) + canResetCover = canResetCoverImageUseCase(it.book.id) ) } @@ -178,7 +171,7 @@ class BookInfoModel @Inject constructor( is BookInfoEvent.OnCheckCoverReset -> { launch(Dispatchers.IO) { if (_state.value.book.id == -1) return@launch - canResetCover.execute(_state.value.book.id).apply { + canResetCoverImageUseCase(_state.value.book.id).apply { _state.update { it.copy( canResetCover = this @@ -213,7 +206,7 @@ class BookInfoModel @Inject constructor( ) ) } - updateBook.execute(_state.value.book) + updateBookUseCase(_state.value.book) LibraryScreen.refreshListChannel.trySend(0) HistoryScreen.refreshListChannel.trySend(0) @@ -242,7 +235,7 @@ class BookInfoModel @Inject constructor( ) ) } - updateBook.execute(_state.value.book) + updateBookUseCase(_state.value.book) LibraryScreen.refreshListChannel.trySend(0) HistoryScreen.refreshListChannel.trySend(0) @@ -271,7 +264,7 @@ class BookInfoModel @Inject constructor( ) ) } - updateBook.execute(_state.value.book) + updateBookUseCase(_state.value.book) LibraryScreen.refreshListChannel.trySend(0) HistoryScreen.refreshListChannel.trySend(0) @@ -300,7 +293,7 @@ class BookInfoModel @Inject constructor( ) ) } - updateBook.execute(_state.value.book) + updateBookUseCase(_state.value.book) LibraryScreen.refreshListChannel.trySend(0) HistoryScreen.refreshListChannel.trySend(0) @@ -329,7 +322,7 @@ class BookInfoModel @Inject constructor( ) } - deleteBooks.execute(listOf(_state.value.book)) + deleteBookUseCase(_state.value.book) LibraryScreen.refreshListChannel.trySend(0) HistoryScreen.refreshListChannel.trySend(0) @@ -363,7 +356,7 @@ class BookInfoModel @Inject constructor( bottomSheet = null ) } - updateBook.execute(_state.value.book) + updateBookUseCase(_state.value.book) LibraryScreen.refreshListChannel.trySend(0) HistoryScreen.refreshListChannel.trySend(0) @@ -392,7 +385,7 @@ class BookInfoModel @Inject constructor( navigateBack: () -> Unit ) { viewModelScope.launch(Dispatchers.IO) { - val book = getBookById.execute(bookId) + val book = getBookUseCase(bookId) if (book == null) { navigateBack() diff --git a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoScreen.kt similarity index 89% rename from app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoScreen.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoScreen.kt index 234b6460..cc05b54e 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoScreen.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.book_info +package ua.acclorite.book_story.presentation.book_info import android.os.Parcelable import androidx.compose.foundation.layout.Box @@ -19,13 +19,13 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.getOrElse import kotlinx.parcelize.Parcelize -import ua.acclorite.book_story.domain.navigator.Screen -import ua.acclorite.book_story.presentation.book_info.BookInfoContent -import ua.acclorite.book_story.presentation.navigator.LocalNavigator -import ua.acclorite.book_story.ui.history.HistoryScreen -import ua.acclorite.book_story.ui.reader.ReaderScreen -import ua.acclorite.book_story.ui.settings.LibrarySettingsScreen -import ua.acclorite.book_story.ui.settings.SettingsModel +import ua.acclorite.book_story.presentation.history.HistoryScreen +import ua.acclorite.book_story.presentation.navigator.Screen +import ua.acclorite.book_story.presentation.reader.ReaderScreen +import ua.acclorite.book_story.presentation.settings.LibrarySettingsScreen +import ua.acclorite.book_story.presentation.settings.SettingsModel +import ua.acclorite.book_story.ui.book_info.BookInfoContent +import ua.acclorite.book_story.ui.navigator.LocalNavigator @Parcelize data class BookInfoScreen(val bookId: Int) : Screen, Parcelable { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoState.kt b/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoState.kt similarity index 52% rename from app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoState.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoState.kt index 67aa774c..7d1437fd 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoState.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoState.kt @@ -4,17 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.book_info +package ua.acclorite.book_story.presentation.book_info import androidx.compose.runtime.Immutable -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.util.BottomSheet -import ua.acclorite.book_story.domain.util.Dialog -import ua.acclorite.book_story.presentation.core.constants.provideEmptyBook +import ua.acclorite.book_story.core.BottomSheet +import ua.acclorite.book_story.core.Dialog +import ua.acclorite.book_story.domain.model.library.Book @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/ui/browse/BrowseEvent.kt b/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseEvent.kt similarity index 88% rename from app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseEvent.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseEvent.kt index f4ff8cf7..12bf44ed 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseEvent.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseEvent.kt @@ -4,13 +4,13 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.browse +package ua.acclorite.book_story.presentation.browse import android.content.Context import androidx.compose.runtime.Immutable import androidx.compose.ui.focus.FocusRequester -import ua.acclorite.book_story.domain.browse.file.SelectableFile -import ua.acclorite.book_story.domain.library.book.SelectableNullableBook +import ua.acclorite.book_story.presentation.browse.model.SelectableFile +import ua.acclorite.book_story.presentation.library.model.SelectableNullableBook @Immutable sealed class BrowseEvent { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseModel.kt b/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseModel.kt similarity index 84% rename from app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseModel.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseModel.kt index 1938e0a4..b51c9353 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseModel.kt @@ -4,8 +4,9 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.browse +package ua.acclorite.book_story.presentation.browse +import androidx.core.net.toUri import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel @@ -22,23 +23,24 @@ import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext import kotlinx.coroutines.yield import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.browse.display.BrowseSortOrder -import ua.acclorite.book_story.domain.browse.file.SelectableFile -import ua.acclorite.book_story.domain.library.book.NullableBook -import ua.acclorite.book_story.domain.library.book.SelectableNullableBook -import ua.acclorite.book_story.domain.use_case.book.InsertBook -import ua.acclorite.book_story.domain.use_case.file_system.GetBookFromFile -import ua.acclorite.book_story.domain.use_case.file_system.GetFiles -import ua.acclorite.book_story.presentation.core.util.compareByWithOrder -import ua.acclorite.book_story.presentation.core.util.showToast -import ua.acclorite.book_story.ui.library.LibraryScreen +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 +import ua.acclorite.book_story.domain.use_case.file_system.GetBookFromFileUseCase +import ua.acclorite.book_story.domain.use_case.file_system.SearchFilesUseCase +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.helpers.showToast import javax.inject.Inject @HiltViewModel class BrowseModel @Inject constructor( - private val getFiles: GetFiles, - private val getBookFromFile: GetBookFromFile, - private val insertBook: InsertBook + private val addBookUseCase: AddBookUseCase, + private val searchFilesUseCase: SearchFilesUseCase, + private val getBookFromFileUseCase: GetBookFromFileUseCase ) : ViewModel() { private val mutex = Mutex() @@ -182,11 +184,11 @@ class BrowseModel @Inject constructor( val editedList = _state.value.files.map { file -> if ( event.files.any { - file.data.path.startsWith(it.data.path) + file.path.startsWith(it.path) } && event.includedFileFormats.run { if (isEmpty()) return@run true any { - file.data.path.endsWith(it, ignoreCase = true) + file.path.endsWith(it, ignoreCase = true) } } ) { @@ -216,7 +218,7 @@ class BrowseModel @Inject constructor( is BrowseEvent.OnSelectFile -> { viewModelScope.launch(Dispatchers.IO) { val editedList = _state.value.files.map { file -> - if (event.file.data.path == file.data.path) { + if (event.file.path == file.path) { file.copy( selected = !file.selected ) @@ -294,7 +296,18 @@ class BrowseModel @Inject constructor( } .forEach { yield() - books.add(getBookFromFile.execute(it.data)) + books.add( + getBookFromFileUseCase( + File( + name = it.name, + uri = it.uri.toString(), + path = it.path, + size = it.size, + lastModified = it.lastModified, + isDirectory = it.isDirectory + ) + ) + ) } yield() @@ -335,7 +348,12 @@ class BrowseModel @Inject constructor( }.ifEmpty { return@launch } for (book in booksToInsert) { - insertBook.execute(book.bookWithCover!!) + book.bookWithCover?.let { + addBookUseCase( + it.book, + it.coverImage + ) + } } LibraryScreen.refreshListChannel.trySend(0) @@ -402,11 +420,21 @@ class BrowseModel @Inject constructor( private suspend fun getFilesFromDownloads( query: String = if (_state.value.showSearch) _state.value.searchQuery else "" ) { - getFiles.execute(query).apply { + searchFilesUseCase(query).apply { yield() _state.update { it.copy( - files = this, + files = map { + SelectableFile( + name = it.name, + uri = it.uri.toUri(), + path = it.path, + size = it.size, + lastModified = it.lastModified, + isDirectory = it.isDirectory, + selected = false + ) + }, hasSelectedItems = false, isLoading = false ) @@ -427,7 +455,7 @@ class BrowseModel @Inject constructor( return filter { file -> includedFilterItems.any { - file.data.path.endsWith( + file.path.endsWith( it, ignoreCase = true ) } @@ -440,19 +468,19 @@ class BrowseModel @Inject constructor( compareByWithOrder(sortOrderDescending) { when (sortOrder) { BrowseSortOrder.NAME -> { - it.data.name.trim() + it.name.trim() } BrowseSortOrder.FILE_FORMAT -> { - it.data.path.substringAfterLast(".").lowercase().trimEnd() + it.path.substringAfterLast(".").lowercase().trimEnd() } BrowseSortOrder.FILE_SIZE -> { - it.data.size + it.size } else -> { - it.data.lastModified + it.lastModified } } } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseScreen.kt similarity index 92% rename from app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseScreen.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseScreen.kt index 64e53bde..8486ecda 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseScreen.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.browse +package ua.acclorite.book_story.presentation.browse import android.os.Parcelable import androidx.compose.foundation.lazy.grid.rememberLazyGridState @@ -24,13 +24,13 @@ import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.parcelize.IgnoredOnParcel import kotlinx.parcelize.Parcelize -import ua.acclorite.book_story.domain.browse.display.BrowseLayout -import ua.acclorite.book_story.domain.navigator.Screen -import ua.acclorite.book_story.presentation.browse.BrowseContent -import ua.acclorite.book_story.presentation.navigator.LocalNavigator -import ua.acclorite.book_story.ui.library.LibraryScreen -import ua.acclorite.book_story.ui.main.MainModel -import ua.acclorite.book_story.ui.settings.BrowseSettingsScreen +import ua.acclorite.book_story.presentation.browse.model.BrowseLayout +import ua.acclorite.book_story.presentation.library.LibraryScreen +import ua.acclorite.book_story.presentation.main.MainModel +import ua.acclorite.book_story.presentation.navigator.Screen +import ua.acclorite.book_story.presentation.settings.BrowseSettingsScreen +import ua.acclorite.book_story.ui.browse.BrowseContent +import ua.acclorite.book_story.ui.navigator.LocalNavigator @Parcelize object BrowseScreen : Screen, Parcelable { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseState.kt b/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseState.kt similarity index 71% rename from app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseState.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseState.kt index 08d5c324..30ae0233 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseState.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseState.kt @@ -4,13 +4,13 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.browse +package ua.acclorite.book_story.presentation.browse import androidx.compose.runtime.Immutable -import ua.acclorite.book_story.domain.browse.file.SelectableFile -import ua.acclorite.book_story.domain.library.book.SelectableNullableBook -import ua.acclorite.book_story.domain.util.BottomSheet -import ua.acclorite.book_story.domain.util.Dialog +import ua.acclorite.book_story.core.BottomSheet +import ua.acclorite.book_story.core.Dialog +import ua.acclorite.book_story.presentation.browse.model.SelectableFile +import ua.acclorite.book_story.presentation.library.model.SelectableNullableBook @Immutable data class BrowseState( diff --git a/app/src/main/java/ua/acclorite/book_story/domain/browse/display/BrowseLayout.kt b/app/src/main/java/ua/acclorite/book_story/presentation/browse/model/BrowseLayout.kt similarity index 64% rename from app/src/main/java/ua/acclorite/book_story/domain/browse/display/BrowseLayout.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/browse/model/BrowseLayout.kt index bfbf9ce2..bdca7a8f 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/browse/display/BrowseLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/browse/model/BrowseLayout.kt @@ -4,15 +4,11 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.browse.display +package ua.acclorite.book_story.presentation.browse.model import androidx.compose.runtime.Immutable @Immutable enum class BrowseLayout { LIST, GRID -} - -fun String.toBrowseLayout(): BrowseLayout { - return BrowseLayout.valueOf(this) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/browse/display/BrowseSortOrder.kt b/app/src/main/java/ua/acclorite/book_story/presentation/browse/model/BrowseSortOrder.kt similarity index 54% rename from app/src/main/java/ua/acclorite/book_story/domain/browse/display/BrowseSortOrder.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/browse/model/BrowseSortOrder.kt index bbb7bd30..c70f711e 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/browse/display/BrowseSortOrder.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/browse/model/BrowseSortOrder.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.browse.display +package ua.acclorite.book_story.presentation.browse.model import androidx.compose.runtime.Immutable @@ -14,12 +14,4 @@ enum class BrowseSortOrder { FILE_FORMAT, LAST_MODIFIED, FILE_SIZE, -} - -fun String.toBrowseSortOrder(): BrowseSortOrder { - return try { - BrowseSortOrder.valueOf(this) - } catch (_: IllegalArgumentException) { - BrowseSortOrder.LAST_MODIFIED - } } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/browse/file/GroupedFiles.kt b/app/src/main/java/ua/acclorite/book_story/presentation/browse/model/GroupedFiles.kt similarity index 84% rename from app/src/main/java/ua/acclorite/book_story/domain/browse/file/GroupedFiles.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/browse/model/GroupedFiles.kt index ceda0bd5..50f21b08 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/browse/file/GroupedFiles.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/browse/model/GroupedFiles.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.browse.file +package ua.acclorite.book_story.presentation.browse.model import androidx.compose.runtime.Immutable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/browse/model/SelectableFile.kt b/app/src/main/java/ua/acclorite/book_story/presentation/browse/model/SelectableFile.kt new file mode 100644 index 00000000..66b112db --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/presentation/browse/model/SelectableFile.kt @@ -0,0 +1,21 @@ +/* + * 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.presentation.browse.model + +import android.net.Uri +import androidx.compose.runtime.Immutable + +@Immutable +data class SelectableFile( + val name: String, + val uri: Uri, + val path: String, + val size: Long, + val lastModified: Long, + val isDirectory: Boolean, + val selected: Boolean +) \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/constants/AboutBadgeConstants.kt b/app/src/main/java/ua/acclorite/book_story/presentation/core/constants/AboutBadgeConstants.kt deleted file mode 100644 index 30942c86..00000000 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/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.presentation.core.constants - -import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.about.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/presentation/core/constants/CommonConstants.kt b/app/src/main/java/ua/acclorite/book_story/presentation/core/constants/CommonConstants.kt deleted file mode 100644 index 5101a345..00000000 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/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.presentation.core.constants - -import androidx.compose.ui.graphics.Color -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.reader.ColorPreset -import ua.acclorite.book_story.domain.ui.UIText - -// 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/presentation/core/constants/CreditConstants.kt b/app/src/main/java/ua/acclorite/book_story/presentation/core/constants/CreditConstants.kt deleted file mode 100644 index 69097856..00000000 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/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.presentation.core.constants - -import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.about.Credit -import ua.acclorite.book_story.domain.ui.UIText - -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/presentation/core/constants/HelpTipConstants.kt b/app/src/main/java/ua/acclorite/book_story/presentation/core/constants/HelpTipConstants.kt deleted file mode 100644 index 6f90e8be..00000000 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/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.presentation.core.constants - -import androidx.compose.ui.res.stringResource -import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.help.HelpTip -import ua.acclorite.book_story.presentation.help.HelpAnnotation - -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/presentation/core/constants/LanguageConstants.kt b/app/src/main/java/ua/acclorite/book_story/presentation/core/constants/LanguageConstants.kt deleted file mode 100644 index b835e8eb..00000000 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/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.presentation.core.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/presentation/core/constants/LinkConstants.kt b/app/src/main/java/ua/acclorite/book_story/presentation/core/constants/LinkConstants.kt deleted file mode 100644 index c7b66566..00000000 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/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.presentation.core.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/presentation/core/constants/ScrollbarConstants.kt b/app/src/main/java/ua/acclorite/book_story/presentation/core/constants/ScrollbarConstants.kt deleted file mode 100644 index 1df9a01f..00000000 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/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.presentation.core.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/presentation/core/constants/SupportedExtensionConstants.kt b/app/src/main/java/ua/acclorite/book_story/presentation/core/constants/SupportedExtensionConstants.kt deleted file mode 100644 index 6cf8101c..00000000 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/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.presentation.core.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/crash/CrashActivity.kt b/app/src/main/java/ua/acclorite/book_story/presentation/crash/CrashActivity.kt similarity index 90% rename from app/src/main/java/ua/acclorite/book_story/ui/crash/CrashActivity.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/crash/CrashActivity.kt index 42380bd5..e9ebadd3 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/crash/CrashActivity.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/crash/CrashActivity.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.crash +package ua.acclorite.book_story.presentation.crash import android.os.Bundle import androidx.activity.compose.setContent @@ -12,7 +12,7 @@ import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity import androidx.compose.foundation.isSystemInDarkTheme import androidx.core.view.WindowCompat -import ua.acclorite.book_story.domain.ui.ThemeContrast +import ua.acclorite.book_story.presentation.main.model.ThemeContrast import ua.acclorite.book_story.ui.theme.BookStoryTheme import ua.acclorite.book_story.ui.theme.Theme diff --git a/app/src/main/java/ua/acclorite/book_story/ui/crash/CrashScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/crash/CrashScreen.kt similarity index 87% rename from app/src/main/java/ua/acclorite/book_story/ui/crash/CrashScreen.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/crash/CrashScreen.kt index 7aa7835a..905b120f 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/crash/CrashScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/crash/CrashScreen.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.crash +package ua.acclorite.book_story.presentation.crash import android.content.ClipData import android.content.Intent @@ -20,11 +20,11 @@ import kotlinx.coroutines.launch import kotlinx.parcelize.Parcelize import ua.acclorite.book_story.R import ua.acclorite.book_story.core.crash.CrashUtils -import ua.acclorite.book_story.domain.navigator.Screen -import ua.acclorite.book_story.presentation.core.util.LocalActivity -import ua.acclorite.book_story.presentation.core.util.launchActivity -import ua.acclorite.book_story.presentation.core.util.showToast -import ua.acclorite.book_story.presentation.crash.CrashContent +import ua.acclorite.book_story.presentation.navigator.Screen +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 object CrashScreen : Screen, Parcelable { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/credits/CreditsScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/credits/CreditsScreen.kt similarity index 72% rename from app/src/main/java/ua/acclorite/book_story/ui/credits/CreditsScreen.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/credits/CreditsScreen.kt index 0a34895c..36743fd6 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/credits/CreditsScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/credits/CreditsScreen.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.credits +package ua.acclorite.book_story.presentation.credits import android.os.Parcelable import androidx.compose.material3.ExperimentalMaterial3Api @@ -12,11 +12,11 @@ import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import androidx.hilt.navigation.compose.hiltViewModel import kotlinx.parcelize.Parcelize -import ua.acclorite.book_story.domain.navigator.Screen -import ua.acclorite.book_story.presentation.core.components.top_bar.collapsibleTopAppBarScrollBehavior -import ua.acclorite.book_story.presentation.credits.CreditsContent -import ua.acclorite.book_story.presentation.navigator.LocalNavigator -import ua.acclorite.book_story.ui.about.AboutModel +import ua.acclorite.book_story.presentation.about.AboutModel +import ua.acclorite.book_story.presentation.navigator.Screen +import ua.acclorite.book_story.ui.common.components.top_bar.collapsibleTopAppBarScrollBehavior +import ua.acclorite.book_story.ui.credits.CreditsContent +import ua.acclorite.book_story.ui.navigator.LocalNavigator @Parcelize object CreditsScreen : Screen, Parcelable { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/help/HelpScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/help/HelpScreen.kt similarity index 71% rename from app/src/main/java/ua/acclorite/book_story/ui/help/HelpScreen.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/help/HelpScreen.kt index ff759d8d..3764d640 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/help/HelpScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/help/HelpScreen.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.help +package ua.acclorite.book_story.presentation.help import android.os.Parcelable import androidx.compose.material3.ExperimentalMaterial3Api @@ -12,14 +12,14 @@ import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import androidx.hilt.navigation.compose.hiltViewModel import kotlinx.parcelize.Parcelize -import ua.acclorite.book_story.domain.navigator.Screen -import ua.acclorite.book_story.presentation.core.components.top_bar.collapsibleTopAppBarScrollBehavior -import ua.acclorite.book_story.presentation.help.HelpContent -import ua.acclorite.book_story.presentation.navigator.LocalNavigator -import ua.acclorite.book_story.ui.browse.BrowseScreen -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel -import ua.acclorite.book_story.ui.start.StartScreen +import ua.acclorite.book_story.presentation.browse.BrowseScreen +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.start.StartScreen +import ua.acclorite.book_story.ui.common.components.top_bar.collapsibleTopAppBarScrollBehavior +import ua.acclorite.book_story.ui.help.HelpContent +import ua.acclorite.book_story.ui.navigator.LocalNavigator @Parcelize data class HelpScreen(val fromStart: Boolean) : Screen, Parcelable { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryEvent.kt b/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryEvent.kt similarity index 91% rename from app/src/main/java/ua/acclorite/book_story/ui/history/HistoryEvent.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryEvent.kt index ad4ba7ce..22d76397 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryEvent.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryEvent.kt @@ -4,13 +4,13 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.history +package ua.acclorite.book_story.presentation.history import android.content.Context import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Immutable import androidx.compose.ui.focus.FocusRequester -import ua.acclorite.book_story.domain.history.History +import ua.acclorite.book_story.domain.model.history.History @Immutable sealed class HistoryEvent { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryModel.kt b/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryModel.kt similarity index 90% rename from app/src/main/java/ua/acclorite/book_story/ui/history/HistoryModel.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryModel.kt index 50f973ec..31c1e502 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryModel.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.history +package ua.acclorite.book_story.presentation.history import androidx.compose.material3.SnackbarResult import androidx.lifecycle.ViewModel @@ -23,15 +23,15 @@ import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext import kotlinx.coroutines.yield import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.history.GroupedHistory -import ua.acclorite.book_story.domain.history.History -import ua.acclorite.book_story.domain.use_case.book.GetBooksById -import ua.acclorite.book_story.domain.use_case.history.DeleteHistory -import ua.acclorite.book_story.domain.use_case.history.DeleteWholeHistory -import ua.acclorite.book_story.domain.use_case.history.GetHistory -import ua.acclorite.book_story.domain.use_case.history.InsertHistory -import ua.acclorite.book_story.presentation.core.util.showToast -import ua.acclorite.book_story.ui.library.LibraryScreen +import ua.acclorite.book_story.domain.model.history.History +import ua.acclorite.book_story.domain.use_case.book.GetBookUseCase +import ua.acclorite.book_story.domain.use_case.history.AddHistoryUseCase +import ua.acclorite.book_story.domain.use_case.history.DeleteHistoryUseCase +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.helpers.showToast import java.text.SimpleDateFormat import java.util.Calendar import java.util.Date @@ -40,11 +40,11 @@ import javax.inject.Inject @HiltViewModel class HistoryModel @Inject constructor( - private val getHistory: GetHistory, - private val getBooksById: GetBooksById, - private val insertHistory: InsertHistory, - private val deleteHistory: DeleteHistory, - private val deleteWholeHistory: DeleteWholeHistory + private val getBookUseCase: GetBookUseCase, + private val getHistoryUseCase: GetHistoryUseCase, + private val addHistoryUseCase: AddHistoryUseCase, + private val deleteHistoryUseCase: DeleteHistoryUseCase, + private val deleteWholeHistoryUseCase: DeleteWholeHistoryUseCase ) : ViewModel() { private val mutex = Mutex() @@ -78,7 +78,7 @@ class HistoryModel @Inject constructor( } viewModelScope.launch(Dispatchers.IO) { HistoryScreen.insertHistoryChannel.receiveAsFlow().collectLatest { - insertHistory.execute( + addHistoryUseCase( History( bookId = it, book = null, @@ -199,7 +199,7 @@ class HistoryModel @Inject constructor( is HistoryEvent.OnDeleteHistoryEntry -> { viewModelScope.launch(Dispatchers.IO) { - deleteHistory.execute(event.history) + deleteHistoryUseCase(event.history) onEvent( HistoryEvent.OnRefreshList( @@ -229,7 +229,7 @@ class HistoryModel @Inject constructor( when (snackbarResult) { SnackbarResult.Dismissed -> Unit SnackbarResult.ActionPerformed -> { - insertHistory.execute(event.history) + addHistoryUseCase(event.history) LibraryScreen.refreshListChannel.trySend(0) onEvent( @@ -262,7 +262,7 @@ class HistoryModel @Inject constructor( ) } - deleteWholeHistory.execute() + deleteWholeHistoryUseCase() LibraryScreen.refreshListChannel.trySend(0) onEvent( HistoryEvent.OnRefreshList( @@ -307,12 +307,12 @@ class HistoryModel @Inject constructor( return maxElementsById.filterNotNull() } - val history = getHistory.execute().sortedByDescending { + val history = getHistoryUseCase().sortedByDescending { it.time }.run { - val books = getBooksById.execute( - this.map { it.bookId }.distinct() - ).toMutableList() + val books = map { it.bookId }.distinct().mapNotNull { + getBookUseCase(it) + }.toMutableList() mapNotNull { val book = books.find { book -> book.id == it.bookId } ?: return@mapNotNull null diff --git a/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryScreen.kt similarity index 89% rename from app/src/main/java/ua/acclorite/book_story/ui/history/HistoryScreen.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryScreen.kt index 11c8083d..1f84db1a 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryScreen.kt @@ -6,7 +6,7 @@ @file:OptIn(ExperimentalMaterialApi::class) -package ua.acclorite.book_story.ui.history +package ua.acclorite.book_story.presentation.history import android.os.Parcelable import androidx.compose.foundation.lazy.rememberLazyListState @@ -22,12 +22,12 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import kotlinx.coroutines.channels.Channel import kotlinx.parcelize.IgnoredOnParcel import kotlinx.parcelize.Parcelize -import ua.acclorite.book_story.domain.navigator.Screen -import ua.acclorite.book_story.presentation.history.HistoryContent -import ua.acclorite.book_story.presentation.navigator.LocalNavigator -import ua.acclorite.book_story.ui.book_info.BookInfoScreen -import ua.acclorite.book_story.ui.library.LibraryScreen -import ua.acclorite.book_story.ui.reader.ReaderScreen +import ua.acclorite.book_story.presentation.book_info.BookInfoScreen +import ua.acclorite.book_story.presentation.library.LibraryScreen +import ua.acclorite.book_story.presentation.navigator.Screen +import ua.acclorite.book_story.presentation.reader.ReaderScreen +import ua.acclorite.book_story.ui.history.HistoryContent +import ua.acclorite.book_story.ui.navigator.LocalNavigator @Parcelize object HistoryScreen : Screen, Parcelable { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryState.kt b/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryState.kt similarity index 74% rename from app/src/main/java/ua/acclorite/book_story/ui/history/HistoryState.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryState.kt index 945b6701..fef1be2a 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryState.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryState.kt @@ -4,11 +4,11 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.history +package ua.acclorite.book_story.presentation.history import androidx.compose.runtime.Immutable -import ua.acclorite.book_story.domain.history.GroupedHistory -import ua.acclorite.book_story.domain.util.Dialog +import ua.acclorite.book_story.core.Dialog +import ua.acclorite.book_story.presentation.history.model.GroupedHistory @Immutable data class HistoryState( diff --git a/app/src/main/java/ua/acclorite/book_story/domain/history/GroupedHistory.kt b/app/src/main/java/ua/acclorite/book_story/presentation/history/model/GroupedHistory.kt similarity index 70% rename from app/src/main/java/ua/acclorite/book_story/domain/history/GroupedHistory.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/history/model/GroupedHistory.kt index 3264c039..05dfd09b 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/history/GroupedHistory.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/history/model/GroupedHistory.kt @@ -4,12 +4,13 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.history +package ua.acclorite.book_story.presentation.history.model import androidx.compose.runtime.Immutable +import ua.acclorite.book_story.domain.model.history.History @Immutable data class GroupedHistory( val title: String, val history: List -) +) \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryEvent.kt b/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryEvent.kt similarity index 92% rename from app/src/main/java/ua/acclorite/book_story/ui/library/LibraryEvent.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryEvent.kt index c3b4287b..c2799fec 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryEvent.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryEvent.kt @@ -4,12 +4,12 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.library +package ua.acclorite.book_story.presentation.library import android.content.Context import androidx.compose.runtime.Immutable import androidx.compose.ui.focus.FocusRequester -import ua.acclorite.book_story.domain.library.category.Category +import ua.acclorite.book_story.domain.model.library.Category @Immutable sealed class LibraryEvent { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryModel.kt b/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryModel.kt similarity index 91% rename from app/src/main/java/ua/acclorite/book_story/ui/library/LibraryModel.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryModel.kt index b2a83041..139f904a 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryModel.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.library +package ua.acclorite.book_story.presentation.library import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope @@ -22,21 +22,21 @@ import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext import kotlinx.coroutines.yield import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.library.book.SelectableBook -import ua.acclorite.book_story.domain.use_case.book.DeleteBooks -import ua.acclorite.book_story.domain.use_case.book.GetBooks -import ua.acclorite.book_story.domain.use_case.book.UpdateBook -import ua.acclorite.book_story.presentation.core.util.showToast -import ua.acclorite.book_story.ui.browse.BrowseScreen -import ua.acclorite.book_story.ui.history.HistoryScreen +import ua.acclorite.book_story.domain.model.library.Book +import ua.acclorite.book_story.domain.use_case.book.DeleteBookUseCase +import ua.acclorite.book_story.domain.use_case.book.SearchBooksUseCase +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.helpers.showToast import javax.inject.Inject @HiltViewModel class LibraryModel @Inject constructor( - private val getBooks: GetBooks, - private val deleteBooks: DeleteBooks, - private val moveBooks: UpdateBook + private val updateBookUseCase: UpdateBookUseCase, + private val searchBooksUseCase: SearchBooksUseCase, + private val deleteBookUseCase: DeleteBookUseCase ) : ViewModel() { private val mutex = Mutex() @@ -208,7 +208,7 @@ class LibraryModel @Inject constructor( viewModelScope.launch { _state.value.books.forEach { book -> if (!book.selected) return@forEach - moveBooks.execute( + updateBookUseCase( book.data.copy( categories = event.selectedCategories.map { it.id } ) @@ -253,12 +253,10 @@ class LibraryModel @Inject constructor( is LibraryEvent.OnActionDeleteDialog -> { viewModelScope.launch { - deleteBooks.execute( - _state.value.books.mapNotNull { - if (!it.selected) return@mapNotNull null - it.data - } - ) + _state.value.books.forEach { + if (!it.selected) return@forEach + deleteBookUseCase(it.data) + } _state.update { it.copy( @@ -314,8 +312,7 @@ class LibraryModel @Inject constructor( private suspend fun getBooksFromDatabase( query: String = if (_state.value.showSearch) _state.value.searchQuery else "" ) { - val books = getBooks - .execute(query) + val books = searchBooksUseCase(query) .sortedWith(compareByDescending { it.lastOpened }.thenBy { it.title }) .map { book -> SelectableBook(book, false) } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryScreen.kt similarity index 90% rename from app/src/main/java/ua/acclorite/book_story/ui/library/LibraryScreen.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryScreen.kt index 8c2d786c..53d55c0b 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryScreen.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.library +package ua.acclorite.book_story.presentation.library import android.os.Parcelable import androidx.compose.foundation.pager.rememberPagerState @@ -23,16 +23,16 @@ import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.parcelize.IgnoredOnParcel import kotlinx.parcelize.Parcelize -import ua.acclorite.book_story.domain.navigator.Screen -import ua.acclorite.book_story.presentation.library.LibraryContent -import ua.acclorite.book_story.presentation.navigator.LocalNavigator -import ua.acclorite.book_story.ui.book_info.BookInfoScreen -import ua.acclorite.book_story.ui.browse.BrowseScreen -import ua.acclorite.book_story.ui.history.HistoryScreen -import ua.acclorite.book_story.ui.main.MainModel -import ua.acclorite.book_story.ui.reader.ReaderScreen -import ua.acclorite.book_story.ui.settings.LibrarySettingsScreen -import ua.acclorite.book_story.ui.settings.SettingsModel +import ua.acclorite.book_story.presentation.book_info.BookInfoScreen +import ua.acclorite.book_story.presentation.browse.BrowseScreen +import ua.acclorite.book_story.presentation.history.HistoryScreen +import ua.acclorite.book_story.presentation.main.MainModel +import ua.acclorite.book_story.presentation.navigator.Screen +import ua.acclorite.book_story.presentation.reader.ReaderScreen +import ua.acclorite.book_story.presentation.settings.LibrarySettingsScreen +import ua.acclorite.book_story.presentation.settings.SettingsModel +import ua.acclorite.book_story.ui.library.LibraryContent +import ua.acclorite.book_story.ui.navigator.LocalNavigator @Parcelize object LibraryScreen : Screen, Parcelable { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryState.kt b/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryState.kt similarity index 74% rename from app/src/main/java/ua/acclorite/book_story/ui/library/LibraryState.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryState.kt index 2dca870e..9ee4c132 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryState.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryState.kt @@ -4,12 +4,12 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.library +package ua.acclorite.book_story.presentation.library import androidx.compose.runtime.Immutable -import ua.acclorite.book_story.domain.library.book.SelectableBook -import ua.acclorite.book_story.domain.util.BottomSheet -import ua.acclorite.book_story.domain.util.Dialog +import ua.acclorite.book_story.core.BottomSheet +import ua.acclorite.book_story.core.Dialog +import ua.acclorite.book_story.presentation.library.model.SelectableBook @Immutable data class LibraryState( diff --git a/app/src/main/java/ua/acclorite/book_story/domain/library/display/LibraryLayout.kt b/app/src/main/java/ua/acclorite/book_story/presentation/library/model/LibraryLayout.kt similarity index 63% rename from app/src/main/java/ua/acclorite/book_story/domain/library/display/LibraryLayout.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/library/model/LibraryLayout.kt index 36221284..2a537798 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/library/display/LibraryLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/library/model/LibraryLayout.kt @@ -4,15 +4,11 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.library.display +package ua.acclorite.book_story.presentation.library.model import androidx.compose.runtime.Immutable @Immutable enum class LibraryLayout { GRID, LIST -} - -fun String.toLibraryLayout(): LibraryLayout { - return LibraryLayout.valueOf(this) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/library/display/LibrarySortOrder.kt b/app/src/main/java/ua/acclorite/book_story/presentation/library/model/LibrarySortOrder.kt similarity index 65% rename from app/src/main/java/ua/acclorite/book_story/domain/library/display/LibrarySortOrder.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/library/model/LibrarySortOrder.kt index fba9733c..3899deab 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/library/display/LibrarySortOrder.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/library/model/LibrarySortOrder.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.library.display +package ua.acclorite.book_story.presentation.library.model import androidx.compose.runtime.Immutable @@ -14,8 +14,4 @@ enum class LibrarySortOrder { LAST_READ, PROGRESS, AUTHOR -} - -fun String.toLibrarySortOrder(): LibrarySortOrder { - return LibrarySortOrder.valueOf(this) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/library/display/LibraryTitlePosition.kt b/app/src/main/java/ua/acclorite/book_story/presentation/library/model/LibraryTitlePosition.kt similarity index 61% rename from app/src/main/java/ua/acclorite/book_story/domain/library/display/LibraryTitlePosition.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/library/model/LibraryTitlePosition.kt index d383be87..7bfc2e72 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/library/display/LibraryTitlePosition.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/library/model/LibraryTitlePosition.kt @@ -4,15 +4,11 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.library.display +package ua.acclorite.book_story.presentation.library.model import androidx.compose.runtime.Immutable @Immutable enum class LibraryTitlePosition { OFF, BELOW, INSIDE -} - -fun String.toLibraryTitlePosition(): LibraryTitlePosition { - return LibraryTitlePosition.valueOf(this) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/library/book/SelectableBook.kt b/app/src/main/java/ua/acclorite/book_story/presentation/library/model/SelectableBook.kt similarity index 63% rename from app/src/main/java/ua/acclorite/book_story/domain/library/book/SelectableBook.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/library/model/SelectableBook.kt index 4eb871b7..e57802e3 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/library/book/SelectableBook.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/library/model/SelectableBook.kt @@ -4,10 +4,11 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.library.book +package ua.acclorite.book_story.presentation.library.model import androidx.compose.runtime.Immutable -import ua.acclorite.book_story.domain.util.Selected +import ua.acclorite.book_story.core.Selected +import ua.acclorite.book_story.domain.model.library.Book @Immutable data class SelectableBook( diff --git a/app/src/main/java/ua/acclorite/book_story/domain/library/book/SelectableNullableBook.kt b/app/src/main/java/ua/acclorite/book_story/presentation/library/model/SelectableNullableBook.kt similarity index 64% rename from app/src/main/java/ua/acclorite/book_story/domain/library/book/SelectableNullableBook.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/library/model/SelectableNullableBook.kt index f203996c..7126840f 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/library/book/SelectableNullableBook.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/library/model/SelectableNullableBook.kt @@ -4,10 +4,11 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.library.book +package ua.acclorite.book_story.presentation.library.model import androidx.compose.runtime.Immutable -import ua.acclorite.book_story.domain.util.Selected +import ua.acclorite.book_story.core.Selected +import ua.acclorite.book_story.data.model.common.NullableBook @Immutable data class SelectableNullableBook( diff --git a/app/src/main/java/ua/acclorite/book_story/ui/license_info/LicenseInfoScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/license_info/LicenseInfoScreen.kt similarity index 80% rename from app/src/main/java/ua/acclorite/book_story/ui/license_info/LicenseInfoScreen.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/license_info/LicenseInfoScreen.kt index 4149f3d5..7de077ce 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/license_info/LicenseInfoScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/license_info/LicenseInfoScreen.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.license_info +package ua.acclorite.book_story.presentation.license_info import android.os.Parcelable import androidx.compose.material3.ExperimentalMaterial3Api @@ -18,11 +18,11 @@ import com.mikepenz.aboutlibraries.Libs import com.mikepenz.aboutlibraries.util.withJson import kotlinx.parcelize.Parcelize import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.navigator.Screen -import ua.acclorite.book_story.presentation.core.components.top_bar.collapsibleTopAppBarScrollBehavior -import ua.acclorite.book_story.presentation.license_info.LicenseInfoContent -import ua.acclorite.book_story.presentation.navigator.LocalNavigator -import ua.acclorite.book_story.ui.about.AboutModel +import ua.acclorite.book_story.presentation.about.AboutModel +import ua.acclorite.book_story.presentation.navigator.Screen +import ua.acclorite.book_story.ui.common.components.top_bar.collapsibleTopAppBarScrollBehavior +import ua.acclorite.book_story.ui.license_info.LicenseInfoContent +import ua.acclorite.book_story.ui.navigator.LocalNavigator @Parcelize data class LicenseInfoScreen(val uniqueId: String) : Screen, Parcelable { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/licenses/LicensesScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/licenses/LicensesScreen.kt similarity index 84% rename from app/src/main/java/ua/acclorite/book_story/ui/licenses/LicensesScreen.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/licenses/LicensesScreen.kt index e904c52a..ef311fa4 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/licenses/LicensesScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/licenses/LicensesScreen.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.licenses +package ua.acclorite.book_story.presentation.licenses import android.os.Parcelable import androidx.compose.foundation.lazy.rememberLazyListState @@ -20,11 +20,11 @@ import com.mikepenz.aboutlibraries.util.withJson import kotlinx.parcelize.IgnoredOnParcel import kotlinx.parcelize.Parcelize import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.navigator.Screen -import ua.acclorite.book_story.presentation.core.components.top_bar.collapsibleTopAppBarScrollBehavior -import ua.acclorite.book_story.presentation.licenses.LicensesContent -import ua.acclorite.book_story.presentation.navigator.LocalNavigator -import ua.acclorite.book_story.ui.license_info.LicenseInfoScreen +import ua.acclorite.book_story.presentation.license_info.LicenseInfoScreen +import ua.acclorite.book_story.presentation.navigator.Screen +import ua.acclorite.book_story.ui.common.components.top_bar.collapsibleTopAppBarScrollBehavior +import ua.acclorite.book_story.ui.licenses.LicensesContent +import ua.acclorite.book_story.ui.navigator.LocalNavigator @Parcelize object LicensesScreen : Screen, Parcelable { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/main/MainActivity.kt b/app/src/main/java/ua/acclorite/book_story/presentation/main/MainActivity.kt similarity index 82% rename from app/src/main/java/ua/acclorite/book_story/ui/main/MainActivity.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/main/MainActivity.kt index 3ac1ce04..6a08d1dd 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/main/MainActivity.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/main/MainActivity.kt @@ -6,7 +6,7 @@ @file:Suppress("UnusedVariable", "unused") -package ua.acclorite.book_story.ui.main +package ua.acclorite.book_story.presentation.main import android.annotation.SuppressLint import android.database.CursorWindow @@ -21,25 +21,25 @@ import androidx.core.view.WindowCompat import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import dagger.hilt.android.AndroidEntryPoint -import okhttp3.internal.immutableListOf +import kotlinx.collections.immutable.persistentListOf import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.navigator.NavigatorItem -import ua.acclorite.book_story.domain.navigator.StackEvent -import ua.acclorite.book_story.domain.ui.isDark -import ua.acclorite.book_story.domain.ui.isPureDark -import ua.acclorite.book_story.presentation.core.components.navigation_bar.NavigationBar -import ua.acclorite.book_story.presentation.core.components.navigation_rail.NavigationRail -import ua.acclorite.book_story.presentation.main.MainActivityKeyboardManager -import ua.acclorite.book_story.presentation.navigator.Navigator -import ua.acclorite.book_story.presentation.navigator.NavigatorTabs -import ua.acclorite.book_story.ui.browse.BrowseModel -import ua.acclorite.book_story.ui.browse.BrowseScreen -import ua.acclorite.book_story.ui.history.HistoryModel -import ua.acclorite.book_story.ui.history.HistoryScreen -import ua.acclorite.book_story.ui.library.LibraryModel -import ua.acclorite.book_story.ui.library.LibraryScreen -import ua.acclorite.book_story.ui.settings.SettingsModel -import ua.acclorite.book_story.ui.start.StartScreen +import ua.acclorite.book_story.presentation.browse.BrowseModel +import ua.acclorite.book_story.presentation.browse.BrowseScreen +import ua.acclorite.book_story.presentation.history.HistoryModel +import ua.acclorite.book_story.presentation.history.HistoryScreen +import ua.acclorite.book_story.presentation.library.LibraryModel +import ua.acclorite.book_story.presentation.library.LibraryScreen +import ua.acclorite.book_story.presentation.main.model.isDark +import ua.acclorite.book_story.presentation.main.model.isPureDark +import ua.acclorite.book_story.presentation.navigator.NavigatorItem +import ua.acclorite.book_story.presentation.navigator.StackEvent +import ua.acclorite.book_story.presentation.settings.SettingsModel +import ua.acclorite.book_story.presentation.start.StartScreen +import ua.acclorite.book_story.ui.common.components.navigation_bar.NavigationBar +import ua.acclorite.book_story.ui.common.components.navigation_rail.NavigationRail +import ua.acclorite.book_story.ui.main.MainActivityKeyboardManager +import ua.acclorite.book_story.ui.navigator.Navigator +import ua.acclorite.book_story.ui.navigator.NavigatorTabs import ua.acclorite.book_story.ui.theme.BookStoryTheme import ua.acclorite.book_story.ui.theme.Transitions import java.lang.reflect.Field @@ -88,7 +88,7 @@ class MainActivity : AppCompatActivity() { val state = mainModel.state.collectAsStateWithLifecycle() val isLoaded = mainModel.isReady.collectAsStateWithLifecycle() - val tabs = immutableListOf( + val tabs = persistentListOf( NavigatorItem( screen = LibraryScreen, title = R.string.library_screen, diff --git a/app/src/main/java/ua/acclorite/book_story/ui/main/MainEvent.kt b/app/src/main/java/ua/acclorite/book_story/presentation/main/MainEvent.kt similarity index 99% rename from app/src/main/java/ua/acclorite/book_story/ui/main/MainEvent.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/main/MainEvent.kt index 25e50d07..9d285601 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/main/MainEvent.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/main/MainEvent.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.main +package ua.acclorite.book_story.presentation.main import androidx.compose.runtime.Immutable diff --git a/app/src/main/java/ua/acclorite/book_story/ui/main/MainModel.kt b/app/src/main/java/ua/acclorite/book_story/presentation/main/MainModel.kt similarity index 72% rename from app/src/main/java/ua/acclorite/book_story/ui/main/MainModel.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/main/MainModel.kt index 1a49a900..e64dd9aa 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/main/MainModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/main/MainModel.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.main +package ua.acclorite.book_story.presentation.main import androidx.datastore.preferences.core.Preferences import androidx.lifecycle.SavedStateHandle @@ -22,38 +22,36 @@ import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext import kotlinx.coroutines.yield -import ua.acclorite.book_story.domain.browse.display.toBrowseLayout -import ua.acclorite.book_story.domain.browse.display.toBrowseSortOrder -import ua.acclorite.book_story.domain.library.display.toLibraryLayout -import ua.acclorite.book_story.domain.library.display.toLibrarySortOrder -import ua.acclorite.book_story.domain.library.display.toLibraryTitlePosition -import ua.acclorite.book_story.domain.reader.toColorEffects -import ua.acclorite.book_story.domain.reader.toFontThickness -import ua.acclorite.book_story.domain.reader.toHorizontalGesture -import ua.acclorite.book_story.domain.reader.toProgressCount -import ua.acclorite.book_story.domain.reader.toReaderScreenOrientation -import ua.acclorite.book_story.domain.reader.toTextAlignment -import ua.acclorite.book_story.domain.ui.toDarkTheme -import ua.acclorite.book_story.domain.ui.toPureDark -import ua.acclorite.book_story.domain.ui.toThemeContrast -import ua.acclorite.book_story.domain.use_case.data_store.ChangeLanguage -import ua.acclorite.book_story.domain.use_case.data_store.GetAllSettings -import ua.acclorite.book_story.domain.use_case.data_store.SetDatastore -import ua.acclorite.book_story.domain.util.toHorizontalAlignment -import ua.acclorite.book_story.presentation.core.constants.DataStoreConstants -import ua.acclorite.book_story.presentation.core.constants.provideFonts -import ua.acclorite.book_story.presentation.core.constants.provideMainState -import ua.acclorite.book_story.ui.theme.toTheme +import ua.acclorite.book_story.domain.use_case.data_store.ChangeLanguagePreferenceUseCase +import ua.acclorite.book_story.domain.use_case.data_store.GetPreferencesUseCase +import ua.acclorite.book_story.domain.use_case.data_store.PutPreferenceUseCase +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 +import ua.acclorite.book_story.presentation.main.model.ThemeContrast +import ua.acclorite.book_story.presentation.reader.model.ReaderColorEffects +import ua.acclorite.book_story.presentation.reader.model.ReaderFontThickness +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.reader.data.ReaderData +import ua.acclorite.book_story.ui.theme.Theme import javax.inject.Inject @HiltViewModel class MainModel @Inject constructor( private val stateHandle: SavedStateHandle, - - private val setDatastore: SetDatastore, - private val changeLanguage: ChangeLanguage, - private val getAllSettings: GetAllSettings + private val putPreferenceUseCase: PutPreferenceUseCase, + private val changeLanguagePreferenceUseCase: ChangeLanguagePreferenceUseCase, + private val getPreferencesUseCase: GetPreferencesUseCase ) : ViewModel() { private val mutex = Mutex() @@ -64,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() @@ -73,43 +71,43 @@ 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 = toDarkTheme()) + it.copy(darkTheme = DarkTheme.valueOf(this)) } ) is MainEvent.OnChangePureDark -> handleDatastoreUpdate( - key = DataStoreConstants.PURE_DARK, + key = DataStoreData.PURE_DARK, value = event.value, updateState = { - it.copy(pureDark = toPureDark()) + it.copy(pureDark = PureDark.valueOf(this)) } ) is MainEvent.OnChangeThemeContrast -> handleDatastoreUpdate( - key = DataStoreConstants.THEME_CONTRAST, + key = DataStoreData.THEME_CONTRAST, value = event.value, updateState = { - it.copy(themeContrast = toThemeContrast()) + it.copy(themeContrast = ThemeContrast.valueOf(this)) } ) 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 @@ -119,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) @@ -127,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) @@ -135,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) @@ -143,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) @@ -151,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) @@ -159,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) @@ -167,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) @@ -175,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) @@ -183,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) @@ -191,15 +189,15 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeBrowseLayout -> handleDatastoreUpdate( - key = DataStoreConstants.BROWSE_LAYOUT, + key = DataStoreData.BROWSE_LAYOUT, value = event.value, updateState = { - it.copy(browseLayout = toBrowseLayout()) + it.copy(browseLayout = BrowseLayout.valueOf(this)) } ) is MainEvent.OnChangeBrowseAutoGridSize -> handleDatastoreUpdate( - key = DataStoreConstants.BROWSE_AUTO_GRID_SIZE, + key = DataStoreData.BROWSE_AUTO_GRID_SIZE, value = event.value, updateState = { it.copy(browseAutoGridSize = this) @@ -207,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) @@ -215,15 +213,15 @@ 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 = toBrowseSortOrder()) + it.copy(browseSortOrder = BrowseSortOrder.valueOf(this)) } ) is MainEvent.OnChangeBrowseSortOrderDescending -> handleDatastoreUpdate( - key = DataStoreConstants.BROWSE_SORT_ORDER_DESCENDING, + key = DataStoreData.BROWSE_SORT_ORDER_DESCENDING, value = event.value, updateState = { it.copy(browseSortOrderDescending = this) @@ -235,15 +233,15 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeTextAlignment -> handleDatastoreUpdate( - key = DataStoreConstants.TEXT_ALIGNMENT, + key = DataStoreData.TEXT_ALIGNMENT, value = event.value, updateState = { - it.copy(textAlignment = toTextAlignment()) + it.copy(textAlignment = ReaderTextAlignment.valueOf(this)) } ) is MainEvent.OnChangeDoublePressExit -> handleDatastoreUpdate( - key = DataStoreConstants.DOUBLE_PRESS_EXIT, + key = DataStoreData.DOUBLE_PRESS_EXIT, value = event.value, updateState = { it.copy(doublePressExit = this) @@ -251,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) @@ -259,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) @@ -267,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) @@ -275,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) @@ -283,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) @@ -291,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) @@ -299,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) @@ -307,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) @@ -315,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) @@ -323,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) @@ -331,15 +329,15 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeScreenOrientation -> handleDatastoreUpdate( - key = DataStoreConstants.SCREEN_ORIENTATION, + key = DataStoreData.SCREEN_ORIENTATION, value = event.value, updateState = { - it.copy(screenOrientation = toReaderScreenOrientation()) + it.copy(screenOrientation = ReaderScreenOrientation.valueOf(this)) } ) is MainEvent.OnChangeCustomScreenBrightness -> handleDatastoreUpdate( - key = DataStoreConstants.CUSTOM_SCREEN_BRIGHTNESS, + key = DataStoreData.CUSTOM_SCREEN_BRIGHTNESS, value = event.value, updateState = { it.copy(customScreenBrightness = this) @@ -347,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()) @@ -355,15 +353,15 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeHorizontalGesture -> handleDatastoreUpdate( - key = DataStoreConstants.HORIZONTAL_GESTURE, + key = DataStoreData.HORIZONTAL_GESTURE, value = event.value, updateState = { - it.copy(horizontalGesture = toHorizontalGesture()) + it.copy(horizontalGesture = ReaderHorizontalGesture.valueOf(this)) } ) is MainEvent.OnChangeHorizontalGestureScroll -> handleDatastoreUpdate( - key = DataStoreConstants.HORIZONTAL_GESTURE_SCROLL, + key = DataStoreData.HORIZONTAL_GESTURE_SCROLL, value = event.value.toDouble(), updateState = { it.copy(horizontalGestureScroll = this.toFloat()) @@ -371,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()) @@ -379,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) @@ -387,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) @@ -395,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) @@ -403,15 +401,15 @@ 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 = toTextAlignment()) + it.copy(chapterTitleAlignment = ReaderTextAlignment.valueOf(this)) } ) is MainEvent.OnChangeImages -> handleDatastoreUpdate( - key = DataStoreConstants.IMAGES, + key = DataStoreData.IMAGES, value = event.value, updateState = { it.copy(images = this) @@ -419,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) @@ -427,15 +425,15 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeImagesAlignment -> handleDatastoreUpdate( - key = DataStoreConstants.IMAGES_ALIGNMENT, + key = DataStoreData.IMAGES_ALIGNMENT, value = event.value, updateState = { - it.copy(imagesAlignment = this.toHorizontalAlignment()) + it.copy(imagesAlignment = HorizontalAlignment.valueOf(this)) } ) is MainEvent.OnChangeImagesWidth -> handleDatastoreUpdate( - key = DataStoreConstants.IMAGES_WIDTH, + key = DataStoreData.IMAGES_WIDTH, value = event.value.toDouble(), updateState = { it.copy(imagesWidth = this.toFloat()) @@ -443,15 +441,15 @@ 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 = this.toColorEffects()) + it.copy(imagesColorEffects = ReaderColorEffects.valueOf(this)) } ) is MainEvent.OnChangeProgressBar -> handleDatastoreUpdate( - key = DataStoreConstants.PROGRESS_BAR, + key = DataStoreData.PROGRESS_BAR, value = event.value, updateState = { it.copy(progressBar = this) @@ -459,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) @@ -467,15 +465,15 @@ 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 = this.toHorizontalAlignment()) + it.copy(progressBarAlignment = HorizontalAlignment.valueOf(this)) } ) is MainEvent.OnChangeProgressBarFontSize -> handleDatastoreUpdate( - key = DataStoreConstants.PROGRESS_BAR_FONT_SIZE, + key = DataStoreData.PROGRESS_BAR_FONT_SIZE, value = event.value, updateState = { it.copy(progressBarFontSize = this) @@ -487,23 +485,23 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeFontThickness -> handleDatastoreUpdate( - key = DataStoreConstants.FONT_THICKNESS, + key = DataStoreData.FONT_THICKNESS, value = event.value, updateState = { - it.copy(fontThickness = this.toFontThickness()) + it.copy(fontThickness = ReaderFontThickness.valueOf(this)) } ) is MainEvent.OnChangeProgressCount -> handleDatastoreUpdate( - key = DataStoreConstants.PROGRESS_COUNT, + key = DataStoreData.PROGRESS_COUNT, value = event.value, updateState = { - it.copy(progressCount = this.toProgressCount()) + it.copy(progressCount = ReaderProgressCount.valueOf(this)) } ) is MainEvent.OnChangeHorizontalGestureAlphaAnim -> handleDatastoreUpdate( - key = DataStoreConstants.HORIZONTAL_GESTURE_ALPHA_ANIM, + key = DataStoreData.HORIZONTAL_GESTURE_ALPHA_ANIM, value = event.value, updateState = { it.copy(horizontalGestureAlphaAnim = this) @@ -511,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) @@ -519,15 +517,15 @@ class MainModel @Inject constructor( ) is MainEvent.OnChangeLibraryLayout -> handleDatastoreUpdate( - key = DataStoreConstants.LIBRARY_LAYOUT, + key = DataStoreData.LIBRARY_LAYOUT, value = event.value, updateState = { - it.copy(libraryLayout = this.toLibraryLayout()) + it.copy(libraryLayout = LibraryLayout.valueOf(this)) } ) is MainEvent.OnChangeLibraryAutoGridSize -> handleDatastoreUpdate( - key = DataStoreConstants.LIBRARY_AUTO_GRID_SIZE, + key = DataStoreData.LIBRARY_AUTO_GRID_SIZE, value = event.value, updateState = { it.copy(libraryAutoGridSize = this) @@ -535,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) @@ -543,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) @@ -551,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) @@ -559,15 +557,15 @@ 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 = this.toLibraryTitlePosition()) + it.copy(libraryTitlePosition = LibraryTitlePosition.valueOf(this)) } ) is MainEvent.OnChangeLibraryShowBookCount -> handleDatastoreUpdate( - key = DataStoreConstants.LIBRARY_SHOW_BOOK_COUNT, + key = DataStoreData.LIBRARY_SHOW_BOOK_COUNT, value = event.value, updateState = { it.copy(libraryShowBookCount = this) @@ -575,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) @@ -583,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) @@ -591,15 +589,15 @@ 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 = this.toLibrarySortOrder()) + it.copy(librarySortOrder = LibrarySortOrder.valueOf(this)) } ) is MainEvent.OnChangeLibrarySortOrderDescending -> handleDatastoreUpdate( - key = DataStoreConstants.LIBRARY_SORT_ORDER_DESCENDING, + key = DataStoreData.LIBRARY_SORT_ORDER_DESCENDING, value = event.value, updateState = { it.copy(librarySortOrderDescending = this) @@ -607,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) @@ -618,10 +616,10 @@ class MainModel @Inject constructor( fun init(settingsModelReady: StateFlow) { viewModelScope.launch(Dispatchers.Main) { - val settings = getAllSettings.execute() + val settings = getPreferencesUseCase() /* All additional execution */ - changeLanguage.execute(settings.language) + changeLanguagePreferenceUseCase(settings.language) updateStateWithSavedHandle { settings } mainModelReady.update { true } @@ -648,7 +646,7 @@ class MainModel @Inject constructor( private fun handleLanguageUpdate(event: MainEvent.OnChangeLanguage) { viewModelScope.launch(Dispatchers.Main.immediate) { - changeLanguage.execute(event.value) + changeLanguagePreferenceUseCase(event.value) updateStateWithSavedHandle { it.copy(language = event.value) } @@ -663,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()) @@ -679,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()) @@ -696,7 +694,7 @@ class MainModel @Inject constructor( updateState: V.(MainState) -> MainState ) { viewModelScope.launch(Dispatchers.Main.immediate) { - setDatastore.execute(key = key, value = value) + putPreferenceUseCase(key = key, value = value) updateStateWithSavedHandle { value.updateState(it) } @@ -711,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/ui/main/MainState.kt b/app/src/main/java/ua/acclorite/book_story/presentation/main/MainState.kt similarity index 80% rename from app/src/main/java/ua/acclorite/book_story/ui/main/MainState.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/main/MainState.kt index f268ac30..dbb64279 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/main/MainState.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/main/MainState.kt @@ -6,48 +6,32 @@ @file:Suppress("UNCHECKED_CAST") -package ua.acclorite.book_story.ui.main +package ua.acclorite.book_story.presentation.main import android.os.Parcelable import androidx.annotation.Keep import androidx.compose.runtime.Immutable import androidx.datastore.preferences.core.Preferences import kotlinx.parcelize.Parcelize -import ua.acclorite.book_story.domain.browse.display.BrowseLayout -import ua.acclorite.book_story.domain.browse.display.BrowseSortOrder -import ua.acclorite.book_story.domain.browse.display.toBrowseLayout -import ua.acclorite.book_story.domain.browse.display.toBrowseSortOrder -import ua.acclorite.book_story.domain.library.display.LibraryLayout -import ua.acclorite.book_story.domain.library.display.LibrarySortOrder -import ua.acclorite.book_story.domain.library.display.LibraryTitlePosition -import ua.acclorite.book_story.domain.library.display.toLibraryLayout -import ua.acclorite.book_story.domain.library.display.toLibrarySortOrder -import ua.acclorite.book_story.domain.library.display.toLibraryTitlePosition -import ua.acclorite.book_story.domain.reader.ReaderColorEffects -import ua.acclorite.book_story.domain.reader.ReaderFontThickness -import ua.acclorite.book_story.domain.reader.ReaderHorizontalGesture -import ua.acclorite.book_story.domain.reader.ReaderProgressCount -import ua.acclorite.book_story.domain.reader.ReaderScreenOrientation -import ua.acclorite.book_story.domain.reader.ReaderTextAlignment -import ua.acclorite.book_story.domain.reader.toColorEffects -import ua.acclorite.book_story.domain.reader.toFontThickness -import ua.acclorite.book_story.domain.reader.toHorizontalGesture -import ua.acclorite.book_story.domain.reader.toProgressCount -import ua.acclorite.book_story.domain.reader.toReaderScreenOrientation -import ua.acclorite.book_story.domain.reader.toTextAlignment -import ua.acclorite.book_story.domain.ui.DarkTheme -import ua.acclorite.book_story.domain.ui.PureDark -import ua.acclorite.book_story.domain.ui.ThemeContrast -import ua.acclorite.book_story.domain.ui.toDarkTheme -import ua.acclorite.book_story.domain.ui.toPureDark -import ua.acclorite.book_story.domain.ui.toThemeContrast -import ua.acclorite.book_story.domain.util.HorizontalAlignment -import ua.acclorite.book_story.domain.util.toHorizontalAlignment -import ua.acclorite.book_story.presentation.core.constants.DataStoreConstants -import ua.acclorite.book_story.presentation.core.constants.provideFonts -import ua.acclorite.book_story.presentation.core.constants.provideLanguages +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 +import ua.acclorite.book_story.presentation.main.model.ThemeContrast +import ua.acclorite.book_story.presentation.reader.model.ReaderColorEffects +import ua.acclorite.book_story.presentation.reader.model.ReaderFontThickness +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.reader.data.ReaderData import ua.acclorite.book_story.ui.theme.Theme -import ua.acclorite.book_story.ui.theme.toTheme import java.util.Locale /** @@ -62,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. } @@ -76,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 }, @@ -165,22 +149,22 @@ 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( - DARK_THEME, convert = { toDarkTheme() } + DARK_THEME, convert = { DarkTheme.valueOf(this) } ) { darkTheme }, pureDark = provideValue( - PURE_DARK, convert = { toPureDark() } + PURE_DARK, convert = { PureDark.valueOf(this) } ) { pureDark }, absoluteDark = provideValue( @@ -188,7 +172,7 @@ data class MainState( ) { absoluteDark }, themeContrast = provideValue( - THEME_CONTRAST, convert = { toThemeContrast() } + THEME_CONTRAST, convert = { ThemeContrast.valueOf(this) } ) { themeContrast }, showStartScreen = provideValue( @@ -232,7 +216,7 @@ data class MainState( ) { fastColorPresetChange }, browseLayout = provideValue( - BROWSE_LAYOUT, convert = { toBrowseLayout() } + BROWSE_LAYOUT, convert = { BrowseLayout.valueOf(this) } ) { browseLayout }, browseAutoGridSize = provideValue( @@ -244,7 +228,7 @@ data class MainState( ) { browseGridSize }, browseSortOrder = provideValue( - BROWSE_SORT_ORDER, convert = { toBrowseSortOrder() } + BROWSE_SORT_ORDER, convert = { BrowseSortOrder.valueOf(this) } ) { browseSortOrder }, browseSortOrderDescending = provideValue( @@ -256,7 +240,7 @@ data class MainState( ) { browseIncludedFilterItems }, textAlignment = provideValue( - TEXT_ALIGNMENT, convert = { toTextAlignment() } + TEXT_ALIGNMENT, convert = { ReaderTextAlignment.valueOf(this) } ) { textAlignment }, doublePressExit = provideValue( @@ -300,7 +284,7 @@ data class MainState( ) { perceptionExpanderThickness }, screenOrientation = provideValue( - SCREEN_ORIENTATION, convert = { toReaderScreenOrientation() } + SCREEN_ORIENTATION, convert = { ReaderScreenOrientation.valueOf(this) } ) { screenOrientation }, customScreenBrightness = provideValue( @@ -312,7 +296,7 @@ data class MainState( ) { screenBrightness }, horizontalGesture = provideValue( - HORIZONTAL_GESTURE, convert = { toHorizontalGesture() } + HORIZONTAL_GESTURE, convert = { ReaderHorizontalGesture.valueOf(this) } ) { horizontalGesture }, horizontalGestureScroll = provideValue( @@ -336,7 +320,7 @@ data class MainState( ) { highlightedReadingThickness }, chapterTitleAlignment = provideValue( - CHAPTER_TITLE_ALIGNMENT, convert = { toTextAlignment() } + CHAPTER_TITLE_ALIGNMENT, convert = { ReaderTextAlignment.valueOf(this) } ) { chapterTitleAlignment }, images = provideValue( @@ -348,7 +332,7 @@ data class MainState( ) { imagesCornersRoundness }, imagesAlignment = provideValue( - IMAGES_ALIGNMENT, convert = { toHorizontalAlignment() } + IMAGES_ALIGNMENT, convert = { HorizontalAlignment.valueOf(this) } ) { imagesAlignment }, imagesWidth = provideValue( @@ -356,7 +340,7 @@ data class MainState( ) { imagesWidth }, imagesColorEffects = provideValue( - IMAGES_COLOR_EFFECTS, convert = { toColorEffects() } + IMAGES_COLOR_EFFECTS, convert = { ReaderColorEffects.valueOf(this) } ) { imagesColorEffects }, progressBar = provideValue( @@ -368,7 +352,7 @@ data class MainState( ) { progressBarPadding }, progressBarAlignment = provideValue( - PROGRESS_BAR_ALIGNMENT, convert = { toHorizontalAlignment() } + PROGRESS_BAR_ALIGNMENT, convert = { HorizontalAlignment.valueOf(this) } ) { progressBarAlignment }, progressBarFontSize = provideValue( @@ -380,11 +364,11 @@ data class MainState( ) { browsePinnedPaths }, fontThickness = provideValue( - FONT_THICKNESS, convert = { toFontThickness() } + FONT_THICKNESS, convert = { ReaderFontThickness.valueOf(this) } ) { fontThickness }, progressCount = provideValue( - PROGRESS_COUNT, convert = { toProgressCount() } + PROGRESS_COUNT, convert = { ReaderProgressCount.valueOf(this) } ) { progressCount }, horizontalGestureAlphaAnim = provideValue( @@ -396,7 +380,7 @@ data class MainState( ) { horizontalGesturePullAnim }, libraryLayout = provideValue( - LIBRARY_LAYOUT, convert = { toLibraryLayout() } + LIBRARY_LAYOUT, convert = { LibraryLayout.valueOf(this) } ) { libraryLayout }, libraryAutoGridSize = provideValue( @@ -416,7 +400,7 @@ data class MainState( ) { libraryShowProgress }, libraryTitlePosition = provideValue( - LIBRARY_TITLE_POSITION, convert = { toLibraryTitlePosition() } + LIBRARY_TITLE_POSITION, convert = { LibraryTitlePosition.valueOf(this) } ) { libraryTitlePosition }, libraryShowBookCount = provideValue( @@ -432,7 +416,7 @@ data class MainState( ) { libraryAlwaysShowDefaultTab }, librarySortOrder = provideValue( - LIBRARY_SORT_ORDER, convert = { toLibrarySortOrder() } + LIBRARY_SORT_ORDER, convert = { LibrarySortOrder.valueOf(this) } ) { librarySortOrder }, librarySortOrderDescending = provideValue( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/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/presentation/core/constants/DataStoreConstants.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/main/data/DataStoreData.kt index b271fd0f..0db9ceca 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/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.presentation.core.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/domain/ui/DarkTheme.kt b/app/src/main/java/ua/acclorite/book_story/presentation/main/model/DarkTheme.kt similarity index 82% rename from app/src/main/java/ua/acclorite/book_story/domain/ui/DarkTheme.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/main/model/DarkTheme.kt index 8c927728..3ca2e9cb 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/ui/DarkTheme.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/main/model/DarkTheme.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.ui +package ua.acclorite.book_story.presentation.main.model import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.runtime.Composable @@ -17,10 +17,6 @@ enum class DarkTheme { ON } -fun String.toDarkTheme(): DarkTheme { - return DarkTheme.valueOf(this) -} - @Composable fun DarkTheme.isDark(): Boolean { return when (this) { diff --git a/app/src/main/java/ua/acclorite/book_story/domain/util/HorizontalAlignment.kt b/app/src/main/java/ua/acclorite/book_story/presentation/main/model/HorizontalAlignment.kt similarity index 51% rename from app/src/main/java/ua/acclorite/book_story/domain/util/HorizontalAlignment.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/main/model/HorizontalAlignment.kt index 32fc8ee7..fdb6543a 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/util/HorizontalAlignment.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/main/model/HorizontalAlignment.kt @@ -4,16 +4,14 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.util +package ua.acclorite.book_story.presentation.main.model +import androidx.compose.runtime.Immutable import androidx.compose.ui.Alignment +@Immutable enum class HorizontalAlignment(val alignment: Alignment) { - START(Alignment.CenterStart), - CENTER(Alignment.Center), - END(Alignment.CenterEnd) -} - -fun String.toHorizontalAlignment(): HorizontalAlignment { - return HorizontalAlignment.valueOf(this) + START(Alignment.Companion.CenterStart), + CENTER(Alignment.Companion.Center), + END(Alignment.Companion.CenterEnd) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/ui/PureDark.kt b/app/src/main/java/ua/acclorite/book_story/presentation/main/model/PureDark.kt similarity index 85% rename from app/src/main/java/ua/acclorite/book_story/domain/ui/PureDark.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/main/model/PureDark.kt index 6df0370f..868f6580 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/ui/PureDark.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/main/model/PureDark.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.ui +package ua.acclorite.book_story.presentation.main.model import android.content.Context import android.os.PowerManager @@ -18,10 +18,6 @@ enum class PureDark { SAVER } -fun String.toPureDark(): PureDark { - return PureDark.valueOf(this) -} - @Composable fun PureDark.isPureDark(context: Context): Boolean { val powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager diff --git a/app/src/main/java/ua/acclorite/book_story/domain/ui/ThemeContrast.kt b/app/src/main/java/ua/acclorite/book_story/presentation/main/model/ThemeContrast.kt similarity index 67% rename from app/src/main/java/ua/acclorite/book_story/domain/ui/ThemeContrast.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/main/model/ThemeContrast.kt index 84d49783..b2ea6ad8 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/ui/ThemeContrast.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/main/model/ThemeContrast.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.ui +package ua.acclorite.book_story.presentation.main.model import androidx.compose.runtime.Immutable @@ -13,8 +13,4 @@ enum class ThemeContrast { STANDARD, MEDIUM, HIGH -} - -fun String.toThemeContrast(): ThemeContrast { - return ThemeContrast.valueOf(this) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/navigator/Navigator.kt b/app/src/main/java/ua/acclorite/book_story/presentation/navigator/Navigator.kt index af7a5f67..0ad7d3ff 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/navigator/Navigator.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/navigator/Navigator.kt @@ -6,70 +6,76 @@ package ua.acclorite.book_story.presentation.navigator -import androidx.activity.compose.BackHandler -import androidx.activity.viewModels -import androidx.compose.animation.AnimatedContent -import androidx.compose.animation.AnimatedContentTransitionScope -import androidx.compose.animation.ContentTransform -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.material3.MaterialTheme -import androidx.compose.runtime.Composable -import androidx.compose.runtime.CompositionLocalProvider -import androidx.compose.ui.Modifier -import androidx.lifecycle.compose.collectAsStateWithLifecycle -import dagger.hilt.android.lifecycle.withCreationCallback -import kotlinx.coroutines.Dispatchers -import ua.acclorite.book_story.domain.navigator.Navigator -import ua.acclorite.book_story.domain.navigator.Screen -import ua.acclorite.book_story.domain.navigator.StackEvent -import ua.acclorite.book_story.presentation.core.util.LocalActivity +import androidx.lifecycle.SavedStateHandle +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import dagger.assisted.Assisted +import dagger.assisted.AssistedFactory +import dagger.assisted.AssistedInject +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.stateIn -@Composable -fun rememberNavigator(initialScreen: Screen): Navigator { - val activity = LocalActivity.current - return activity.viewModels( - extrasProducer = { - activity.defaultViewModelCreationExtras - .withCreationCallback { factory -> - factory.create(initialScreen) - } - } - ).value -} +@HiltViewModel(assistedFactory = Navigator.Factory::class) +class Navigator @AssistedInject constructor( + private val savedStateHandle: SavedStateHandle, + @Assisted private val initialScreen: Screen +) : ViewModel() { -@Composable -fun Navigator( - modifier: Modifier = Modifier, - initialScreen: Screen, - transitionSpec: AnimatedContentTransitionScope.(lastEvent: StackEvent) -> ContentTransform, - contentKey: (Screen) -> Any? = { it }, - backHandlerEnabled: (Screen) -> Boolean = { true }, - content: @Composable (currentScreen: Screen) -> Unit -) { - val navigator = rememberNavigator(initialScreen = initialScreen) - val currentScreen = navigator.lastItem.collectAsStateWithLifecycle( - context = Dispatchers.Main.immediate - ) - val lastEvent = navigator.lastEvent.collectAsStateWithLifecycle( - context = Dispatchers.Main.immediate - ) - - CompositionLocalProvider(LocalNavigator provides navigator) { - AnimatedContent( - modifier = modifier - .fillMaxSize() - .background(MaterialTheme.colorScheme.surface), - targetState = currentScreen.value, - transitionSpec = { - transitionSpec(this, lastEvent.value) - }, - contentKey = contentKey, - content = { content(it) } - ) + val items = savedStateHandle.getStateFlow("items", mutableListOf(initialScreen)) + private fun StateFlow>.removeLast() { + savedStateHandle["items"] = value.dropLast(1) } - BackHandler(enabled = backHandlerEnabled.invoke(currentScreen.value)) { - navigator.pop() + private fun StateFlow>.add(item: Screen) { + savedStateHandle["items"] = value + item + } + + val lastItem = items.map { + it.lastOrNull() ?: initialScreen + }.stateIn( + scope = viewModelScope, + started = SharingStarted.Eagerly, + initialValue = initialScreen + ) + + val lastEvent = savedStateHandle.getStateFlow("stack_event", StackEvent.Default) + private fun changeStackEvent(stackEvent: StackEvent) { + savedStateHandle["stack_event"] = stackEvent + } + + + fun push( + targetScreen: Screen, + popping: Boolean = false, + saveInBackStack: Boolean = true + ) { + if (lastItem.value::class == targetScreen::class) return + if (!saveInBackStack) items.removeLast() + + changeStackEvent( + if (popping) StackEvent.Pop + else StackEvent.Default + ) + + if (lastItem.value::class == targetScreen::class) items.removeLast() + items.add(targetScreen) + } + + fun pop(popping: Boolean = true) { + if (items.value.count() > 1) { + changeStackEvent( + if (popping) StackEvent.Pop + else StackEvent.Default + ) + items.removeLast() + } + } + + @AssistedFactory + interface Factory { + fun create(startScreen: Screen): Navigator } } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/navigator/NavigatorItem.kt b/app/src/main/java/ua/acclorite/book_story/presentation/navigator/NavigatorItem.kt similarity index 90% rename from app/src/main/java/ua/acclorite/book_story/domain/navigator/NavigatorItem.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/navigator/NavigatorItem.kt index d83447e5..5b92a236 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/navigator/NavigatorItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/navigator/NavigatorItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.navigator +package ua.acclorite.book_story.presentation.navigator import androidx.annotation.DrawableRes import androidx.annotation.StringRes diff --git a/app/src/main/java/ua/acclorite/book_story/domain/navigator/Screen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/navigator/Screen.kt similarity index 82% rename from app/src/main/java/ua/acclorite/book_story/domain/navigator/Screen.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/navigator/Screen.kt index e5f65ce8..9a4f3f72 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/navigator/Screen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/navigator/Screen.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.navigator +package ua.acclorite.book_story.presentation.navigator import androidx.compose.runtime.Composable diff --git a/app/src/main/java/ua/acclorite/book_story/domain/navigator/StackEvent.kt b/app/src/main/java/ua/acclorite/book_story/presentation/navigator/StackEvent.kt similarity index 86% rename from app/src/main/java/ua/acclorite/book_story/domain/navigator/StackEvent.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/navigator/StackEvent.kt index bfb831b0..7f4bead0 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/navigator/StackEvent.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/navigator/StackEvent.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.navigator +package ua.acclorite.book_story.presentation.navigator import android.os.Parcelable import androidx.compose.runtime.Immutable diff --git a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderEvent.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderEvent.kt similarity index 93% rename from app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderEvent.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderEvent.kt index a99887ac..8b328bd1 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderEvent.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderEvent.kt @@ -4,11 +4,11 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.reader +package ua.acclorite.book_story.presentation.reader import androidx.activity.ComponentActivity import androidx.compose.runtime.Immutable -import ua.acclorite.book_story.domain.reader.ReaderText.Chapter +import ua.acclorite.book_story.domain.model.reader.ReaderText.Chapter @Immutable sealed class ReaderEvent { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderModel.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderModel.kt similarity index 93% rename from app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderModel.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderModel.kt index d2f59f75..534ebc8a 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderModel.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.reader +package ua.acclorite.book_story.presentation.reader import android.app.SearchManager import android.content.Intent @@ -35,19 +35,19 @@ import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext import kotlinx.coroutines.yield import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.reader.Checkpoint -import ua.acclorite.book_story.domain.reader.ReaderText.Chapter -import ua.acclorite.book_story.domain.ui.UIText -import ua.acclorite.book_story.domain.use_case.book.GetBookById -import ua.acclorite.book_story.domain.use_case.book.GetText -import ua.acclorite.book_story.domain.use_case.book.UpdateBook -import ua.acclorite.book_story.domain.use_case.history.GetLatestHistory -import ua.acclorite.book_story.presentation.core.util.coerceAndPreventNaN -import ua.acclorite.book_story.presentation.core.util.launchActivity -import ua.acclorite.book_story.presentation.core.util.setBrightness -import ua.acclorite.book_story.presentation.core.util.showToast -import ua.acclorite.book_story.ui.history.HistoryScreen -import ua.acclorite.book_story.ui.library.LibraryScreen +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 +import ua.acclorite.book_story.domain.use_case.book.GetTextUseCase +import ua.acclorite.book_story.domain.use_case.book.UpdateBookUseCase +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.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 @@ -55,10 +55,10 @@ private const val READER = "READER, MODEL" @HiltViewModel class ReaderModel @Inject constructor( - private val getBookById: GetBookById, - private val updateBook: UpdateBook, - private val getText: GetText, - private val getLatestHistory: GetLatestHistory + private val updateBookUseCase: UpdateBookUseCase, + private val getTextUseCase: GetTextUseCase, + private val getBookUseCase: GetBookUseCase, + private val getHistoryForBookUseCase: GetHistoryForBookUseCase ) : ViewModel() { private val mutex = Mutex() @@ -76,7 +76,7 @@ class ReaderModel @Inject constructor( when (event) { is ReaderEvent.OnLoadText -> { launch(Dispatchers.IO) { - val text = getText.execute(_state.value.book.id) + val text = getTextUseCase(_state.value.book.id) yield() if (text.isEmpty()) { @@ -95,7 +95,7 @@ class ReaderModel @Inject constructor( activity = event.activity ) - val lastOpened = getLatestHistory.execute(_state.value.book.id)?.time + val lastOpened = getHistoryForBookUseCase(_state.value.book.id)?.time yield() _state.update { @@ -110,7 +110,7 @@ class ReaderModel @Inject constructor( yield() - updateBook.execute(_state.value.book) + updateBookUseCase(_state.value.book) LibraryScreen.refreshListChannel.trySend(0) HistoryScreen.refreshListChannel.trySend(0) @@ -177,7 +177,7 @@ class ReaderModel @Inject constructor( ) } - updateBook.execute(_state.value.book) + updateBookUseCase(_state.value.book) LibraryScreen.refreshListChannel.trySend(300) HistoryScreen.refreshListChannel.trySend(300) @@ -265,7 +265,7 @@ class ReaderModel @Inject constructor( ) } - updateBook.execute(_state.value.book) + updateBookUseCase(_state.value.book) LibraryScreen.refreshListChannel.trySend(0) HistoryScreen.refreshListChannel.trySend(0) @@ -466,7 +466,7 @@ class ReaderModel @Inject constructor( navigateBack: () -> Unit ) { viewModelScope.launch(Dispatchers.IO) { - val book = getBookById.execute(bookId) + val book = getBookUseCase(bookId) if (book == null) { navigateBack() @@ -518,7 +518,7 @@ class ReaderModel @Inject constructor( ) } - updateBook.execute(_state.value.book) + updateBookUseCase(_state.value.book) LibraryScreen.refreshListChannel.trySend(0) HistoryScreen.refreshListChannel.trySend(0) diff --git a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScreen.kt similarity index 95% rename from app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScreen.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScreen.kt index 6cf498b7..1082235c 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScreen.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.reader +package ua.acclorite.book_story.presentation.reader import android.content.pm.ActivityInfo import android.os.Parcelable @@ -44,19 +44,19 @@ 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.domain.navigator.Screen -import ua.acclorite.book_story.domain.reader.ReaderColorEffects -import ua.acclorite.book_story.domain.reader.ReaderProgressCount -import ua.acclorite.book_story.domain.reader.ReaderTextAlignment -import ua.acclorite.book_story.presentation.core.constants.provideFonts -import ua.acclorite.book_story.presentation.core.util.LocalActivity -import ua.acclorite.book_story.presentation.core.util.calculateProgress -import ua.acclorite.book_story.presentation.core.util.setBrightness -import ua.acclorite.book_story.presentation.navigator.LocalNavigator -import ua.acclorite.book_story.presentation.reader.ReaderContent -import ua.acclorite.book_story.ui.book_info.BookInfoScreen -import ua.acclorite.book_story.ui.main.MainModel -import ua.acclorite.book_story.ui.settings.SettingsModel +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 +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.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/ui/reader/ReaderState.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderState.kt similarity index 57% rename from app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderState.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderState.kt index 9ada47a1..b5e80644 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderState.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderState.kt @@ -4,22 +4,21 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.reader +package ua.acclorite.book_story.presentation.reader import androidx.compose.foundation.lazy.LazyListState import androidx.compose.runtime.Immutable -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.reader.Checkpoint -import ua.acclorite.book_story.domain.reader.ReaderText -import ua.acclorite.book_story.domain.reader.ReaderText.Chapter -import ua.acclorite.book_story.domain.ui.UIText -import ua.acclorite.book_story.domain.util.BottomSheet -import ua.acclorite.book_story.domain.util.Drawer -import ua.acclorite.book_story.presentation.core.constants.provideEmptyBook +import ua.acclorite.book_story.core.BottomSheet +import ua.acclorite.book_story.core.Drawer +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.ReaderText +import ua.acclorite.book_story.domain.model.reader.ReaderText.Chapter +import ua.acclorite.book_story.presentation.reader.model.Checkpoint @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/domain/reader/Checkpoint.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/Checkpoint.kt similarity index 82% rename from app/src/main/java/ua/acclorite/book_story/domain/reader/Checkpoint.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/reader/model/Checkpoint.kt index 0de4973d..25489519 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/reader/Checkpoint.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/Checkpoint.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.reader +package ua.acclorite.book_story.presentation.reader.model import androidx.compose.runtime.Immutable diff --git a/app/src/main/java/ua/acclorite/book_story/domain/reader/ReaderColorEffects.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderColorEffects.kt similarity index 67% rename from app/src/main/java/ua/acclorite/book_story/domain/reader/ReaderColorEffects.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderColorEffects.kt index bce340dc..49914677 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/reader/ReaderColorEffects.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderColorEffects.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.reader +package ua.acclorite.book_story.presentation.reader.model import androidx.compose.runtime.Immutable @@ -14,8 +14,4 @@ enum class ReaderColorEffects { GRAYSCALE, FONT, BACKGROUND -} - -fun String.toColorEffects(): ReaderColorEffects { - return ReaderColorEffects.valueOf(this) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/reader/ReaderFontThickness.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderFontThickness.kt similarity index 76% rename from app/src/main/java/ua/acclorite/book_story/domain/reader/ReaderFontThickness.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderFontThickness.kt index 4c84e3e2..c7e0667c 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/reader/ReaderFontThickness.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderFontThickness.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.reader +package ua.acclorite.book_story.presentation.reader.model import androidx.compose.runtime.Immutable import androidx.compose.ui.text.font.FontWeight @@ -16,8 +16,4 @@ enum class ReaderFontThickness(val thickness: FontWeight) { LIGHT(FontWeight.Light), NORMAL(FontWeight.Normal), MEDIUM(FontWeight.Medium) -} - -fun String.toFontThickness(): ReaderFontThickness { - return ReaderFontThickness.valueOf(this) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/reader/ReaderHorizontalGesture.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderHorizontalGesture.kt similarity index 63% rename from app/src/main/java/ua/acclorite/book_story/domain/reader/ReaderHorizontalGesture.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderHorizontalGesture.kt index 5fcdfced..6364781d 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/reader/ReaderHorizontalGesture.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderHorizontalGesture.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.reader +package ua.acclorite.book_story.presentation.reader.model import androidx.compose.runtime.Immutable @@ -13,8 +13,4 @@ enum class ReaderHorizontalGesture { OFF, ON, INVERSE -} - -fun String.toHorizontalGesture(): ReaderHorizontalGesture { - return ReaderHorizontalGesture.valueOf(this) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/reader/ReaderProgressCount.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderProgressCount.kt similarity index 65% rename from app/src/main/java/ua/acclorite/book_story/domain/reader/ReaderProgressCount.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderProgressCount.kt index bb2d6de9..30256b2e 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/reader/ReaderProgressCount.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderProgressCount.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.reader +package ua.acclorite.book_story.presentation.reader.model import androidx.compose.runtime.Immutable @@ -12,8 +12,4 @@ import androidx.compose.runtime.Immutable enum class ReaderProgressCount { PERCENTAGE, QUANTITY -} - -fun String.toProgressCount(): ReaderProgressCount { - return ReaderProgressCount.valueOf(this) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/reader/ReaderScreenOrientation.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderScreenOrientation.kt similarity index 80% rename from app/src/main/java/ua/acclorite/book_story/domain/reader/ReaderScreenOrientation.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderScreenOrientation.kt index 70db3d58..4ed6f5c9 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/reader/ReaderScreenOrientation.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderScreenOrientation.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.reader +package ua.acclorite.book_story.presentation.reader.model import android.content.pm.ActivityInfo import androidx.compose.runtime.Immutable @@ -17,8 +17,4 @@ enum class ReaderScreenOrientation(val code: Int) { LANDSCAPE(ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE), LOCKED_PORTRAIT(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT), LOCKED_LANDSCAPE(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE), -} - -fun String.toReaderScreenOrientation(): ReaderScreenOrientation { - return ReaderScreenOrientation.valueOf(this) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/reader/ReaderTextAlignment.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderTextAlignment.kt similarity index 74% rename from app/src/main/java/ua/acclorite/book_story/domain/reader/ReaderTextAlignment.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderTextAlignment.kt index 0a59bd22..e201ee95 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/reader/ReaderTextAlignment.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderTextAlignment.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.reader +package ua.acclorite.book_story.presentation.reader.model import androidx.compose.runtime.Immutable import androidx.compose.ui.text.style.TextAlign @@ -15,8 +15,4 @@ enum class ReaderTextAlignment(val textAlignment: TextAlign) { JUSTIFY(TextAlign.Justify), CENTER(TextAlign.Center), END(TextAlign.End) -} - -fun String.toTextAlignment(): ReaderTextAlignment { - return ReaderTextAlignment.valueOf(this) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/AppearanceSettingsScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/settings/AppearanceSettingsScreen.kt similarity index 70% rename from app/src/main/java/ua/acclorite/book_story/ui/settings/AppearanceSettingsScreen.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/settings/AppearanceSettingsScreen.kt index 2a81c441..9da0a7a9 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/AppearanceSettingsScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/settings/AppearanceSettingsScreen.kt @@ -4,17 +4,17 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.settings +package ua.acclorite.book_story.presentation.settings import android.os.Parcelable import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import kotlinx.parcelize.Parcelize -import ua.acclorite.book_story.domain.navigator.Screen -import ua.acclorite.book_story.presentation.core.components.top_bar.collapsibleTopAppBarScrollBehavior -import ua.acclorite.book_story.presentation.navigator.LocalNavigator -import ua.acclorite.book_story.presentation.settings.appearance.AppearanceSettingsContent +import ua.acclorite.book_story.presentation.navigator.Screen +import ua.acclorite.book_story.ui.common.components.top_bar.collapsibleTopAppBarScrollBehavior +import ua.acclorite.book_story.ui.navigator.LocalNavigator +import ua.acclorite.book_story.ui.settings.appearance.AppearanceSettingsContent @Parcelize object AppearanceSettingsScreen : Screen, Parcelable { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/BrowseSettingsScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/settings/BrowseSettingsScreen.kt similarity index 71% rename from app/src/main/java/ua/acclorite/book_story/ui/settings/BrowseSettingsScreen.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/settings/BrowseSettingsScreen.kt index 0012d5da..5e17f88c 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/BrowseSettingsScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/settings/BrowseSettingsScreen.kt @@ -4,17 +4,17 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.settings +package ua.acclorite.book_story.presentation.settings import android.os.Parcelable import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import kotlinx.parcelize.Parcelize -import ua.acclorite.book_story.domain.navigator.Screen -import ua.acclorite.book_story.presentation.core.components.top_bar.collapsibleTopAppBarScrollBehavior -import ua.acclorite.book_story.presentation.navigator.LocalNavigator -import ua.acclorite.book_story.presentation.settings.browse.BrowseSettingsContent +import ua.acclorite.book_story.presentation.navigator.Screen +import ua.acclorite.book_story.ui.common.components.top_bar.collapsibleTopAppBarScrollBehavior +import ua.acclorite.book_story.ui.navigator.LocalNavigator +import ua.acclorite.book_story.ui.settings.browse.BrowseSettingsContent @Parcelize object BrowseSettingsScreen : Screen, Parcelable { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/GeneralSettingsScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/settings/GeneralSettingsScreen.kt similarity index 71% rename from app/src/main/java/ua/acclorite/book_story/ui/settings/GeneralSettingsScreen.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/settings/GeneralSettingsScreen.kt index 4a91f8dd..5b4f3425 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/GeneralSettingsScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/settings/GeneralSettingsScreen.kt @@ -4,17 +4,17 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.settings +package ua.acclorite.book_story.presentation.settings import android.os.Parcelable import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import kotlinx.parcelize.Parcelize -import ua.acclorite.book_story.domain.navigator.Screen -import ua.acclorite.book_story.presentation.core.components.top_bar.collapsibleTopAppBarScrollBehavior -import ua.acclorite.book_story.presentation.navigator.LocalNavigator -import ua.acclorite.book_story.presentation.settings.general.GeneralSettingsContent +import ua.acclorite.book_story.presentation.navigator.Screen +import ua.acclorite.book_story.ui.common.components.top_bar.collapsibleTopAppBarScrollBehavior +import ua.acclorite.book_story.ui.navigator.LocalNavigator +import ua.acclorite.book_story.ui.settings.general.GeneralSettingsContent @Parcelize object GeneralSettingsScreen : Screen, Parcelable { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/LibrarySettingsScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/settings/LibrarySettingsScreen.kt similarity index 71% rename from app/src/main/java/ua/acclorite/book_story/ui/settings/LibrarySettingsScreen.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/settings/LibrarySettingsScreen.kt index 0806e96a..39aa9f70 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/LibrarySettingsScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/settings/LibrarySettingsScreen.kt @@ -4,17 +4,17 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.settings +package ua.acclorite.book_story.presentation.settings import android.os.Parcelable import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import kotlinx.parcelize.Parcelize -import ua.acclorite.book_story.domain.navigator.Screen -import ua.acclorite.book_story.presentation.core.components.top_bar.collapsibleTopAppBarScrollBehavior -import ua.acclorite.book_story.presentation.navigator.LocalNavigator -import ua.acclorite.book_story.presentation.settings.library.LibrarySettingsContent +import ua.acclorite.book_story.presentation.navigator.Screen +import ua.acclorite.book_story.ui.common.components.top_bar.collapsibleTopAppBarScrollBehavior +import ua.acclorite.book_story.ui.navigator.LocalNavigator +import ua.acclorite.book_story.ui.settings.library.LibrarySettingsContent @Parcelize object LibrarySettingsScreen : Screen, Parcelable { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/ReaderSettingsScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/settings/ReaderSettingsScreen.kt similarity index 71% rename from app/src/main/java/ua/acclorite/book_story/ui/settings/ReaderSettingsScreen.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/settings/ReaderSettingsScreen.kt index 08dc5837..aedefb65 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/ReaderSettingsScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/settings/ReaderSettingsScreen.kt @@ -4,17 +4,17 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.settings +package ua.acclorite.book_story.presentation.settings import android.os.Parcelable import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import kotlinx.parcelize.Parcelize -import ua.acclorite.book_story.domain.navigator.Screen -import ua.acclorite.book_story.presentation.core.components.top_bar.collapsibleTopAppBarScrollBehavior -import ua.acclorite.book_story.presentation.navigator.LocalNavigator -import ua.acclorite.book_story.presentation.settings.reader.ReaderSettingsContent +import ua.acclorite.book_story.presentation.navigator.Screen +import ua.acclorite.book_story.ui.common.components.top_bar.collapsibleTopAppBarScrollBehavior +import ua.acclorite.book_story.ui.navigator.LocalNavigator +import ua.acclorite.book_story.ui.settings.reader.ReaderSettingsContent @Parcelize object ReaderSettingsScreen : Screen, Parcelable { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsEvent.kt b/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsEvent.kt similarity index 90% rename from app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsEvent.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsEvent.kt index 672c071a..d1d64ebb 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsEvent.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsEvent.kt @@ -4,15 +4,15 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.settings +package ua.acclorite.book_story.presentation.settings import android.content.Context import android.net.Uri import androidx.compose.runtime.Immutable import androidx.compose.ui.graphics.Color -import ua.acclorite.book_story.domain.library.category.Category -import ua.acclorite.book_story.domain.library.display.LibrarySortOrder -import ua.acclorite.book_story.domain.util.ID +import ua.acclorite.book_story.core.ID +import ua.acclorite.book_story.domain.model.library.Category +import ua.acclorite.book_story.presentation.library.model.LibrarySortOrder @Immutable sealed class SettingsEvent { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsModel.kt b/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsModel.kt similarity index 80% rename from app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsModel.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsModel.kt index dbab7eb5..d0c44173 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsModel.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.settings +package ua.acclorite.book_story.presentation.settings import android.util.Log import androidx.lifecycle.ViewModel @@ -20,44 +20,42 @@ import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext import kotlinx.coroutines.yield import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.library.category.Category -import ua.acclorite.book_story.domain.library.category.CategorySort -import ua.acclorite.book_story.domain.reader.ColorPreset -import ua.acclorite.book_story.domain.use_case.category.DeleteCategory -import ua.acclorite.book_story.domain.use_case.category.GetCategories -import ua.acclorite.book_story.domain.use_case.category.GetCategorySort -import ua.acclorite.book_story.domain.use_case.category.InsertCategory -import ua.acclorite.book_story.domain.use_case.category.UpdateCategoryOrder -import ua.acclorite.book_story.domain.use_case.category.UpdateCategorySort -import ua.acclorite.book_story.domain.use_case.category.UpdateCategoryTitle -import ua.acclorite.book_story.domain.use_case.color_preset.DeleteColorPreset -import ua.acclorite.book_story.domain.use_case.color_preset.GetColorPresets -import ua.acclorite.book_story.domain.use_case.color_preset.ReorderColorPresets -import ua.acclorite.book_story.domain.use_case.color_preset.SelectColorPreset -import ua.acclorite.book_story.domain.use_case.color_preset.UpdateColorPreset -import ua.acclorite.book_story.domain.use_case.permission.GrantPersistableUriPermission -import ua.acclorite.book_story.domain.use_case.permission.ReleasePersistableUriPermission -import ua.acclorite.book_story.presentation.core.constants.provideDefaultColorPreset -import ua.acclorite.book_story.presentation.core.util.showToast +import ua.acclorite.book_story.domain.model.library.CategorySort +import ua.acclorite.book_story.domain.model.reader.ColorPreset +import ua.acclorite.book_story.domain.use_case.category.AddCategoryUseCase +import ua.acclorite.book_story.domain.use_case.category.DeleteCategoryUseCase +import ua.acclorite.book_story.domain.use_case.category.GetCategoriesUseCase +import ua.acclorite.book_story.domain.use_case.category.GetCategorySortingUseCase +import ua.acclorite.book_story.domain.use_case.category.UpdateCategoriesOrderUseCase +import ua.acclorite.book_story.domain.use_case.category.UpdateCategorySortingUseCase +import ua.acclorite.book_story.domain.use_case.category.UpdateCategoryUseCase +import ua.acclorite.book_story.domain.use_case.color_preset.DeleteColorPresetUseCase +import ua.acclorite.book_story.domain.use_case.color_preset.GetColorPresetsUseCase +import ua.acclorite.book_story.domain.use_case.color_preset.ReorderColorPresetsUseCase +import ua.acclorite.book_story.domain.use_case.color_preset.SelectColorPresetUseCase +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.helpers.showToast import javax.inject.Inject import kotlin.random.Random @HiltViewModel class SettingsModel @Inject constructor( - private val getColorPresets: GetColorPresets, - private val updateColorPreset: UpdateColorPreset, - private val selectColorPreset: SelectColorPreset, - private val reorderColorPresets: ReorderColorPresets, - private val deleteColorPreset: DeleteColorPreset, - private val grantPersistableUriPermission: GrantPersistableUriPermission, - private val releasePersistableUriPermission: ReleasePersistableUriPermission, - private val insertCategory: InsertCategory, - private val getCategories: GetCategories, - private val updateCategoryTitle: UpdateCategoryTitle, - private val updateCategoryOrder: UpdateCategoryOrder, - private val deleteCategory: DeleteCategory, - private val updateCategorySort: UpdateCategorySort, - private val getCategoriesSort: GetCategorySort, + private val getColorPresetsUseCase: GetColorPresetsUseCase, + private val updateColorPresetUseCase: UpdateColorPresetUseCase, + private val selectColorPresetUseCase: SelectColorPresetUseCase, + private val reorderColorPresetsUseCase: ReorderColorPresetsUseCase, + private val deleteColorPresetUseCase: DeleteColorPresetUseCase, + private val grantPersistableUriPermissionUseCase: GrantPersistableUriPermissionUseCase, + private val releasePersistableUriPermissionUseCase: ReleasePersistableUriPermissionUseCase, + private val addCategoryUseCase: AddCategoryUseCase, + private val getCategoriesUseCase: GetCategoriesUseCase, + private val updateCategoryUseCase: UpdateCategoryUseCase, + private val updateCategoriesOrderUseCase: UpdateCategoriesOrderUseCase, + private val deleteCategoryUseCase: DeleteCategoryUseCase, + private val updateCategorySortingUseCase: UpdateCategorySortingUseCase, + private val getCategorySortingUseCase: GetCategorySortingUseCase ) : ViewModel() { private val mutex = Mutex() @@ -77,12 +75,12 @@ class SettingsModel @Inject constructor( init { viewModelScope.launch(Dispatchers.IO) { - var colorPresets = getColorPresets.execute() + var colorPresets = getColorPresetsUseCase() if (colorPresets.isEmpty()) { - updateColorPreset.execute(provideDefaultColorPreset()) - getColorPresets.execute().first().select() - colorPresets = getColorPresets.execute() + updateColorPresetUseCase(ColorPreset.default) + getColorPresetsUseCase().first().select() + colorPresets = getColorPresetsUseCase() } val scrollIndex = colorPresets.indexOfFirst { @@ -102,8 +100,8 @@ class SettingsModel @Inject constructor( it.copy( selectedColorPreset = colorPresets.selected(), colorPresets = colorPresets, - categories = getCategories.execute(), // Getting categories - categoriesSort = getCategoriesSort.execute() + categories = getCategoriesUseCase(), // Getting categories + categoriesSort = getCategorySortingUseCase() ) } @@ -116,30 +114,26 @@ class SettingsModel @Inject constructor( when (event) { is SettingsEvent.OnGrantPersistableUriPermission -> { viewModelScope.launch { - grantPersistableUriPermission.execute( - event.uri + grantPersistableUriPermissionUseCase( + event.uri.toString() ) } } is SettingsEvent.OnReleasePersistableUriPermission -> { viewModelScope.launch { - releasePersistableUriPermission.execute( - event.uri + releasePersistableUriPermissionUseCase( + event.uri.toString() ) } } is SettingsEvent.OnCreateCategory -> { viewModelScope.launch { - insertCategory.execute( - category = Category( - title = event.title - ) - ) + addCategoryUseCase(event.title) _state.update { it.copy( - categories = getCategories.execute() + categories = getCategoriesUseCase() ) } } @@ -147,13 +141,13 @@ class SettingsModel @Inject constructor( is SettingsEvent.OnUpdateCategoryTitle -> { viewModelScope.launch { - updateCategoryTitle.execute( - id = event.id, - title = event.title + updateCategoryUseCase( + categoryId = event.id, + newTitle = event.title ) _state.update { it.copy( - categories = getCategories.execute() + categories = getCategoriesUseCase() ) } } @@ -161,12 +155,12 @@ class SettingsModel @Inject constructor( is SettingsEvent.OnUpdateCategoryOrder -> { viewModelScope.launch { - updateCategoryOrder.execute( + updateCategoriesOrderUseCase( categories = event.categories ) _state.update { it.copy( - categories = getCategories.execute() + categories = getCategoriesUseCase() ) } } @@ -174,12 +168,12 @@ class SettingsModel @Inject constructor( is SettingsEvent.OnRemoveCategory -> { viewModelScope.launch { - deleteCategory.execute( + deleteCategoryUseCase( category = event.category ) _state.update { it.copy( - categories = getCategories.execute() + categories = getCategoriesUseCase() ) } } @@ -187,7 +181,7 @@ class SettingsModel @Inject constructor( is SettingsEvent.OnUpdateCategorySort -> { viewModelScope.launch { - updateCategorySort.execute( + updateCategorySortingUseCase( categorySort = CategorySort( categoryId = event.categoryId, sortOrder = event.sortOrder, @@ -196,7 +190,7 @@ class SettingsModel @Inject constructor( ) _state.update { it.copy( - categoriesSort = getCategoriesSort.execute() + categoriesSort = getCategorySortingUseCase() ) } } @@ -206,7 +200,8 @@ class SettingsModel @Inject constructor( viewModelScope.launch { cancelColorPresetJobs() selectColorPresetJob = launch { - val colorPreset = event.id.getColorPresetById() ?: return@launch + val colorPreset = _state.value.colorPresets.getColorPresetById(event.id) + ?: return@launch yield() @@ -345,7 +340,8 @@ class SettingsModel @Inject constructor( cancelColorPresetJobs() deleteColorPresetJob = launch { if (_state.value.colorPresets.size == 1) return@launch - val colorPreset = event.id.getColorPresetById() ?: return@launch + val colorPreset = _state.value.colorPresets.getColorPresetById(event.id) + ?: return@launch yield() @@ -362,12 +358,12 @@ class SettingsModel @Inject constructor( yield() - deleteColorPreset.execute(colorPreset) - val nextColorPreset = getColorPresets.execute().getOrNull(nextPosition) + deleteColorPresetUseCase(colorPreset) + val nextColorPreset = getColorPresetsUseCase().getOrNull(nextPosition) ?: return@launch nextColorPreset.select() - val colorPresets = getColorPresets.execute() + val colorPresets = getColorPresetsUseCase() _state.update { it.copy( @@ -389,7 +385,8 @@ class SettingsModel @Inject constructor( viewModelScope.launch { cancelColorPresetJobs() updateTitleColorPresetJob = launch { - val colorPreset = event.id.getColorPresetById() ?: return@launch + val colorPreset = _state.value.colorPresets.getColorPresetById(event.id) + ?: return@launch yield() @@ -399,7 +396,7 @@ class SettingsModel @Inject constructor( yield() - updateColorPreset.execute(updatedColorPreset) + updateColorPresetUseCase(updatedColorPreset) _state.update { it.copy( selectedColorPreset = updatedColorPreset, @@ -416,7 +413,8 @@ class SettingsModel @Inject constructor( viewModelScope.launch { cancelColorPresetJobs() shuffleColorPresetJob = launch { - val colorPreset = event.id.getColorPresetById() ?: return@launch + val colorPreset = _state.value.colorPresets.getColorPresetById(event.id) + ?: return@launch yield() @@ -435,7 +433,7 @@ class SettingsModel @Inject constructor( yield() - updateColorPreset.execute(shuffledColorPreset) + updateColorPresetUseCase(shuffledColorPreset) _state.update { it.copy( selectedColorPreset = shuffledColorPreset, @@ -454,14 +452,14 @@ class SettingsModel @Inject constructor( addColorPresetJob = launch { yield() - val newColorPreset = provideDefaultColorPreset().copy( + val newColorPreset = ColorPreset.default.copy( backgroundColor = event.backgroundColor, fontColor = event.fontColor ) - updateColorPreset.execute(newColorPreset) + updateColorPresetUseCase(newColorPreset) - getColorPresets.execute().last().select() - val colorPresets = getColorPresets.execute() + getColorPresetsUseCase().last().select() + val colorPresets = getColorPresetsUseCase() _state.update { it.copy( @@ -479,7 +477,8 @@ class SettingsModel @Inject constructor( viewModelScope.launch { cancelColorPresetJobs() updateColorColorPresetJob = launch { - val colorPreset = event.id.getColorPresetById() ?: return@launch + val colorPreset = _state.value.colorPresets.getColorPresetById(event.id) + ?: return@launch yield() @@ -492,7 +491,7 @@ class SettingsModel @Inject constructor( yield() - updateColorPreset.execute(updatedColorPreset) + updateColorPresetUseCase(updatedColorPreset) _state.update { it.copy( selectedColorPreset = updatedColorPreset, @@ -528,7 +527,7 @@ class SettingsModel @Inject constructor( viewModelScope.launch { cancelColorPresetJobs() launch { - reorderColorPresets.execute(_state.value.colorPresets) + reorderColorPresetsUseCase(_state.value.colorPresets) } } } @@ -548,7 +547,7 @@ class SettingsModel @Inject constructor( } private suspend fun ColorPreset.select(animate: Boolean = false) { - selectColorPreset.execute(this) + selectColorPresetUseCase(this) _state.update { it.copy( animateColorPreset = animate @@ -556,9 +555,9 @@ class SettingsModel @Inject constructor( } } - private fun Int.getColorPresetById(): ColorPreset? { - return _state.value.colorPresets.firstOrNull { - it.id == this + private fun List.getColorPresetById(id: Int): ColorPreset? { + return firstOrNull { + it.id == id } } @@ -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/ui/settings/SettingsScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsScreen.kt similarity index 80% rename from app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsScreen.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsScreen.kt index 2e1e7955..9eaae4cd 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsScreen.kt @@ -4,17 +4,17 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.settings +package ua.acclorite.book_story.presentation.settings import android.os.Parcelable import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import kotlinx.parcelize.Parcelize -import ua.acclorite.book_story.domain.navigator.Screen -import ua.acclorite.book_story.presentation.core.components.top_bar.collapsibleTopAppBarScrollBehavior -import ua.acclorite.book_story.presentation.navigator.LocalNavigator -import ua.acclorite.book_story.presentation.settings.SettingsContent +import ua.acclorite.book_story.presentation.navigator.Screen +import ua.acclorite.book_story.ui.common.components.top_bar.collapsibleTopAppBarScrollBehavior +import ua.acclorite.book_story.ui.navigator.LocalNavigator +import ua.acclorite.book_story.ui.settings.SettingsContent @Parcelize object SettingsScreen : Screen, Parcelable { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsState.kt b/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsState.kt similarity index 59% rename from app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsState.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsState.kt index 218c0296..746502c3 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsState.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsState.kt @@ -4,19 +4,18 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.settings +package ua.acclorite.book_story.presentation.settings import androidx.compose.foundation.lazy.LazyListState import androidx.compose.runtime.Immutable -import ua.acclorite.book_story.domain.library.category.Category -import ua.acclorite.book_story.domain.library.category.CategorySort -import ua.acclorite.book_story.domain.reader.ColorPreset -import ua.acclorite.book_story.presentation.core.constants.provideDefaultColorPreset +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 @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/ui/start/StartScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/start/StartScreen.kt similarity index 79% rename from app/src/main/java/ua/acclorite/book_story/ui/start/StartScreen.kt rename to app/src/main/java/ua/acclorite/book_story/presentation/start/StartScreen.kt index bc55042e..061bcc4d 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/start/StartScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/start/StartScreen.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.ui.start +package ua.acclorite.book_story.presentation.start import android.annotation.SuppressLint import android.os.Parcelable @@ -17,17 +17,17 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import kotlinx.parcelize.IgnoredOnParcel import kotlinx.parcelize.Parcelize -import ua.acclorite.book_story.domain.navigator.Screen -import ua.acclorite.book_story.domain.navigator.StackEvent -import ua.acclorite.book_story.domain.ui.ButtonItem -import ua.acclorite.book_story.presentation.core.constants.provideLanguages -import ua.acclorite.book_story.presentation.core.util.LocalActivity -import ua.acclorite.book_story.presentation.navigator.LocalNavigator -import ua.acclorite.book_story.presentation.start.StartContent -import ua.acclorite.book_story.ui.browse.BrowseScreen -import ua.acclorite.book_story.ui.help.HelpScreen -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.helpers.LocalActivity +import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.navigator.LocalNavigator +import ua.acclorite.book_story.ui.start.StartContent @Parcelize object StartScreen : Screen, Parcelable { @@ -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/presentation/about/AboutBadgeItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutBadgeItem.kt similarity index 86% rename from app/src/main/java/ua/acclorite/book_story/presentation/about/AboutBadgeItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/about/AboutBadgeItem.kt index 7fbfcea1..f3f59407 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutBadgeItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutBadgeItem.kt @@ -4,15 +4,15 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.about +package ua.acclorite.book_story.ui.about import androidx.compose.foundation.layout.size import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.domain.about.Badge -import ua.acclorite.book_story.presentation.core.components.common.IconButton +import ua.acclorite.book_story.ui.about.model.Badge +import ua.acclorite.book_story.ui.common.components.common.IconButton @Composable fun AboutBadgeItem( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutBadges.kt b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutBadges.kt similarity index 87% rename from app/src/main/java/ua/acclorite/book_story/presentation/about/AboutBadges.kt rename to app/src/main/java/ua/acclorite/book_story/ui/about/AboutBadges.kt index 9a9d989f..afa330dd 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutBadges.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutBadges.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.about +package ua.acclorite.book_story.ui.about import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -18,9 +18,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.constants.provideAboutBadges -import ua.acclorite.book_story.presentation.core.util.showToast -import ua.acclorite.book_story.ui.about.AboutEvent +import ua.acclorite.book_story.presentation.about.AboutEvent +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/presentation/about/AboutContent.kt b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutContent.kt similarity index 90% rename from app/src/main/java/ua/acclorite/book_story/presentation/about/AboutContent.kt rename to app/src/main/java/ua/acclorite/book_story/ui/about/AboutContent.kt index 0592fd9c..37c20b1f 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutContent.kt @@ -4,13 +4,13 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.about +package ua.acclorite.book_story.ui.about import androidx.compose.foundation.lazy.LazyListState import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable -import ua.acclorite.book_story.ui.about.AboutEvent +import ua.acclorite.book_story.presentation.about.AboutEvent @OptIn(ExperimentalMaterial3Api::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutItem.kt similarity index 92% rename from app/src/main/java/ua/acclorite/book_story/presentation/about/AboutItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/about/AboutItem.kt index 329983f0..ab0d9d78 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.about +package ua.acclorite.book_story.ui.about import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement @@ -16,7 +16,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.StyledText @Composable fun AboutItem( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutLayout.kt similarity index 84% rename from app/src/main/java/ua/acclorite/book_story/presentation/about/AboutLayout.kt rename to app/src/main/java/ua/acclorite/book_story/ui/about/AboutLayout.kt index d723e9e0..c5ce92bd 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutLayout.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.about +package ua.acclorite.book_story.ui.about import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues @@ -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.presentation.core.components.common.LazyColumnWithScrollbar -import ua.acclorite.book_story.presentation.core.constants.provideContributorsPage -import ua.acclorite.book_story.presentation.core.constants.provideIssuesPage -import ua.acclorite.book_story.presentation.core.constants.provideReleasesPage -import ua.acclorite.book_story.presentation.core.constants.provideSupportPage -import ua.acclorite.book_story.presentation.core.constants.provideTranslationPage -import ua.acclorite.book_story.ui.about.AboutEvent +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 @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/presentation/about/AboutScaffold.kt b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutScaffold.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/about/AboutScaffold.kt rename to app/src/main/java/ua/acclorite/book_story/ui/about/AboutScaffold.kt index 9698f490..23d0b5c2 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutScaffold.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutScaffold.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.about +package ua.acclorite.book_story.ui.about import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize @@ -18,7 +18,7 @@ import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll -import ua.acclorite.book_story.ui.about.AboutEvent +import ua.acclorite.book_story.presentation.about.AboutEvent @OptIn(ExperimentalMaterial3Api::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutTopBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutTopBar.kt similarity index 84% rename from app/src/main/java/ua/acclorite/book_story/presentation/about/AboutTopBar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/about/AboutTopBar.kt index c6f31908..4699dbc9 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutTopBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutTopBar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.about +package ua.acclorite.book_story.ui.about import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.LargeTopAppBar @@ -14,8 +14,8 @@ import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton +import ua.acclorite.book_story.ui.common.components.common.StyledText +import ua.acclorite.book_story.ui.navigator.NavigatorBackIconButton @OptIn(ExperimentalMaterial3Api::class) @Composable 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/domain/about/Badge.kt b/app/src/main/java/ua/acclorite/book_story/ui/about/model/Badge.kt similarity index 91% rename from app/src/main/java/ua/acclorite/book_story/domain/about/Badge.kt rename to app/src/main/java/ua/acclorite/book_story/ui/about/model/Badge.kt index 124e5fbc..748f81f3 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/about/Badge.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/about/model/Badge.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.about +package ua.acclorite.book_story.ui.about.model import androidx.annotation.DrawableRes import androidx.annotation.StringRes diff --git a/app/src/main/java/ua/acclorite/book_story/domain/about/Credit.kt b/app/src/main/java/ua/acclorite/book_story/ui/about/model/Credit.kt similarity index 78% rename from app/src/main/java/ua/acclorite/book_story/domain/about/Credit.kt rename to app/src/main/java/ua/acclorite/book_story/ui/about/model/Credit.kt index 86c516ff..c4caaf99 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/about/Credit.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/about/model/Credit.kt @@ -4,10 +4,10 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.about +package ua.acclorite.book_story.ui.about.model import androidx.compose.runtime.Immutable -import ua.acclorite.book_story.domain.ui.UIText +import ua.acclorite.book_story.core.ui.UIText @Immutable data class Credit( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoAuthorDialog.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoAuthorDialog.kt similarity index 77% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoAuthorDialog.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoAuthorDialog.kt index 11b38a70..8b3d8e3b 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoAuthorDialog.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoAuthorDialog.kt @@ -4,15 +4,15 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.ui.UIText -import ua.acclorite.book_story.presentation.core.components.dialog.DialogWithTextField -import ua.acclorite.book_story.ui.book_info.BookInfoEvent +import ua.acclorite.book_story.core.ui.UIText +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.dialog.DialogWithTextField @Composable fun BookInfoAuthorDialog( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoBackHandler.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoBackHandler.kt similarity index 86% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoBackHandler.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoBackHandler.kt index b2525c21..2f335e81 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoBackHandler.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoBackHandler.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.activity.compose.BackHandler import androidx.compose.runtime.Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoBottomSheet.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoBottomSheet.kt similarity index 82% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoBottomSheet.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoBottomSheet.kt index f04e1bb0..926748e5 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoBottomSheet.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoBottomSheet.kt @@ -4,13 +4,13 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.compose.runtime.Composable -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.util.BottomSheet -import ua.acclorite.book_story.ui.book_info.BookInfoEvent -import ua.acclorite.book_story.ui.book_info.BookInfoScreen +import ua.acclorite.book_story.core.BottomSheet +import ua.acclorite.book_story.domain.model.library.Book +import ua.acclorite.book_story.presentation.book_info.BookInfoEvent +import ua.acclorite.book_story.presentation.book_info.BookInfoScreen @Composable fun BookInfoBottomSheet( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoChangeCoverBottomSheet.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoChangeCoverBottomSheet.kt similarity index 93% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoChangeCoverBottomSheet.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoChangeCoverBottomSheet.kt index b29d53a5..2b94d85d 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoChangeCoverBottomSheet.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoChangeCoverBottomSheet.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.PickVisualMediaRequest @@ -24,9 +24,9 @@ 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.domain.library.book.Book -import ua.acclorite.book_story.presentation.core.components.modal_bottom_sheet.ModalBottomSheet -import ua.acclorite.book_story.ui.book_info.BookInfoEvent +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.modal_bottom_sheet.ModalBottomSheet @Composable fun BookInfoChangeCoverBottomSheet( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoChangeCoverBottomSheetItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoChangeCoverBottomSheetItem.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoChangeCoverBottomSheetItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoChangeCoverBottomSheetItem.kt index 9c28bded..07972c8a 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoChangeCoverBottomSheetItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoChangeCoverBottomSheetItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement @@ -24,7 +24,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.StyledText @Composable fun LazyItemScope.BookInfoChangeCoverBottomSheetItem( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoContent.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoContent.kt similarity index 90% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoContent.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoContent.kt index b388f6a8..8ff07ba5 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoContent.kt @@ -4,15 +4,15 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.compose.foundation.lazy.LazyListState import androidx.compose.runtime.Composable -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.library.category.Category -import ua.acclorite.book_story.domain.util.BottomSheet -import ua.acclorite.book_story.domain.util.Dialog -import ua.acclorite.book_story.ui.book_info.BookInfoEvent +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.domain.model.library.Category +import ua.acclorite.book_story.presentation.book_info.BookInfoEvent @Composable fun BookInfoContent( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoDeleteDialog.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoDeleteDialog.kt similarity index 87% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoDeleteDialog.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoDeleteDialog.kt index 58b8eeb2..fb34d878 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoDeleteDialog.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoDeleteDialog.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.DeleteOutline @@ -12,8 +12,8 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.dialog.Dialog -import ua.acclorite.book_story.ui.book_info.BookInfoEvent +import ua.acclorite.book_story.presentation.book_info.BookInfoEvent +import ua.acclorite.book_story.ui.common.components.dialog.Dialog @Composable fun BookInfoDeleteDialog( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoDescriptionDialog.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoDescriptionDialog.kt similarity index 79% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoDescriptionDialog.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoDescriptionDialog.kt index dbeaeac6..c800edfe 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoDescriptionDialog.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoDescriptionDialog.kt @@ -4,13 +4,13 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.presentation.core.components.dialog.DialogWithTextField -import ua.acclorite.book_story.ui.book_info.BookInfoEvent +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.dialog.DialogWithTextField @Composable fun BookInfoDescriptionDialog( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoDetailsBottomSheet.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoDetailsBottomSheet.kt similarity index 85% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoDetailsBottomSheet.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoDetailsBottomSheet.kt index d533122b..e9e65e5c 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoDetailsBottomSheet.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoDetailsBottomSheet.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Spacer @@ -18,13 +18,13 @@ 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.domain.file.CachedFileCompat -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar -import ua.acclorite.book_story.presentation.core.components.modal_bottom_sheet.ModalBottomSheet -import ua.acclorite.book_story.presentation.core.constants.provideExtensions -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle -import ua.acclorite.book_story.ui.book_info.BookInfoEvent +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.settings.components.SettingsSubcategoryTitle import java.text.SimpleDateFormat import java.util.Date import java.util.Locale @@ -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/presentation/book_info/BookInfoDetailsBottomSheetItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoDetailsBottomSheetItem.kt similarity index 92% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoDetailsBottomSheetItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoDetailsBottomSheetItem.kt index 56b3041d..78b605b7 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoDetailsBottomSheetItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoDetailsBottomSheetItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.compose.foundation.focusable import androidx.compose.foundation.layout.Arrangement @@ -22,8 +22,8 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.IconButton -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.IconButton +import ua.acclorite.book_story.ui.common.components.common.StyledText @Composable fun BookInfoDetailsBottomSheetItem( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoDialog.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoDialog.kt similarity index 87% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoDialog.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoDialog.kt index e9304362..641faf2c 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoDialog.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoDialog.kt @@ -4,14 +4,14 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.compose.runtime.Composable -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.library.category.Category -import ua.acclorite.book_story.domain.util.Dialog -import ua.acclorite.book_story.ui.book_info.BookInfoEvent -import ua.acclorite.book_story.ui.book_info.BookInfoScreen +import ua.acclorite.book_story.core.Dialog +import ua.acclorite.book_story.domain.model.library.Book +import ua.acclorite.book_story.domain.model.library.Category +import ua.acclorite.book_story.presentation.book_info.BookInfoEvent +import ua.acclorite.book_story.presentation.book_info.BookInfoScreen @Composable fun BookInfoDialog( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayout.kt similarity index 87% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayout.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayout.kt index e513e5e6..551cd5a3 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayout.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -17,10 +17,10 @@ import androidx.compose.foundation.lazy.LazyListState import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar -import ua.acclorite.book_story.presentation.core.constants.providePrimaryScrollbar -import ua.acclorite.book_story.ui.book_info.BookInfoEvent +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.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/presentation/book_info/BookInfoLayoutActions.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutActions.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutActions.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutActions.kt index b52e78b6..6ceb3109 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutActions.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutActions.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row @@ -21,7 +21,7 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R -import ua.acclorite.book_story.ui.book_info.BookInfoEvent +import ua.acclorite.book_story.presentation.book_info.BookInfoEvent @Composable fun BookInfoLayoutActions( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutActionsItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutActionsItem.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutActionsItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutActionsItem.kt index 56cee770..fc9407e7 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutActionsItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutActionsItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.compose.foundation.background import androidx.compose.foundation.clickable @@ -22,7 +22,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.StyledText @Composable fun BookInfoLayoutActionsItem( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutBackground.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutBackground.kt similarity index 90% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutBackground.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutBackground.kt index 438a7114..aa893ef4 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutBackground.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutBackground.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import android.net.Uri import androidx.compose.foundation.layout.fillMaxWidth @@ -18,7 +18,7 @@ import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.presentation.core.components.common.AsyncCoverImage +import ua.acclorite.book_story.ui.common.components.common.AsyncCoverImage @Composable fun BookInfoLayoutBackground(height: Dp, image: Uri) { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutButton.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutButton.kt similarity index 81% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutButton.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutButton.kt index 02d768d7..534a4910 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutButton.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutButton.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding @@ -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.domain.library.book.Book -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.util.calculateProgress +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 @Composable fun BookInfoLayoutButton( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutDescription.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutDescription.kt similarity index 93% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutDescription.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutDescription.kt index ebdec8b2..88bb5b34 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutDescription.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutDescription.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.animateColorAsState @@ -39,10 +39,10 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.util.noRippleClickable -import ua.acclorite.book_story.ui.book_info.BookInfoEvent +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.helpers.noRippleClickable @Composable fun BookInfoLayoutDescription( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutInfo.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfo.kt similarity index 90% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutInfo.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfo.kt index 000c05cd..63007048 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutInfo.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfo.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -15,8 +15,8 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.ui.book_info.BookInfoEvent +import ua.acclorite.book_story.domain.model.library.Book +import ua.acclorite.book_story.presentation.book_info.BookInfoEvent @Composable fun BookInfoLayoutInfo( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutInfoAuthor.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoAuthor.kt similarity index 85% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutInfoAuthor.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoAuthor.kt index c81d6a71..6e981c9f 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutInfoAuthor.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoAuthor.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row @@ -20,10 +20,10 @@ 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.domain.library.book.Book -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.util.noRippleClickable -import ua.acclorite.book_story.ui.book_info.BookInfoEvent +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.helpers.noRippleClickable @Composable fun BookInfoLayoutInfoAuthor( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutInfoCover.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoCover.kt similarity index 87% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutInfoCover.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoCover.kt index 98561659..58ff881c 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutInfoCover.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoCover.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box @@ -25,10 +25,10 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.presentation.core.components.common.AsyncCoverImage -import ua.acclorite.book_story.presentation.core.util.noRippleClickable -import ua.acclorite.book_story.ui.book_info.BookInfoEvent +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.helpers.noRippleClickable @Composable fun BookInfoLayoutInfoCover( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutInfoProgress.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoProgress.kt similarity index 86% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutInfoProgress.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoProgress.kt index abc4fea0..2c5a61be 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutInfoProgress.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoProgress.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row @@ -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.domain.library.book.Book -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.util.calculateProgress +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 @OptIn(ExperimentalMaterial3ExpressiveApi::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutInfoTitle.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoTitle.kt similarity index 74% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutInfoTitle.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoTitle.kt index 0e2d1ca2..4dd994a3 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoLayoutInfoTitle.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoLayoutInfoTitle.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.util.noRippleClickable -import ua.acclorite.book_story.ui.book_info.BookInfoEvent +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.helpers.noRippleClickable @Composable fun BookInfoLayoutInfoTitle( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoMoveDialog.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoMoveDialog.kt similarity index 86% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoMoveDialog.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoMoveDialog.kt index c27d0703..2540169f 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoMoveDialog.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoMoveDialog.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.items @@ -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.domain.library.book.Book -import ua.acclorite.book_story.domain.library.category.Category -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.components.dialog.CheckboxDialogItem -import ua.acclorite.book_story.presentation.core.components.dialog.Dialog -import ua.acclorite.book_story.ui.book_info.BookInfoEvent +import ua.acclorite.book_story.domain.model.library.Book +import ua.acclorite.book_story.domain.model.library.Category +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.components.dialog.CheckboxDialogItem +import ua.acclorite.book_story.ui.common.components.dialog.Dialog @Composable fun BookInfoMoveDialog( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoPathDialog.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoPathDialog.kt similarity index 78% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoPathDialog.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoPathDialog.kt index b23eb88c..a5c7521e 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoPathDialog.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoPathDialog.kt @@ -4,13 +4,13 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.presentation.core.components.dialog.DialogWithTextField -import ua.acclorite.book_story.ui.book_info.BookInfoEvent +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.dialog.DialogWithTextField @Composable fun BookInfoPathDialog( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoScaffold.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoScaffold.kt similarity index 93% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoScaffold.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoScaffold.kt index 92901394..c323d266 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoScaffold.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoScaffold.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize @@ -16,8 +16,8 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.ui.book_info.BookInfoEvent +import ua.acclorite.book_story.domain.model.library.Book +import ua.acclorite.book_story.presentation.book_info.BookInfoEvent @Composable fun BookInfoScaffold( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoTitleDialog.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoTitleDialog.kt similarity index 78% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoTitleDialog.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoTitleDialog.kt index f73fa2c7..8c1e20fc 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoTitleDialog.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoTitleDialog.kt @@ -4,13 +4,13 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.presentation.core.components.dialog.DialogWithTextField -import ua.acclorite.book_story.ui.book_info.BookInfoEvent +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.dialog.DialogWithTextField @Composable fun BookInfoTitleDialog( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoTopBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoTopBar.kt similarity index 80% rename from app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoTopBar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoTopBar.kt index 61d04164..84054847 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoTopBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoTopBar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.book_info +package ua.acclorite.book_story.ui.book_info import androidx.compose.foundation.lazy.LazyListState import androidx.compose.material.icons.Icons @@ -15,13 +15,13 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.remember import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.presentation.core.components.common.IconButton -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBar -import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBarData -import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton -import ua.acclorite.book_story.ui.book_info.BookInfoEvent +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.IconButton +import ua.acclorite.book_story.ui.common.components.common.StyledText +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.navigator.NavigatorBackIconButton import ua.acclorite.book_story.ui.theme.DefaultTransition @OptIn(ExperimentalMaterial3Api::class) diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseAddDialog.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseAddDialog.kt similarity index 86% rename from app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseAddDialog.kt rename to app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseAddDialog.kt index f058cd6a..903a07c1 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseAddDialog.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseAddDialog.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.browse +package ua.acclorite.book_story.ui.browse import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxWidth @@ -20,12 +20,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.domain.library.book.NullableBook -import ua.acclorite.book_story.domain.library.book.SelectableNullableBook -import ua.acclorite.book_story.presentation.core.components.dialog.Dialog -import ua.acclorite.book_story.presentation.core.components.progress_indicator.CircularProgressIndicator -import ua.acclorite.book_story.presentation.core.util.showToast -import ua.acclorite.book_story.ui.browse.BrowseEvent +import ua.acclorite.book_story.data.model.common.NullableBook +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.helpers.showToast import java.util.UUID @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseAddDialogItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseAddDialogItem.kt similarity index 90% rename from app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseAddDialogItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseAddDialogItem.kt index 9633c052..d7920dc0 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseAddDialogItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseAddDialogItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.browse +package ua.acclorite.book_story.ui.browse import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column @@ -24,10 +24,10 @@ 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.domain.library.book.NullableBook -import ua.acclorite.book_story.domain.library.book.SelectableNullableBook -import ua.acclorite.book_story.presentation.core.components.common.CircularCheckbox -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.data.model.common.NullableBook +import ua.acclorite.book_story.presentation.library.model.SelectableNullableBook +import ua.acclorite.book_story.ui.common.components.common.CircularCheckbox +import ua.acclorite.book_story.ui.common.components.common.StyledText @Composable fun BrowseAddDialogItem(result: SelectableNullableBook, onClick: (Boolean) -> Unit) { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseBackHandler.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseBackHandler.kt similarity index 88% rename from app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseBackHandler.kt rename to app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseBackHandler.kt index dcf1c2d7..c3553eb3 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseBackHandler.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseBackHandler.kt @@ -4,11 +4,11 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.browse +package ua.acclorite.book_story.ui.browse import androidx.activity.compose.BackHandler import androidx.compose.runtime.Composable -import ua.acclorite.book_story.ui.browse.BrowseEvent +import ua.acclorite.book_story.presentation.browse.BrowseEvent @Composable fun BrowseBackHandler( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseBottomSheet.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseBottomSheet.kt similarity index 70% rename from app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseBottomSheet.kt rename to app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseBottomSheet.kt index 0c016006..8d9caf3b 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseBottomSheet.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseBottomSheet.kt @@ -4,12 +4,12 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.browse +package ua.acclorite.book_story.ui.browse import androidx.compose.runtime.Composable -import ua.acclorite.book_story.domain.util.BottomSheet -import ua.acclorite.book_story.ui.browse.BrowseEvent -import ua.acclorite.book_story.ui.browse.BrowseScreen +import ua.acclorite.book_story.core.BottomSheet +import ua.acclorite.book_story.presentation.browse.BrowseEvent +import ua.acclorite.book_story.presentation.browse.BrowseScreen @Composable fun BrowseBottomSheet( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseContent.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseContent.kt similarity index 89% rename from app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseContent.kt rename to app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseContent.kt index 5e6be7ac..580dbcf4 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseContent.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.browse +package ua.acclorite.book_story.ui.browse import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.grid.LazyGridState @@ -12,13 +12,13 @@ import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.material.pullrefresh.PullRefreshState import androidx.compose.runtime.Composable import androidx.compose.ui.focus.FocusRequester -import ua.acclorite.book_story.domain.browse.display.BrowseLayout -import ua.acclorite.book_story.domain.browse.file.SelectableFile -import ua.acclorite.book_story.domain.library.book.SelectableNullableBook -import ua.acclorite.book_story.domain.util.BottomSheet -import ua.acclorite.book_story.domain.util.Dialog -import ua.acclorite.book_story.ui.browse.BrowseEvent -import ua.acclorite.book_story.ui.main.MainEvent +import ua.acclorite.book_story.core.BottomSheet +import ua.acclorite.book_story.core.Dialog +import ua.acclorite.book_story.presentation.browse.BrowseEvent +import ua.acclorite.book_story.presentation.browse.model.BrowseLayout +import ua.acclorite.book_story.presentation.browse.model.SelectableFile +import ua.acclorite.book_story.presentation.library.model.SelectableNullableBook +import ua.acclorite.book_story.presentation.main.MainEvent @OptIn(ExperimentalMaterialApi::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseDialog.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseDialog.kt similarity index 77% rename from app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseDialog.kt rename to app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseDialog.kt index a83ded1f..273e35e5 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseDialog.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseDialog.kt @@ -4,13 +4,13 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.browse +package ua.acclorite.book_story.ui.browse import androidx.compose.runtime.Composable -import ua.acclorite.book_story.domain.library.book.SelectableNullableBook -import ua.acclorite.book_story.domain.util.Dialog -import ua.acclorite.book_story.ui.browse.BrowseEvent -import ua.acclorite.book_story.ui.browse.BrowseScreen +import ua.acclorite.book_story.core.Dialog +import ua.acclorite.book_story.presentation.browse.BrowseEvent +import ua.acclorite.book_story.presentation.browse.BrowseScreen +import ua.acclorite.book_story.presentation.library.model.SelectableNullableBook @Composable fun BrowseDialog( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseEmptyPlaceholder.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseEmptyPlaceholder.kt similarity index 85% rename from app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseEmptyPlaceholder.kt rename to app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseEmptyPlaceholder.kt index 66561103..fd688bb0 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseEmptyPlaceholder.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseEmptyPlaceholder.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.browse +package ua.acclorite.book_story.ui.browse import androidx.compose.foundation.layout.BoxScope import androidx.compose.runtime.Composable @@ -13,8 +13,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.AnimatedVisibility -import ua.acclorite.book_story.presentation.core.components.placeholder.EmptyPlaceholder +import ua.acclorite.book_story.ui.common.components.common.AnimatedVisibility +import ua.acclorite.book_story.ui.common.components.placeholder.EmptyPlaceholder import ua.acclorite.book_story.ui.theme.Transitions @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseFilterBottomSheet.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseFilterBottomSheet.kt similarity index 82% rename from app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseFilterBottomSheet.kt rename to app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseFilterBottomSheet.kt index c8920dc2..b39510c8 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseFilterBottomSheet.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseFilterBottomSheet.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.browse +package ua.acclorite.book_story.ui.browse import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxSize @@ -16,12 +16,12 @@ import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import kotlinx.coroutines.launch -import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar -import ua.acclorite.book_story.presentation.core.components.modal_bottom_sheet.ModalBottomSheet -import ua.acclorite.book_story.presentation.settings.browse.display.BrowseDisplaySubcategory -import ua.acclorite.book_story.presentation.settings.browse.filter.BrowseFilterSubcategory -import ua.acclorite.book_story.presentation.settings.browse.sort.BrowseSortSubcategory -import ua.acclorite.book_story.ui.browse.BrowseEvent +import ua.acclorite.book_story.presentation.browse.BrowseEvent +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.settings.browse.display.BrowseDisplaySubcategory +import ua.acclorite.book_story.ui.settings.browse.filter.BrowseFilterSubcategory +import ua.acclorite.book_story.ui.settings.browse.sort.BrowseSortSubcategory private var initialPage = 0 diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseFilterBottomSheetTabRow.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseFilterBottomSheetTabRow.kt similarity index 82% rename from app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseFilterBottomSheetTabRow.kt rename to app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseFilterBottomSheetTabRow.kt index eccf2e5e..1a28b293 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseFilterBottomSheetTabRow.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseFilterBottomSheetTabRow.kt @@ -4,12 +4,12 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.browse +package ua.acclorite.book_story.ui.browse import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.modal_bottom_sheet.ModalBottomSheetTabRow +import ua.acclorite.book_story.ui.common.components.modal_bottom_sheet.ModalBottomSheetTabRow @Composable fun BrowseFilterBottomSheetTabRow( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseGridFileItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseGridFileItem.kt similarity index 90% rename from app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseGridFileItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseGridFileItem.kt index ba702843..e29b5fe4 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseGridFileItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseGridFileItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.browse +package ua.acclorite.book_story.ui.browse import androidx.compose.foundation.border import androidx.compose.foundation.layout.Box @@ -28,9 +28,9 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.browse.file.SelectableFile -import ua.acclorite.book_story.presentation.core.components.common.CircularCheckbox -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.presentation.browse.model.SelectableFile +import ua.acclorite.book_story.ui.common.components.common.CircularCheckbox +import ua.acclorite.book_story.ui.common.components.common.StyledText import ua.acclorite.book_story.ui.theme.DefaultTransition import java.text.SimpleDateFormat import java.util.Date @@ -40,10 +40,10 @@ import java.util.Locale fun BrowseGridFileItem(file: SelectableFile, hasSelectedItems: Boolean) { val lastModified = rememberSaveable { SimpleDateFormat("dd MMM yyyy", Locale.getDefault()) - .format(Date(file.data.lastModified)) + .format(Date(file.lastModified)) } - val sizeBytes = rememberSaveable { file.data.size } + val sizeBytes = rememberSaveable { file.size } val fileSizeKB = rememberSaveable { if (sizeBytes > 0) sizeBytes.toDouble() / 1024.0 else 0.0 } @@ -94,7 +94,7 @@ fun BrowseGridFileItem(file: SelectableFile, hasSelectedItems: Boolean) { Spacer(modifier = Modifier.height(8.dp)) StyledText( - text = file.data.name, + text = file.name, style = MaterialTheme.typography.bodyLarge.copy( color = MaterialTheme.colorScheme.onSurface, textAlign = TextAlign.Center, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseGridItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseGridItem.kt similarity index 92% rename from app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseGridItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseGridItem.kt index 9b00d653..b42e9de2 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseGridItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseGridItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.browse +package ua.acclorite.book_story.ui.browse import androidx.compose.foundation.background import androidx.compose.foundation.combinedClickable @@ -18,7 +18,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.domain.browse.file.SelectableFile +import ua.acclorite.book_story.presentation.browse.model.SelectableFile @Composable fun BrowseGridItem( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseGridLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseGridLayout.kt similarity index 77% rename from app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseGridLayout.kt rename to app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseGridLayout.kt index d4141707..8dec8785 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseGridLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseGridLayout.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.browse +package ua.acclorite.book_story.ui.browse import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues @@ -17,11 +17,11 @@ import androidx.compose.foundation.lazy.grid.items import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.domain.browse.file.GroupedFiles -import ua.acclorite.book_story.domain.browse.file.SelectableFile -import ua.acclorite.book_story.presentation.core.components.common.LazyVerticalGridWithScrollbar -import ua.acclorite.book_story.presentation.core.components.common.header -import ua.acclorite.book_story.presentation.core.constants.providePrimaryScrollbar +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.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 { @@ -49,7 +49,7 @@ fun BrowseGridLayout( items( group.files, - key = { it.data.path } + key = { it.path } ) { selectableFile -> Box(Modifier.animateItem()) { itemContent(selectableFile, group.files) diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseItem.kt similarity index 84% rename from app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseItem.kt index 91128c16..755e566d 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseItem.kt @@ -4,12 +4,12 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.browse +package ua.acclorite.book_story.ui.browse import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import ua.acclorite.book_story.domain.browse.display.BrowseLayout -import ua.acclorite.book_story.domain.browse.file.SelectableFile +import ua.acclorite.book_story.presentation.browse.model.BrowseLayout +import ua.acclorite.book_story.presentation.browse.model.SelectableFile @Composable fun BrowseItem( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseLayout.kt similarity index 85% rename from app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseLayout.kt rename to app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseLayout.kt index ba5edc53..1242fd48 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseLayout.kt @@ -4,15 +4,15 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.browse +package ua.acclorite.book_story.ui.browse import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.grid.LazyGridState import androidx.compose.runtime.Composable import androidx.compose.runtime.remember -import ua.acclorite.book_story.domain.browse.display.BrowseLayout -import ua.acclorite.book_story.domain.browse.file.GroupedFiles -import ua.acclorite.book_story.domain.browse.file.SelectableFile +import ua.acclorite.book_story.presentation.browse.model.BrowseLayout +import ua.acclorite.book_story.presentation.browse.model.GroupedFiles +import ua.acclorite.book_story.presentation.browse.model.SelectableFile import java.io.File @Composable @@ -29,7 +29,7 @@ fun BrowseLayout( ) { val groupedFiles = remember(files, pinnedPaths) { files.groupBy { file -> - file.data.path.substringBeforeLast(File.separator) + file.path.substringBeforeLast(File.separator) }.map { (header, files) -> GroupedFiles( header = header, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseLayoutHeader.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseLayoutHeader.kt similarity index 90% rename from app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseLayoutHeader.kt rename to app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseLayoutHeader.kt index 4665f3b0..3f8683f1 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseLayoutHeader.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseLayoutHeader.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.browse +package ua.acclorite.book_story.ui.browse import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement @@ -23,8 +23,8 @@ 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.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.util.noRippleClickable +import ua.acclorite.book_story.ui.common.components.common.StyledText +import ua.acclorite.book_story.ui.common.helpers.noRippleClickable @Composable fun BrowseLayoutHeader( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseListFileItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseListFileItem.kt similarity index 91% rename from app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseListFileItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseListFileItem.kt index ec0a1644..a85d8a6f 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseListFileItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseListFileItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.browse +package ua.acclorite.book_story.ui.browse import androidx.compose.foundation.border import androidx.compose.foundation.layout.Arrangement @@ -31,8 +31,8 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.browse.file.SelectableFile -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.presentation.browse.model.SelectableFile +import ua.acclorite.book_story.ui.common.components.common.StyledText import java.text.SimpleDateFormat import java.util.Date import java.util.Locale @@ -41,10 +41,10 @@ import java.util.Locale fun RowScope.BrowseListFileItem(file: SelectableFile) { val lastModified = rememberSaveable { SimpleDateFormat("HH:mm dd MMM yyyy", Locale.getDefault()) - .format(Date(file.data.lastModified)) + .format(Date(file.lastModified)) } - val sizeBytes = rememberSaveable { file.data.size } + val sizeBytes = rememberSaveable { file.size } val fileSizeKB = rememberSaveable { if (sizeBytes > 0) sizeBytes.toDouble() / 1024.0 else 0.0 } @@ -83,7 +83,7 @@ fun RowScope.BrowseListFileItem(file: SelectableFile) { Spacer(modifier = Modifier.width(12.dp)) Column(verticalArrangement = Arrangement.Center) { StyledText( - text = file.data.name, + text = file.name, modifier = Modifier.fillMaxWidth(), style = MaterialTheme.typography.bodyLarge.copy( color = MaterialTheme.colorScheme.onSurface, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseListItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseListItem.kt similarity index 91% rename from app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseListItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseListItem.kt index 7cd62800..b3c8fd2e 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseListItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseListItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.browse +package ua.acclorite.book_story.ui.browse import androidx.compose.foundation.background import androidx.compose.foundation.combinedClickable @@ -21,8 +21,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.domain.browse.file.SelectableFile -import ua.acclorite.book_story.presentation.core.components.common.CircularCheckbox +import ua.acclorite.book_story.presentation.browse.model.SelectableFile +import ua.acclorite.book_story.ui.common.components.common.CircularCheckbox import ua.acclorite.book_story.ui.theme.FadeTransitionPreservingSpace @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseListLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseListLayout.kt similarity index 77% rename from app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseListLayout.kt rename to app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseListLayout.kt index a82e1c51..3e107b56 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseListLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseListLayout.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.browse +package ua.acclorite.book_story.ui.browse import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues @@ -16,10 +16,10 @@ import androidx.compose.foundation.lazy.items import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.domain.browse.file.GroupedFiles -import ua.acclorite.book_story.domain.browse.file.SelectableFile -import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar -import ua.acclorite.book_story.presentation.core.constants.providePrimaryScrollbar +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.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 { @@ -43,7 +43,7 @@ fun BrowseListLayout( items( group.files, - key = { it.data.path } + key = { it.path } ) { selectableFile -> Box(Modifier.animateItem()) { itemContent(selectableFile, group.files) diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseRefreshIndicator.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseRefreshIndicator.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseRefreshIndicator.kt rename to app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseRefreshIndicator.kt index fd20c7ec..c69b796f 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseRefreshIndicator.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseRefreshIndicator.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.browse +package ua.acclorite.book_story.ui.browse import androidx.compose.foundation.layout.BoxScope import androidx.compose.material.ExperimentalMaterialApi diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseScaffold.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseScaffold.kt similarity index 95% rename from app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseScaffold.kt rename to app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseScaffold.kt index 50605bcb..aa7ae5a2 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseScaffold.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseScaffold.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.browse +package ua.acclorite.book_story.ui.browse import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize @@ -19,10 +19,10 @@ import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester -import ua.acclorite.book_story.domain.browse.display.BrowseLayout -import ua.acclorite.book_story.domain.browse.file.SelectableFile -import ua.acclorite.book_story.ui.browse.BrowseEvent -import ua.acclorite.book_story.ui.main.MainEvent +import ua.acclorite.book_story.presentation.browse.BrowseEvent +import ua.acclorite.book_story.presentation.browse.model.BrowseLayout +import ua.acclorite.book_story.presentation.browse.model.SelectableFile +import ua.acclorite.book_story.presentation.main.MainEvent import ua.acclorite.book_story.ui.theme.DefaultTransition @OptIn(ExperimentalMaterialApi::class) diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseTopBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseTopBar.kt similarity index 90% rename from app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseTopBar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseTopBar.kt index 6f8fd30d..32a2b702 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/browse/BrowseTopBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseTopBar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.browse +package ua.acclorite.book_story.ui.browse import androidx.compose.animation.animateColorAsState import androidx.compose.material.icons.Icons @@ -26,15 +26,15 @@ import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.browse.display.BrowseLayout -import ua.acclorite.book_story.domain.browse.file.SelectableFile -import ua.acclorite.book_story.presentation.core.components.common.IconButton -import ua.acclorite.book_story.presentation.core.components.common.SearchTextField -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBar -import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBarData -import ua.acclorite.book_story.presentation.navigator.NavigatorIconButton -import ua.acclorite.book_story.ui.browse.BrowseEvent +import ua.acclorite.book_story.presentation.browse.BrowseEvent +import ua.acclorite.book_story.presentation.browse.model.BrowseLayout +import ua.acclorite.book_story.presentation.browse.model.SelectableFile +import ua.acclorite.book_story.ui.common.components.common.IconButton +import ua.acclorite.book_story.ui.common.components.common.SearchTextField +import ua.acclorite.book_story.ui.common.components.common.StyledText +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.navigator.NavigatorIconButton @OptIn(ExperimentalMaterial3Api::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/AnimatedVisibility.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/AnimatedVisibility.kt similarity index 95% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/AnimatedVisibility.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/common/AnimatedVisibility.kt index 2a0479ab..099fc17e 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/AnimatedVisibility.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/AnimatedVisibility.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.common +package ua.acclorite.book_story.ui.common.components.common import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.EnterTransition diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/AsyncCoverImage.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/AsyncCoverImage.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/AsyncCoverImage.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/common/AsyncCoverImage.kt index 2bb6eed8..b6809962 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/AsyncCoverImage.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/AsyncCoverImage.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.common +package ua.acclorite.book_story.ui.common.components.common import android.net.Uri import androidx.compose.runtime.Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/CircularCheckbox.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/CircularCheckbox.kt similarity index 96% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/CircularCheckbox.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/common/CircularCheckbox.kt index e99cef90..abd37c49 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/CircularCheckbox.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/CircularCheckbox.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.common +package ua.acclorite.book_story.ui.common.components.common import androidx.compose.foundation.background import androidx.compose.foundation.border diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/HighlightedText.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/HighlightedText.kt similarity index 97% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/HighlightedText.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/common/HighlightedText.kt index 47e96e9d..5374f7cc 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/HighlightedText.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/HighlightedText.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.common +package ua.acclorite.book_story.ui.common.components.common import androidx.compose.foundation.text.BasicText import androidx.compose.runtime.Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/IconButton.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/IconButton.kt similarity index 98% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/IconButton.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/common/IconButton.kt index a93e13dd..4a57f9c7 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/IconButton.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/IconButton.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.common +package ua.acclorite.book_story.ui.common.components.common import androidx.annotation.DrawableRes import androidx.annotation.StringRes diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/LazyColumnWithScrollbar.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/LazyColumnWithScrollbar.kt similarity index 88% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/LazyColumnWithScrollbar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/common/LazyColumnWithScrollbar.kt index 1faffd17..18121d80 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/LazyColumnWithScrollbar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/LazyColumnWithScrollbar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.common +package ua.acclorite.book_story.ui.common.components.common import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -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.presentation.core.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/presentation/core/components/common/LazyGridHeader.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/LazyGridHeader.kt similarity index 88% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/LazyGridHeader.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/common/LazyGridHeader.kt index e337506e..a3ec25d7 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/LazyGridHeader.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/LazyGridHeader.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.common +package ua.acclorite.book_story.ui.common.components.common import androidx.compose.foundation.lazy.grid.GridItemSpan import androidx.compose.foundation.lazy.grid.LazyGridItemScope diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/LazyVerticalGridWithScrollbar.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/LazyVerticalGridWithScrollbar.kt similarity index 89% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/LazyVerticalGridWithScrollbar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/common/LazyVerticalGridWithScrollbar.kt index c47fc47e..bb1227da 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/LazyVerticalGridWithScrollbar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/LazyVerticalGridWithScrollbar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.common +package ua.acclorite.book_story.ui.common.components.common import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -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.presentation.core.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/presentation/core/components/common/SearchTextField.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/SearchTextField.kt similarity index 98% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/SearchTextField.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/common/SearchTextField.kt index 997162f3..890a7d17 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/SearchTextField.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/SearchTextField.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.common +package ua.acclorite.book_story.ui.common.components.common import androidx.compose.foundation.layout.Box import androidx.compose.foundation.text.BasicTextField diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/SelectionContainer.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/SelectionContainer.kt similarity index 99% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/SelectionContainer.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/common/SelectionContainer.kt index a3a46c99..2e7f6b1a 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/SelectionContainer.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/SelectionContainer.kt @@ -6,7 +6,7 @@ @file:Suppress("DEPRECATION") -package ua.acclorite.book_story.presentation.core.components.common +package ua.acclorite.book_story.ui.common.components.common import android.content.ClipData import android.content.ClipboardManager diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/Snackbar.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/Snackbar.kt similarity index 98% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/Snackbar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/common/Snackbar.kt index d3e901dd..3a680bec 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/Snackbar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/Snackbar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.common +package ua.acclorite.book_story.ui.common.components.common import androidx.compose.animation.core.tween import androidx.compose.animation.fadeIn diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/SpacedItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/SpacedItem.kt similarity index 88% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/SpacedItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/common/SpacedItem.kt index 1b5da207..24154ace 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/SpacedItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/SpacedItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.common +package ua.acclorite.book_story.ui.common.components.common import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.height diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/StyledText.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/StyledText.kt similarity index 97% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/StyledText.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/common/StyledText.kt index cc5f6714..6288d4f6 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/StyledText.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/StyledText.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.common +package ua.acclorite.book_story.ui.common.components.common import androidx.compose.foundation.text.BasicText import androidx.compose.material3.LocalContentColor diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/Tooltip.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/Tooltip.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/Tooltip.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/common/Tooltip.kt index 69ba74ef..8be4f1b6 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/common/Tooltip.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/Tooltip.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.common +package ua.acclorite.book_story.ui.common.components.common import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.PlainTooltip diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/dialog/CheckboxDialogItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/dialog/CheckboxDialogItem.kt similarity index 91% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/dialog/CheckboxDialogItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/dialog/CheckboxDialogItem.kt index bf1f83b3..f809e0b2 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/dialog/CheckboxDialogItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/dialog/CheckboxDialogItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.dialog +package ua.acclorite.book_story.ui.common.components.dialog import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Row @@ -19,7 +19,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.StyledText @Composable fun CheckboxDialogItem( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/dialog/Dialog.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/dialog/Dialog.kt similarity index 97% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/dialog/Dialog.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/dialog/Dialog.kt index cb658cd5..f1eb6fd4 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/dialog/Dialog.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/dialog/Dialog.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.dialog +package ua.acclorite.book_story.ui.common.components.dialog import androidx.compose.animation.core.Spring import androidx.compose.animation.core.animateDpAsState @@ -46,8 +46,8 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.window.DialogProperties import androidx.compose.ui.window.DialogWindowProvider import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar +import ua.acclorite.book_story.ui.common.components.common.StyledText @OptIn(ExperimentalMaterial3Api::class) diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/dialog/DialogWithTextField.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/dialog/DialogWithTextField.kt similarity index 95% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/dialog/DialogWithTextField.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/dialog/DialogWithTextField.kt index 15b9b22d..6b7c3df6 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/dialog/DialogWithTextField.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/dialog/DialogWithTextField.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.dialog +package ua.acclorite.book_story.ui.common.components.dialog import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding @@ -25,7 +25,7 @@ import androidx.compose.ui.text.input.KeyboardCapitalization import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.StyledText @Composable fun DialogWithTextField( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/dialog/SelectableDialogItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/dialog/SelectableDialogItem.kt similarity index 92% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/dialog/SelectableDialogItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/dialog/SelectableDialogItem.kt index bba6db9b..91e024cb 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/dialog/SelectableDialogItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/dialog/SelectableDialogItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.dialog +package ua.acclorite.book_story.ui.common.components.dialog import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Row @@ -21,7 +21,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.StyledText @Composable fun SelectableDialogItem( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/modal_bottom_sheet/ModalBottomSheet.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/modal_bottom_sheet/ModalBottomSheet.kt similarity index 97% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/modal_bottom_sheet/ModalBottomSheet.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/modal_bottom_sheet/ModalBottomSheet.kt index e9841382..b0513a10 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/modal_bottom_sheet/ModalBottomSheet.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/modal_bottom_sheet/ModalBottomSheet.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.modal_bottom_sheet +package ua.acclorite.book_story.ui.common.components.modal_bottom_sheet import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.ColumnScope diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/modal_bottom_sheet/ModalBottomSheetTabRow.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/modal_bottom_sheet/ModalBottomSheetTabRow.kt similarity index 92% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/modal_bottom_sheet/ModalBottomSheetTabRow.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/modal_bottom_sheet/ModalBottomSheetTabRow.kt index 97f5a8fc..ff5d3855 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/modal_bottom_sheet/ModalBottomSheetTabRow.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/modal_bottom_sheet/ModalBottomSheetTabRow.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.modal_bottom_sheet +package ua.acclorite.book_story.ui.common.components.modal_bottom_sheet import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material3.ExperimentalMaterial3Api @@ -14,7 +14,7 @@ import androidx.compose.material3.Tab import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.StyledText /** * Primary Tab Row. Used in BottomSheet in pair with HorizontalPager. diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/modal_drawer/ModalDrawer.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/modal_drawer/ModalDrawer.kt similarity index 92% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/modal_drawer/ModalDrawer.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/modal_drawer/ModalDrawer.kt index 754309b3..bdbb3fc2 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/modal_drawer/ModalDrawer.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/modal_drawer/ModalDrawer.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.modal_drawer +package ua.acclorite.book_story.ui.common.components.modal_drawer import androidx.activity.compose.BackHandler import androidx.compose.animation.core.animateDpAsState @@ -39,10 +39,10 @@ import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.presentation.core.components.common.AnimatedVisibility -import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar -import ua.acclorite.book_story.presentation.core.constants.providePrimaryScrollbar -import ua.acclorite.book_story.presentation.core.util.noRippleClickable +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.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/presentation/core/components/modal_drawer/ModalDrawerSelectableItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/modal_drawer/ModalDrawerSelectableItem.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/modal_drawer/ModalDrawerSelectableItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/modal_drawer/ModalDrawerSelectableItem.kt index d427d2fb..f86f3003 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/modal_drawer/ModalDrawerSelectableItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/modal_drawer/ModalDrawerSelectableItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.modal_drawer +package ua.acclorite.book_story.ui.common.components.modal_drawer import androidx.compose.foundation.background import androidx.compose.foundation.clickable @@ -23,7 +23,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.domain.util.Selected +import ua.acclorite.book_story.core.Selected /** * Modal Drawer Selectable Item. diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/modal_drawer/ModalDrawerTitleItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/modal_drawer/ModalDrawerTitleItem.kt similarity index 91% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/modal_drawer/ModalDrawerTitleItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/modal_drawer/ModalDrawerTitleItem.kt index 3d6e3376..60b43dbe 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/modal_drawer/ModalDrawerTitleItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/modal_drawer/ModalDrawerTitleItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.modal_drawer +package ua.acclorite.book_story.ui.common.components.modal_drawer import androidx.compose.foundation.background import androidx.compose.foundation.layout.Column @@ -17,7 +17,7 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.StyledText /** * Modal Drawer Title Item. diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/navigation_bar/NavigationBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/navigation_bar/NavigationBar.kt similarity index 84% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/navigation_bar/NavigationBar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/navigation_bar/NavigationBar.kt index f3530b04..dfdb2ec2 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/navigation_bar/NavigationBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/navigation_bar/NavigationBar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.navigation_bar +package ua.acclorite.book_story.ui.common.components.navigation_bar import androidx.compose.material3.NavigationBar import androidx.compose.runtime.Composable @@ -12,8 +12,8 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.lifecycle.compose.collectAsStateWithLifecycle -import ua.acclorite.book_story.domain.navigator.NavigatorItem -import ua.acclorite.book_story.presentation.navigator.LocalNavigator +import ua.acclorite.book_story.presentation.navigator.NavigatorItem +import ua.acclorite.book_story.ui.navigator.LocalNavigator @Composable fun NavigationBar(tabs: List) { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/navigation_bar/NavigationBarItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/navigation_bar/NavigationBarItem.kt similarity index 88% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/navigation_bar/NavigationBarItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/navigation_bar/NavigationBarItem.kt index d5becc8d..2f8402ae 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/navigation_bar/NavigationBarItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/navigation_bar/NavigationBarItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.navigation_bar +package ua.acclorite.book_story.ui.common.components.navigation_bar import androidx.compose.animation.Crossfade import androidx.compose.animation.core.tween @@ -17,9 +17,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.domain.navigator.NavigatorItem -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.components.common.Tooltip +import ua.acclorite.book_story.presentation.navigator.NavigatorItem +import ua.acclorite.book_story.ui.common.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.Tooltip @Composable fun RowScope.NavigationBarItem( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/navigation_rail/NavigationRail.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/navigation_rail/NavigationRail.kt similarity index 93% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/navigation_rail/NavigationRail.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/navigation_rail/NavigationRail.kt index fd474a6e..210f6c44 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/navigation_rail/NavigationRail.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/navigation_rail/NavigationRail.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.navigation_rail +package ua.acclorite.book_story.ui.common.components.navigation_rail import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement @@ -28,8 +28,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle -import ua.acclorite.book_story.domain.navigator.NavigatorItem -import ua.acclorite.book_story.presentation.navigator.LocalNavigator +import ua.acclorite.book_story.presentation.navigator.NavigatorItem +import ua.acclorite.book_story.ui.navigator.LocalNavigator @Composable fun NavigationRail(tabs: List) { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/navigation_rail/NavigationRailItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/navigation_rail/NavigationRailItem.kt similarity index 87% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/navigation_rail/NavigationRailItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/navigation_rail/NavigationRailItem.kt index b673475c..9c010a69 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/navigation_rail/NavigationRailItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/navigation_rail/NavigationRailItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.navigation_rail +package ua.acclorite.book_story.ui.common.components.navigation_rail import androidx.compose.animation.Crossfade import androidx.compose.animation.core.tween @@ -16,9 +16,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.domain.navigator.NavigatorItem -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.components.common.Tooltip +import ua.acclorite.book_story.presentation.navigator.NavigatorItem +import ua.acclorite.book_story.ui.common.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.Tooltip @Composable fun NavigationRailItem( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/placeholder/EmptyPlaceholder.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/placeholder/EmptyPlaceholder.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/placeholder/EmptyPlaceholder.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/placeholder/EmptyPlaceholder.kt index 36eeef12..70cb93ac 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/placeholder/EmptyPlaceholder.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/placeholder/EmptyPlaceholder.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.placeholder +package ua.acclorite.book_story.ui.common.components.placeholder import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -24,7 +24,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.StyledText /** diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/placeholder/ErrorPlaceholder.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/placeholder/ErrorPlaceholder.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/placeholder/ErrorPlaceholder.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/placeholder/ErrorPlaceholder.kt index 81c08c87..6aebe99b 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/placeholder/ErrorPlaceholder.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/placeholder/ErrorPlaceholder.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.placeholder +package ua.acclorite.book_story.ui.common.components.placeholder import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -24,7 +24,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.StyledText /** * Empty placeholder. diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/progress_indicator/CircularProgressIndicator.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/progress_indicator/CircularProgressIndicator.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/progress_indicator/CircularProgressIndicator.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/progress_indicator/CircularProgressIndicator.kt index bd5b08b1..5ef6e3cb 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/progress_indicator/CircularProgressIndicator.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/progress_indicator/CircularProgressIndicator.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.progress_indicator +package ua.acclorite.book_story.ui.common.components.progress_indicator import androidx.compose.material3.CircularWavyProgressIndicator import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/settings/ChipsWithTitle.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/ChipsWithTitle.kt similarity index 87% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/settings/ChipsWithTitle.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/ChipsWithTitle.kt index 1715b286..9ddadd58 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/settings/ChipsWithTitle.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/ChipsWithTitle.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.settings +package ua.acclorite.book_story.ui.common.components.settings import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -18,9 +18,9 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.domain.ui.ButtonItem -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle +import ua.acclorite.book_story.ui.common.components.common.StyledText +import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategoryTitle /** * Chips with title. Use list of [ButtonItem]s to display chips. diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/settings/ColorPickerWithTitle.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/ColorPickerWithTitle.kt similarity index 95% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/settings/ColorPickerWithTitle.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/ColorPickerWithTitle.kt index d2485bbd..06ee45d0 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/settings/ColorPickerWithTitle.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/ColorPickerWithTitle.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.settings +package ua.acclorite.book_story.ui.common.components.settings import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -36,8 +36,8 @@ import kotlinx.coroutines.FlowPreview import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.debounce import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.IconButton -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle +import ua.acclorite.book_story.ui.common.components.common.IconButton +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategoryTitle @OptIn(FlowPreview::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/settings/SegmentedButtonWithTitle.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/SegmentedButtonWithTitle.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/settings/SegmentedButtonWithTitle.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/SegmentedButtonWithTitle.kt index 1f212aae..cb5dcffa 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/settings/SegmentedButtonWithTitle.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/SegmentedButtonWithTitle.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.settings +package ua.acclorite.book_story.ui.common.components.settings import androidx.compose.animation.expandHorizontally import androidx.compose.animation.fadeIn @@ -42,10 +42,10 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.ui.ButtonItem -import ua.acclorite.book_story.presentation.core.components.common.AnimatedVisibility -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle +import ua.acclorite.book_story.ui.common.components.common.AnimatedVisibility +import ua.acclorite.book_story.ui.common.components.common.StyledText +import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategoryTitle /** * Segmented Button with Title. diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/settings/SliderWithTitle.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/SliderWithTitle.kt similarity index 97% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/settings/SliderWithTitle.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/SliderWithTitle.kt index 9ad1fa76..37e040b2 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/settings/SliderWithTitle.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/SliderWithTitle.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.settings +package ua.acclorite.book_story.ui.common.components.settings import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Column @@ -29,8 +29,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle +import ua.acclorite.book_story.ui.common.components.common.StyledText +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategoryTitle import kotlin.math.roundToInt /** diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/settings/SwitchWIthTitle.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/SwitchWIthTitle.kt similarity index 95% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/settings/SwitchWIthTitle.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/SwitchWIthTitle.kt index 156c9501..7249f01f 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/settings/SwitchWIthTitle.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/SwitchWIthTitle.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.settings +package ua.acclorite.book_story.ui.common.components.settings import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement @@ -23,7 +23,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.StyledText /** * Checkbox with title. diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/top_bar/CollapsibleTopAppBarScrollBehavior.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/top_bar/CollapsibleTopAppBarScrollBehavior.kt similarity index 95% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/top_bar/CollapsibleTopAppBarScrollBehavior.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/top_bar/CollapsibleTopAppBarScrollBehavior.kt index a49a64df..05d3d2fc 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/top_bar/CollapsibleTopAppBarScrollBehavior.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/top_bar/CollapsibleTopAppBarScrollBehavior.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.top_bar +package ua.acclorite.book_story.ui.common.components.top_bar import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.rememberLazyListState diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/top_bar/TopAppBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/top_bar/TopAppBar.kt similarity index 95% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/components/top_bar/TopAppBar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/components/top_bar/TopAppBar.kt index 5a159035..493b0608 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/top_bar/TopAppBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/top_bar/TopAppBar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.core.components.top_bar +package ua.acclorite.book_story.ui.common.components.top_bar import androidx.compose.animation.core.Spring import androidx.compose.animation.core.animateFloatAsState @@ -28,8 +28,8 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.lerp -import ua.acclorite.book_story.domain.util.ID -import ua.acclorite.book_story.presentation.core.components.common.AnimatedVisibility +import ua.acclorite.book_story.core.ID +import ua.acclorite.book_story.ui.common.components.common.AnimatedVisibility data class TopAppBarData( val contentID: ID, 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/presentation/core/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/presentation/core/util/LifecycleExtensions.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/helpers/LifecycleHelpers.kt index 0d73f898..62e39fa3 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/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.presentation.core.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/presentation/core/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/presentation/core/util/ModifierExtensions.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/helpers/ModifierHelpers.kt index 0b5a1e17..31f05597 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/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.presentation.core.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/presentation/core/util/ToastExtensions.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/helpers/ToastHelpers.kt similarity index 89% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/util/ToastExtensions.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/helpers/ToastHelpers.kt index d7098bb9..5dab85f8 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/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.presentation.core.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/domain/ui/ButtonItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/model/ButtonItem.kt similarity index 88% rename from app/src/main/java/ua/acclorite/book_story/domain/ui/ButtonItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/model/ButtonItem.kt index 5cbda653..a8db6cff 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/ui/ButtonItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/model/ButtonItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.ui +package ua.acclorite.book_story.ui.common.model import androidx.compose.runtime.Immutable import androidx.compose.ui.text.TextStyle @@ -15,4 +15,4 @@ data class ButtonItem( val title: String, val textStyle: TextStyle, val selected: Boolean -) +) \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/util/Direction.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/model/Direction.kt similarity index 84% rename from app/src/main/java/ua/acclorite/book_story/domain/util/Direction.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/model/Direction.kt index b23ecc72..fb43203d 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/util/Direction.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/model/Direction.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.util +package ua.acclorite.book_story.ui.common.model import androidx.compose.runtime.Immutable diff --git a/app/src/main/java/ua/acclorite/book_story/domain/util/Position.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/model/Position.kt similarity index 84% rename from app/src/main/java/ua/acclorite/book_story/domain/util/Position.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/model/Position.kt index bd014f67..b5968a23 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/util/Position.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/model/Position.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.util +package ua.acclorite.book_story.ui.common.model import androidx.compose.runtime.Immutable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/crash/CrashBottomBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/crash/CrashBottomBar.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/crash/CrashBottomBar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/crash/CrashBottomBar.kt index 27988d79..ca450261 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/crash/CrashBottomBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/crash/CrashBottomBar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.crash +package ua.acclorite.book_story.ui.crash import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row @@ -23,7 +23,7 @@ import androidx.compose.ui.platform.LocalWindowInfo import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.StyledText @Composable fun CrashBottomBar( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/crash/CrashContent.kt b/app/src/main/java/ua/acclorite/book_story/ui/crash/CrashContent.kt similarity index 90% rename from app/src/main/java/ua/acclorite/book_story/presentation/crash/CrashContent.kt rename to app/src/main/java/ua/acclorite/book_story/ui/crash/CrashContent.kt index 470e52fc..94564b1e 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/crash/CrashContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/crash/CrashContent.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.crash +package ua.acclorite.book_story.ui.crash import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.rememberScrollState @@ -12,7 +12,7 @@ import androidx.compose.foundation.text.selection.SelectionContainer import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.StyledText @Composable fun CrashContent( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/crash/CrashLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/crash/CrashLayout.kt similarity index 81% rename from app/src/main/java/ua/acclorite/book_story/presentation/crash/CrashLayout.kt rename to app/src/main/java/ua/acclorite/book_story/ui/crash/CrashLayout.kt index bf672ece..f3fd7921 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/crash/CrashLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/crash/CrashLayout.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.crash +package ua.acclorite.book_story.ui.crash import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize @@ -12,7 +12,7 @@ import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar +import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar @Composable fun CrashLayout( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/crash/CrashScaffold.kt b/app/src/main/java/ua/acclorite/book_story/ui/crash/CrashScaffold.kt similarity index 95% rename from app/src/main/java/ua/acclorite/book_story/presentation/crash/CrashScaffold.kt rename to app/src/main/java/ua/acclorite/book_story/ui/crash/CrashScaffold.kt index de44c0f6..c16bfe2f 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/crash/CrashScaffold.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/crash/CrashScaffold.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.crash +package ua.acclorite.book_story.ui.crash import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box @@ -25,7 +25,7 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.StyledText @Composable fun CrashScaffold( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/credits/CreditItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/credits/CreditItem.kt similarity index 93% rename from app/src/main/java/ua/acclorite/book_story/presentation/credits/CreditItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/credits/CreditItem.kt index 4bbbc45a..2b03fc96 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/credits/CreditItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/credits/CreditItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.credits +package ua.acclorite.book_story.ui.credits import androidx.compose.foundation.background import androidx.compose.foundation.clickable @@ -22,8 +22,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.domain.about.Credit -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.about.model.Credit +import ua.acclorite.book_story.ui.common.components.common.StyledText @Composable fun CreditItem( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/credits/CreditsContent.kt b/app/src/main/java/ua/acclorite/book_story/ui/credits/CreditsContent.kt similarity index 88% rename from app/src/main/java/ua/acclorite/book_story/presentation/credits/CreditsContent.kt rename to app/src/main/java/ua/acclorite/book_story/ui/credits/CreditsContent.kt index 1117d0a1..1283c2a6 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/credits/CreditsContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/credits/CreditsContent.kt @@ -4,13 +4,13 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.credits +package ua.acclorite.book_story.ui.credits import androidx.compose.foundation.lazy.LazyListState import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable -import ua.acclorite.book_story.ui.about.AboutEvent +import ua.acclorite.book_story.presentation.about.AboutEvent @OptIn(ExperimentalMaterial3Api::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/credits/CreditsLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/credits/CreditsLayout.kt similarity index 82% rename from app/src/main/java/ua/acclorite/book_story/presentation/credits/CreditsLayout.kt rename to app/src/main/java/ua/acclorite/book_story/ui/credits/CreditsLayout.kt index c9c4ec53..bb664050 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/credits/CreditsLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/credits/CreditsLayout.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.credits +package ua.acclorite.book_story.ui.credits import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize @@ -14,9 +14,9 @@ import androidx.compose.foundation.lazy.items import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar -import ua.acclorite.book_story.presentation.core.constants.provideCredits -import ua.acclorite.book_story.ui.about.AboutEvent +import ua.acclorite.book_story.presentation.about.AboutEvent +import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar +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/presentation/credits/CreditsScaffold.kt b/app/src/main/java/ua/acclorite/book_story/ui/credits/CreditsScaffold.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/credits/CreditsScaffold.kt rename to app/src/main/java/ua/acclorite/book_story/ui/credits/CreditsScaffold.kt index 3c7137fe..257cc027 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/credits/CreditsScaffold.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/credits/CreditsScaffold.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.credits +package ua.acclorite.book_story.ui.credits import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize @@ -18,7 +18,7 @@ import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll -import ua.acclorite.book_story.ui.about.AboutEvent +import ua.acclorite.book_story.presentation.about.AboutEvent @OptIn(ExperimentalMaterial3Api::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/credits/CreditsTopBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/credits/CreditsTopBar.kt similarity index 84% rename from app/src/main/java/ua/acclorite/book_story/presentation/credits/CreditsTopBar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/credits/CreditsTopBar.kt index d4eeb2a6..79d6812e 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/credits/CreditsTopBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/credits/CreditsTopBar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.credits +package ua.acclorite.book_story.ui.credits import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.LargeTopAppBar @@ -14,8 +14,8 @@ import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton +import ua.acclorite.book_story.ui.common.components.common.StyledText +import ua.acclorite.book_story.ui.navigator.NavigatorBackIconButton @OptIn(ExperimentalMaterial3Api::class) @Composable 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/presentation/help/HelpAnnotation.kt b/app/src/main/java/ua/acclorite/book_story/ui/help/HelpAnnotation.kt similarity index 93% rename from app/src/main/java/ua/acclorite/book_story/presentation/help/HelpAnnotation.kt rename to app/src/main/java/ua/acclorite/book_story/ui/help/HelpAnnotation.kt index ba6f771c..9cda36c2 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/help/HelpAnnotation.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/help/HelpAnnotation.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.help +package ua.acclorite.book_story.ui.help import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/help/HelpBottomBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/help/HelpBottomBar.kt similarity index 86% rename from app/src/main/java/ua/acclorite/book_story/presentation/help/HelpBottomBar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/help/HelpBottomBar.kt index 7ba0976e..127f3b60 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/help/HelpBottomBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/help/HelpBottomBar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.help +package ua.acclorite.book_story.ui.help import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -18,9 +18,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.presentation.core.components.common.StyledText -import ua.acclorite.book_story.ui.browse.BrowseScreen -import ua.acclorite.book_story.ui.main.MainEvent +import ua.acclorite.book_story.presentation.browse.BrowseScreen +import ua.acclorite.book_story.presentation.main.MainEvent +import ua.acclorite.book_story.ui.common.components.common.StyledText @Composable fun HelpBottomBar( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/help/HelpContent.kt b/app/src/main/java/ua/acclorite/book_story/ui/help/HelpContent.kt similarity index 91% rename from app/src/main/java/ua/acclorite/book_story/presentation/help/HelpContent.kt rename to app/src/main/java/ua/acclorite/book_story/ui/help/HelpContent.kt index 7d0dfbc9..3fea2274 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/help/HelpContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/help/HelpContent.kt @@ -4,13 +4,13 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.help +package ua.acclorite.book_story.ui.help import androidx.compose.foundation.lazy.LazyListState import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable -import ua.acclorite.book_story.ui.main.MainEvent +import ua.acclorite.book_story.presentation.main.MainEvent @OptIn(ExperimentalMaterial3Api::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/help/HelpItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/help/HelpItem.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/help/HelpItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/help/HelpItem.kt index e17195ff..1807e0ad 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/help/HelpItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/help/HelpItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.help +package ua.acclorite.book_story.ui.help import androidx.compose.animation.animateColorAsState import androidx.compose.animation.core.animateFloatAsState @@ -38,10 +38,10 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.help.HelpTip -import ua.acclorite.book_story.domain.util.Position -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.util.noRippleClickable +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.help.model.HelpTip import ua.acclorite.book_story.ui.theme.ExpandingTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/help/HelpLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/help/HelpLayout.kt similarity index 76% rename from app/src/main/java/ua/acclorite/book_story/presentation/help/HelpLayout.kt rename to app/src/main/java/ua/acclorite/book_story/ui/help/HelpLayout.kt index 5645406f..dac7b527 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/help/HelpLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/help/HelpLayout.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.help +package ua.acclorite.book_story.ui.help import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize @@ -14,9 +14,9 @@ import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.domain.util.Position -import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar -import ua.acclorite.book_story.presentation.core.constants.provideHelpTips +import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar +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/presentation/help/HelpScaffold.kt b/app/src/main/java/ua/acclorite/book_story/ui/help/HelpScaffold.kt similarity index 95% rename from app/src/main/java/ua/acclorite/book_story/presentation/help/HelpScaffold.kt rename to app/src/main/java/ua/acclorite/book_story/ui/help/HelpScaffold.kt index c1b53f3c..80d54161 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/help/HelpScaffold.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/help/HelpScaffold.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.help +package ua.acclorite.book_story.ui.help import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize @@ -18,7 +18,7 @@ import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll -import ua.acclorite.book_story.ui.main.MainEvent +import ua.acclorite.book_story.presentation.main.MainEvent @OptIn(ExperimentalMaterial3Api::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/help/HelpTopBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/help/HelpTopBar.kt similarity index 85% rename from app/src/main/java/ua/acclorite/book_story/presentation/help/HelpTopBar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/help/HelpTopBar.kt index b72e4ae1..7aca4824 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/help/HelpTopBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/help/HelpTopBar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.help +package ua.acclorite.book_story.ui.help import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.RestartAlt @@ -16,9 +16,9 @@ import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.IconButton -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton +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.navigator.NavigatorBackIconButton @OptIn(ExperimentalMaterial3Api::class) @Composable 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/domain/help/HelpTip.kt b/app/src/main/java/ua/acclorite/book_story/ui/help/model/HelpTip.kt similarity index 90% rename from app/src/main/java/ua/acclorite/book_story/domain/help/HelpTip.kt rename to app/src/main/java/ua/acclorite/book_story/ui/help/model/HelpTip.kt index 85495192..ce05362c 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/help/HelpTip.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/help/model/HelpTip.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.help +package ua.acclorite.book_story.ui.help.model import androidx.annotation.StringRes import androidx.compose.runtime.Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryBackHandler.kt b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryBackHandler.kt similarity index 84% rename from app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryBackHandler.kt rename to app/src/main/java/ua/acclorite/book_story/ui/history/HistoryBackHandler.kt index 062bffe2..7d3cbac5 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryBackHandler.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryBackHandler.kt @@ -4,11 +4,11 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.history +package ua.acclorite.book_story.ui.history import androidx.activity.compose.BackHandler import androidx.compose.runtime.Composable -import ua.acclorite.book_story.ui.history.HistoryEvent +import ua.acclorite.book_story.presentation.history.HistoryEvent @Composable fun HistoryBackHandler( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryContent.kt b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryContent.kt similarity index 92% rename from app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryContent.kt rename to app/src/main/java/ua/acclorite/book_story/ui/history/HistoryContent.kt index 45c3e8a9..b22092d4 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryContent.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.history +package ua.acclorite.book_story.ui.history import androidx.compose.foundation.lazy.LazyListState import androidx.compose.material.ExperimentalMaterialApi @@ -12,9 +12,9 @@ import androidx.compose.material.pullrefresh.PullRefreshState import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable import androidx.compose.ui.focus.FocusRequester -import ua.acclorite.book_story.domain.history.GroupedHistory -import ua.acclorite.book_story.domain.util.Dialog -import ua.acclorite.book_story.ui.history.HistoryEvent +import ua.acclorite.book_story.core.Dialog +import ua.acclorite.book_story.presentation.history.HistoryEvent +import ua.acclorite.book_story.presentation.history.model.GroupedHistory @OptIn(ExperimentalMaterialApi::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryDeleteWholeHistoryDialog.kt b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryDeleteWholeHistoryDialog.kt similarity index 87% rename from app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryDeleteWholeHistoryDialog.kt rename to app/src/main/java/ua/acclorite/book_story/ui/history/HistoryDeleteWholeHistoryDialog.kt index 18b86455..2d6528ca 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryDeleteWholeHistoryDialog.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryDeleteWholeHistoryDialog.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.history +package ua.acclorite.book_story.ui.history import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.DeleteOutline @@ -12,8 +12,8 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.dialog.Dialog -import ua.acclorite.book_story.ui.history.HistoryEvent +import ua.acclorite.book_story.presentation.history.HistoryEvent +import ua.acclorite.book_story.ui.common.components.dialog.Dialog @Composable fun HistoryDeleteWholeHistoryDialog( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryDialog.kt b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryDialog.kt similarity index 75% rename from app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryDialog.kt rename to app/src/main/java/ua/acclorite/book_story/ui/history/HistoryDialog.kt index bfab0ed2..3c1b9dbb 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryDialog.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryDialog.kt @@ -4,12 +4,12 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.history +package ua.acclorite.book_story.ui.history import androidx.compose.runtime.Composable -import ua.acclorite.book_story.domain.util.Dialog -import ua.acclorite.book_story.ui.history.HistoryEvent -import ua.acclorite.book_story.ui.history.HistoryScreen +import ua.acclorite.book_story.core.Dialog +import ua.acclorite.book_story.presentation.history.HistoryEvent +import ua.acclorite.book_story.presentation.history.HistoryScreen @Composable fun HistoryDialog( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryEmptyPlaceholder.kt b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryEmptyPlaceholder.kt similarity index 84% rename from app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryEmptyPlaceholder.kt rename to app/src/main/java/ua/acclorite/book_story/ui/history/HistoryEmptyPlaceholder.kt index 0a8f2d71..52e890b7 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryEmptyPlaceholder.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryEmptyPlaceholder.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.history +package ua.acclorite.book_story.ui.history import androidx.compose.animation.core.tween import androidx.compose.animation.fadeOut @@ -15,8 +15,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.AnimatedVisibility -import ua.acclorite.book_story.presentation.core.components.placeholder.EmptyPlaceholder +import ua.acclorite.book_story.ui.common.components.common.AnimatedVisibility +import ua.acclorite.book_story.ui.common.components.placeholder.EmptyPlaceholder import ua.acclorite.book_story.ui.theme.Transitions @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryItem.kt similarity index 92% rename from app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/history/HistoryItem.kt index 1b112d49..c19701e9 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.history +package ua.acclorite.book_story.ui.history import androidx.compose.foundation.background import androidx.compose.foundation.clickable @@ -36,11 +36,11 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.history.History -import ua.acclorite.book_story.presentation.core.components.common.AsyncCoverImage -import ua.acclorite.book_story.presentation.core.components.common.IconButton -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.util.noRippleClickable +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.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/presentation/history/HistoryLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryLayout.kt similarity index 85% rename from app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryLayout.kt rename to app/src/main/java/ua/acclorite/book_story/ui/history/HistoryLayout.kt index 49e2a64a..a5fde1ac 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryLayout.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.history +package ua.acclorite.book_story.ui.history import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize @@ -17,12 +17,12 @@ 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.domain.history.GroupedHistory -import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar -import ua.acclorite.book_story.presentation.core.constants.providePrimaryScrollbar -import ua.acclorite.book_story.presentation.core.util.LocalActivity -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle -import ua.acclorite.book_story.ui.history.HistoryEvent +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.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 @Composable @@ -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/presentation/history/HistoryRefreshIndicator.kt b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryRefreshIndicator.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryRefreshIndicator.kt rename to app/src/main/java/ua/acclorite/book_story/ui/history/HistoryRefreshIndicator.kt index 0ff86ed1..b7ad05f7 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryRefreshIndicator.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryRefreshIndicator.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.history +package ua.acclorite.book_story.ui.history import androidx.compose.foundation.layout.BoxScope import androidx.compose.material.ExperimentalMaterialApi diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryScaffold.kt b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryScaffold.kt similarity index 93% rename from app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryScaffold.kt rename to app/src/main/java/ua/acclorite/book_story/ui/history/HistoryScaffold.kt index f858d537..a4871aca 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryScaffold.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryScaffold.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.history +package ua.acclorite.book_story.ui.history import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize @@ -19,9 +19,9 @@ import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester -import ua.acclorite.book_story.domain.history.GroupedHistory -import ua.acclorite.book_story.presentation.core.components.common.Snackbar -import ua.acclorite.book_story.ui.history.HistoryEvent +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.Snackbar @OptIn(ExperimentalMaterialApi::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryTopBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryTopBar.kt similarity index 87% rename from app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryTopBar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/history/HistoryTopBar.kt index 506043be..fccfc084 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/history/HistoryTopBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryTopBar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.history +package ua.acclorite.book_story.ui.history import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ArrowBack @@ -18,13 +18,13 @@ import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.IconButton -import ua.acclorite.book_story.presentation.core.components.common.SearchTextField -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBar -import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBarData -import ua.acclorite.book_story.presentation.navigator.NavigatorIconButton -import ua.acclorite.book_story.ui.history.HistoryEvent +import ua.acclorite.book_story.presentation.history.HistoryEvent +import ua.acclorite.book_story.ui.common.components.common.IconButton +import ua.acclorite.book_story.ui.common.components.common.SearchTextField +import ua.acclorite.book_story.ui.common.components.common.StyledText +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.navigator.NavigatorIconButton @OptIn(ExperimentalMaterial3Api::class) diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryBackHandler.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryBackHandler.kt similarity index 88% rename from app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryBackHandler.kt rename to app/src/main/java/ua/acclorite/book_story/ui/library/LibraryBackHandler.kt index 0d51f02d..7a25c911 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryBackHandler.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryBackHandler.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.library +package ua.acclorite.book_story.ui.library import androidx.activity.compose.BackHandler import androidx.compose.foundation.pager.PagerState @@ -14,9 +14,9 @@ import androidx.compose.runtime.saveable.rememberSaveable import kotlinx.coroutines.delay import kotlinx.coroutines.launch import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.util.LocalActivity -import ua.acclorite.book_story.presentation.core.util.showToast -import ua.acclorite.book_story.ui.library.LibraryEvent +import ua.acclorite.book_story.presentation.library.LibraryEvent +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/presentation/library/LibraryBottomSheet.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryBottomSheet.kt similarity index 74% rename from app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryBottomSheet.kt rename to app/src/main/java/ua/acclorite/book_story/ui/library/LibraryBottomSheet.kt index 7dc1e1b9..267fb02e 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryBottomSheet.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryBottomSheet.kt @@ -4,18 +4,18 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.library +package ua.acclorite.book_story.ui.library import androidx.compose.foundation.pager.PagerState import androidx.compose.runtime.Composable -import ua.acclorite.book_story.domain.library.category.Category -import ua.acclorite.book_story.domain.library.category.CategorySort -import ua.acclorite.book_story.domain.library.display.LibrarySortOrder -import ua.acclorite.book_story.domain.util.BottomSheet -import ua.acclorite.book_story.ui.library.LibraryEvent -import ua.acclorite.book_story.ui.library.LibraryScreen -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.settings.SettingsEvent +import ua.acclorite.book_story.core.BottomSheet +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 +import ua.acclorite.book_story.presentation.library.LibraryScreen +import ua.acclorite.book_story.presentation.library.model.LibrarySortOrder +import ua.acclorite.book_story.presentation.main.MainEvent +import ua.acclorite.book_story.presentation.settings.SettingsEvent @Composable fun LibraryBottomSheet( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryContent.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryContent.kt similarity index 87% rename from app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryContent.kt rename to app/src/main/java/ua/acclorite/book_story/ui/library/LibraryContent.kt index debd4aa0..9c53f569 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryContent.kt @@ -4,24 +4,24 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.library +package ua.acclorite.book_story.ui.library import androidx.compose.foundation.pager.PagerState import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.material.pullrefresh.PullRefreshState import androidx.compose.runtime.Composable import androidx.compose.ui.focus.FocusRequester -import ua.acclorite.book_story.domain.library.book.SelectableBook -import ua.acclorite.book_story.domain.library.category.Category -import ua.acclorite.book_story.domain.library.category.CategorySort -import ua.acclorite.book_story.domain.library.display.LibraryLayout -import ua.acclorite.book_story.domain.library.display.LibrarySortOrder -import ua.acclorite.book_story.domain.library.display.LibraryTitlePosition -import ua.acclorite.book_story.domain.util.BottomSheet -import ua.acclorite.book_story.domain.util.Dialog -import ua.acclorite.book_story.ui.library.LibraryEvent -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.settings.SettingsEvent +import ua.acclorite.book_story.core.BottomSheet +import ua.acclorite.book_story.core.Dialog +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 +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.presentation.main.MainEvent +import ua.acclorite.book_story.presentation.settings.SettingsEvent @OptIn(ExperimentalMaterialApi::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryDeleteDialog.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryDeleteDialog.kt similarity index 87% rename from app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryDeleteDialog.kt rename to app/src/main/java/ua/acclorite/book_story/ui/library/LibraryDeleteDialog.kt index 76b6d453..e7c0ea90 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryDeleteDialog.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryDeleteDialog.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.library +package ua.acclorite.book_story.ui.library import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.DeleteOutline @@ -12,8 +12,8 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.dialog.Dialog -import ua.acclorite.book_story.ui.library.LibraryEvent +import ua.acclorite.book_story.presentation.library.LibraryEvent +import ua.acclorite.book_story.ui.common.components.dialog.Dialog @Composable fun LibraryDeleteDialog( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryDialog.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryDialog.kt similarity index 77% rename from app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryDialog.kt rename to app/src/main/java/ua/acclorite/book_story/ui/library/LibraryDialog.kt index b90d147b..1a092f8f 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryDialog.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryDialog.kt @@ -4,14 +4,14 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.library +package ua.acclorite.book_story.ui.library import androidx.compose.runtime.Composable -import ua.acclorite.book_story.domain.library.book.SelectableBook -import ua.acclorite.book_story.domain.library.category.Category -import ua.acclorite.book_story.domain.util.Dialog -import ua.acclorite.book_story.ui.library.LibraryEvent -import ua.acclorite.book_story.ui.library.LibraryScreen +import ua.acclorite.book_story.core.Dialog +import ua.acclorite.book_story.domain.model.library.Category +import ua.acclorite.book_story.presentation.library.LibraryEvent +import ua.acclorite.book_story.presentation.library.LibraryScreen +import ua.acclorite.book_story.presentation.library.model.SelectableBook @Composable fun LibraryDialog( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryEmptyPlaceholder.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryEmptyPlaceholder.kt similarity index 90% rename from app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryEmptyPlaceholder.kt rename to app/src/main/java/ua/acclorite/book_story/ui/library/LibraryEmptyPlaceholder.kt index e82fdf72..c555d342 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryEmptyPlaceholder.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryEmptyPlaceholder.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.library +package ua.acclorite.book_story.ui.library import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.core.tween @@ -16,7 +16,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.placeholder.EmptyPlaceholder +import ua.acclorite.book_story.ui.common.components.placeholder.EmptyPlaceholder import ua.acclorite.book_story.ui.theme.Transitions @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryFilterBottomSheet.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryFilterBottomSheet.kt similarity index 86% rename from app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryFilterBottomSheet.kt rename to app/src/main/java/ua/acclorite/book_story/ui/library/LibraryFilterBottomSheet.kt index 881fca21..371fa6a8 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryFilterBottomSheet.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryFilterBottomSheet.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.library +package ua.acclorite.book_story.ui.library import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxHeight @@ -22,17 +22,17 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import kotlinx.coroutines.launch -import ua.acclorite.book_story.domain.library.category.Category -import ua.acclorite.book_story.domain.library.category.CategorySort -import ua.acclorite.book_story.domain.library.display.LibrarySortOrder -import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar -import ua.acclorite.book_story.presentation.core.components.modal_bottom_sheet.ModalBottomSheet -import ua.acclorite.book_story.presentation.settings.library.display.LibraryDisplaySubcategory -import ua.acclorite.book_story.presentation.settings.library.sort.components.LibrarySortOption -import ua.acclorite.book_story.presentation.settings.library.tabs.LibraryTabsSubcategory -import ua.acclorite.book_story.ui.library.LibraryEvent -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.settings.SettingsEvent +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 +import ua.acclorite.book_story.presentation.library.model.LibrarySortOrder +import ua.acclorite.book_story.presentation.main.MainEvent +import ua.acclorite.book_story.presentation.settings.SettingsEvent +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.settings.library.display.LibraryDisplaySubcategory +import ua.acclorite.book_story.ui.settings.library.sort.components.LibrarySortOption +import ua.acclorite.book_story.ui.settings.library.tabs.LibraryTabsSubcategory private var initialPage = 0 diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryFilterBottomSheetTabRow.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryFilterBottomSheetTabRow.kt similarity index 81% rename from app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryFilterBottomSheetTabRow.kt rename to app/src/main/java/ua/acclorite/book_story/ui/library/LibraryFilterBottomSheetTabRow.kt index fecfd70f..a6137384 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryFilterBottomSheetTabRow.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryFilterBottomSheetTabRow.kt @@ -4,12 +4,12 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.library +package ua.acclorite.book_story.ui.library import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.modal_bottom_sheet.ModalBottomSheetTabRow +import ua.acclorite.book_story.ui.common.components.modal_bottom_sheet.ModalBottomSheetTabRow @Composable fun LibraryFilterBottomSheetTabRow( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryGridItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryGridItem.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryGridItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/library/LibraryGridItem.kt index 94fca0f3..5a4bbdc2 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryGridItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryGridItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.library +package ua.acclorite.book_story.ui.library import androidx.compose.foundation.background import androidx.compose.foundation.combinedClickable @@ -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.domain.library.book.SelectableBook -import ua.acclorite.book_story.domain.library.display.LibraryTitlePosition -import ua.acclorite.book_story.presentation.core.components.common.AsyncCoverImage -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.util.calculateProgress +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 @Composable fun LibraryGridItem( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryGridLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryGridLayout.kt similarity index 76% rename from app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryGridLayout.kt rename to app/src/main/java/ua/acclorite/book_story/ui/library/LibraryGridLayout.kt index 88560b8b..a0a210a9 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryGridLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryGridLayout.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.library +package ua.acclorite.book_story.ui.library import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues @@ -14,9 +14,9 @@ import androidx.compose.foundation.lazy.grid.items import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.domain.library.book.SelectableBook -import ua.acclorite.book_story.presentation.core.components.common.LazyVerticalGridWithScrollbar -import ua.acclorite.book_story.presentation.core.constants.providePrimaryScrollbar +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.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/presentation/library/LibraryItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryItem.kt similarity index 84% rename from app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/library/LibraryItem.kt index 00e4a242..e62ebc37 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryItem.kt @@ -4,12 +4,12 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.library +package ua.acclorite.book_story.ui.library import androidx.compose.runtime.Composable -import ua.acclorite.book_story.domain.library.book.SelectableBook -import ua.acclorite.book_story.domain.library.display.LibraryLayout -import ua.acclorite.book_story.domain.library.display.LibraryTitlePosition +import ua.acclorite.book_story.presentation.library.model.LibraryLayout +import ua.acclorite.book_story.presentation.library.model.LibraryTitlePosition +import ua.acclorite.book_story.presentation.library.model.SelectableBook @Composable fun LibraryItem( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryLayout.kt similarity index 81% rename from app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryLayout.kt rename to app/src/main/java/ua/acclorite/book_story/ui/library/LibraryLayout.kt index f3579895..695187ce 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryLayout.kt @@ -4,11 +4,11 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.library +package ua.acclorite.book_story.ui.library import androidx.compose.runtime.Composable -import ua.acclorite.book_story.domain.library.book.SelectableBook -import ua.acclorite.book_story.domain.library.display.LibraryLayout +import ua.acclorite.book_story.presentation.library.model.LibraryLayout +import ua.acclorite.book_story.presentation.library.model.SelectableBook @Composable fun LibraryLayout( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryListItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryListItem.kt similarity index 93% rename from app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryListItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/library/LibraryListItem.kt index 46852095..3a41e49b 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryListItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryListItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.library +package ua.acclorite.book_story.ui.library import androidx.compose.foundation.background import androidx.compose.foundation.combinedClickable @@ -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.domain.library.book.SelectableBook -import ua.acclorite.book_story.presentation.core.components.common.AsyncCoverImage -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.util.calculateProgress +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 @Composable fun LibraryListItem( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryListLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryListLayout.kt similarity index 72% rename from app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryListLayout.kt rename to app/src/main/java/ua/acclorite/book_story/ui/library/LibraryListLayout.kt index 6f4d8982..7cb6d2aa 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryListLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryListLayout.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.library +package ua.acclorite.book_story.ui.library import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues @@ -13,9 +13,9 @@ import androidx.compose.foundation.lazy.items import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.domain.library.book.SelectableBook -import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar -import ua.acclorite.book_story.presentation.core.constants.providePrimaryScrollbar +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.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/presentation/library/LibraryMoveDialog.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryMoveDialog.kt similarity index 87% rename from app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryMoveDialog.kt rename to app/src/main/java/ua/acclorite/book_story/ui/library/LibraryMoveDialog.kt index b6958546..8b66c8d1 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryMoveDialog.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryMoveDialog.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.library +package ua.acclorite.book_story.ui.library import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.items @@ -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.domain.library.book.SelectableBook -import ua.acclorite.book_story.domain.library.category.Category -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.components.dialog.CheckboxDialogItem -import ua.acclorite.book_story.presentation.core.components.dialog.Dialog -import ua.acclorite.book_story.ui.library.LibraryEvent +import ua.acclorite.book_story.domain.model.library.Category +import ua.acclorite.book_story.presentation.library.LibraryEvent +import ua.acclorite.book_story.presentation.library.model.SelectableBook +import ua.acclorite.book_story.ui.common.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.dialog.CheckboxDialogItem +import ua.acclorite.book_story.ui.common.components.dialog.Dialog @Composable fun LibraryMoveDialog( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryPager.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryPager.kt similarity index 91% rename from app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryPager.kt rename to app/src/main/java/ua/acclorite/book_story/ui/library/LibraryPager.kt index 0a73826c..9afb26f3 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryPager.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryPager.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.library +package ua.acclorite.book_story.ui.library import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize @@ -14,14 +14,14 @@ 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.domain.library.book.SelectableBook -import ua.acclorite.book_story.domain.library.category.Category -import ua.acclorite.book_story.domain.library.category.CategorySort -import ua.acclorite.book_story.domain.library.display.LibraryLayout -import ua.acclorite.book_story.domain.library.display.LibrarySortOrder -import ua.acclorite.book_story.domain.library.display.LibraryTitlePosition -import ua.acclorite.book_story.presentation.core.util.compareByWithOrder -import ua.acclorite.book_story.ui.library.LibraryEvent +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 +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.theme.DefaultTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryRefreshIndicator.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryRefreshIndicator.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryRefreshIndicator.kt rename to app/src/main/java/ua/acclorite/book_story/ui/library/LibraryRefreshIndicator.kt index a8bbc650..04baaa75 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryRefreshIndicator.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryRefreshIndicator.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.library +package ua.acclorite.book_story.ui.library import androidx.compose.foundation.layout.BoxScope import androidx.compose.material.ExperimentalMaterialApi diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryScaffold.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryScaffold.kt similarity index 90% rename from app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryScaffold.kt rename to app/src/main/java/ua/acclorite/book_story/ui/library/LibraryScaffold.kt index 3ce87923..798aaef0 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryScaffold.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryScaffold.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.library +package ua.acclorite.book_story.ui.library import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize @@ -18,13 +18,13 @@ import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester -import ua.acclorite.book_story.domain.library.book.SelectableBook -import ua.acclorite.book_story.domain.library.category.Category -import ua.acclorite.book_story.domain.library.category.CategorySort -import ua.acclorite.book_story.domain.library.display.LibraryLayout -import ua.acclorite.book_story.domain.library.display.LibrarySortOrder -import ua.acclorite.book_story.domain.library.display.LibraryTitlePosition -import ua.acclorite.book_story.ui.library.LibraryEvent +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 +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 @OptIn(ExperimentalMaterialApi::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryTabs.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryTabs.kt similarity index 95% rename from app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryTabs.kt rename to app/src/main/java/ua/acclorite/book_story/ui/library/LibraryTabs.kt index ce84456c..9ea5a29b 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryTabs.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryTabs.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.library +package ua.acclorite.book_story.ui.library import androidx.compose.animation.core.animateDpAsState import androidx.compose.foundation.background @@ -29,8 +29,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import kotlinx.coroutines.launch -import ua.acclorite.book_story.domain.library.category.Category -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.domain.model.library.Category +import ua.acclorite.book_story.ui.common.components.common.StyledText @Composable fun LibraryTabs( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryTopBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryTopBar.kt similarity index 92% rename from app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryTopBar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/library/LibraryTopBar.kt index 3093a44a..9de12052 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/library/LibraryTopBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryTopBar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.library +package ua.acclorite.book_story.ui.library import androidx.compose.animation.animateColorAsState import androidx.compose.animation.core.Spring @@ -40,16 +40,16 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.library.book.SelectableBook -import ua.acclorite.book_story.domain.library.category.Category -import ua.acclorite.book_story.presentation.core.components.common.AnimatedVisibility -import ua.acclorite.book_story.presentation.core.components.common.IconButton -import ua.acclorite.book_story.presentation.core.components.common.SearchTextField -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBar -import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBarData -import ua.acclorite.book_story.presentation.navigator.NavigatorIconButton -import ua.acclorite.book_story.ui.library.LibraryEvent +import ua.acclorite.book_story.domain.model.library.Category +import ua.acclorite.book_story.presentation.library.LibraryEvent +import ua.acclorite.book_story.presentation.library.model.SelectableBook +import ua.acclorite.book_story.ui.common.components.common.AnimatedVisibility +import ua.acclorite.book_story.ui.common.components.common.IconButton +import ua.acclorite.book_story.ui.common.components.common.SearchTextField +import ua.acclorite.book_story.ui.common.components.common.StyledText +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.navigator.NavigatorIconButton @OptIn(ExperimentalMaterial3Api::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/license_info/LicenseInfoContent.kt b/app/src/main/java/ua/acclorite/book_story/ui/license_info/LicenseInfoContent.kt similarity index 89% rename from app/src/main/java/ua/acclorite/book_story/presentation/license_info/LicenseInfoContent.kt rename to app/src/main/java/ua/acclorite/book_story/ui/license_info/LicenseInfoContent.kt index 9920e87a..84024a68 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/license_info/LicenseInfoContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/license_info/LicenseInfoContent.kt @@ -4,14 +4,14 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.license_info +package ua.acclorite.book_story.ui.license_info import androidx.compose.foundation.lazy.LazyListState import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import com.mikepenz.aboutlibraries.entity.Library -import ua.acclorite.book_story.ui.about.AboutEvent +import ua.acclorite.book_story.presentation.about.AboutEvent @OptIn(ExperimentalMaterial3Api::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/license_info/LicenseInfoItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/license_info/LicenseInfoItem.kt similarity index 95% rename from app/src/main/java/ua/acclorite/book_story/presentation/license_info/LicenseInfoItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/license_info/LicenseInfoItem.kt index eeb6962e..5f5b104c 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/license_info/LicenseInfoItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/license_info/LicenseInfoItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.license_info +package ua.acclorite.book_story.ui.license_info import androidx.compose.foundation.background import androidx.compose.foundation.clickable @@ -22,7 +22,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.unit.dp import com.mikepenz.aboutlibraries.entity.License -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.StyledText import ua.acclorite.book_story.ui.theme.SlidingTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/license_info/LicenseInfoLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/license_info/LicenseInfoLayout.kt similarity index 89% rename from app/src/main/java/ua/acclorite/book_story/presentation/license_info/LicenseInfoLayout.kt rename to app/src/main/java/ua/acclorite/book_story/ui/license_info/LicenseInfoLayout.kt index ab59d007..5b03c8e0 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/license_info/LicenseInfoLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/license_info/LicenseInfoLayout.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.license_info +package ua.acclorite.book_story.ui.license_info import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.PaddingValues @@ -16,7 +16,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import com.mikepenz.aboutlibraries.entity.Library -import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar +import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar @Composable fun LicenseInfoLayout( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/license_info/LicenseInfoScaffold.kt b/app/src/main/java/ua/acclorite/book_story/ui/license_info/LicenseInfoScaffold.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/license_info/LicenseInfoScaffold.kt rename to app/src/main/java/ua/acclorite/book_story/ui/license_info/LicenseInfoScaffold.kt index b05047cc..0c490071 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/license_info/LicenseInfoScaffold.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/license_info/LicenseInfoScaffold.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.license_info +package ua.acclorite.book_story.ui.license_info import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize @@ -19,7 +19,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll import com.mikepenz.aboutlibraries.entity.Library -import ua.acclorite.book_story.ui.about.AboutEvent +import ua.acclorite.book_story.presentation.about.AboutEvent import ua.acclorite.book_story.ui.theme.DefaultTransition @OptIn(ExperimentalMaterial3Api::class) diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/license_info/LicenseInfoTopBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/license_info/LicenseInfoTopBar.kt similarity index 85% rename from app/src/main/java/ua/acclorite/book_story/presentation/license_info/LicenseInfoTopBar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/license_info/LicenseInfoTopBar.kt index 1ea9475f..805e68e4 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/license_info/LicenseInfoTopBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/license_info/LicenseInfoTopBar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.license_info +package ua.acclorite.book_story.ui.license_info import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Language @@ -17,10 +17,10 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext import com.mikepenz.aboutlibraries.entity.Library import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.IconButton -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton -import ua.acclorite.book_story.ui.about.AboutEvent +import ua.acclorite.book_story.presentation.about.AboutEvent +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.navigator.NavigatorBackIconButton @OptIn(ExperimentalMaterial3Api::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/licenses/LicensesContent.kt b/app/src/main/java/ua/acclorite/book_story/ui/licenses/LicensesContent.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/licenses/LicensesContent.kt rename to app/src/main/java/ua/acclorite/book_story/ui/licenses/LicensesContent.kt index cc4de6a1..2152c15d 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/licenses/LicensesContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/licenses/LicensesContent.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.licenses +package ua.acclorite.book_story.ui.licenses import androidx.compose.foundation.lazy.LazyListState import androidx.compose.material3.ExperimentalMaterial3Api diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/licenses/LicensesItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/licenses/LicensesItem.kt similarity index 97% rename from app/src/main/java/ua/acclorite/book_story/presentation/licenses/LicensesItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/licenses/LicensesItem.kt index 7af08d93..049ea6b9 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/licenses/LicensesItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/licenses/LicensesItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.licenses +package ua.acclorite.book_story.ui.licenses import androidx.compose.foundation.background import androidx.compose.foundation.clickable @@ -29,7 +29,7 @@ import androidx.compose.ui.unit.dp import com.mikepenz.aboutlibraries.entity.Library import com.mikepenz.aboutlibraries.ui.compose.m3.util.author import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.StyledText @Composable fun LicensesItem( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/licenses/LicensesLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/licenses/LicensesLayout.kt similarity index 86% rename from app/src/main/java/ua/acclorite/book_story/presentation/licenses/LicensesLayout.kt rename to app/src/main/java/ua/acclorite/book_story/ui/licenses/LicensesLayout.kt index 35641121..044c352d 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/licenses/LicensesLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/licenses/LicensesLayout.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.licenses +package ua.acclorite.book_story.ui.licenses import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut @@ -17,8 +17,8 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import com.mikepenz.aboutlibraries.entity.Library -import ua.acclorite.book_story.presentation.core.components.common.AnimatedVisibility -import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar +import ua.acclorite.book_story.ui.common.components.common.AnimatedVisibility +import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar @Composable fun LicensesLayout( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/licenses/LicensesScaffold.kt b/app/src/main/java/ua/acclorite/book_story/ui/licenses/LicensesScaffold.kt similarity index 96% rename from app/src/main/java/ua/acclorite/book_story/presentation/licenses/LicensesScaffold.kt rename to app/src/main/java/ua/acclorite/book_story/ui/licenses/LicensesScaffold.kt index 62db9ebc..432a6b5c 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/licenses/LicensesScaffold.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/licenses/LicensesScaffold.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.licenses +package ua.acclorite.book_story.ui.licenses import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/licenses/LicensesTopBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/licenses/LicensesTopBar.kt similarity index 84% rename from app/src/main/java/ua/acclorite/book_story/presentation/licenses/LicensesTopBar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/licenses/LicensesTopBar.kt index 40b43e30..946c298f 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/licenses/LicensesTopBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/licenses/LicensesTopBar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.licenses +package ua.acclorite.book_story.ui.licenses import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.LargeTopAppBar @@ -14,8 +14,8 @@ import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton +import ua.acclorite.book_story.ui.common.components.common.StyledText +import ua.acclorite.book_story.ui.navigator.NavigatorBackIconButton @OptIn(ExperimentalMaterial3Api::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/main/MainActivityKeyboardManager.kt b/app/src/main/java/ua/acclorite/book_story/ui/main/MainActivityKeyboardManager.kt similarity index 95% rename from app/src/main/java/ua/acclorite/book_story/presentation/main/MainActivityKeyboardManager.kt rename to app/src/main/java/ua/acclorite/book_story/ui/main/MainActivityKeyboardManager.kt index e9ebb3f3..faf65d2e 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/main/MainActivityKeyboardManager.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/main/MainActivityKeyboardManager.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.main +package ua.acclorite.book_story.ui.main import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.ime 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 new file mode 100644 index 00000000..fb68d45e --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/ui/navigator/Navigator.kt @@ -0,0 +1,75 @@ +/* + * 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.navigator + +import androidx.activity.compose.BackHandler +import androidx.activity.viewModels +import androidx.compose.animation.AnimatedContent +import androidx.compose.animation.AnimatedContentTransitionScope +import androidx.compose.animation.ContentTransform +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.Modifier +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import dagger.hilt.android.lifecycle.withCreationCallback +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.helpers.LocalActivity + +@Composable +fun rememberNavigator(initialScreen: Screen): Navigator { + val activity = LocalActivity.current + return activity.viewModels( + extrasProducer = { + activity.defaultViewModelCreationExtras + .withCreationCallback { factory -> + factory.create(initialScreen) + } + } + ).value +} + +@Composable +fun Navigator( + modifier: Modifier = Modifier, + initialScreen: Screen, + transitionSpec: AnimatedContentTransitionScope.(lastEvent: StackEvent) -> ContentTransform, + contentKey: (Screen) -> Any? = { it }, + backHandlerEnabled: (Screen) -> Boolean = { true }, + content: @Composable (currentScreen: Screen) -> Unit +) { + val navigator = rememberNavigator(initialScreen = initialScreen) + val currentScreen = navigator.lastItem.collectAsStateWithLifecycle( + context = Dispatchers.Main.immediate + ) + val lastEvent = navigator.lastEvent.collectAsStateWithLifecycle( + context = Dispatchers.Main.immediate + ) + + CompositionLocalProvider(LocalNavigator provides navigator) { + AnimatedContent( + modifier = modifier + .fillMaxSize() + .background(MaterialTheme.colorScheme.surface), + targetState = currentScreen.value, + transitionSpec = { + transitionSpec(this, lastEvent.value) + }, + contentKey = contentKey, + content = { content(it) } + ) + } + + BackHandler(enabled = backHandlerEnabled.invoke(currentScreen.value)) { + navigator.pop() + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/navigator/NavigatorBackIconButton.kt b/app/src/main/java/ua/acclorite/book_story/ui/navigator/NavigatorBackIconButton.kt similarity index 83% rename from app/src/main/java/ua/acclorite/book_story/presentation/navigator/NavigatorBackIconButton.kt rename to app/src/main/java/ua/acclorite/book_story/ui/navigator/NavigatorBackIconButton.kt index bd883d8a..3ccf7889 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/navigator/NavigatorBackIconButton.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/navigator/NavigatorBackIconButton.kt @@ -4,13 +4,13 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.navigator +package ua.acclorite.book_story.ui.navigator import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.ArrowBack import androidx.compose.runtime.Composable import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.IconButton +import ua.acclorite.book_story.ui.common.components.common.IconButton @Composable fun NavigatorBackIconButton( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/navigator/NavigatorBottomSheet.kt b/app/src/main/java/ua/acclorite/book_story/ui/navigator/NavigatorBottomSheet.kt similarity index 86% rename from app/src/main/java/ua/acclorite/book_story/presentation/navigator/NavigatorBottomSheet.kt rename to app/src/main/java/ua/acclorite/book_story/ui/navigator/NavigatorBottomSheet.kt index 54826c03..56253af7 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/navigator/NavigatorBottomSheet.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/navigator/NavigatorBottomSheet.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.navigator +package ua.acclorite.book_story.ui.navigator import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth @@ -16,11 +16,11 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import kotlinx.coroutines.channels.Channel import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.util.Position -import ua.acclorite.book_story.presentation.core.components.modal_bottom_sheet.ModalBottomSheet -import ua.acclorite.book_story.ui.about.AboutScreen -import ua.acclorite.book_story.ui.help.HelpScreen -import ua.acclorite.book_story.ui.settings.SettingsScreen +import ua.acclorite.book_story.presentation.about.AboutScreen +import ua.acclorite.book_story.presentation.help.HelpScreen +import ua.acclorite.book_story.presentation.settings.SettingsScreen +import ua.acclorite.book_story.ui.common.components.modal_bottom_sheet.ModalBottomSheet +import ua.acclorite.book_story.ui.common.model.Position val navigatorBottomSheetChannel = Channel(Channel.CONFLATED) diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/navigator/NavigatorBottomSheetItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/navigator/NavigatorBottomSheetItem.kt similarity index 93% rename from app/src/main/java/ua/acclorite/book_story/presentation/navigator/NavigatorBottomSheetItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/navigator/NavigatorBottomSheetItem.kt index 3573d078..b728b759 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/navigator/NavigatorBottomSheetItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/navigator/NavigatorBottomSheetItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.navigator +package ua.acclorite.book_story.ui.navigator import androidx.compose.foundation.background import androidx.compose.foundation.clickable @@ -21,8 +21,8 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.domain.util.Position -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.StyledText +import ua.acclorite.book_story.ui.common.model.Position @Composable fun NavigatorBottomSheetItem( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/navigator/NavigatorComposition.kt b/app/src/main/java/ua/acclorite/book_story/ui/navigator/NavigatorComposition.kt similarity index 72% rename from app/src/main/java/ua/acclorite/book_story/presentation/navigator/NavigatorComposition.kt rename to app/src/main/java/ua/acclorite/book_story/ui/navigator/NavigatorComposition.kt index e5cc719c..b89c2218 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/navigator/NavigatorComposition.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/navigator/NavigatorComposition.kt @@ -4,9 +4,9 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.navigator +package ua.acclorite.book_story.ui.navigator import androidx.compose.runtime.compositionLocalOf -import ua.acclorite.book_story.domain.navigator.Navigator +import ua.acclorite.book_story.presentation.navigator.Navigator val LocalNavigator = compositionLocalOf { error("Navigator was not passed.") } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/navigator/NavigatorIconButton.kt b/app/src/main/java/ua/acclorite/book_story/ui/navigator/NavigatorIconButton.kt similarity index 82% rename from app/src/main/java/ua/acclorite/book_story/presentation/navigator/NavigatorIconButton.kt rename to app/src/main/java/ua/acclorite/book_story/ui/navigator/NavigatorIconButton.kt index 22e2668b..42351d5f 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/navigator/NavigatorIconButton.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/navigator/NavigatorIconButton.kt @@ -4,13 +4,13 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.navigator +package ua.acclorite.book_story.ui.navigator import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.MoreVert import androidx.compose.runtime.Composable import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.IconButton +import ua.acclorite.book_story.ui.common.components.common.IconButton @Composable fun NavigatorIconButton( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/navigator/NavigatorTabs.kt b/app/src/main/java/ua/acclorite/book_story/ui/navigator/NavigatorTabs.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/navigator/NavigatorTabs.kt rename to app/src/main/java/ua/acclorite/book_story/ui/navigator/NavigatorTabs.kt index 86ccdc0d..29e6c496 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/navigator/NavigatorTabs.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/navigator/NavigatorTabs.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.navigator +package ua.acclorite.book_story.ui.navigator import androidx.compose.animation.AnimatedContent import androidx.compose.animation.AnimatedContentTransitionScope @@ -26,8 +26,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalLayoutDirection import androidx.lifecycle.compose.collectAsStateWithLifecycle import kotlinx.coroutines.flow.receiveAsFlow -import ua.acclorite.book_story.domain.navigator.Screen -import ua.acclorite.book_story.presentation.core.util.LocalActivity +import ua.acclorite.book_story.presentation.navigator.Screen +import ua.acclorite.book_story.ui.common.helpers.LocalActivity @OptIn(ExperimentalMaterial3WindowSizeClassApi::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderBackHandler.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderBackHandler.kt similarity index 77% rename from app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderBackHandler.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderBackHandler.kt index 878356f0..7d78385d 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderBackHandler.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderBackHandler.kt @@ -4,12 +4,12 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.reader +package ua.acclorite.book_story.ui.reader import androidx.activity.compose.BackHandler import androidx.compose.runtime.Composable -import ua.acclorite.book_story.presentation.core.util.LocalActivity -import ua.acclorite.book_story.ui.reader.ReaderEvent +import ua.acclorite.book_story.presentation.reader.ReaderEvent +import ua.acclorite.book_story.ui.common.helpers.LocalActivity @Composable fun ReaderBackHandler( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderBottomBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderBottomBar.kt similarity index 90% rename from app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderBottomBar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderBottomBar.kt index a586fc70..615db865 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderBottomBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderBottomBar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.reader +package ua.acclorite.book_story.ui.reader import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement @@ -30,14 +30,14 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.reader.Checkpoint -import ua.acclorite.book_story.domain.reader.ReaderText -import ua.acclorite.book_story.domain.util.Direction -import ua.acclorite.book_story.presentation.core.components.common.IconButton -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.util.noRippleClickable -import ua.acclorite.book_story.ui.reader.ReaderEvent +import ua.acclorite.book_story.domain.model.library.Book +import ua.acclorite.book_story.domain.model.reader.ReaderText +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.theme.HorizontalExpandingTransition import ua.acclorite.book_story.ui.theme.readerBarsColor diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderBottomBarSlider.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderBottomBarSlider.kt similarity index 90% rename from app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderBottomBarSlider.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderBottomBarSlider.kt index 1a4e1088..3095a99f 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderBottomBarSlider.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderBottomBarSlider.kt @@ -4,15 +4,15 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.reader +package ua.acclorite.book_story.ui.reader import androidx.compose.foundation.lazy.LazyListState import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Slider import androidx.compose.material3.SliderDefaults import androidx.compose.runtime.Composable -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.ui.reader.ReaderEvent +import ua.acclorite.book_story.domain.model.library.Book +import ua.acclorite.book_story.presentation.reader.ReaderEvent @Composable fun ReaderBottomBarSlider( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderBottomBarSliderIndicator.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderBottomBarSliderIndicator.kt similarity index 95% rename from app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderBottomBarSliderIndicator.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderBottomBarSliderIndicator.kt index bf8654b5..27504a6c 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderBottomBarSliderIndicator.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderBottomBarSliderIndicator.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.reader +package ua.acclorite.book_story.ui.reader import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderBottomSheet.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderBottomSheet.kt similarity index 76% rename from app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderBottomSheet.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderBottomSheet.kt index e73007ab..3f472eae 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderBottomSheet.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderBottomSheet.kt @@ -4,12 +4,12 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.reader +package ua.acclorite.book_story.ui.reader import androidx.compose.runtime.Composable -import ua.acclorite.book_story.domain.util.BottomSheet -import ua.acclorite.book_story.ui.reader.ReaderEvent -import ua.acclorite.book_story.ui.reader.ReaderScreen +import ua.acclorite.book_story.core.BottomSheet +import ua.acclorite.book_story.presentation.reader.ReaderEvent +import ua.acclorite.book_story.presentation.reader.ReaderScreen @Composable fun ReaderBottomSheet( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderChaptersDrawer.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderChaptersDrawer.kt similarity index 90% rename from app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderChaptersDrawer.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderChaptersDrawer.kt index 66db4772..3e5e5aae 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderChaptersDrawer.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderChaptersDrawer.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.reader +package ua.acclorite.book_story.ui.reader import androidx.compose.animation.core.animateFloatAsState import androidx.compose.foundation.layout.Spacer @@ -22,15 +22,15 @@ 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.domain.reader.ExpandableChapter -import ua.acclorite.book_story.domain.reader.ReaderText.Chapter -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.components.modal_drawer.ModalDrawer -import ua.acclorite.book_story.presentation.core.components.modal_drawer.ModalDrawerSelectableItem -import ua.acclorite.book_story.presentation.core.components.modal_drawer.ModalDrawerTitleItem -import ua.acclorite.book_story.presentation.core.util.calculateProgress -import ua.acclorite.book_story.presentation.core.util.noRippleClickable -import ua.acclorite.book_story.ui.reader.ReaderEvent +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.helpers.noRippleClickable +import ua.acclorite.book_story.ui.reader.model.ExpandableChapter import ua.acclorite.book_story.ui.theme.ExpandingTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderColorPresetChange.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderColorPresetChange.kt similarity index 95% rename from app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderColorPresetChange.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderColorPresetChange.kt index 03a88de3..d3ed74ef 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderColorPresetChange.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderColorPresetChange.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.reader +package ua.acclorite.book_story.ui.reader import androidx.compose.foundation.gestures.detectHorizontalDragGestures import androidx.compose.runtime.Composable @@ -13,7 +13,7 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.platform.LocalContext -import ua.acclorite.book_story.ui.settings.SettingsEvent +import ua.acclorite.book_story.presentation.settings.SettingsEvent @Composable fun Modifier.readerColorPresetChange( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderContent.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderContent.kt similarity index 88% rename from app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderContent.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderContent.kt index 2d110446..cd368945 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderContent.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.reader +package ua.acclorite.book_story.ui.reader import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.lazy.LazyListState @@ -18,20 +18,20 @@ import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.TextUnit -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.reader.Checkpoint -import ua.acclorite.book_story.domain.reader.FontWithName -import ua.acclorite.book_story.domain.reader.ReaderFontThickness -import ua.acclorite.book_story.domain.reader.ReaderHorizontalGesture -import ua.acclorite.book_story.domain.reader.ReaderText -import ua.acclorite.book_story.domain.reader.ReaderText.Chapter -import ua.acclorite.book_story.domain.reader.ReaderTextAlignment -import ua.acclorite.book_story.domain.ui.UIText -import ua.acclorite.book_story.domain.util.BottomSheet -import ua.acclorite.book_story.domain.util.Drawer -import ua.acclorite.book_story.domain.util.HorizontalAlignment -import ua.acclorite.book_story.ui.reader.ReaderEvent -import ua.acclorite.book_story.ui.settings.SettingsEvent +import ua.acclorite.book_story.core.BottomSheet +import ua.acclorite.book_story.core.Drawer +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.ReaderText +import ua.acclorite.book_story.domain.model.reader.ReaderText.Chapter +import ua.acclorite.book_story.presentation.main.model.HorizontalAlignment +import ua.acclorite.book_story.presentation.reader.ReaderEvent +import ua.acclorite.book_story.presentation.reader.model.Checkpoint +import ua.acclorite.book_story.presentation.reader.model.ReaderFontThickness +import ua.acclorite.book_story.presentation.reader.model.ReaderHorizontalGesture +import ua.acclorite.book_story.presentation.reader.model.ReaderTextAlignment +import ua.acclorite.book_story.presentation.settings.SettingsEvent +import ua.acclorite.book_story.ui.reader.model.FontWithName @Composable fun ReaderContent( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderDrawer.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderDrawer.kt similarity index 73% rename from app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderDrawer.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderDrawer.kt index 0c882f90..9e24408f 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderDrawer.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderDrawer.kt @@ -4,13 +4,13 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.reader +package ua.acclorite.book_story.ui.reader import androidx.compose.runtime.Composable -import ua.acclorite.book_story.domain.reader.ReaderText.Chapter -import ua.acclorite.book_story.domain.util.Drawer -import ua.acclorite.book_story.ui.reader.ReaderEvent -import ua.acclorite.book_story.ui.reader.ReaderScreen +import ua.acclorite.book_story.core.Drawer +import ua.acclorite.book_story.domain.model.reader.ReaderText.Chapter +import ua.acclorite.book_story.presentation.reader.ReaderEvent +import ua.acclorite.book_story.presentation.reader.ReaderScreen @Composable fun ReaderDrawer( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderErrorPlaceholder.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderErrorPlaceholder.kt similarity index 82% rename from app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderErrorPlaceholder.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderErrorPlaceholder.kt index 45b2dc0b..35d5025d 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderErrorPlaceholder.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderErrorPlaceholder.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.reader +package ua.acclorite.book_story.ui.reader import android.annotation.SuppressLint import androidx.compose.foundation.layout.Box @@ -19,13 +19,13 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.ui.UIText -import ua.acclorite.book_story.presentation.core.components.placeholder.ErrorPlaceholder -import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBar -import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBarData -import ua.acclorite.book_story.presentation.core.util.LocalActivity -import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton -import ua.acclorite.book_story.ui.reader.ReaderEvent +import ua.acclorite.book_story.core.ui.UIText +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.helpers.LocalActivity +import ua.acclorite.book_story.ui.navigator.NavigatorBackIconButton @OptIn(ExperimentalMaterial3Api::class) @SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderHorizontalGesture.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderHorizontalGesture.kt similarity index 97% rename from app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderHorizontalGesture.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderHorizontalGesture.kt index 5eaa81b8..f632180f 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderHorizontalGesture.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderHorizontalGesture.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.reader +package ua.acclorite.book_story.ui.reader import androidx.compose.animation.core.animateFloatAsState import androidx.compose.foundation.gestures.detectHorizontalDragGestures @@ -24,7 +24,7 @@ import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.IntOffset import kotlinx.coroutines.launch -import ua.acclorite.book_story.domain.reader.ReaderHorizontalGesture +import ua.acclorite.book_story.presentation.reader.model.ReaderHorizontalGesture import kotlin.math.abs import kotlin.math.roundToInt diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayout.kt similarity index 90% rename from app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderLayout.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayout.kt index 65e61d56..b4622305 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayout.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.reader +package ua.acclorite.book_story.ui.reader import android.os.Build import androidx.compose.animation.expandVertically @@ -33,20 +33,20 @@ import androidx.compose.ui.unit.TextUnit import androidx.compose.ui.unit.coerceAtLeast import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.reader.FontWithName -import ua.acclorite.book_story.domain.reader.ReaderFontThickness -import ua.acclorite.book_story.domain.reader.ReaderHorizontalGesture -import ua.acclorite.book_story.domain.reader.ReaderText -import ua.acclorite.book_story.domain.reader.ReaderTextAlignment -import ua.acclorite.book_story.domain.util.HorizontalAlignment -import ua.acclorite.book_story.presentation.core.components.common.AnimatedVisibility -import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar -import ua.acclorite.book_story.presentation.core.components.common.SelectionContainer -import ua.acclorite.book_story.presentation.core.components.common.SpacedItem -import ua.acclorite.book_story.presentation.core.util.LocalActivity -import ua.acclorite.book_story.presentation.core.util.noRippleClickable -import ua.acclorite.book_story.presentation.core.util.showToast -import ua.acclorite.book_story.ui.reader.ReaderEvent +import ua.acclorite.book_story.domain.model.reader.ReaderText +import ua.acclorite.book_story.presentation.main.model.HorizontalAlignment +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.ReaderHorizontalGesture +import ua.acclorite.book_story.presentation.reader.model.ReaderTextAlignment +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.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 fun ReaderLayout( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderLayoutText.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayoutText.kt similarity index 88% rename from app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderLayoutText.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayoutText.kt index df3fb37c..07a71e94 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderLayoutText.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayoutText.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.reader +package ua.acclorite.book_story.ui.reader import androidx.activity.ComponentActivity import androidx.compose.foundation.lazy.LazyItemScope @@ -16,12 +16,12 @@ import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.TextUnit -import ua.acclorite.book_story.domain.reader.FontWithName -import ua.acclorite.book_story.domain.reader.ReaderFontThickness -import ua.acclorite.book_story.domain.reader.ReaderText -import ua.acclorite.book_story.domain.reader.ReaderTextAlignment -import ua.acclorite.book_story.domain.util.HorizontalAlignment -import ua.acclorite.book_story.ui.reader.ReaderEvent +import ua.acclorite.book_story.domain.model.reader.ReaderText +import ua.acclorite.book_story.presentation.main.model.HorizontalAlignment +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.reader.model.FontWithName @Composable fun LazyItemScope.ReaderLayoutText( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderLayoutTextChapter.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayoutTextChapter.kt similarity index 89% rename from app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderLayoutTextChapter.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayoutTextChapter.kt index d6204a5d..88a56533 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderLayoutTextChapter.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayoutTextChapter.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.reader +package ua.acclorite.book_story.ui.reader import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -21,9 +21,9 @@ import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.domain.reader.ReaderText.Chapter -import ua.acclorite.book_story.domain.reader.ReaderTextAlignment -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.domain.model.reader.ReaderText.Chapter +import ua.acclorite.book_story.presentation.reader.model.ReaderTextAlignment +import ua.acclorite.book_story.ui.common.components.common.StyledText @Composable fun LazyItemScope.ReaderLayoutTextChapter( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderLayoutTextImage.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayoutTextImage.kt similarity index 89% rename from app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderLayoutTextImage.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayoutTextImage.kt index bf081417..1775fbcc 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderLayoutTextImage.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayoutTextImage.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.reader +package ua.acclorite.book_story.ui.reader import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Box @@ -18,8 +18,8 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.Dp -import ua.acclorite.book_story.domain.reader.ReaderText -import ua.acclorite.book_story.domain.util.HorizontalAlignment +import ua.acclorite.book_story.domain.model.reader.ReaderText +import ua.acclorite.book_story.presentation.main.model.HorizontalAlignment @Composable fun LazyItemScope.ReaderLayoutTextImage( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderLayoutTextParagraph.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayoutTextParagraph.kt similarity index 87% rename from app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderLayoutTextParagraph.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayoutTextParagraph.kt index 7541d1b7..7314cc8a 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderLayoutTextParagraph.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayoutTextParagraph.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.reader +package ua.acclorite.book_story.ui.reader import androidx.activity.ComponentActivity import androidx.compose.foundation.layout.Arrangement @@ -23,13 +23,13 @@ import androidx.compose.ui.text.style.LineBreak import androidx.compose.ui.text.style.TextIndent import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.TextUnit -import ua.acclorite.book_story.domain.reader.FontWithName -import ua.acclorite.book_story.domain.reader.ReaderFontThickness -import ua.acclorite.book_story.domain.reader.ReaderText.Text -import ua.acclorite.book_story.domain.reader.ReaderTextAlignment -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.util.noRippleClickable -import ua.acclorite.book_story.ui.reader.ReaderEvent +import ua.acclorite.book_story.domain.model.reader.ReaderText.Text +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.helpers.noRippleClickable +import ua.acclorite.book_story.ui.reader.model.FontWithName @Composable fun LazyItemScope.ReaderLayoutTextParagraph( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderLayoutTextSeparator.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayoutTextSeparator.kt similarity index 95% rename from app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderLayoutTextSeparator.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayoutTextSeparator.kt index d30206c9..72f24133 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderLayoutTextSeparator.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayoutTextSeparator.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.reader +package ua.acclorite.book_story.ui.reader import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyItemScope diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderLoadingPlaceholder.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLoadingPlaceholder.kt similarity index 85% rename from app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderLoadingPlaceholder.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLoadingPlaceholder.kt index 0740226b..1ba6229b 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderLoadingPlaceholder.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLoadingPlaceholder.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.reader +package ua.acclorite.book_story.ui.reader import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box @@ -15,7 +15,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.presentation.core.components.progress_indicator.CircularProgressIndicator +import ua.acclorite.book_story.ui.common.components.progress_indicator.CircularProgressIndicator @Composable fun ReaderLoadingPlaceholder() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderPerceptionExpander.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderPerceptionExpander.kt similarity index 96% rename from app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderPerceptionExpander.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderPerceptionExpander.kt index 4e0fcbb3..a490d1ba 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderPerceptionExpander.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderPerceptionExpander.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.reader +package ua.acclorite.book_story.ui.reader import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderProgressBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderProgressBar.kt similarity index 87% rename from app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderProgressBar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderProgressBar.kt index 78ea72df..2c4ea75b 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderProgressBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderProgressBar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.reader +package ua.acclorite.book_story.ui.reader import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxWidth @@ -16,8 +16,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.TextUnit -import ua.acclorite.book_story.domain.util.HorizontalAlignment -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.presentation.main.model.HorizontalAlignment +import ua.acclorite.book_story.ui.common.components.common.StyledText @Composable fun ReaderProgressBar( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScaffold.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScaffold.kt similarity index 90% rename from app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScaffold.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScaffold.kt index 1877220f..b937d4b0 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScaffold.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScaffold.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.reader +package ua.acclorite.book_story.ui.reader import android.annotation.SuppressLint import androidx.compose.animation.slideInVertically @@ -26,18 +26,18 @@ import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.TextUnit -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.reader.Checkpoint -import ua.acclorite.book_story.domain.reader.FontWithName -import ua.acclorite.book_story.domain.reader.ReaderFontThickness -import ua.acclorite.book_story.domain.reader.ReaderHorizontalGesture -import ua.acclorite.book_story.domain.reader.ReaderText -import ua.acclorite.book_story.domain.reader.ReaderText.Chapter -import ua.acclorite.book_story.domain.reader.ReaderTextAlignment -import ua.acclorite.book_story.domain.util.HorizontalAlignment -import ua.acclorite.book_story.presentation.core.components.common.AnimatedVisibility -import ua.acclorite.book_story.ui.reader.ReaderEvent -import ua.acclorite.book_story.ui.settings.SettingsEvent +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.main.model.HorizontalAlignment +import ua.acclorite.book_story.presentation.reader.ReaderEvent +import ua.acclorite.book_story.presentation.reader.model.Checkpoint +import ua.acclorite.book_story.presentation.reader.model.ReaderFontThickness +import ua.acclorite.book_story.presentation.reader.model.ReaderHorizontalGesture +import ua.acclorite.book_story.presentation.reader.model.ReaderTextAlignment +import ua.acclorite.book_story.presentation.settings.SettingsEvent +import ua.acclorite.book_story.ui.common.components.common.AnimatedVisibility +import ua.acclorite.book_story.ui.reader.model.FontWithName @SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderSettingsBottomSheet.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderSettingsBottomSheet.kt similarity index 79% rename from app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderSettingsBottomSheet.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderSettingsBottomSheet.kt index 36db7512..8940d07a 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderSettingsBottomSheet.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderSettingsBottomSheet.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.reader +package ua.acclorite.book_story.ui.reader import androidx.compose.animation.animateColorAsState import androidx.compose.animation.core.animateFloatAsState @@ -25,22 +25,22 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import kotlinx.coroutines.launch -import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar -import ua.acclorite.book_story.presentation.core.components.modal_bottom_sheet.ModalBottomSheet -import ua.acclorite.book_story.presentation.core.util.LocalActivity -import ua.acclorite.book_story.presentation.settings.appearance.colors.ColorsSubcategory -import ua.acclorite.book_story.presentation.settings.reader.chapters.ChaptersSubcategory -import ua.acclorite.book_story.presentation.settings.reader.font.FontSubcategory -import ua.acclorite.book_story.presentation.settings.reader.images.ImagesSubcategory -import ua.acclorite.book_story.presentation.settings.reader.misc.MiscSubcategory -import ua.acclorite.book_story.presentation.settings.reader.padding.PaddingSubcategory -import ua.acclorite.book_story.presentation.settings.reader.progress.ProgressSubcategory -import ua.acclorite.book_story.presentation.settings.reader.reading_mode.ReadingModeSubcategory -import ua.acclorite.book_story.presentation.settings.reader.reading_speed.ReadingSpeedSubcategory -import ua.acclorite.book_story.presentation.settings.reader.system.SystemSubcategory -import ua.acclorite.book_story.presentation.settings.reader.text.TextSubcategory -import ua.acclorite.book_story.presentation.settings.reader.translator.TranslatorSubcategory -import ua.acclorite.book_story.ui.reader.ReaderEvent +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.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 +import ua.acclorite.book_story.ui.settings.reader.images.ImagesSubcategory +import ua.acclorite.book_story.ui.settings.reader.misc.MiscSubcategory +import ua.acclorite.book_story.ui.settings.reader.padding.PaddingSubcategory +import ua.acclorite.book_story.ui.settings.reader.progress.ProgressSubcategory +import ua.acclorite.book_story.ui.settings.reader.reading_mode.ReadingModeSubcategory +import ua.acclorite.book_story.ui.settings.reader.reading_speed.ReadingSpeedSubcategory +import ua.acclorite.book_story.ui.settings.reader.system.SystemSubcategory +import ua.acclorite.book_story.ui.settings.reader.text.TextSubcategory +import ua.acclorite.book_story.ui.settings.reader.translator.TranslatorSubcategory private var initialPage = 0 diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderSettingsBottomSheetTabRow.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderSettingsBottomSheetTabRow.kt similarity index 82% rename from app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderSettingsBottomSheetTabRow.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderSettingsBottomSheetTabRow.kt index 04048fb1..fe497395 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderSettingsBottomSheetTabRow.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderSettingsBottomSheetTabRow.kt @@ -4,12 +4,12 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.reader +package ua.acclorite.book_story.ui.reader import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.modal_bottom_sheet.ModalBottomSheetTabRow +import ua.acclorite.book_story.ui.common.components.modal_bottom_sheet.ModalBottomSheetTabRow @Composable fun ReaderSettingsBottomSheetTabRow( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderTopBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderTopBar.kt similarity index 91% rename from app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderTopBar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderTopBar.kt index 3fd8f729..030a23a6 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderTopBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderTopBar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.reader +package ua.acclorite.book_story.ui.reader import androidx.compose.animation.core.animateFloatAsState import androidx.compose.foundation.background @@ -29,14 +29,14 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.library.book.Book -import ua.acclorite.book_story.domain.reader.ReaderText.Chapter -import ua.acclorite.book_story.presentation.core.components.common.IconButton -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.util.LocalActivity -import ua.acclorite.book_story.presentation.core.util.noRippleClickable -import ua.acclorite.book_story.ui.reader.ReaderEvent -import ua.acclorite.book_story.ui.settings.SettingsEvent +import ua.acclorite.book_story.domain.model.library.Book +import ua.acclorite.book_story.domain.model.reader.ReaderText.Chapter +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.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/presentation/core/constants/FontConstants.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/data/ReaderData.kt similarity index 96% rename from app/src/main/java/ua/acclorite/book_story/presentation/core/constants/FontConstants.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/data/ReaderData.kt index e0dccba0..10b0dde9 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/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.presentation.core.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.domain.reader.FontWithName -import ua.acclorite.book_story.domain.ui.UIText +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/domain/reader/ExpandableChapter.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/model/ExpandableChapter.kt similarity index 75% rename from app/src/main/java/ua/acclorite/book_story/domain/reader/ExpandableChapter.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/model/ExpandableChapter.kt index 02cb2f4c..80c51a07 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/reader/ExpandableChapter.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/model/ExpandableChapter.kt @@ -4,9 +4,10 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.reader +package ua.acclorite.book_story.ui.reader.model import androidx.compose.runtime.Immutable +import ua.acclorite.book_story.domain.model.reader.ReaderText @Immutable data class ExpandableChapter( diff --git a/app/src/main/java/ua/acclorite/book_story/domain/reader/FontWithName.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/model/FontWithName.kt similarity index 79% rename from app/src/main/java/ua/acclorite/book_story/domain/reader/FontWithName.kt rename to app/src/main/java/ua/acclorite/book_story/ui/reader/model/FontWithName.kt index 523fdee9..aa320eed 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/reader/FontWithName.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/model/FontWithName.kt @@ -4,11 +4,11 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.domain.reader +package ua.acclorite.book_story.ui.reader.model import androidx.compose.runtime.Immutable import androidx.compose.ui.text.font.FontFamily -import ua.acclorite.book_story.domain.ui.UIText +import ua.acclorite.book_story.core.ui.UIText @Immutable data class FontWithName( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsContent.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsContent.kt similarity index 95% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsContent.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsContent.kt index 8ad91d9e..885e557b 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsContent.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings +package ua.acclorite.book_story.ui.settings import androidx.compose.foundation.lazy.LazyListState import androidx.compose.material3.ExperimentalMaterial3Api diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsLayout.kt similarity index 95% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsLayout.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsLayout.kt index 41829017..57051489 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsLayout.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings +package ua.acclorite.book_story.ui.settings import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize @@ -21,7 +21,7 @@ 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.presentation.core.components.common.LazyColumnWithScrollbar +import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar @Composable fun SettingsLayout( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsLayoutItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsLayoutItem.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsLayoutItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsLayoutItem.kt index 2c12b45d..720ea296 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsLayoutItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsLayoutItem.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings +package ua.acclorite.book_story.ui.settings import androidx.compose.foundation.background import androidx.compose.foundation.clickable @@ -25,7 +25,7 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.StyledText import ua.acclorite.book_story.ui.theme.dynamicListItemColor @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsScaffold.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsScaffold.kt similarity index 97% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsScaffold.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsScaffold.kt index be3e798d..0f71c5c0 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsScaffold.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsScaffold.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings +package ua.acclorite.book_story.ui.settings import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsTopBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsTopBar.kt similarity index 85% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsTopBar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsTopBar.kt index 9bd3efa6..ac141e63 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/SettingsTopBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsTopBar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings +package ua.acclorite.book_story.ui.settings import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.LargeTopAppBar @@ -14,8 +14,8 @@ import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton +import ua.acclorite.book_story.ui.common.components.common.StyledText +import ua.acclorite.book_story.ui.navigator.NavigatorBackIconButton @OptIn(ExperimentalMaterial3Api::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/AppearanceSettingsCategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/AppearanceSettingsCategory.kt similarity index 71% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/AppearanceSettingsCategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/AppearanceSettingsCategory.kt index a6acd123..80f56966 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/AppearanceSettingsCategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/AppearanceSettingsCategory.kt @@ -6,14 +6,14 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.appearance +package ua.acclorite.book_story.ui.settings.appearance import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color -import ua.acclorite.book_story.presentation.settings.appearance.colors.ColorsSubcategory -import ua.acclorite.book_story.presentation.settings.appearance.theme_preferences.ThemePreferencesSubcategory +import ua.acclorite.book_story.ui.settings.appearance.colors.ColorsSubcategory +import ua.acclorite.book_story.ui.settings.appearance.theme_preferences.ThemePreferencesSubcategory fun LazyListScope.AppearanceSettingsCategory( titleColor: @Composable () -> Color = { MaterialTheme.colorScheme.primary } diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/AppearanceSettingsContent.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/AppearanceSettingsContent.kt similarity index 91% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/AppearanceSettingsContent.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/AppearanceSettingsContent.kt index 93474a73..57267dd7 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/AppearanceSettingsContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/AppearanceSettingsContent.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.appearance +package ua.acclorite.book_story.ui.settings.appearance import androidx.compose.foundation.lazy.LazyListState import androidx.compose.material3.ExperimentalMaterial3Api diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/AppearanceSettingsLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/AppearanceSettingsLayout.kt similarity index 83% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/AppearanceSettingsLayout.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/AppearanceSettingsLayout.kt index d16bbdf3..534f899c 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/AppearanceSettingsLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/AppearanceSettingsLayout.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.appearance +package ua.acclorite.book_story.ui.settings.appearance import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize @@ -12,7 +12,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyListState import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar +import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar @Composable fun AppearanceSettingsLayout( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/AppearanceSettingsScaffold.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/AppearanceSettingsScaffold.kt similarity index 96% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/AppearanceSettingsScaffold.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/AppearanceSettingsScaffold.kt index 0cbc22b9..097ed55c 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/AppearanceSettingsScaffold.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/AppearanceSettingsScaffold.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.appearance +package ua.acclorite.book_story.ui.settings.appearance import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/AppearanceSettingsTopBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/AppearanceSettingsTopBar.kt similarity index 84% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/AppearanceSettingsTopBar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/AppearanceSettingsTopBar.kt index 08657abb..58ccdead 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/AppearanceSettingsTopBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/AppearanceSettingsTopBar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.appearance +package ua.acclorite.book_story.ui.settings.appearance import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.LargeTopAppBar @@ -14,8 +14,8 @@ import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton +import ua.acclorite.book_story.ui.common.components.common.StyledText +import ua.acclorite.book_story.ui.navigator.NavigatorBackIconButton @OptIn(ExperimentalMaterial3Api::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/colors/ColorsSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/colors/ColorsSubcategory.kt similarity index 76% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/colors/ColorsSubcategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/colors/ColorsSubcategory.kt index ce8eddcf..bfae4a47 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/colors/ColorsSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/colors/ColorsSubcategory.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.appearance.colors +package ua.acclorite.book_story.ui.settings.appearance.colors import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.MaterialTheme @@ -14,9 +14,9 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.settings.appearance.colors.components.ColorPresetOption -import ua.acclorite.book_story.presentation.settings.appearance.colors.components.FastColorPresetChangeOption -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategory +import ua.acclorite.book_story.ui.settings.appearance.colors.components.ColorPresetOption +import ua.acclorite.book_story.ui.settings.appearance.colors.components.FastColorPresetChangeOption +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategory fun LazyListScope.ColorsSubcategory( titleColor: @Composable () -> Color = { MaterialTheme.colorScheme.primary }, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/colors/components/ColorPresetOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/colors/components/ColorPresetOption.kt similarity index 95% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/colors/components/ColorPresetOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/colors/components/ColorPresetOption.kt index df097968..83b257ca 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/colors/components/ColorPresetOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/colors/components/ColorPresetOption.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.appearance.colors.components +package ua.acclorite.book_story.ui.settings.appearance.colors.components import androidx.compose.animation.animateColorAsState import androidx.compose.animation.expandHorizontally @@ -63,15 +63,15 @@ import sh.calvin.reorderable.ReorderableCollectionItemScope import sh.calvin.reorderable.ReorderableItem import sh.calvin.reorderable.rememberReorderableLazyListState import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.reader.ColorPreset -import ua.acclorite.book_story.domain.util.Selected -import ua.acclorite.book_story.presentation.core.components.common.AnimatedVisibility -import ua.acclorite.book_story.presentation.core.components.common.IconButton -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.components.settings.ColorPickerWithTitle -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle -import ua.acclorite.book_story.ui.settings.SettingsEvent -import ua.acclorite.book_story.ui.settings.SettingsModel +import ua.acclorite.book_story.core.Selected +import ua.acclorite.book_story.domain.model.reader.ColorPreset +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.AnimatedVisibility +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.settings.ColorPickerWithTitle +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategoryTitle import ua.acclorite.book_story.ui.theme.FadeTransitionPreservingSpace import ua.acclorite.book_story.ui.theme.Transitions diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/colors/components/FastColorPresetChangeOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/colors/components/FastColorPresetChangeOption.kt similarity index 78% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/colors/components/FastColorPresetChangeOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/colors/components/FastColorPresetChangeOption.kt index 3fe0e59f..8f57b8ac 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/colors/components/FastColorPresetChangeOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/colors/components/FastColorPresetChangeOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.appearance.colors.components +package ua.acclorite.book_story.ui.settings.appearance.colors.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SwitchWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SwitchWithTitle @Composable fun FastColorPresetChangeOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/theme_preferences/ThemePreferencesSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/ThemePreferencesSubcategory.kt similarity index 62% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/theme_preferences/ThemePreferencesSubcategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/ThemePreferencesSubcategory.kt index 817b425d..c50861fb 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/theme_preferences/ThemePreferencesSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/ThemePreferencesSubcategory.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.appearance.theme_preferences +package ua.acclorite.book_story.ui.settings.appearance.theme_preferences import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.MaterialTheme @@ -14,12 +14,12 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.settings.appearance.theme_preferences.components.AbsoluteDarkOption -import ua.acclorite.book_story.presentation.settings.appearance.theme_preferences.components.AppThemeOption -import ua.acclorite.book_story.presentation.settings.appearance.theme_preferences.components.DarkThemeOption -import ua.acclorite.book_story.presentation.settings.appearance.theme_preferences.components.PureDarkOption -import ua.acclorite.book_story.presentation.settings.appearance.theme_preferences.components.ThemeContrastOption -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategory +import ua.acclorite.book_story.ui.settings.appearance.theme_preferences.components.AbsoluteDarkOption +import ua.acclorite.book_story.ui.settings.appearance.theme_preferences.components.AppThemeOption +import ua.acclorite.book_story.ui.settings.appearance.theme_preferences.components.DarkThemeOption +import ua.acclorite.book_story.ui.settings.appearance.theme_preferences.components.PureDarkOption +import ua.acclorite.book_story.ui.settings.appearance.theme_preferences.components.ThemeContrastOption +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategory fun LazyListScope.ThemePreferencesSubcategory( titleColor: @Composable () -> Color = { MaterialTheme.colorScheme.primary }, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/theme_preferences/components/AbsoluteDarkOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/AbsoluteDarkOption.kt similarity index 76% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/theme_preferences/components/AbsoluteDarkOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/AbsoluteDarkOption.kt index 67ef1a8a..4123d93e 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/theme_preferences/components/AbsoluteDarkOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/AbsoluteDarkOption.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.appearance.theme_preferences.components +package ua.acclorite.book_story.ui.settings.appearance.theme_preferences.components import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext @@ -12,11 +12,11 @@ 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.domain.ui.isDark -import ua.acclorite.book_story.domain.ui.isPureDark -import ua.acclorite.book_story.presentation.core.components.settings.SwitchWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.presentation.main.MainEvent +import ua.acclorite.book_story.presentation.main.MainModel +import ua.acclorite.book_story.presentation.main.model.isDark +import ua.acclorite.book_story.presentation.main.model.isPureDark +import ua.acclorite.book_story.ui.common.components.settings.SwitchWithTitle import ua.acclorite.book_story.ui.theme.ExpandingTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/theme_preferences/components/AppThemeOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/AppThemeOption.kt similarity index 91% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/theme_preferences/components/AppThemeOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/AppThemeOption.kt index 451ba5c5..b5f25c61 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/theme_preferences/components/AppThemeOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/AppThemeOption.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.appearance.theme_preferences.components +package ua.acclorite.book_story.ui.settings.appearance.theme_preferences.components import androidx.compose.animation.core.tween import androidx.compose.animation.fadeIn @@ -42,14 +42,14 @@ import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.ui.ThemeContrast -import ua.acclorite.book_story.domain.ui.isDark -import ua.acclorite.book_story.domain.ui.isPureDark -import ua.acclorite.book_story.presentation.core.components.common.AnimatedVisibility -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.presentation.main.MainEvent +import ua.acclorite.book_story.presentation.main.MainModel +import ua.acclorite.book_story.presentation.main.model.ThemeContrast +import ua.acclorite.book_story.presentation.main.model.isDark +import ua.acclorite.book_story.presentation.main.model.isPureDark +import ua.acclorite.book_story.ui.common.components.common.AnimatedVisibility +import ua.acclorite.book_story.ui.common.components.common.StyledText +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategoryTitle import ua.acclorite.book_story.ui.theme.Theme import ua.acclorite.book_story.ui.theme.animatedColorScheme diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/theme_preferences/components/DarkThemeOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/DarkThemeOption.kt similarity index 76% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/theme_preferences/components/DarkThemeOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/DarkThemeOption.kt index c38435f0..d8bd17c5 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/theme_preferences/components/DarkThemeOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/DarkThemeOption.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.appearance.theme_preferences.components +package ua.acclorite.book_story.ui.settings.appearance.theme_preferences.components import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -12,11 +12,11 @@ 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.domain.ui.ButtonItem -import ua.acclorite.book_story.domain.ui.DarkTheme -import ua.acclorite.book_story.presentation.core.components.settings.SegmentedButtonWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.presentation.main.MainEvent +import ua.acclorite.book_story.presentation.main.MainModel +import ua.acclorite.book_story.presentation.main.model.DarkTheme +import ua.acclorite.book_story.ui.common.components.settings.SegmentedButtonWithTitle +import ua.acclorite.book_story.ui.common.model.ButtonItem @Composable fun DarkThemeOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/theme_preferences/components/PureDarkOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/PureDarkOption.kt similarity index 76% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/theme_preferences/components/PureDarkOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/PureDarkOption.kt index f00a1034..d081007f 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/theme_preferences/components/PureDarkOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/PureDarkOption.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.appearance.theme_preferences.components +package ua.acclorite.book_story.ui.settings.appearance.theme_preferences.components import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -12,12 +12,12 @@ 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.domain.ui.ButtonItem -import ua.acclorite.book_story.domain.ui.PureDark -import ua.acclorite.book_story.domain.ui.isDark -import ua.acclorite.book_story.presentation.core.components.settings.SegmentedButtonWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.presentation.main.MainEvent +import ua.acclorite.book_story.presentation.main.MainModel +import ua.acclorite.book_story.presentation.main.model.PureDark +import ua.acclorite.book_story.presentation.main.model.isDark +import ua.acclorite.book_story.ui.common.components.settings.SegmentedButtonWithTitle +import ua.acclorite.book_story.ui.common.model.ButtonItem import ua.acclorite.book_story.ui.theme.ExpandingTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/theme_preferences/components/ThemeContrastOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/ThemeContrastOption.kt similarity index 82% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/theme_preferences/components/ThemeContrastOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/ThemeContrastOption.kt index 55d30414..39227bcf 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/appearance/theme_preferences/components/ThemeContrastOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/ThemeContrastOption.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.appearance.theme_preferences.components +package ua.acclorite.book_story.ui.settings.appearance.theme_preferences.components import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -16,13 +16,13 @@ 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.domain.ui.ButtonItem -import ua.acclorite.book_story.domain.ui.ThemeContrast -import ua.acclorite.book_story.domain.ui.isDark -import ua.acclorite.book_story.domain.ui.isPureDark -import ua.acclorite.book_story.presentation.core.components.settings.SegmentedButtonWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.presentation.main.MainEvent +import ua.acclorite.book_story.presentation.main.MainModel +import ua.acclorite.book_story.presentation.main.model.ThemeContrast +import ua.acclorite.book_story.presentation.main.model.isDark +import ua.acclorite.book_story.presentation.main.model.isPureDark +import ua.acclorite.book_story.ui.common.components.settings.SegmentedButtonWithTitle +import ua.acclorite.book_story.ui.common.model.ButtonItem import ua.acclorite.book_story.ui.theme.BookStoryTheme import ua.acclorite.book_story.ui.theme.ExpandingTransition diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/BrowseSettingsCategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/BrowseSettingsCategory.kt similarity index 61% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/BrowseSettingsCategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/browse/BrowseSettingsCategory.kt index ab3bd0cb..9ca4ca82 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/BrowseSettingsCategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/BrowseSettingsCategory.kt @@ -6,11 +6,11 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.browse +package ua.acclorite.book_story.ui.settings.browse import androidx.compose.foundation.lazy.LazyListScope -import ua.acclorite.book_story.presentation.settings.browse.display.BrowseDisplaySubcategory -import ua.acclorite.book_story.presentation.settings.browse.scan.BrowseScanSubcategory +import ua.acclorite.book_story.ui.settings.browse.display.BrowseDisplaySubcategory +import ua.acclorite.book_story.ui.settings.browse.scan.BrowseScanSubcategory fun LazyListScope.BrowseSettingsCategory() { BrowseScanSubcategory() diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/BrowseSettingsContent.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/BrowseSettingsContent.kt similarity index 91% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/BrowseSettingsContent.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/browse/BrowseSettingsContent.kt index 3513982c..5cab1934 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/BrowseSettingsContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/BrowseSettingsContent.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.browse +package ua.acclorite.book_story.ui.settings.browse import androidx.compose.foundation.lazy.LazyListState import androidx.compose.material3.ExperimentalMaterial3Api diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/BrowseSettingsLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/BrowseSettingsLayout.kt similarity index 83% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/BrowseSettingsLayout.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/browse/BrowseSettingsLayout.kt index 494e5718..d23d3851 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/BrowseSettingsLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/BrowseSettingsLayout.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.browse +package ua.acclorite.book_story.ui.settings.browse import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize @@ -12,7 +12,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyListState import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar +import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar @Composable fun BrowseSettingsLayout( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/BrowseSettingsScaffold.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/BrowseSettingsScaffold.kt similarity index 96% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/BrowseSettingsScaffold.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/browse/BrowseSettingsScaffold.kt index 3791e98c..1a06796a 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/BrowseSettingsScaffold.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/BrowseSettingsScaffold.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.browse +package ua.acclorite.book_story.ui.settings.browse import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/BrowseSettingsTopBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/BrowseSettingsTopBar.kt similarity index 84% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/BrowseSettingsTopBar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/browse/BrowseSettingsTopBar.kt index 7878f6a0..0174c336 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/BrowseSettingsTopBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/BrowseSettingsTopBar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.browse +package ua.acclorite.book_story.ui.settings.browse import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.LargeTopAppBar @@ -14,8 +14,8 @@ import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton +import ua.acclorite.book_story.ui.common.components.common.StyledText +import ua.acclorite.book_story.ui.navigator.NavigatorBackIconButton @OptIn(ExperimentalMaterial3Api::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/display/BrowseDisplaySubcategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/display/BrowseDisplaySubcategory.kt similarity index 74% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/display/BrowseDisplaySubcategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/browse/display/BrowseDisplaySubcategory.kt index 82c4dbc7..20452108 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/display/BrowseDisplaySubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/display/BrowseDisplaySubcategory.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.browse.display +package ua.acclorite.book_story.ui.settings.browse.display import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.MaterialTheme @@ -14,9 +14,9 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.settings.browse.display.components.BrowseGridSizeOption -import ua.acclorite.book_story.presentation.settings.browse.display.components.BrowseLayoutOption -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategory +import ua.acclorite.book_story.ui.settings.browse.display.components.BrowseGridSizeOption +import ua.acclorite.book_story.ui.settings.browse.display.components.BrowseLayoutOption +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategory fun LazyListScope.BrowseDisplaySubcategory( titleColor: @Composable () -> Color = { MaterialTheme.colorScheme.primary }, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/display/components/BrowseGridSizeOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/display/components/BrowseGridSizeOption.kt similarity index 80% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/display/components/BrowseGridSizeOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/browse/display/components/BrowseGridSizeOption.kt index 7c01904d..a6d681e5 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/display/components/BrowseGridSizeOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/display/components/BrowseGridSizeOption.kt @@ -4,17 +4,17 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.browse.display.components +package ua.acclorite.book_story.ui.settings.browse.display.components import androidx.compose.runtime.Composable 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.domain.browse.display.BrowseLayout -import ua.acclorite.book_story.presentation.core.components.settings.SliderWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.presentation.browse.model.BrowseLayout +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.SliderWithTitle import ua.acclorite.book_story.ui.theme.ExpandingTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/display/components/BrowseLayoutOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/display/components/BrowseLayoutOption.kt similarity index 75% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/display/components/BrowseLayoutOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/browse/display/components/BrowseLayoutOption.kt index e4e6a991..9d259da6 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/display/components/BrowseLayoutOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/display/components/BrowseLayoutOption.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.browse.display.components +package ua.acclorite.book_story.ui.settings.browse.display.components import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -12,11 +12,11 @@ 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.domain.browse.display.BrowseLayout -import ua.acclorite.book_story.domain.ui.ButtonItem -import ua.acclorite.book_story.presentation.core.components.settings.SegmentedButtonWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.presentation.browse.model.BrowseLayout +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.model.ButtonItem @Composable fun BrowseLayoutOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/filter/BrowseFilterSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/filter/BrowseFilterSubcategory.kt similarity index 78% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/filter/BrowseFilterSubcategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/browse/filter/BrowseFilterSubcategory.kt index 1aaaacb7..977aa740 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/filter/BrowseFilterSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/filter/BrowseFilterSubcategory.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.browse.filter +package ua.acclorite.book_story.ui.settings.browse.filter import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.MaterialTheme @@ -14,8 +14,8 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.settings.browse.filter.components.BrowseFilterOption -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategory +import ua.acclorite.book_story.ui.settings.browse.filter.components.BrowseFilterOption +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategory fun LazyListScope.BrowseFilterSubcategory( titleColor: @Composable () -> Color = { MaterialTheme.colorScheme.primary }, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/filter/components/BrowseFilterOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/filter/components/BrowseFilterOption.kt similarity index 86% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/filter/components/BrowseFilterOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/browse/filter/components/BrowseFilterOption.kt index 899b70c6..06bce028 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/filter/components/BrowseFilterOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/filter/components/BrowseFilterOption.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.browse.filter.components +package ua.acclorite.book_story.ui.settings.browse.filter.components import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Row @@ -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.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.constants.provideExtensions -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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 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/presentation/settings/browse/scan/BrowseScanSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/scan/BrowseScanSubcategory.kt similarity index 74% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/scan/BrowseScanSubcategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/browse/scan/BrowseScanSubcategory.kt index 20042ee9..96f56e41 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/scan/BrowseScanSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/scan/BrowseScanSubcategory.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.browse.scan +package ua.acclorite.book_story.ui.settings.browse.scan import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.MaterialTheme @@ -14,9 +14,9 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.settings.browse.scan.components.BrowseScanOption -import ua.acclorite.book_story.presentation.settings.browse.scan.components.BrowseScanOptionNote -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategory +import ua.acclorite.book_story.ui.settings.browse.scan.components.BrowseScanOption +import ua.acclorite.book_story.ui.settings.browse.scan.components.BrowseScanOptionNote +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategory fun LazyListScope.BrowseScanSubcategory( titleColor: @Composable () -> Color = { MaterialTheme.colorScheme.primary }, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/scan/components/BrowseScanOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/scan/components/BrowseScanOption.kt similarity index 92% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/scan/components/BrowseScanOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/browse/scan/components/BrowseScanOption.kt index 2a9257b7..b6cc3ade 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/scan/components/BrowseScanOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/scan/components/BrowseScanOption.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.browse.scan.components +package ua.acclorite.book_story.ui.settings.browse.scan.components import android.content.Context import android.content.UriPermission @@ -39,13 +39,13 @@ import com.anggrayudi.storage.file.DocumentFileCompat import com.anggrayudi.storage.file.getBasePath import com.anggrayudi.storage.file.getRootPath import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.IconButton -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.util.noRippleClickable -import ua.acclorite.book_story.presentation.core.util.showToast -import ua.acclorite.book_story.ui.browse.BrowseScreen -import ua.acclorite.book_story.ui.settings.SettingsEvent -import ua.acclorite.book_story.ui.settings.SettingsModel +import ua.acclorite.book_story.presentation.browse.BrowseScreen +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.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/presentation/settings/browse/scan/components/BrowseScanOptionNote.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/scan/components/BrowseScanOptionNote.kt similarity index 72% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/scan/components/BrowseScanOptionNote.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/browse/scan/components/BrowseScanOptionNote.kt index b48c55e5..e7ba1c61 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/scan/components/BrowseScanOptionNote.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/scan/components/BrowseScanOptionNote.kt @@ -4,12 +4,12 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.browse.scan.components +package ua.acclorite.book_story.ui.settings.browse.scan.components import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryNote +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategoryNote @Composable fun BrowseScanOptionNote() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/sort/BrowseSortSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/sort/BrowseSortSubcategory.kt similarity index 79% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/sort/BrowseSortSubcategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/browse/sort/BrowseSortSubcategory.kt index 4ad99871..e425423c 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/sort/BrowseSortSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/sort/BrowseSortSubcategory.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.browse.sort +package ua.acclorite.book_story.ui.settings.browse.sort import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.MaterialTheme @@ -14,8 +14,8 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.settings.browse.sort.components.BrowseSortOption -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategory +import ua.acclorite.book_story.ui.settings.browse.sort.components.BrowseSortOption +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategory fun LazyListScope.BrowseSortSubcategory( titleColor: @Composable () -> Color = { MaterialTheme.colorScheme.primary }, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/sort/components/BrowseSortOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/sort/components/BrowseSortOption.kt similarity index 91% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/sort/components/BrowseSortOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/browse/sort/components/BrowseSortOption.kt index eb89e995..a287548c 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/browse/sort/components/BrowseSortOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/sort/components/BrowseSortOption.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.browse.sort.components +package ua.acclorite.book_story.ui.settings.browse.sort.components import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Row @@ -31,10 +31,10 @@ import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.browse.display.BrowseSortOrder -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.presentation.browse.model.BrowseSortOrder +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 fun LazyListScope.BrowseSortOption() { items(BrowseSortOrder.entries, key = { it.name }) { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/components/SettingsSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/components/SettingsSubcategory.kt similarity index 95% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/components/SettingsSubcategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/components/SettingsSubcategory.kt index 09cba886..96b567d5 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/components/SettingsSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/components/SettingsSubcategory.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.components +package ua.acclorite.book_story.ui.settings.components import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.height diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/components/SettingsSubcategoryNote.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/components/SettingsSubcategoryNote.kt similarity index 92% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/components/SettingsSubcategoryNote.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/components/SettingsSubcategoryNote.kt index fbbb36c9..39305d36 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/components/SettingsSubcategoryNote.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/components/SettingsSubcategoryNote.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.components +package ua.acclorite.book_story.ui.settings.components import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -21,7 +21,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.StyledText @Composable fun SettingsSubcategoryNote( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/components/SettingsSubcategoryTitle.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/components/SettingsSubcategoryTitle.kt similarity index 89% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/components/SettingsSubcategoryTitle.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/components/SettingsSubcategoryTitle.kt index 87fed225..89afe310 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/components/SettingsSubcategoryTitle.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/components/SettingsSubcategoryTitle.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.components +package ua.acclorite.book_story.ui.settings.components import androidx.compose.foundation.layout.padding import androidx.compose.material3.MaterialTheme @@ -18,7 +18,7 @@ import androidx.compose.ui.text.style.LineBreak import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.StyledText @Composable fun SettingsSubcategoryTitle( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/general/GeneralSettingsCategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/general/GeneralSettingsCategory.kt similarity index 77% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/general/GeneralSettingsCategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/general/GeneralSettingsCategory.kt index b642ca63..75f59c81 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/general/GeneralSettingsCategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/general/GeneralSettingsCategory.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.general +package ua.acclorite.book_story.ui.settings.general import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.height @@ -15,8 +15,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.coerceAtLeast import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.presentation.settings.general.components.AppLanguageOption -import ua.acclorite.book_story.presentation.settings.general.components.DoublePressExitOption +import ua.acclorite.book_story.ui.settings.general.components.AppLanguageOption +import ua.acclorite.book_story.ui.settings.general.components.DoublePressExitOption fun LazyListScope.GeneralSettingsCategory( topPadding: Dp = 16.dp, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/general/GeneralSettingsContent.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/general/GeneralSettingsContent.kt similarity index 91% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/general/GeneralSettingsContent.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/general/GeneralSettingsContent.kt index 3e3e3578..b5cb2894 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/general/GeneralSettingsContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/general/GeneralSettingsContent.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.general +package ua.acclorite.book_story.ui.settings.general import androidx.compose.foundation.lazy.LazyListState import androidx.compose.material3.ExperimentalMaterial3Api diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/general/GeneralSettingsLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/general/GeneralSettingsLayout.kt similarity index 83% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/general/GeneralSettingsLayout.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/general/GeneralSettingsLayout.kt index 7272c0ea..de3bd1f7 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/general/GeneralSettingsLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/general/GeneralSettingsLayout.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.general +package ua.acclorite.book_story.ui.settings.general import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize @@ -12,7 +12,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyListState import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar +import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar @Composable fun GeneralSettingsLayout( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/general/GeneralSettingsScaffold.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/general/GeneralSettingsScaffold.kt similarity index 96% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/general/GeneralSettingsScaffold.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/general/GeneralSettingsScaffold.kt index c9f10cc5..cec18528 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/general/GeneralSettingsScaffold.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/general/GeneralSettingsScaffold.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.general +package ua.acclorite.book_story.ui.settings.general import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/general/GeneralSettingsTopBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/general/GeneralSettingsTopBar.kt similarity index 84% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/general/GeneralSettingsTopBar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/general/GeneralSettingsTopBar.kt index 7a1fb04c..95a696ed 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/general/GeneralSettingsTopBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/general/GeneralSettingsTopBar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.general +package ua.acclorite.book_story.ui.settings.general import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.LargeTopAppBar @@ -14,8 +14,8 @@ import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton +import ua.acclorite.book_story.ui.common.components.common.StyledText +import ua.acclorite.book_story.ui.navigator.NavigatorBackIconButton @OptIn(ExperimentalMaterial3Api::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/general/components/AppLanguageOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/general/components/AppLanguageOption.kt similarity index 68% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/general/components/AppLanguageOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/general/components/AppLanguageOption.kt index a0bae19b..f11df697 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/general/components/AppLanguageOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/general/components/AppLanguageOption.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.general.components +package ua.acclorite.book_story.ui.settings.general.components import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -12,11 +12,11 @@ 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.domain.ui.ButtonItem -import ua.acclorite.book_story.presentation.core.components.settings.ChipsWithTitle -import ua.acclorite.book_story.presentation.core.constants.provideLanguages -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.model.ButtonItem @Composable fun AppLanguageOption() { @@ -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/presentation/settings/general/components/DoublePressExitOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/general/components/DoublePressExitOption.kt similarity index 78% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/general/components/DoublePressExitOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/general/components/DoublePressExitOption.kt index fa395ef9..5a6dfbeb 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/general/components/DoublePressExitOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/general/components/DoublePressExitOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.general.components +package ua.acclorite.book_story.ui.settings.general.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SwitchWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SwitchWithTitle @Composable fun DoublePressExitOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/LibrarySettingsCategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/LibrarySettingsCategory.kt similarity index 50% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/library/LibrarySettingsCategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/library/LibrarySettingsCategory.kt index 1aca1149..75d1d5b6 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/LibrarySettingsCategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/LibrarySettingsCategory.kt @@ -6,13 +6,13 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.library +package ua.acclorite.book_story.ui.settings.library import androidx.compose.foundation.lazy.LazyListScope -import ua.acclorite.book_story.presentation.settings.library.categories.LibraryCategoriesSubcategory -import ua.acclorite.book_story.presentation.settings.library.display.LibraryDisplaySubcategory -import ua.acclorite.book_story.presentation.settings.library.sort.LibrarySortSubcategory -import ua.acclorite.book_story.presentation.settings.library.tabs.LibraryTabsSubcategory +import ua.acclorite.book_story.ui.settings.library.categories.LibraryCategoriesSubcategory +import ua.acclorite.book_story.ui.settings.library.display.LibraryDisplaySubcategory +import ua.acclorite.book_story.ui.settings.library.sort.LibrarySortSubcategory +import ua.acclorite.book_story.ui.settings.library.tabs.LibraryTabsSubcategory fun LazyListScope.LibrarySettingsCategory() { LibraryCategoriesSubcategory() diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/LibrarySettingsContent.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/LibrarySettingsContent.kt similarity index 91% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/library/LibrarySettingsContent.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/library/LibrarySettingsContent.kt index 7ad2fd53..53d1c9db 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/LibrarySettingsContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/LibrarySettingsContent.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.library +package ua.acclorite.book_story.ui.settings.library import androidx.compose.foundation.lazy.LazyListState import androidx.compose.material3.ExperimentalMaterial3Api diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/LibrarySettingsLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/LibrarySettingsLayout.kt similarity index 83% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/library/LibrarySettingsLayout.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/library/LibrarySettingsLayout.kt index d23b072e..d23a707d 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/LibrarySettingsLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/LibrarySettingsLayout.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.library +package ua.acclorite.book_story.ui.settings.library import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize @@ -12,7 +12,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyListState import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar +import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar @Composable fun LibrarySettingsLayout( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/LibrarySettingsScaffold.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/LibrarySettingsScaffold.kt similarity index 96% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/library/LibrarySettingsScaffold.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/library/LibrarySettingsScaffold.kt index 0a5c7a90..1da75dad 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/LibrarySettingsScaffold.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/LibrarySettingsScaffold.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.library +package ua.acclorite.book_story.ui.settings.library import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/LibrarySettingsTopBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/LibrarySettingsTopBar.kt similarity index 84% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/library/LibrarySettingsTopBar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/library/LibrarySettingsTopBar.kt index 2719ac4e..e8312d6a 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/LibrarySettingsTopBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/LibrarySettingsTopBar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.library +package ua.acclorite.book_story.ui.settings.library import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.LargeTopAppBar @@ -14,8 +14,8 @@ import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton +import ua.acclorite.book_story.ui.common.components.common.StyledText +import ua.acclorite.book_story.ui.navigator.NavigatorBackIconButton @OptIn(ExperimentalMaterial3Api::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/categories/LibraryCategoriesSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/categories/LibraryCategoriesSubcategory.kt similarity index 73% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/library/categories/LibraryCategoriesSubcategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/library/categories/LibraryCategoriesSubcategory.kt index 305d8fe6..c7d150e5 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/categories/LibraryCategoriesSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/categories/LibraryCategoriesSubcategory.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.library.categories +package ua.acclorite.book_story.ui.settings.library.categories import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.MaterialTheme @@ -14,9 +14,9 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategory -import ua.acclorite.book_story.presentation.settings.library.categories.components.LibraryCategoriesOption -import ua.acclorite.book_story.presentation.settings.library.categories.components.LibraryCategoriesOptionNote +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategory +import ua.acclorite.book_story.ui.settings.library.categories.components.LibraryCategoriesOption +import ua.acclorite.book_story.ui.settings.library.categories.components.LibraryCategoriesOptionNote fun LazyListScope.LibraryCategoriesSubcategory( titleColor: @Composable () -> Color = { MaterialTheme.colorScheme.primary }, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/categories/components/LibraryCategoriesOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/categories/components/LibraryCategoriesOption.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/library/categories/components/LibraryCategoriesOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/library/categories/components/LibraryCategoriesOption.kt index 9d1b2d4e..d54e4c72 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/categories/components/LibraryCategoriesOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/categories/components/LibraryCategoriesOption.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.library.categories.components +package ua.acclorite.book_story.ui.settings.library.categories.components import androidx.compose.animation.animateContentSize import androidx.compose.foundation.background @@ -47,15 +47,15 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import sh.calvin.reorderable.ReorderableColumn import sh.calvin.reorderable.ReorderableScope import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.library.category.Category -import ua.acclorite.book_story.presentation.core.components.common.IconButton -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.core.components.dialog.Dialog -import ua.acclorite.book_story.presentation.core.components.dialog.DialogWithTextField -import ua.acclorite.book_story.presentation.core.util.noRippleClickable -import ua.acclorite.book_story.ui.library.LibraryScreen -import ua.acclorite.book_story.ui.settings.SettingsEvent -import ua.acclorite.book_story.ui.settings.SettingsModel +import ua.acclorite.book_story.domain.model.library.Category +import ua.acclorite.book_story.presentation.library.LibraryScreen +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.components.dialog.Dialog +import ua.acclorite.book_story.ui.common.components.dialog.DialogWithTextField +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/presentation/settings/library/categories/components/LibraryCategoriesOptionNote.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/categories/components/LibraryCategoriesOptionNote.kt similarity index 71% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/library/categories/components/LibraryCategoriesOptionNote.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/library/categories/components/LibraryCategoriesOptionNote.kt index d0bf5689..3938f0d0 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/categories/components/LibraryCategoriesOptionNote.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/categories/components/LibraryCategoriesOptionNote.kt @@ -4,12 +4,12 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.library.categories.components +package ua.acclorite.book_story.ui.settings.library.categories.components import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryNote +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategoryNote @Composable fun LibraryCategoriesOptionNote() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/display/LibraryDisplaySubcategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/LibraryDisplaySubcategory.kt similarity index 64% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/library/display/LibraryDisplaySubcategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/LibraryDisplaySubcategory.kt index 10c7e103..fd7d67a8 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/display/LibraryDisplaySubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/LibraryDisplaySubcategory.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.library.display +package ua.acclorite.book_story.ui.settings.library.display import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.MaterialTheme @@ -14,12 +14,12 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategory -import ua.acclorite.book_story.presentation.settings.library.display.components.LibraryGridSizeOption -import ua.acclorite.book_story.presentation.settings.library.display.components.LibraryLayoutOption -import ua.acclorite.book_story.presentation.settings.library.display.components.LibraryReadButtonOption -import ua.acclorite.book_story.presentation.settings.library.display.components.LibraryShowProgressOption -import ua.acclorite.book_story.presentation.settings.library.display.components.LibraryTitlePositionOption +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategory +import ua.acclorite.book_story.ui.settings.library.display.components.LibraryGridSizeOption +import ua.acclorite.book_story.ui.settings.library.display.components.LibraryLayoutOption +import ua.acclorite.book_story.ui.settings.library.display.components.LibraryReadButtonOption +import ua.acclorite.book_story.ui.settings.library.display.components.LibraryShowProgressOption +import ua.acclorite.book_story.ui.settings.library.display.components.LibraryTitlePositionOption fun LazyListScope.LibraryDisplaySubcategory( titleColor: @Composable () -> Color = { MaterialTheme.colorScheme.primary }, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/display/components/LibraryGridSizeOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/components/LibraryGridSizeOption.kt similarity index 80% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/library/display/components/LibraryGridSizeOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/components/LibraryGridSizeOption.kt index e7843c7e..6a991b11 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/display/components/LibraryGridSizeOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/components/LibraryGridSizeOption.kt @@ -4,17 +4,17 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.library.display.components +package ua.acclorite.book_story.ui.settings.library.display.components import androidx.compose.runtime.Composable 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.domain.library.display.LibraryLayout -import ua.acclorite.book_story.presentation.core.components.settings.SliderWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.presentation.library.model.LibraryLayout +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.SliderWithTitle import ua.acclorite.book_story.ui.theme.ExpandingTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/display/components/LibraryLayoutOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/components/LibraryLayoutOption.kt similarity index 75% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/library/display/components/LibraryLayoutOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/components/LibraryLayoutOption.kt index 9cd8cb82..c2540783 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/display/components/LibraryLayoutOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/components/LibraryLayoutOption.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.library.display.components +package ua.acclorite.book_story.ui.settings.library.display.components import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -12,11 +12,11 @@ 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.domain.library.display.LibraryLayout -import ua.acclorite.book_story.domain.ui.ButtonItem -import ua.acclorite.book_story.presentation.core.components.settings.SegmentedButtonWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.presentation.library.model.LibraryLayout +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.model.ButtonItem @Composable fun LibraryLayoutOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/display/components/LibraryReadButtonOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/components/LibraryReadButtonOption.kt similarity index 76% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/library/display/components/LibraryReadButtonOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/components/LibraryReadButtonOption.kt index 48b75fc3..5be090e3 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/display/components/LibraryReadButtonOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/components/LibraryReadButtonOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.library.display.components +package ua.acclorite.book_story.ui.settings.library.display.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SwitchWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SwitchWithTitle @Composable fun LibraryReadButtonOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/display/components/LibraryShowProgressOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/components/LibraryShowProgressOption.kt similarity index 77% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/library/display/components/LibraryShowProgressOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/components/LibraryShowProgressOption.kt index 766e1b7d..7ac29d8c 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/display/components/LibraryShowProgressOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/components/LibraryShowProgressOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.library.display.components +package ua.acclorite.book_story.ui.settings.library.display.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SwitchWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SwitchWithTitle @Composable fun LibraryShowProgressOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/display/components/LibraryTitlePositionOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/components/LibraryTitlePositionOption.kt similarity index 79% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/library/display/components/LibraryTitlePositionOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/components/LibraryTitlePositionOption.kt index 5728d1e6..1a8ab0ef 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/display/components/LibraryTitlePositionOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/components/LibraryTitlePositionOption.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.library.display.components +package ua.acclorite.book_story.ui.settings.library.display.components import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -12,12 +12,12 @@ 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.domain.library.display.LibraryLayout -import ua.acclorite.book_story.domain.library.display.LibraryTitlePosition -import ua.acclorite.book_story.domain.ui.ButtonItem -import ua.acclorite.book_story.presentation.core.components.settings.ChipsWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.presentation.library.model.LibraryLayout +import ua.acclorite.book_story.presentation.library.model.LibraryTitlePosition +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.model.ButtonItem import ua.acclorite.book_story.ui.theme.ExpandingTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/sort/LibrarySortSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/sort/LibrarySortSubcategory.kt similarity index 78% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/library/sort/LibrarySortSubcategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/library/sort/LibrarySortSubcategory.kt index 74078ab5..c084f183 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/sort/LibrarySortSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/sort/LibrarySortSubcategory.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.library.sort +package ua.acclorite.book_story.ui.settings.library.sort import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.MaterialTheme @@ -14,8 +14,8 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategory -import ua.acclorite.book_story.presentation.settings.library.sort.components.LibraryPerCategorySortOption +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategory +import ua.acclorite.book_story.ui.settings.library.sort.components.LibraryPerCategorySortOption fun LazyListScope.LibrarySortSubcategory( titleColor: @Composable () -> Color = { MaterialTheme.colorScheme.primary }, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/sort/components/LibraryPerCategorySortOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/sort/components/LibraryPerCategorySortOption.kt similarity index 77% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/library/sort/components/LibraryPerCategorySortOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/library/sort/components/LibraryPerCategorySortOption.kt index 93658b11..adef17f3 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/sort/components/LibraryPerCategorySortOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/sort/components/LibraryPerCategorySortOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.library.sort.components +package ua.acclorite.book_story.ui.settings.library.sort.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SwitchWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SwitchWithTitle @Composable fun LibraryPerCategorySortOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/sort/components/LibrarySortOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/sort/components/LibrarySortOption.kt similarity index 93% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/library/sort/components/LibrarySortOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/library/sort/components/LibrarySortOption.kt index 7938b98b..e00e5fcb 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/sort/components/LibrarySortOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/sort/components/LibrarySortOption.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.library.sort.components +package ua.acclorite.book_story.ui.settings.library.sort.components import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Row @@ -29,8 +29,8 @@ 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.domain.library.display.LibrarySortOrder -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.presentation.library.model.LibrarySortOrder +import ua.acclorite.book_story.ui.common.components.common.StyledText fun LazyListScope.LibrarySortOption( sortOrder: LibrarySortOrder, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/tabs/LibraryTabsSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/tabs/LibraryTabsSubcategory.kt similarity index 69% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/library/tabs/LibraryTabsSubcategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/library/tabs/LibraryTabsSubcategory.kt index af7315e5..dc38a4af 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/tabs/LibraryTabsSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/tabs/LibraryTabsSubcategory.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.library.tabs +package ua.acclorite.book_story.ui.settings.library.tabs import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.MaterialTheme @@ -14,10 +14,10 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategory -import ua.acclorite.book_story.presentation.settings.library.tabs.components.LibraryAlwaysShowDefaultTabOption -import ua.acclorite.book_story.presentation.settings.library.tabs.components.LibraryShowBookCountOption -import ua.acclorite.book_story.presentation.settings.library.tabs.components.LibraryShowCategoryTabsOption +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategory +import ua.acclorite.book_story.ui.settings.library.tabs.components.LibraryAlwaysShowDefaultTabOption +import ua.acclorite.book_story.ui.settings.library.tabs.components.LibraryShowBookCountOption +import ua.acclorite.book_story.ui.settings.library.tabs.components.LibraryShowCategoryTabsOption fun LazyListScope.LibraryTabsSubcategory( titleColor: @Composable () -> Color = { MaterialTheme.colorScheme.primary }, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/tabs/components/LibraryAlwaysShowDefaultTabOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/tabs/components/LibraryAlwaysShowDefaultTabOption.kt similarity index 78% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/library/tabs/components/LibraryAlwaysShowDefaultTabOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/library/tabs/components/LibraryAlwaysShowDefaultTabOption.kt index 2c390962..6b3af0f3 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/tabs/components/LibraryAlwaysShowDefaultTabOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/tabs/components/LibraryAlwaysShowDefaultTabOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.library.tabs.components +package ua.acclorite.book_story.ui.settings.library.tabs.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SwitchWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SwitchWithTitle @Composable fun LibraryAlwaysShowDefaultTabOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/tabs/components/LibraryShowBookCountOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/tabs/components/LibraryShowBookCountOption.kt similarity index 77% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/library/tabs/components/LibraryShowBookCountOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/library/tabs/components/LibraryShowBookCountOption.kt index 598b11fc..d54d4c64 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/tabs/components/LibraryShowBookCountOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/tabs/components/LibraryShowBookCountOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.library.tabs.components +package ua.acclorite.book_story.ui.settings.library.tabs.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SwitchWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SwitchWithTitle @Composable fun LibraryShowBookCountOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/tabs/components/LibraryShowCategoryTabsOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/tabs/components/LibraryShowCategoryTabsOption.kt similarity index 77% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/library/tabs/components/LibraryShowCategoryTabsOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/library/tabs/components/LibraryShowCategoryTabsOption.kt index 3568df2e..34a936a6 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/library/tabs/components/LibraryShowCategoryTabsOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/tabs/components/LibraryShowCategoryTabsOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.library.tabs.components +package ua.acclorite.book_story.ui.settings.library.tabs.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SwitchWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SwitchWithTitle @Composable fun LibraryShowCategoryTabsOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/ReaderSettingsCategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/ReaderSettingsCategory.kt similarity index 54% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/ReaderSettingsCategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/ReaderSettingsCategory.kt index 64f0f1d5..b8a29259 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/ReaderSettingsCategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/ReaderSettingsCategory.kt @@ -6,23 +6,23 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.reader +package ua.acclorite.book_story.ui.settings.reader import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color -import ua.acclorite.book_story.presentation.settings.reader.chapters.ChaptersSubcategory -import ua.acclorite.book_story.presentation.settings.reader.font.FontSubcategory -import ua.acclorite.book_story.presentation.settings.reader.images.ImagesSubcategory -import ua.acclorite.book_story.presentation.settings.reader.misc.MiscSubcategory -import ua.acclorite.book_story.presentation.settings.reader.padding.PaddingSubcategory -import ua.acclorite.book_story.presentation.settings.reader.progress.ProgressSubcategory -import ua.acclorite.book_story.presentation.settings.reader.reading_mode.ReadingModeSubcategory -import ua.acclorite.book_story.presentation.settings.reader.reading_speed.ReadingSpeedSubcategory -import ua.acclorite.book_story.presentation.settings.reader.system.SystemSubcategory -import ua.acclorite.book_story.presentation.settings.reader.text.TextSubcategory -import ua.acclorite.book_story.presentation.settings.reader.translator.TranslatorSubcategory +import ua.acclorite.book_story.ui.settings.reader.chapters.ChaptersSubcategory +import ua.acclorite.book_story.ui.settings.reader.font.FontSubcategory +import ua.acclorite.book_story.ui.settings.reader.images.ImagesSubcategory +import ua.acclorite.book_story.ui.settings.reader.misc.MiscSubcategory +import ua.acclorite.book_story.ui.settings.reader.padding.PaddingSubcategory +import ua.acclorite.book_story.ui.settings.reader.progress.ProgressSubcategory +import ua.acclorite.book_story.ui.settings.reader.reading_mode.ReadingModeSubcategory +import ua.acclorite.book_story.ui.settings.reader.reading_speed.ReadingSpeedSubcategory +import ua.acclorite.book_story.ui.settings.reader.system.SystemSubcategory +import ua.acclorite.book_story.ui.settings.reader.text.TextSubcategory +import ua.acclorite.book_story.ui.settings.reader.translator.TranslatorSubcategory fun LazyListScope.ReaderSettingsCategory( titleColor: @Composable () -> Color = { MaterialTheme.colorScheme.primary } diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/ReaderSettingsContent.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/ReaderSettingsContent.kt similarity index 91% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/ReaderSettingsContent.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/ReaderSettingsContent.kt index 5a5bb157..1b9371c3 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/ReaderSettingsContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/ReaderSettingsContent.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader +package ua.acclorite.book_story.ui.settings.reader import androidx.compose.foundation.lazy.LazyListState import androidx.compose.material3.ExperimentalMaterial3Api diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/ReaderSettingsLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/ReaderSettingsLayout.kt similarity index 83% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/ReaderSettingsLayout.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/ReaderSettingsLayout.kt index 9f706e54..a081c6b9 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/ReaderSettingsLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/ReaderSettingsLayout.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader +package ua.acclorite.book_story.ui.settings.reader import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize @@ -12,7 +12,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyListState import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar +import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar @Composable fun ReaderSettingsLayout( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/ReaderSettingsScaffold.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/ReaderSettingsScaffold.kt similarity index 96% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/ReaderSettingsScaffold.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/ReaderSettingsScaffold.kt index 15d6bfec..62eb8e3a 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/ReaderSettingsScaffold.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/ReaderSettingsScaffold.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader +package ua.acclorite.book_story.ui.settings.reader import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/ReaderSettingsTopBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/ReaderSettingsTopBar.kt similarity index 84% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/ReaderSettingsTopBar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/ReaderSettingsTopBar.kt index 35b15b83..81eb33fc 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/ReaderSettingsTopBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/ReaderSettingsTopBar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader +package ua.acclorite.book_story.ui.settings.reader import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.LargeTopAppBar @@ -14,8 +14,8 @@ import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.StyledText -import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton +import ua.acclorite.book_story.ui.common.components.common.StyledText +import ua.acclorite.book_story.ui.navigator.NavigatorBackIconButton @OptIn(ExperimentalMaterial3Api::class) @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/chapters/ChaptersSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/chapters/ChaptersSubcategory.kt similarity index 78% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/chapters/ChaptersSubcategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/chapters/ChaptersSubcategory.kt index b92270c2..be733f7b 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/chapters/ChaptersSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/chapters/ChaptersSubcategory.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.reader.chapters +package ua.acclorite.book_story.ui.settings.reader.chapters import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.MaterialTheme @@ -14,8 +14,8 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategory -import ua.acclorite.book_story.presentation.settings.reader.chapters.components.ChapterTitleAlignmentOption +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategory +import ua.acclorite.book_story.ui.settings.reader.chapters.components.ChapterTitleAlignmentOption fun LazyListScope.ChaptersSubcategory( titleColor: @Composable () -> Color = { MaterialTheme.colorScheme.primary }, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/chapters/components/ChapterTitleAlignmentOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/chapters/components/ChapterTitleAlignmentOption.kt similarity index 79% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/chapters/components/ChapterTitleAlignmentOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/chapters/components/ChapterTitleAlignmentOption.kt index dec0a2d0..5993e681 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/chapters/components/ChapterTitleAlignmentOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/chapters/components/ChapterTitleAlignmentOption.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.chapters.components +package ua.acclorite.book_story.ui.settings.reader.chapters.components import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -12,11 +12,11 @@ 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.domain.reader.ReaderTextAlignment -import ua.acclorite.book_story.domain.ui.ButtonItem -import ua.acclorite.book_story.presentation.core.components.settings.SegmentedButtonWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.presentation.main.MainEvent +import ua.acclorite.book_story.presentation.main.MainModel +import ua.acclorite.book_story.presentation.reader.model.ReaderTextAlignment +import ua.acclorite.book_story.ui.common.components.settings.SegmentedButtonWithTitle +import ua.acclorite.book_story.ui.common.model.ButtonItem @Composable fun ChapterTitleAlignmentOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/font/FontSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/FontSubcategory.kt similarity index 65% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/font/FontSubcategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/FontSubcategory.kt index 7a570604..da24b5f2 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/font/FontSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/FontSubcategory.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.reader.font +package ua.acclorite.book_story.ui.settings.reader.font import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.MaterialTheme @@ -14,12 +14,12 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategory -import ua.acclorite.book_story.presentation.settings.reader.font.components.FontFamilyOption -import ua.acclorite.book_story.presentation.settings.reader.font.components.FontSizeOption -import ua.acclorite.book_story.presentation.settings.reader.font.components.FontStyleOption -import ua.acclorite.book_story.presentation.settings.reader.font.components.FontThicknessOption -import ua.acclorite.book_story.presentation.settings.reader.font.components.LetterSpacingOption +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategory +import ua.acclorite.book_story.ui.settings.reader.font.components.FontFamilyOption +import ua.acclorite.book_story.ui.settings.reader.font.components.FontSizeOption +import ua.acclorite.book_story.ui.settings.reader.font.components.FontStyleOption +import ua.acclorite.book_story.ui.settings.reader.font.components.FontThicknessOption +import ua.acclorite.book_story.ui.settings.reader.font.components.LetterSpacingOption fun LazyListScope.FontSubcategory( titleColor: @Composable () -> Color = { MaterialTheme.colorScheme.primary }, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/font/components/FontFamilyOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontFamilyOption.kt similarity index 76% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/font/components/FontFamilyOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontFamilyOption.kt index a1f79ffe..a8fd10cf 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/font/components/FontFamilyOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontFamilyOption.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.font.components +package ua.acclorite.book_story.ui.settings.reader.font.components import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -13,11 +13,11 @@ 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.domain.ui.ButtonItem -import ua.acclorite.book_story.presentation.core.components.settings.ChipsWithTitle -import ua.acclorite.book_story.presentation.core.constants.provideFonts -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.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/presentation/settings/reader/font/components/FontSizeOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontSizeOption.kt similarity index 76% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/font/components/FontSizeOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontSizeOption.kt index fb96bdc5..67bc5432 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/font/components/FontSizeOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontSizeOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.font.components +package ua.acclorite.book_story.ui.settings.reader.font.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SliderWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SliderWithTitle @Composable fun FontSizeOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/font/components/FontStyleOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontStyleOption.kt similarity index 82% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/font/components/FontStyleOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontStyleOption.kt index 04fe2e9f..158013ca 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/font/components/FontStyleOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontStyleOption.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.font.components +package ua.acclorite.book_story.ui.settings.reader.font.components import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -14,11 +14,11 @@ import androidx.compose.ui.text.font.FontStyle import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.ui.ButtonItem -import ua.acclorite.book_story.presentation.core.components.settings.SegmentedButtonWithTitle -import ua.acclorite.book_story.presentation.core.constants.provideFonts -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.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/presentation/settings/reader/font/components/FontThicknessOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontThicknessOption.kt similarity index 80% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/font/components/FontThicknessOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontThicknessOption.kt index a2fcd26c..5be8bb55 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/font/components/FontThicknessOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontThicknessOption.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.font.components +package ua.acclorite.book_story.ui.settings.reader.font.components import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -13,12 +13,12 @@ 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.domain.reader.ReaderFontThickness -import ua.acclorite.book_story.domain.ui.ButtonItem -import ua.acclorite.book_story.presentation.core.components.settings.ChipsWithTitle -import ua.acclorite.book_story.presentation.core.constants.provideFonts -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.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/presentation/settings/reader/font/components/LetterSpacingOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/LetterSpacingOption.kt similarity index 76% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/font/components/LetterSpacingOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/LetterSpacingOption.kt index 15a0f0df..0925d3f7 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/font/components/LetterSpacingOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/LetterSpacingOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.font.components +package ua.acclorite.book_story.ui.settings.reader.font.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SliderWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SliderWithTitle @Composable fun LetterSpacingOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/images/ImagesSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/ImagesSubcategory.kt similarity index 64% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/images/ImagesSubcategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/ImagesSubcategory.kt index 42499889..69f60e60 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/images/ImagesSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/ImagesSubcategory.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.reader.images +package ua.acclorite.book_story.ui.settings.reader.images import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.MaterialTheme @@ -14,12 +14,12 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategory -import ua.acclorite.book_story.presentation.settings.reader.images.components.ImagesAlignmentOption -import ua.acclorite.book_story.presentation.settings.reader.images.components.ImagesColorEffectsOption -import ua.acclorite.book_story.presentation.settings.reader.images.components.ImagesCornersRoundnessOption -import ua.acclorite.book_story.presentation.settings.reader.images.components.ImagesOption -import ua.acclorite.book_story.presentation.settings.reader.images.components.ImagesWidthOption +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategory +import ua.acclorite.book_story.ui.settings.reader.images.components.ImagesAlignmentOption +import ua.acclorite.book_story.ui.settings.reader.images.components.ImagesColorEffectsOption +import ua.acclorite.book_story.ui.settings.reader.images.components.ImagesCornersRoundnessOption +import ua.acclorite.book_story.ui.settings.reader.images.components.ImagesOption +import ua.acclorite.book_story.ui.settings.reader.images.components.ImagesWidthOption fun LazyListScope.ImagesSubcategory( titleColor: @Composable () -> Color = { MaterialTheme.colorScheme.primary }, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/images/components/ImagesAlignmentOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/components/ImagesAlignmentOption.kt similarity index 80% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/images/components/ImagesAlignmentOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/components/ImagesAlignmentOption.kt index f15dbc61..f0f96554 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/images/components/ImagesAlignmentOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/components/ImagesAlignmentOption.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.images.components +package ua.acclorite.book_story.ui.settings.reader.images.components import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -12,11 +12,11 @@ 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.domain.ui.ButtonItem -import ua.acclorite.book_story.domain.util.HorizontalAlignment -import ua.acclorite.book_story.presentation.core.components.settings.SegmentedButtonWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.presentation.main.MainEvent +import ua.acclorite.book_story.presentation.main.MainModel +import ua.acclorite.book_story.presentation.main.model.HorizontalAlignment +import ua.acclorite.book_story.ui.common.components.settings.SegmentedButtonWithTitle +import ua.acclorite.book_story.ui.common.model.ButtonItem import ua.acclorite.book_story.ui.theme.ExpandingTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/images/components/ImagesColorEffectsOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/components/ImagesColorEffectsOption.kt similarity index 83% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/images/components/ImagesColorEffectsOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/components/ImagesColorEffectsOption.kt index 8eb6ac7c..f1a7365d 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/images/components/ImagesColorEffectsOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/components/ImagesColorEffectsOption.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.images.components +package ua.acclorite.book_story.ui.settings.reader.images.components import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -12,11 +12,11 @@ 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.domain.reader.ReaderColorEffects -import ua.acclorite.book_story.domain.ui.ButtonItem -import ua.acclorite.book_story.presentation.core.components.settings.ChipsWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.presentation.main.MainEvent +import ua.acclorite.book_story.presentation.main.MainModel +import ua.acclorite.book_story.presentation.reader.model.ReaderColorEffects +import ua.acclorite.book_story.ui.common.components.settings.ChipsWithTitle +import ua.acclorite.book_story.ui.common.model.ButtonItem import ua.acclorite.book_story.ui.theme.ExpandingTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/images/components/ImagesCornersRoundnessOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/components/ImagesCornersRoundnessOption.kt similarity index 80% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/images/components/ImagesCornersRoundnessOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/components/ImagesCornersRoundnessOption.kt index f3544846..e8760ca5 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/images/components/ImagesCornersRoundnessOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/components/ImagesCornersRoundnessOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.images.components +package ua.acclorite.book_story.ui.settings.reader.images.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SliderWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SliderWithTitle import ua.acclorite.book_story.ui.theme.ExpandingTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/images/components/ImagesOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/components/ImagesOption.kt similarity index 77% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/images/components/ImagesOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/components/ImagesOption.kt index 4987ed37..e8727907 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/images/components/ImagesOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/components/ImagesOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.images.components +package ua.acclorite.book_story.ui.settings.reader.images.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SwitchWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SwitchWithTitle @Composable fun ImagesOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/images/components/ImagesWidthOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/components/ImagesWidthOption.kt similarity index 79% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/images/components/ImagesWidthOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/components/ImagesWidthOption.kt index 80d85f1f..d7901b6e 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/images/components/ImagesWidthOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/components/ImagesWidthOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.images.components +package ua.acclorite.book_story.ui.settings.reader.images.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SliderWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SliderWithTitle import ua.acclorite.book_story.ui.theme.ExpandingTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/misc/MiscSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/misc/MiscSubcategory.kt similarity index 70% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/misc/MiscSubcategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/misc/MiscSubcategory.kt index d71be456..be5f2d12 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/misc/MiscSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/misc/MiscSubcategory.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.reader.misc +package ua.acclorite.book_story.ui.settings.reader.misc import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.MaterialTheme @@ -14,10 +14,10 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategory -import ua.acclorite.book_story.presentation.settings.reader.misc.components.FullscreenOption -import ua.acclorite.book_story.presentation.settings.reader.misc.components.HideBarsOnFastScrollOption -import ua.acclorite.book_story.presentation.settings.reader.misc.components.KeepScreenOnOption +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategory +import ua.acclorite.book_story.ui.settings.reader.misc.components.FullscreenOption +import ua.acclorite.book_story.ui.settings.reader.misc.components.HideBarsOnFastScrollOption +import ua.acclorite.book_story.ui.settings.reader.misc.components.KeepScreenOnOption fun LazyListScope.MiscSubcategory( titleColor: @Composable () -> Color = { MaterialTheme.colorScheme.primary }, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/misc/components/FullscreenOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/misc/components/FullscreenOption.kt similarity index 78% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/misc/components/FullscreenOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/misc/components/FullscreenOption.kt index 2b49f17a..29fcd838 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/misc/components/FullscreenOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/misc/components/FullscreenOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.misc.components +package ua.acclorite.book_story.ui.settings.reader.misc.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SwitchWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SwitchWithTitle @Composable fun FullscreenOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/misc/components/HideBarsOnFastScrollOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/misc/components/HideBarsOnFastScrollOption.kt similarity index 76% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/misc/components/HideBarsOnFastScrollOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/misc/components/HideBarsOnFastScrollOption.kt index 6bce6f62..46e6d780 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/misc/components/HideBarsOnFastScrollOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/misc/components/HideBarsOnFastScrollOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.misc.components +package ua.acclorite.book_story.ui.settings.reader.misc.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SwitchWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SwitchWithTitle @Composable fun HideBarsOnFastScrollOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/misc/components/KeepScreenOnOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/misc/components/KeepScreenOnOption.kt similarity index 76% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/misc/components/KeepScreenOnOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/misc/components/KeepScreenOnOption.kt index 80b56f60..ce045704 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/misc/components/KeepScreenOnOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/misc/components/KeepScreenOnOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.misc.components +package ua.acclorite.book_story.ui.settings.reader.misc.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SwitchWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SwitchWithTitle @Composable fun KeepScreenOnOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/padding/PaddingSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/padding/PaddingSubcategory.kt similarity index 67% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/padding/PaddingSubcategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/padding/PaddingSubcategory.kt index fa6dc7ca..7cc269e4 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/padding/PaddingSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/padding/PaddingSubcategory.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.reader.padding +package ua.acclorite.book_story.ui.settings.reader.padding import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.MaterialTheme @@ -14,11 +14,11 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategory -import ua.acclorite.book_story.presentation.settings.reader.padding.components.BottomBarPaddingOption -import ua.acclorite.book_story.presentation.settings.reader.padding.components.CutoutPaddingOption -import ua.acclorite.book_story.presentation.settings.reader.padding.components.SidePaddingOption -import ua.acclorite.book_story.presentation.settings.reader.padding.components.VerticalPaddingOption +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategory +import ua.acclorite.book_story.ui.settings.reader.padding.components.BottomBarPaddingOption +import ua.acclorite.book_story.ui.settings.reader.padding.components.CutoutPaddingOption +import ua.acclorite.book_story.ui.settings.reader.padding.components.SidePaddingOption +import ua.acclorite.book_story.ui.settings.reader.padding.components.VerticalPaddingOption fun LazyListScope.PaddingSubcategory( titleColor: @Composable () -> Color = { MaterialTheme.colorScheme.primary }, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/padding/components/BottomBarPaddingOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/padding/components/BottomBarPaddingOption.kt similarity index 76% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/padding/components/BottomBarPaddingOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/padding/components/BottomBarPaddingOption.kt index b25ca5c9..925c61bb 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/padding/components/BottomBarPaddingOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/padding/components/BottomBarPaddingOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.padding.components +package ua.acclorite.book_story.ui.settings.reader.padding.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SliderWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SliderWithTitle @Composable fun BottomBarPaddingOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/padding/components/CutoutPaddingOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/padding/components/CutoutPaddingOption.kt similarity index 78% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/padding/components/CutoutPaddingOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/padding/components/CutoutPaddingOption.kt index b980c4c8..f9da8be8 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/padding/components/CutoutPaddingOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/padding/components/CutoutPaddingOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.padding.components +package ua.acclorite.book_story.ui.settings.reader.padding.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SwitchWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SwitchWithTitle @Composable fun CutoutPaddingOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/padding/components/SidePaddingOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/padding/components/SidePaddingOption.kt similarity index 76% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/padding/components/SidePaddingOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/padding/components/SidePaddingOption.kt index 46f225f8..51abcdd8 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/padding/components/SidePaddingOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/padding/components/SidePaddingOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.padding.components +package ua.acclorite.book_story.ui.settings.reader.padding.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SliderWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SliderWithTitle @Composable fun SidePaddingOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/padding/components/VerticalPaddingOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/padding/components/VerticalPaddingOption.kt similarity index 76% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/padding/components/VerticalPaddingOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/padding/components/VerticalPaddingOption.kt index 9a5e7b5d..21fa45ba 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/padding/components/VerticalPaddingOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/padding/components/VerticalPaddingOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.padding.components +package ua.acclorite.book_story.ui.settings.reader.padding.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SliderWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SliderWithTitle @Composable fun VerticalPaddingOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/ProgressSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/ProgressSubcategory.kt similarity index 64% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/ProgressSubcategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/ProgressSubcategory.kt index fca1eb92..17881ee9 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/ProgressSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/ProgressSubcategory.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.reader.progress +package ua.acclorite.book_story.ui.settings.reader.progress import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.MaterialTheme @@ -14,12 +14,12 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategory -import ua.acclorite.book_story.presentation.settings.reader.progress.components.ProgressBarAlignmentOption -import ua.acclorite.book_story.presentation.settings.reader.progress.components.ProgressBarFontSizeOption -import ua.acclorite.book_story.presentation.settings.reader.progress.components.ProgressBarOption -import ua.acclorite.book_story.presentation.settings.reader.progress.components.ProgressBarPaddingOption -import ua.acclorite.book_story.presentation.settings.reader.progress.components.ProgressCountOption +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategory +import ua.acclorite.book_story.ui.settings.reader.progress.components.ProgressBarAlignmentOption +import ua.acclorite.book_story.ui.settings.reader.progress.components.ProgressBarFontSizeOption +import ua.acclorite.book_story.ui.settings.reader.progress.components.ProgressBarOption +import ua.acclorite.book_story.ui.settings.reader.progress.components.ProgressBarPaddingOption +import ua.acclorite.book_story.ui.settings.reader.progress.components.ProgressCountOption fun LazyListScope.ProgressSubcategory( titleColor: @Composable () -> Color = { MaterialTheme.colorScheme.primary }, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/components/ProgressBarAlignmentOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/components/ProgressBarAlignmentOption.kt similarity index 80% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/components/ProgressBarAlignmentOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/components/ProgressBarAlignmentOption.kt index 50e50adf..f8603cd5 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/components/ProgressBarAlignmentOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/components/ProgressBarAlignmentOption.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.progress.components +package ua.acclorite.book_story.ui.settings.reader.progress.components import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -12,11 +12,11 @@ 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.domain.ui.ButtonItem -import ua.acclorite.book_story.domain.util.HorizontalAlignment -import ua.acclorite.book_story.presentation.core.components.settings.SegmentedButtonWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.presentation.main.MainEvent +import ua.acclorite.book_story.presentation.main.MainModel +import ua.acclorite.book_story.presentation.main.model.HorizontalAlignment +import ua.acclorite.book_story.ui.common.components.settings.SegmentedButtonWithTitle +import ua.acclorite.book_story.ui.common.model.ButtonItem import ua.acclorite.book_story.ui.theme.ExpandingTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/components/ProgressBarFontSizeOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/components/ProgressBarFontSizeOption.kt similarity index 80% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/components/ProgressBarFontSizeOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/components/ProgressBarFontSizeOption.kt index c162ca7f..ac5e39b5 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/components/ProgressBarFontSizeOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/components/ProgressBarFontSizeOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.progress.components +package ua.acclorite.book_story.ui.settings.reader.progress.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SliderWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SliderWithTitle import ua.acclorite.book_story.ui.theme.ExpandingTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/components/ProgressBarOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/components/ProgressBarOption.kt similarity index 78% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/components/ProgressBarOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/components/ProgressBarOption.kt index c4bf61b3..8e261a32 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/components/ProgressBarOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/components/ProgressBarOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.progress.components +package ua.acclorite.book_story.ui.settings.reader.progress.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SwitchWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SwitchWithTitle @Composable fun ProgressBarOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/components/ProgressBarPaddingOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/components/ProgressBarPaddingOption.kt similarity index 79% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/components/ProgressBarPaddingOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/components/ProgressBarPaddingOption.kt index eb0ea1c1..9fdf14f7 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/components/ProgressBarPaddingOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/components/ProgressBarPaddingOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.progress.components +package ua.acclorite.book_story.ui.settings.reader.progress.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SliderWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SliderWithTitle import ua.acclorite.book_story.ui.theme.ExpandingTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/components/ProgressCountOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/components/ProgressCountOption.kt similarity index 77% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/components/ProgressCountOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/components/ProgressCountOption.kt index 5a7f2846..3fe52c5a 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/components/ProgressCountOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/components/ProgressCountOption.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.progress.components +package ua.acclorite.book_story.ui.settings.reader.progress.components import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -12,11 +12,11 @@ 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.domain.reader.ReaderProgressCount -import ua.acclorite.book_story.domain.ui.ButtonItem -import ua.acclorite.book_story.presentation.core.components.settings.SegmentedButtonWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.presentation.main.MainEvent +import ua.acclorite.book_story.presentation.main.MainModel +import ua.acclorite.book_story.presentation.reader.model.ReaderProgressCount +import ua.acclorite.book_story.ui.common.components.settings.SegmentedButtonWithTitle +import ua.acclorite.book_story.ui.common.model.ButtonItem @Composable fun ProgressCountOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_mode/ReadingModeSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/ReadingModeSubcategory.kt similarity index 63% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_mode/ReadingModeSubcategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/ReadingModeSubcategory.kt index 327b3e57..a2f657b8 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_mode/ReadingModeSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/ReadingModeSubcategory.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.reader.reading_mode +package ua.acclorite.book_story.ui.settings.reader.reading_mode import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.MaterialTheme @@ -14,12 +14,12 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategory -import ua.acclorite.book_story.presentation.settings.reader.reading_mode.components.HorizontalGestureAlphaAnimOption -import ua.acclorite.book_story.presentation.settings.reader.reading_mode.components.HorizontalGestureOption -import ua.acclorite.book_story.presentation.settings.reader.reading_mode.components.HorizontalGesturePullAnimOption -import ua.acclorite.book_story.presentation.settings.reader.reading_mode.components.HorizontalGestureScrollOption -import ua.acclorite.book_story.presentation.settings.reader.reading_mode.components.HorizontalGestureSensitivityOption +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategory +import ua.acclorite.book_story.ui.settings.reader.reading_mode.components.HorizontalGestureAlphaAnimOption +import ua.acclorite.book_story.ui.settings.reader.reading_mode.components.HorizontalGestureOption +import ua.acclorite.book_story.ui.settings.reader.reading_mode.components.HorizontalGesturePullAnimOption +import ua.acclorite.book_story.ui.settings.reader.reading_mode.components.HorizontalGestureScrollOption +import ua.acclorite.book_story.ui.settings.reader.reading_mode.components.HorizontalGestureSensitivityOption fun LazyListScope.ReadingModeSubcategory( titleColor: @Composable () -> Color = { MaterialTheme.colorScheme.primary }, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_mode/components/HorizontalGestureAlphaAnimOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/components/HorizontalGestureAlphaAnimOption.kt similarity index 79% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_mode/components/HorizontalGestureAlphaAnimOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/components/HorizontalGestureAlphaAnimOption.kt index 6b55e901..2149107e 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_mode/components/HorizontalGestureAlphaAnimOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/components/HorizontalGestureAlphaAnimOption.kt @@ -4,17 +4,17 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.reading_mode.components +package ua.acclorite.book_story.ui.settings.reader.reading_mode.components import androidx.compose.runtime.Composable 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.domain.reader.ReaderHorizontalGesture -import ua.acclorite.book_story.presentation.core.components.settings.SwitchWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.presentation.main.MainEvent +import ua.acclorite.book_story.presentation.main.MainModel +import ua.acclorite.book_story.presentation.reader.model.ReaderHorizontalGesture +import ua.acclorite.book_story.ui.common.components.settings.SwitchWithTitle import ua.acclorite.book_story.ui.theme.ExpandingTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_mode/components/HorizontalGestureOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/components/HorizontalGestureOption.kt similarity index 80% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_mode/components/HorizontalGestureOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/components/HorizontalGestureOption.kt index 2ff94289..49c9e9df 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_mode/components/HorizontalGestureOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/components/HorizontalGestureOption.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.reading_mode.components +package ua.acclorite.book_story.ui.settings.reader.reading_mode.components import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -12,11 +12,11 @@ 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.domain.reader.ReaderHorizontalGesture -import ua.acclorite.book_story.domain.ui.ButtonItem -import ua.acclorite.book_story.presentation.core.components.settings.ChipsWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.presentation.main.MainEvent +import ua.acclorite.book_story.presentation.main.MainModel +import ua.acclorite.book_story.presentation.reader.model.ReaderHorizontalGesture +import ua.acclorite.book_story.ui.common.components.settings.ChipsWithTitle +import ua.acclorite.book_story.ui.common.model.ButtonItem @Composable fun HorizontalGestureOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_mode/components/HorizontalGesturePullAnimOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/components/HorizontalGesturePullAnimOption.kt similarity index 78% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_mode/components/HorizontalGesturePullAnimOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/components/HorizontalGesturePullAnimOption.kt index 28ca73ce..2b27e3e5 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_mode/components/HorizontalGesturePullAnimOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/components/HorizontalGesturePullAnimOption.kt @@ -4,17 +4,17 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.reading_mode.components +package ua.acclorite.book_story.ui.settings.reader.reading_mode.components import androidx.compose.runtime.Composable 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.domain.reader.ReaderHorizontalGesture -import ua.acclorite.book_story.presentation.core.components.settings.SwitchWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.presentation.main.MainEvent +import ua.acclorite.book_story.presentation.main.MainModel +import ua.acclorite.book_story.presentation.reader.model.ReaderHorizontalGesture +import ua.acclorite.book_story.ui.common.components.settings.SwitchWithTitle import ua.acclorite.book_story.ui.theme.ExpandingTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_mode/components/HorizontalGestureScrollOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/components/HorizontalGestureScrollOption.kt similarity index 76% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_mode/components/HorizontalGestureScrollOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/components/HorizontalGestureScrollOption.kt index 5e5ceb37..2c434d2e 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_mode/components/HorizontalGestureScrollOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/components/HorizontalGestureScrollOption.kt @@ -4,17 +4,17 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.reading_mode.components +package ua.acclorite.book_story.ui.settings.reader.reading_mode.components import androidx.compose.runtime.Composable 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.domain.reader.ReaderHorizontalGesture -import ua.acclorite.book_story.presentation.core.components.settings.SliderWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.presentation.main.MainEvent +import ua.acclorite.book_story.presentation.main.MainModel +import ua.acclorite.book_story.presentation.reader.model.ReaderHorizontalGesture +import ua.acclorite.book_story.ui.common.components.settings.SliderWithTitle import ua.acclorite.book_story.ui.theme.ExpandingTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_mode/components/HorizontalGestureSensitivityOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/components/HorizontalGestureSensitivityOption.kt similarity index 77% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_mode/components/HorizontalGestureSensitivityOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/components/HorizontalGestureSensitivityOption.kt index 127656c4..56b42296 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_mode/components/HorizontalGestureSensitivityOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/components/HorizontalGestureSensitivityOption.kt @@ -4,17 +4,17 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.reading_mode.components +package ua.acclorite.book_story.ui.settings.reader.reading_mode.components import androidx.compose.runtime.Composable 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.domain.reader.ReaderHorizontalGesture -import ua.acclorite.book_story.presentation.core.components.settings.SliderWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.presentation.main.MainEvent +import ua.acclorite.book_story.presentation.main.MainModel +import ua.acclorite.book_story.presentation.reader.model.ReaderHorizontalGesture +import ua.acclorite.book_story.ui.common.components.settings.SliderWithTitle import ua.acclorite.book_story.ui.theme.ExpandingTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_speed/ReadingSpeedSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/ReadingSpeedSubcategory.kt similarity index 63% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_speed/ReadingSpeedSubcategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/ReadingSpeedSubcategory.kt index ac175962..f9f5f414 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_speed/ReadingSpeedSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/ReadingSpeedSubcategory.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.reader.reading_speed +package ua.acclorite.book_story.ui.settings.reader.reading_speed import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.MaterialTheme @@ -14,12 +14,12 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategory -import ua.acclorite.book_story.presentation.settings.reader.reading_speed.components.HighlightedReadingOption -import ua.acclorite.book_story.presentation.settings.reader.reading_speed.components.HighlightedReadingThicknessOption -import ua.acclorite.book_story.presentation.settings.reader.reading_speed.components.PerceptionExpanderOption -import ua.acclorite.book_story.presentation.settings.reader.reading_speed.components.PerceptionExpanderPaddingOption -import ua.acclorite.book_story.presentation.settings.reader.reading_speed.components.PerceptionExpanderThicknessOption +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategory +import ua.acclorite.book_story.ui.settings.reader.reading_speed.components.HighlightedReadingOption +import ua.acclorite.book_story.ui.settings.reader.reading_speed.components.HighlightedReadingThicknessOption +import ua.acclorite.book_story.ui.settings.reader.reading_speed.components.PerceptionExpanderOption +import ua.acclorite.book_story.ui.settings.reader.reading_speed.components.PerceptionExpanderPaddingOption +import ua.acclorite.book_story.ui.settings.reader.reading_speed.components.PerceptionExpanderThicknessOption fun LazyListScope.ReadingSpeedSubcategory( titleColor: @Composable () -> Color = { MaterialTheme.colorScheme.primary }, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_speed/components/HighlightedReadingOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HighlightedReadingOption.kt similarity index 78% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_speed/components/HighlightedReadingOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HighlightedReadingOption.kt index 1da39628..fc79c390 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_speed/components/HighlightedReadingOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HighlightedReadingOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.reading_speed.components +package ua.acclorite.book_story.ui.settings.reader.reading_speed.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SwitchWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SwitchWithTitle @Composable fun HighlightedReadingOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_speed/components/HighlightedReadingThicknessOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HighlightedReadingThicknessOption.kt similarity index 81% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_speed/components/HighlightedReadingThicknessOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HighlightedReadingThicknessOption.kt index 15e25084..118d8a42 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_speed/components/HighlightedReadingThicknessOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HighlightedReadingThicknessOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.reading_speed.components +package ua.acclorite.book_story.ui.settings.reader.reading_speed.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SliderWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SliderWithTitle import ua.acclorite.book_story.ui.theme.ExpandingTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_speed/components/PerceptionExpanderOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/PerceptionExpanderOption.kt similarity index 78% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_speed/components/PerceptionExpanderOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/PerceptionExpanderOption.kt index e97d6fe6..63a1d6d8 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_speed/components/PerceptionExpanderOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/PerceptionExpanderOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.reading_speed.components +package ua.acclorite.book_story.ui.settings.reader.reading_speed.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SwitchWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SwitchWithTitle @Composable fun PerceptionExpanderOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_speed/components/PerceptionExpanderPaddingOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/PerceptionExpanderPaddingOption.kt similarity index 80% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_speed/components/PerceptionExpanderPaddingOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/PerceptionExpanderPaddingOption.kt index f48ae565..21283fbc 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_speed/components/PerceptionExpanderPaddingOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/PerceptionExpanderPaddingOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.reading_speed.components +package ua.acclorite.book_story.ui.settings.reader.reading_speed.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SliderWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SliderWithTitle import ua.acclorite.book_story.ui.theme.ExpandingTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_speed/components/PerceptionExpanderThicknessOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/PerceptionExpanderThicknessOption.kt similarity index 80% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_speed/components/PerceptionExpanderThicknessOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/PerceptionExpanderThicknessOption.kt index c416de57..ed672440 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/reading_speed/components/PerceptionExpanderThicknessOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/PerceptionExpanderThicknessOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.reading_speed.components +package ua.acclorite.book_story.ui.settings.reader.reading_speed.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SliderWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SliderWithTitle import ua.acclorite.book_story.ui.theme.ExpandingTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/system/SystemSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/system/SystemSubcategory.kt similarity index 70% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/system/SystemSubcategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/system/SystemSubcategory.kt index e0ca2fea..9baa99d2 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/system/SystemSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/system/SystemSubcategory.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.reader.system +package ua.acclorite.book_story.ui.settings.reader.system import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.MaterialTheme @@ -14,10 +14,10 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategory -import ua.acclorite.book_story.presentation.settings.reader.system.components.CustomScreenBrightnessOption -import ua.acclorite.book_story.presentation.settings.reader.system.components.ScreenBrightnessOption -import ua.acclorite.book_story.presentation.settings.reader.system.components.ScreenOrientationOption +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategory +import ua.acclorite.book_story.ui.settings.reader.system.components.CustomScreenBrightnessOption +import ua.acclorite.book_story.ui.settings.reader.system.components.ScreenBrightnessOption +import ua.acclorite.book_story.ui.settings.reader.system.components.ScreenOrientationOption fun LazyListScope.SystemSubcategory( titleColor: @Composable () -> Color = { MaterialTheme.colorScheme.primary }, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/system/components/CustomScreenBrightnessOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/system/components/CustomScreenBrightnessOption.kt similarity index 77% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/system/components/CustomScreenBrightnessOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/system/components/CustomScreenBrightnessOption.kt index 281a3504..7f3270f3 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/system/components/CustomScreenBrightnessOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/system/components/CustomScreenBrightnessOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.system.components +package ua.acclorite.book_story.ui.settings.reader.system.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SwitchWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SwitchWithTitle @Composable fun CustomScreenBrightnessOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/system/components/ScreenBrightnessOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/system/components/ScreenBrightnessOption.kt similarity index 79% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/system/components/ScreenBrightnessOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/system/components/ScreenBrightnessOption.kt index d61077c0..27f422ba 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/system/components/ScreenBrightnessOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/system/components/ScreenBrightnessOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.system.components +package ua.acclorite.book_story.ui.settings.reader.system.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SliderWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SliderWithTitle import ua.acclorite.book_story.ui.theme.ExpandingTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/system/components/ScreenOrientationOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/system/components/ScreenOrientationOption.kt similarity index 82% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/system/components/ScreenOrientationOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/system/components/ScreenOrientationOption.kt index 0c180f6e..90604fb6 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/system/components/ScreenOrientationOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/system/components/ScreenOrientationOption.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.system.components +package ua.acclorite.book_story.ui.settings.reader.system.components import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -12,11 +12,11 @@ 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.domain.reader.ReaderScreenOrientation -import ua.acclorite.book_story.domain.ui.ButtonItem -import ua.acclorite.book_story.presentation.core.components.settings.ChipsWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.presentation.main.MainEvent +import ua.acclorite.book_story.presentation.main.MainModel +import ua.acclorite.book_story.presentation.reader.model.ReaderScreenOrientation +import ua.acclorite.book_story.ui.common.components.settings.ChipsWithTitle +import ua.acclorite.book_story.ui.common.model.ButtonItem @Composable fun ScreenOrientationOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/text/TextSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/text/TextSubcategory.kt similarity index 67% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/text/TextSubcategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/text/TextSubcategory.kt index 273678dc..042b473b 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/text/TextSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/text/TextSubcategory.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.reader.text +package ua.acclorite.book_story.ui.settings.reader.text import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.MaterialTheme @@ -14,11 +14,11 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategory -import ua.acclorite.book_story.presentation.settings.reader.text.components.LineHeightOption -import ua.acclorite.book_story.presentation.settings.reader.text.components.ParagraphHeightOption -import ua.acclorite.book_story.presentation.settings.reader.text.components.ParagraphIndentationOption -import ua.acclorite.book_story.presentation.settings.reader.text.components.TextAlignmentOption +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategory +import ua.acclorite.book_story.ui.settings.reader.text.components.LineHeightOption +import ua.acclorite.book_story.ui.settings.reader.text.components.ParagraphHeightOption +import ua.acclorite.book_story.ui.settings.reader.text.components.ParagraphIndentationOption +import ua.acclorite.book_story.ui.settings.reader.text.components.TextAlignmentOption fun LazyListScope.TextSubcategory( titleColor: @Composable () -> Color = { MaterialTheme.colorScheme.primary }, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/text/components/LineHeightOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/text/components/LineHeightOption.kt similarity index 76% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/text/components/LineHeightOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/text/components/LineHeightOption.kt index 5ac5d77c..f0eb1cda 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/text/components/LineHeightOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/text/components/LineHeightOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.text.components +package ua.acclorite.book_story.ui.settings.reader.text.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SliderWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SliderWithTitle @Composable fun LineHeightOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/text/components/ParagraphHeightOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/text/components/ParagraphHeightOption.kt similarity index 77% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/text/components/ParagraphHeightOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/text/components/ParagraphHeightOption.kt index 7c8a7be3..86cbea00 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/text/components/ParagraphHeightOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/text/components/ParagraphHeightOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.text.components +package ua.acclorite.book_story.ui.settings.reader.text.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SliderWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SliderWithTitle @Composable fun ParagraphHeightOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/text/components/ParagraphIndentationOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/text/components/ParagraphIndentationOption.kt similarity index 77% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/text/components/ParagraphIndentationOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/text/components/ParagraphIndentationOption.kt index b3dbec0a..61933358 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/text/components/ParagraphIndentationOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/text/components/ParagraphIndentationOption.kt @@ -4,17 +4,17 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.text.components +package ua.acclorite.book_story.ui.settings.reader.text.components import androidx.compose.runtime.Composable 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.domain.reader.ReaderTextAlignment -import ua.acclorite.book_story.presentation.core.components.settings.SliderWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.presentation.main.MainEvent +import ua.acclorite.book_story.presentation.main.MainModel +import ua.acclorite.book_story.presentation.reader.model.ReaderTextAlignment +import ua.acclorite.book_story.ui.common.components.settings.SliderWithTitle import ua.acclorite.book_story.ui.theme.ExpandingTransition @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/text/components/TextAlignmentOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/text/components/TextAlignmentOption.kt similarity index 79% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/text/components/TextAlignmentOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/text/components/TextAlignmentOption.kt index 337c5c57..fbd7c4ee 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/text/components/TextAlignmentOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/text/components/TextAlignmentOption.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.text.components +package ua.acclorite.book_story.ui.settings.reader.text.components import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -12,11 +12,11 @@ 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.domain.reader.ReaderTextAlignment -import ua.acclorite.book_story.domain.ui.ButtonItem -import ua.acclorite.book_story.presentation.core.components.settings.SegmentedButtonWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.presentation.main.MainEvent +import ua.acclorite.book_story.presentation.main.MainModel +import ua.acclorite.book_story.presentation.reader.model.ReaderTextAlignment +import ua.acclorite.book_story.ui.common.components.settings.SegmentedButtonWithTitle +import ua.acclorite.book_story.ui.common.model.ButtonItem @Composable fun TextAlignmentOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/translator/TranslatorSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/translator/TranslatorSubcategory.kt similarity index 78% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/translator/TranslatorSubcategory.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/translator/TranslatorSubcategory.kt index fd89dc4e..7d87047a 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/translator/TranslatorSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/translator/TranslatorSubcategory.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.settings.reader.translator +package ua.acclorite.book_story.ui.settings.reader.translator import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.MaterialTheme @@ -14,8 +14,8 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategory -import ua.acclorite.book_story.presentation.settings.reader.translator.components.DoubleClickTranslationOption +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategory +import ua.acclorite.book_story.ui.settings.reader.translator.components.DoubleClickTranslationOption fun LazyListScope.TranslatorSubcategory( titleColor: @Composable () -> Color = { MaterialTheme.colorScheme.primary }, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/translator/components/DoubleClickTranslationOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/translator/components/DoubleClickTranslationOption.kt similarity index 79% rename from app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/translator/components/DoubleClickTranslationOption.kt rename to app/src/main/java/ua/acclorite/book_story/ui/settings/reader/translator/components/DoubleClickTranslationOption.kt index d81a786d..8945e2ee 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/translator/components/DoubleClickTranslationOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/translator/components/DoubleClickTranslationOption.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.settings.reader.translator.components +package ua.acclorite.book_story.ui.settings.reader.translator.components import androidx.compose.runtime.Composable 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.presentation.core.components.settings.SwitchWithTitle -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel +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.SwitchWithTitle @Composable fun DoubleClickTranslationOption() { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartBackHandler.kt b/app/src/main/java/ua/acclorite/book_story/ui/start/StartBackHandler.kt similarity index 87% rename from app/src/main/java/ua/acclorite/book_story/presentation/start/StartBackHandler.kt rename to app/src/main/java/ua/acclorite/book_story/ui/start/StartBackHandler.kt index 3db543ea..0a9882bb 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartBackHandler.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/start/StartBackHandler.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.start +package ua.acclorite.book_story.ui.start import androidx.activity.compose.BackHandler import androidx.compose.runtime.Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartContent.kt b/app/src/main/java/ua/acclorite/book_story/ui/start/StartContent.kt similarity index 84% rename from app/src/main/java/ua/acclorite/book_story/presentation/start/StartContent.kt rename to app/src/main/java/ua/acclorite/book_story/ui/start/StartContent.kt index 5e622a44..13d7195f 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/start/StartContent.kt @@ -4,16 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.start +package ua.acclorite.book_story.ui.start import androidx.compose.foundation.background import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import ua.acclorite.book_story.domain.navigator.StackEvent -import ua.acclorite.book_story.domain.ui.ButtonItem -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.start.StartScreen +import ua.acclorite.book_story.presentation.main.MainEvent +import ua.acclorite.book_story.presentation.navigator.StackEvent +import ua.acclorite.book_story.presentation.start.StartScreen +import ua.acclorite.book_story.ui.common.model.ButtonItem @Composable fun StartContent( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartContentTransition.kt b/app/src/main/java/ua/acclorite/book_story/ui/start/StartContentTransition.kt similarity index 91% rename from app/src/main/java/ua/acclorite/book_story/presentation/start/StartContentTransition.kt rename to app/src/main/java/ua/acclorite/book_story/ui/start/StartContentTransition.kt index d0eb416c..d7647555 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartContentTransition.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/start/StartContentTransition.kt @@ -4,14 +4,14 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.start +package ua.acclorite.book_story.ui.start import androidx.compose.animation.AnimatedContent import androidx.compose.animation.togetherWith import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import ua.acclorite.book_story.domain.navigator.StackEvent +import ua.acclorite.book_story.presentation.navigator.StackEvent import ua.acclorite.book_story.ui.theme.Transitions @Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartDone.kt b/app/src/main/java/ua/acclorite/book_story/ui/start/StartDone.kt similarity index 88% rename from app/src/main/java/ua/acclorite/book_story/presentation/start/StartDone.kt rename to app/src/main/java/ua/acclorite/book_story/ui/start/StartDone.kt index aa5f100f..d9a13fce 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartDone.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/start/StartDone.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.start +package ua.acclorite.book_story.ui.start import androidx.compose.runtime.Composable diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartDoneBottomBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/start/StartDoneBottomBar.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/start/StartDoneBottomBar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/start/StartDoneBottomBar.kt index 58f6a377..c76882ce 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartDoneBottomBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/start/StartDoneBottomBar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.start +package ua.acclorite.book_story.ui.start import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -25,7 +25,7 @@ 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.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.StyledText @Composable fun StartDoneBottomBar( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartDoneLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/start/StartDoneLayout.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/start/StartDoneLayout.kt rename to app/src/main/java/ua/acclorite/book_story/ui/start/StartDoneLayout.kt index 5d08fa3f..b7d36a4c 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartDoneLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/start/StartDoneLayout.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.start +package ua.acclorite.book_story.ui.start import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -26,7 +26,7 @@ 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.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.StyledText @Composable fun StartDoneLayout( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartDoneScaffold.kt b/app/src/main/java/ua/acclorite/book_story/ui/start/StartDoneScaffold.kt similarity index 94% rename from app/src/main/java/ua/acclorite/book_story/presentation/start/StartDoneScaffold.kt rename to app/src/main/java/ua/acclorite/book_story/ui/start/StartDoneScaffold.kt index cbe21340..cbd0fcb2 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartDoneScaffold.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/start/StartDoneScaffold.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.start +package ua.acclorite.book_story.ui.start import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.MaterialTheme diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettings.kt b/app/src/main/java/ua/acclorite/book_story/ui/start/StartSettings.kt similarity index 83% rename from app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettings.kt rename to app/src/main/java/ua/acclorite/book_story/ui/start/StartSettings.kt index 531549df..b4784a25 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettings.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/start/StartSettings.kt @@ -4,13 +4,13 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.start +package ua.acclorite.book_story.ui.start import androidx.compose.runtime.Composable -import ua.acclorite.book_story.domain.navigator.StackEvent -import ua.acclorite.book_story.domain.ui.ButtonItem -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.start.StartScreen +import ua.acclorite.book_story.presentation.main.MainEvent +import ua.acclorite.book_story.presentation.navigator.StackEvent +import ua.acclorite.book_story.presentation.start.StartScreen +import ua.acclorite.book_story.ui.common.model.ButtonItem @Composable fun StartSettings( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettingsBottomBar.kt b/app/src/main/java/ua/acclorite/book_story/ui/start/StartSettingsBottomBar.kt similarity index 90% rename from app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettingsBottomBar.kt rename to app/src/main/java/ua/acclorite/book_story/ui/start/StartSettingsBottomBar.kt index d6b8fd7d..726ce747 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettingsBottomBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/start/StartSettingsBottomBar.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.start +package ua.acclorite.book_story.ui.start import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -18,7 +18,7 @@ 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.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.StyledText @Composable fun StartSettingsBottomBar( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettingsLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/start/StartSettingsLayout.kt similarity index 77% rename from app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettingsLayout.kt rename to app/src/main/java/ua/acclorite/book_story/ui/start/StartSettingsLayout.kt index 9433ff4d..8e3ebc2b 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettingsLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/start/StartSettingsLayout.kt @@ -4,13 +4,13 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.start +package ua.acclorite.book_story.ui.start import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar +import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar @Composable fun StartSettingsLayout( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettingsLayoutAppearance.kt b/app/src/main/java/ua/acclorite/book_story/ui/start/StartSettingsLayoutAppearance.kt similarity index 79% rename from app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettingsLayoutAppearance.kt rename to app/src/main/java/ua/acclorite/book_story/ui/start/StartSettingsLayoutAppearance.kt index 5cb1763e..0505672b 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettingsLayoutAppearance.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/start/StartSettingsLayoutAppearance.kt @@ -6,13 +6,13 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.start +package ua.acclorite.book_story.ui.start import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.MaterialTheme import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.settings.appearance.theme_preferences.ThemePreferencesSubcategory +import ua.acclorite.book_story.ui.settings.appearance.theme_preferences.ThemePreferencesSubcategory fun LazyListScope.StartSettingsLayoutAppearance() { ThemePreferencesSubcategory( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettingsLayoutGeneral.kt b/app/src/main/java/ua/acclorite/book_story/ui/start/StartSettingsLayoutGeneral.kt similarity index 80% rename from app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettingsLayoutGeneral.kt rename to app/src/main/java/ua/acclorite/book_story/ui/start/StartSettingsLayoutGeneral.kt index 69d6891c..f7233de2 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettingsLayoutGeneral.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/start/StartSettingsLayoutGeneral.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.start +package ua.acclorite.book_story.ui.start import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.height @@ -17,10 +17,10 @@ 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.domain.ui.ButtonItem -import ua.acclorite.book_story.presentation.core.components.dialog.SelectableDialogItem -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle -import ua.acclorite.book_story.ui.main.MainEvent +import ua.acclorite.book_story.presentation.main.MainEvent +import ua.acclorite.book_story.ui.common.components.dialog.SelectableDialogItem +import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategoryTitle fun LazyListScope.StartSettingsLayoutGeneral( languages: List, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettingsLayoutScan.kt b/app/src/main/java/ua/acclorite/book_story/ui/start/StartSettingsLayoutScan.kt similarity index 81% rename from app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettingsLayoutScan.kt rename to app/src/main/java/ua/acclorite/book_story/ui/start/StartSettingsLayoutScan.kt index ebe9266a..254a1042 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettingsLayoutScan.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/start/StartSettingsLayoutScan.kt @@ -6,7 +6,7 @@ @file:Suppress("FunctionName") -package ua.acclorite.book_story.presentation.start +package ua.acclorite.book_story.ui.start import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.height @@ -16,8 +16,8 @@ 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.presentation.settings.browse.scan.components.BrowseScanOption -import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle +import ua.acclorite.book_story.ui.settings.browse.scan.components.BrowseScanOption +import ua.acclorite.book_story.ui.settings.components.SettingsSubcategoryTitle fun LazyListScope.StartSettingsLayoutScan() { item { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettingsScaffold.kt b/app/src/main/java/ua/acclorite/book_story/ui/start/StartSettingsScaffold.kt similarity index 95% rename from app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettingsScaffold.kt rename to app/src/main/java/ua/acclorite/book_story/ui/start/StartSettingsScaffold.kt index 8c44b861..e30e14b5 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettingsScaffold.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/start/StartSettingsScaffold.kt @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-only */ -package ua.acclorite.book_story.presentation.start +package ua.acclorite.book_story.ui.start import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box @@ -25,7 +25,7 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.common.StyledText +import ua.acclorite.book_story.ui.common.components.common.StyledText @Composable fun StartSettingsScaffold( diff --git a/app/src/main/java/ua/acclorite/book_story/ui/theme/Animations.kt b/app/src/main/java/ua/acclorite/book_story/ui/theme/Animations.kt index a33e5c31..20825e89 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/theme/Animations.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/theme/Animations.kt @@ -11,7 +11,7 @@ import androidx.compose.animation.core.tween import androidx.compose.material3.ColorScheme import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color -import ua.acclorite.book_story.domain.ui.ThemeContrast +import ua.acclorite.book_story.presentation.main.model.ThemeContrast @Composable private fun animateColor(targetColor: Color): Color { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/theme/Color.kt b/app/src/main/java/ua/acclorite/book_story/ui/theme/Color.kt index e7024da2..a458ef2b 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/theme/Color.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/theme/Color.kt @@ -12,7 +12,7 @@ import androidx.compose.material3.ColorScheme import androidx.compose.runtime.Composable import androidx.compose.runtime.Immutable import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.ui.ThemeContrast +import ua.acclorite.book_story.presentation.main.model.ThemeContrast import ua.acclorite.book_story.ui.theme.color.aquaTheme import ua.acclorite.book_story.ui.theme.color.blackTheme import ua.acclorite.book_story.ui.theme.color.blueTheme @@ -57,20 +57,13 @@ enum class Theme( companion object { fun entries(): List { return when { - Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> Theme.entries - else -> Theme.entries.dropWhile { it == DYNAMIC } + Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> entries + else -> entries.dropWhile { it == DYNAMIC } } } } } -/** - * Converting [String] into [Theme]. - */ -fun String.toTheme(): Theme { - return Theme.valueOf(this) -} - /** * Creates a colorscheme based on [Theme]. * diff --git a/app/src/main/java/ua/acclorite/book_story/ui/theme/Theme.kt b/app/src/main/java/ua/acclorite/book_story/ui/theme/Theme.kt index 7265fac6..28e89f25 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/theme/Theme.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/theme/Theme.kt @@ -16,7 +16,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.SideEffect import androidx.compose.ui.platform.LocalView import androidx.core.view.WindowCompat -import ua.acclorite.book_story.domain.ui.ThemeContrast +import ua.acclorite.book_story.presentation.main.model.ThemeContrast @Composable fun BookStoryTheme( 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 c1d00151..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 @@ -8,12 +8,10 @@ package ua.acclorite.book_story.ui.theme -import android.util.Log import androidx.compose.material3.ColorScheme import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb - -private const val THEME = "THEME" +import ua.acclorite.book_story.core.log.logD /** * This function logs all the colors of the colorScheme. @@ -33,8 +31,7 @@ fun ColorScheme.logTheme(darkTheme: Boolean): ColorScheme { return "private val $variableName$suffix = Color(0x${this.convertToHex()})\n" } - Log.i( - THEME, + logD( "Theme $suffix:\n" + "------------------------\n" + primary.convertToVal("primary") + diff --git a/app/src/main/java/ua/acclorite/book_story/ui/theme/Transitions.kt b/app/src/main/java/ua/acclorite/book_story/ui/theme/Transitions.kt index 872b9e9c..6dd4eb0e 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/theme/Transitions.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/theme/Transitions.kt @@ -30,7 +30,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.unit.dp -import ua.acclorite.book_story.presentation.core.components.common.AnimatedVisibility +import ua.acclorite.book_story.ui.common.components.common.AnimatedVisibility import kotlin.math.roundToInt object Transitions { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/theme/color/AquaTheme.kt b/app/src/main/java/ua/acclorite/book_story/ui/theme/color/AquaTheme.kt index b3016fe7..ea9482a5 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/theme/color/AquaTheme.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/theme/color/AquaTheme.kt @@ -11,7 +11,7 @@ import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color -import ua.acclorite.book_story.domain.ui.ThemeContrast +import ua.acclorite.book_story.presentation.main.model.ThemeContrast private val primaryLight = Color(0xFF116682) diff --git a/app/src/main/java/ua/acclorite/book_story/ui/theme/color/BlackTheme.kt b/app/src/main/java/ua/acclorite/book_story/ui/theme/color/BlackTheme.kt index 05aea656..8c8ee40e 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/theme/color/BlackTheme.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/theme/color/BlackTheme.kt @@ -11,7 +11,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle -import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.presentation.main.MainModel @Composable fun blackTheme(initialTheme: ColorScheme): ColorScheme { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/theme/color/BlueTheme.kt b/app/src/main/java/ua/acclorite/book_story/ui/theme/color/BlueTheme.kt index 23be04de..46998191 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/theme/color/BlueTheme.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/theme/color/BlueTheme.kt @@ -11,7 +11,7 @@ import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color -import ua.acclorite.book_story.domain.ui.ThemeContrast +import ua.acclorite.book_story.presentation.main.model.ThemeContrast private val primaryLight = Color(0xFF485D92) diff --git a/app/src/main/java/ua/acclorite/book_story/ui/theme/color/GreenTheme.kt b/app/src/main/java/ua/acclorite/book_story/ui/theme/color/GreenTheme.kt index 74bf7164..dd08c049 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/theme/color/GreenTheme.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/theme/color/GreenTheme.kt @@ -11,7 +11,7 @@ import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color -import ua.acclorite.book_story.domain.ui.ThemeContrast +import ua.acclorite.book_story.presentation.main.model.ThemeContrast private val primaryLight = Color(0xFF306A42) private val onPrimaryLight = Color(0xFFFFFFFF) diff --git a/app/src/main/java/ua/acclorite/book_story/ui/theme/color/LavenderTheme.kt b/app/src/main/java/ua/acclorite/book_story/ui/theme/color/LavenderTheme.kt index 1c062946..eee7d2d8 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/theme/color/LavenderTheme.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/theme/color/LavenderTheme.kt @@ -11,7 +11,7 @@ import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color -import ua.acclorite.book_story.domain.ui.ThemeContrast +import ua.acclorite.book_story.presentation.main.model.ThemeContrast private val primaryLight = Color(0xFF824C76) private val onPrimaryLight = Color(0xFFFFFFFF) diff --git a/app/src/main/java/ua/acclorite/book_story/ui/theme/color/MarshTheme.kt b/app/src/main/java/ua/acclorite/book_story/ui/theme/color/MarshTheme.kt index 73b88259..5c813abc 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/theme/color/MarshTheme.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/theme/color/MarshTheme.kt @@ -11,7 +11,7 @@ import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color -import ua.acclorite.book_story.domain.ui.ThemeContrast +import ua.acclorite.book_story.presentation.main.model.ThemeContrast private val primaryLight = Color(0xFF006A65) private val onPrimaryLight = Color(0xFFFFFFFF) diff --git a/app/src/main/java/ua/acclorite/book_story/ui/theme/color/PinkTheme.kt b/app/src/main/java/ua/acclorite/book_story/ui/theme/color/PinkTheme.kt index c9688a77..26f088fa 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/theme/color/PinkTheme.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/theme/color/PinkTheme.kt @@ -11,7 +11,7 @@ import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color -import ua.acclorite.book_story.domain.ui.ThemeContrast +import ua.acclorite.book_story.presentation.main.model.ThemeContrast private val primaryLight = Color(0xFF8C4A60) private val onPrimaryLight = Color(0xFFFFFFFF) diff --git a/app/src/main/java/ua/acclorite/book_story/ui/theme/color/PurpleTheme.kt b/app/src/main/java/ua/acclorite/book_story/ui/theme/color/PurpleTheme.kt index 711e8dec..05e9ab88 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/theme/color/PurpleTheme.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/theme/color/PurpleTheme.kt @@ -11,7 +11,7 @@ import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color -import ua.acclorite.book_story.domain.ui.ThemeContrast +import ua.acclorite.book_story.presentation.main.model.ThemeContrast private val primaryLight = Color(0xFF725188) private val onPrimaryLight = Color(0xFFFFFFFF) diff --git a/app/src/main/java/ua/acclorite/book_story/ui/theme/color/RedTheme.kt b/app/src/main/java/ua/acclorite/book_story/ui/theme/color/RedTheme.kt index e5c01396..d593368d 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/theme/color/RedTheme.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/theme/color/RedTheme.kt @@ -11,7 +11,7 @@ import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color -import ua.acclorite.book_story.domain.ui.ThemeContrast +import ua.acclorite.book_story.presentation.main.model.ThemeContrast private val primaryLight = Color(0xFF904A42) private val onPrimaryLight = Color(0xFFFFFFFF) diff --git a/app/src/main/java/ua/acclorite/book_story/ui/theme/color/YellowTheme.kt b/app/src/main/java/ua/acclorite/book_story/ui/theme/color/YellowTheme.kt index a954af3e..81edb962 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/theme/color/YellowTheme.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/theme/color/YellowTheme.kt @@ -11,7 +11,7 @@ import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color -import ua.acclorite.book_story.domain.ui.ThemeContrast +import ua.acclorite.book_story.presentation.main.model.ThemeContrast private val primaryLight = Color(0xFF845415) private val onPrimaryLight = Color(0xFFFFFFFF)