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 b4b94737f..f83912ae6 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,7 +23,7 @@ abstract class FavouriteCategoriesDao { (SELECT manga_id FROM favourites WHERE favourites.category_id == favourite_categories.category_id) ORDER BY favourite_categories.sort_key """ - ) + ) // FIXME empty categories are ignored abstract fun observeAllWithDetails(): Flow>> @Query("SELECT * FROM favourite_categories WHERE category_id = :id AND deleted_at = 0") diff --git a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/FavouriteCategoriesActivity.kt b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/FavouriteCategoriesActivity.kt index f7ad11271..997edc488 100644 --- a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/FavouriteCategoriesActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/FavouriteCategoriesActivity.kt @@ -74,7 +74,7 @@ class FavouriteCategoriesActivity : } override fun onPrepareOptionsMenu(menu: Menu): Boolean { - menu.findItem(R.id.action_reorder)?.isVisible = !viewModel.isInReorderMode() + menu.findItem(R.id.action_reorder)?.isVisible = !viewModel.isInReorderMode() && !viewModel.isEmpty() return super.onPrepareOptionsMenu(menu) } @@ -139,6 +139,7 @@ class FavouriteCategoriesActivity : private fun onCategoriesChanged(categories: List) { adapter.items = categories + invalidateOptionsMenu() } private fun onError(e: Throwable) { @@ -211,4 +212,4 @@ class FavouriteCategoriesActivity : fun newIntent(context: Context) = Intent(context, FavouriteCategoriesActivity::class.java) } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/FavouritesCategoriesViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/FavouritesCategoriesViewModel.kt index c0b6a9927..0b596b1cb 100644 --- a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/FavouritesCategoriesViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/FavouritesCategoriesViewModel.kt @@ -6,10 +6,12 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.combine +import org.koitharu.kotatsu.R import org.koitharu.kotatsu.base.ui.BaseViewModel import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.favourites.domain.FavouritesRepository import org.koitharu.kotatsu.favourites.ui.categories.adapter.CategoryListModel +import org.koitharu.kotatsu.list.ui.model.EmptyState import org.koitharu.kotatsu.list.ui.model.LoadingState import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct import org.koitharu.kotatsu.utils.ext.mapItems @@ -47,6 +49,15 @@ class FavouritesCategoriesViewModel( category = category, isReorderMode = reordering, ) + }.ifEmpty { + listOf( + EmptyState( + icon = R.drawable.ic_empty_favourites, + textPrimary = R.string.text_empty_holder_primary, + textSecondary = R.string.empty_favourite_categories, + actionStringRes = 0, + ) + ) } }.asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState)) @@ -68,6 +79,8 @@ class FavouritesCategoriesViewModel( fun isInReorderMode(): Boolean = isReorder.value + fun isEmpty(): Boolean = detalizedCategories.value?.none { it is CategoryListModel } ?: true + fun setReorderMode(isReorderMode: Boolean) { isReorder.value = isReorderMode } @@ -85,4 +98,4 @@ class FavouritesCategoriesViewModel( repository.reorderCategories(ids) } } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/koitharu/kotatsu/library/ui/LibraryFragment.kt b/app/src/main/java/org/koitharu/kotatsu/library/ui/LibraryFragment.kt index 0334957ed..b5cc8dd7d 100644 --- a/app/src/main/java/org/koitharu/kotatsu/library/ui/LibraryFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/library/ui/LibraryFragment.kt @@ -86,6 +86,7 @@ class LibraryFragment : BaseFragment(), LibraryListEvent } override fun onSectionClick(section: LibrarySectionModel, view: View) { + selectionController?.clear() val intent = when (section) { is LibrarySectionModel.History -> HistoryActivity.newIntent(view.context) is LibrarySectionModel.Favourites -> FavouritesActivity.newIntent(view.context, section.category) @@ -189,4 +190,4 @@ class LibraryFragment : BaseFragment(), LibraryListEvent fun newInstance() = LibraryFragment() } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/koitharu/kotatsu/library/ui/LibraryViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/library/ui/LibraryViewModel.kt index 5762d16b7..27d21046a 100644 --- a/app/src/main/java/org/koitharu/kotatsu/library/ui/LibraryViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/library/ui/LibraryViewModel.kt @@ -113,6 +113,14 @@ class LibraryViewModel( for ((category, list) in favourites) { result += LibrarySectionModel.Favourites(list.toUi(ListMode.GRID, this), category, R.string.show_all) } + if (result.isEmpty()) { + result += EmptyState( + icon = R.drawable.ic_empty_history, + textPrimary = R.string.text_history_holder_primary, + textSecondary = R.string.text_history_holder_secondary, + actionStringRes = 0, + ) + } return result }