Add missing empty states

pull/189/head
Koitharu 4 years ago
parent 59243be030
commit 7b53468c2e
No known key found for this signature in database
GPG Key ID: 8E861F8CE6E7CE27

@ -23,7 +23,7 @@ abstract class FavouriteCategoriesDao {
(SELECT manga_id FROM favourites WHERE favourites.category_id == favourite_categories.category_id) (SELECT manga_id FROM favourites WHERE favourites.category_id == favourite_categories.category_id)
ORDER BY favourite_categories.sort_key ORDER BY favourite_categories.sort_key
""" """
) ) // FIXME empty categories are ignored
abstract fun observeAllWithDetails(): Flow<Map<FavouriteCategoryEntity, List<String>>> abstract fun observeAllWithDetails(): Flow<Map<FavouriteCategoryEntity, List<String>>>
@Query("SELECT * FROM favourite_categories WHERE category_id = :id AND deleted_at = 0") @Query("SELECT * FROM favourite_categories WHERE category_id = :id AND deleted_at = 0")

@ -74,7 +74,7 @@ class FavouriteCategoriesActivity :
} }
override fun onPrepareOptionsMenu(menu: Menu): Boolean { 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) return super.onPrepareOptionsMenu(menu)
} }
@ -139,6 +139,7 @@ class FavouriteCategoriesActivity :
private fun onCategoriesChanged(categories: List<ListModel>) { private fun onCategoriesChanged(categories: List<ListModel>) {
adapter.items = categories adapter.items = categories
invalidateOptionsMenu()
} }
private fun onError(e: Throwable) { private fun onError(e: Throwable) {
@ -211,4 +212,4 @@ class FavouriteCategoriesActivity :
fun newIntent(context: Context) = Intent(context, FavouriteCategoriesActivity::class.java) fun newIntent(context: Context) = Intent(context, FavouriteCategoriesActivity::class.java)
} }
} }

@ -6,10 +6,12 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.combine
import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.base.ui.BaseViewModel import org.koitharu.kotatsu.base.ui.BaseViewModel
import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.core.prefs.AppSettings
import org.koitharu.kotatsu.favourites.domain.FavouritesRepository import org.koitharu.kotatsu.favourites.domain.FavouritesRepository
import org.koitharu.kotatsu.favourites.ui.categories.adapter.CategoryListModel 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.list.ui.model.LoadingState
import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct
import org.koitharu.kotatsu.utils.ext.mapItems import org.koitharu.kotatsu.utils.ext.mapItems
@ -47,6 +49,15 @@ class FavouritesCategoriesViewModel(
category = category, category = category,
isReorderMode = reordering, 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)) }.asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState))
@ -68,6 +79,8 @@ class FavouritesCategoriesViewModel(
fun isInReorderMode(): Boolean = isReorder.value fun isInReorderMode(): Boolean = isReorder.value
fun isEmpty(): Boolean = detalizedCategories.value?.none { it is CategoryListModel } ?: true
fun setReorderMode(isReorderMode: Boolean) { fun setReorderMode(isReorderMode: Boolean) {
isReorder.value = isReorderMode isReorder.value = isReorderMode
} }
@ -85,4 +98,4 @@ class FavouritesCategoriesViewModel(
repository.reorderCategories(ids) repository.reorderCategories(ids)
} }
} }
} }

@ -86,6 +86,7 @@ class LibraryFragment : BaseFragment<FragmentLibraryBinding>(), LibraryListEvent
} }
override fun onSectionClick(section: LibrarySectionModel, view: View) { override fun onSectionClick(section: LibrarySectionModel, view: View) {
selectionController?.clear()
val intent = when (section) { val intent = when (section) {
is LibrarySectionModel.History -> HistoryActivity.newIntent(view.context) is LibrarySectionModel.History -> HistoryActivity.newIntent(view.context)
is LibrarySectionModel.Favourites -> FavouritesActivity.newIntent(view.context, section.category) is LibrarySectionModel.Favourites -> FavouritesActivity.newIntent(view.context, section.category)
@ -189,4 +190,4 @@ class LibraryFragment : BaseFragment<FragmentLibraryBinding>(), LibraryListEvent
fun newInstance() = LibraryFragment() fun newInstance() = LibraryFragment()
} }
} }

@ -113,6 +113,14 @@ class LibraryViewModel(
for ((category, list) in favourites) { for ((category, list) in favourites) {
result += LibrarySectionModel.Favourites(list.toUi(ListMode.GRID, this), category, R.string.show_all) 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 return result
} }

Loading…
Cancel
Save