diff --git a/app/src/main/java/org/koitharu/kotatsu/favourites/data/FavouriteCategoriesDao.kt b/app/src/main/java/org/koitharu/kotatsu/favourites/data/FavouriteCategoriesDao.kt index 606785b10..d387a46ff 100644 --- a/app/src/main/java/org/koitharu/kotatsu/favourites/data/FavouriteCategoriesDao.kt +++ b/app/src/main/java/org/koitharu/kotatsu/favourites/data/FavouriteCategoriesDao.kt @@ -23,8 +23,8 @@ abstract class FavouriteCategoriesDao { suspend fun delete(id: Long) = setDeletedAt(id, System.currentTimeMillis()) - @Query("UPDATE favourite_categories SET title = :title, `order` = :order, `track` = :tracker WHERE category_id = :id") - abstract suspend fun update(id: Long, title: String, order: String, tracker: Boolean) + @Query("UPDATE favourite_categories SET title = :title, `order` = :order, `track` = :tracker, `show_in_lib` = :onShelf WHERE category_id = :id") + abstract suspend fun update(id: Long, title: String, order: String, tracker: Boolean, onShelf: Boolean) @Query("UPDATE favourite_categories SET `order` = :order WHERE category_id = :id") abstract suspend fun updateOrder(id: Long, order: String) diff --git a/app/src/main/java/org/koitharu/kotatsu/favourites/domain/FavouritesRepository.kt b/app/src/main/java/org/koitharu/kotatsu/favourites/domain/FavouritesRepository.kt index 1c391de8a..1db0d9b54 100644 --- a/app/src/main/java/org/koitharu/kotatsu/favourites/domain/FavouritesRepository.kt +++ b/app/src/main/java/org/koitharu/kotatsu/favourites/domain/FavouritesRepository.kt @@ -1,12 +1,18 @@ package org.koitharu.kotatsu.favourites.domain import androidx.room.withTransaction -import javax.inject.Inject -import javax.inject.Singleton -import kotlinx.coroutines.flow.* +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.filterNotNull +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.map import org.koitharu.kotatsu.base.domain.ReversibleHandle import org.koitharu.kotatsu.core.db.MangaDatabase -import org.koitharu.kotatsu.core.db.entity.* +import org.koitharu.kotatsu.core.db.entity.SortOrder +import org.koitharu.kotatsu.core.db.entity.toEntities +import org.koitharu.kotatsu.core.db.entity.toEntity +import org.koitharu.kotatsu.core.db.entity.toManga +import org.koitharu.kotatsu.core.db.entity.toMangaTags import org.koitharu.kotatsu.core.model.FavouriteCategory import org.koitharu.kotatsu.favourites.data.FavouriteCategoryEntity import org.koitharu.kotatsu.favourites.data.FavouriteEntity @@ -15,6 +21,8 @@ import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.tracker.work.TrackerNotificationChannels import org.koitharu.kotatsu.utils.ext.mapItems +import javax.inject.Inject +import javax.inject.Singleton @Singleton class FavouritesRepository @Inject constructor( @@ -83,7 +91,12 @@ class FavouritesRepository @Inject constructor( return db.favouriteCategoriesDao.find(id.toInt()).toFavouriteCategory() } - suspend fun createCategory(title: String, sortOrder: SortOrder, isTrackerEnabled: Boolean): FavouriteCategory { + suspend fun createCategory( + title: String, + sortOrder: SortOrder, + isTrackerEnabled: Boolean, + isVisibleOnShelf: Boolean, + ): FavouriteCategory { val entity = FavouriteCategoryEntity( title = title, createdAt = System.currentTimeMillis(), @@ -92,7 +105,7 @@ class FavouritesRepository @Inject constructor( order = sortOrder.name, track = isTrackerEnabled, deletedAt = 0L, - isVisibleInLibrary = true, + isVisibleInLibrary = isVisibleOnShelf, ) val id = db.favouriteCategoriesDao.insert(entity) val category = entity.toFavouriteCategory(id) @@ -100,8 +113,14 @@ class FavouritesRepository @Inject constructor( return category } - suspend fun updateCategory(id: Long, title: String, sortOrder: SortOrder, isTrackerEnabled: Boolean) { - db.favouriteCategoriesDao.update(id, title, sortOrder.name, isTrackerEnabled) + suspend fun updateCategory( + id: Long, + title: String, + sortOrder: SortOrder, + isTrackerEnabled: Boolean, + isVisibleOnShelf: Boolean, + ) { + db.favouriteCategoriesDao.update(id, title, sortOrder.name, isTrackerEnabled, isVisibleOnShelf) } suspend fun updateCategory(id: Long, isVisibleInLibrary: Boolean) { diff --git a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/edit/FavouritesCategoryEditActivity.kt b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/edit/FavouritesCategoryEditActivity.kt index 91d02135a..8549bd0a7 100644 --- a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/edit/FavouritesCategoryEditActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/edit/FavouritesCategoryEditActivity.kt @@ -77,6 +77,7 @@ class FavouritesCategoryEditActivity : title = binding.editName.text?.toString()?.trim().orEmpty(), sortOrder = getSelectedSortOrder(), isTrackerEnabled = binding.switchTracker.isChecked, + isVisibleOnShelf = binding.switchShelf.isChecked, ) } } @@ -112,6 +113,9 @@ class FavouritesCategoryEditActivity : val sortText = getString((category?.order ?: SortOrder.NEWEST).titleRes) binding.editSort.setText(sortText, false) binding.switchTracker.isChecked = category?.isTrackingEnabled ?: true + binding.switchTracker.jumpDrawablesToCurrentState() + binding.switchShelf.isChecked = category?.isVisibleInLibrary ?: true + binding.switchShelf.jumpDrawablesToCurrentState() } private fun onError(e: Throwable) { @@ -123,6 +127,7 @@ class FavouritesCategoryEditActivity : binding.editSort.isEnabled = !isLoading binding.editName.isEnabled = !isLoading binding.switchTracker.isEnabled = !isLoading + binding.switchShelf.isEnabled = !isLoading if (isLoading) { binding.textViewError.isVisible = false } diff --git a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/edit/FavouritesCategoryEditViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/edit/FavouritesCategoryEditViewModel.kt index 53d339c6d..a322b9d49 100644 --- a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/edit/FavouritesCategoryEditViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/edit/FavouritesCategoryEditViewModel.kt @@ -48,13 +48,14 @@ class FavouritesCategoryEditViewModel @Inject constructor( title: String, sortOrder: SortOrder, isTrackerEnabled: Boolean, + isVisibleOnShelf: Boolean, ) { launchLoadingJob(Dispatchers.Default) { check(title.isNotEmpty()) if (categoryId == NO_ID) { - repository.createCategory(title, sortOrder, isTrackerEnabled) + repository.createCategory(title, sortOrder, isTrackerEnabled, isVisibleOnShelf) } else { - repository.updateCategory(categoryId, title, sortOrder, isTrackerEnabled) + repository.updateCategory(categoryId, title, sortOrder, isTrackerEnabled, isVisibleOnShelf) } onSaved.postCall(Unit) } diff --git a/app/src/main/java/org/koitharu/kotatsu/shelf/ui/config/ShelfSettingsActivity.kt b/app/src/main/java/org/koitharu/kotatsu/shelf/ui/config/ShelfSettingsActivity.kt index ef28b06a5..c4dce1804 100644 --- a/app/src/main/java/org/koitharu/kotatsu/shelf/ui/config/ShelfSettingsActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/shelf/ui/config/ShelfSettingsActivity.kt @@ -14,6 +14,7 @@ import androidx.recyclerview.widget.RecyclerView import dagger.hilt.android.AndroidEntryPoint import org.koitharu.kotatsu.base.ui.BaseActivity import org.koitharu.kotatsu.databinding.ActivityShelfSettingsBinding +import com.google.android.material.R as materialR @AndroidEntryPoint class ShelfSettingsActivity : @@ -28,7 +29,7 @@ class ShelfSettingsActivity : setContentView(ActivityShelfSettingsBinding.inflate(layoutInflater)) supportActionBar?.run { setDisplayHomeAsUpEnabled(true) - setHomeAsUpIndicator(com.google.android.material.R.drawable.abc_ic_clear_material) + setHomeAsUpIndicator(materialR.drawable.abc_ic_clear_material) } binding.buttonDone.setOnClickListener(this) val settingsAdapter = ShelfSettingsAdapter(this) diff --git a/app/src/main/java/org/koitharu/kotatsu/shelf/ui/config/ShelfSettingsAdapterDelegates.kt b/app/src/main/java/org/koitharu/kotatsu/shelf/ui/config/ShelfSettingsAdapterDelegates.kt index 973391190..3c6228cdf 100644 --- a/app/src/main/java/org/koitharu/kotatsu/shelf/ui/config/ShelfSettingsAdapterDelegates.kt +++ b/app/src/main/java/org/koitharu/kotatsu/shelf/ui/config/ShelfSettingsAdapterDelegates.kt @@ -43,6 +43,7 @@ fun shelfSectionAD( bind { binding.textViewTitle.setText(item.section.titleResId) binding.switchToggle.isChecked = item.isChecked + binding.switchToggle.jumpDrawablesToCurrentState() } } @@ -63,6 +64,7 @@ fun shelfCategoryAD( bind { binding.root.text = item.title binding.root.isChecked = item.isChecked + binding.root.jumpDrawablesToCurrentState() } } diff --git a/app/src/main/res/layout/activity_category_edit.xml b/app/src/main/res/layout/activity_category_edit.xml index 11f9bbf1a..e8cc3faac 100644 --- a/app/src/main/res/layout/activity_category_edit.xml +++ b/app/src/main/res/layout/activity_category_edit.xml @@ -78,6 +78,14 @@ android:visibility="gone" tools:visibility="visible" /> + + You can select a directory with archives or images. Each archive (or subdirectory) will be recognized as a chapter. Speed Import a previously created backup of user data + Show on the Shelf