diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt index ab5dffe322..03636e8827 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt @@ -128,7 +128,14 @@ import eu.kanade.tachiyomi.util.view.snack import eu.kanade.tachiyomi.util.view.text import eu.kanade.tachiyomi.util.view.withFadeTransaction import eu.kanade.tachiyomi.widget.EmptyView +import java.util.* +import kotlin.math.abs +import kotlin.math.max +import kotlin.math.roundToInt +import kotlin.random.Random +import kotlin.random.nextInt import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -138,12 +145,6 @@ import uy.kohesive.injekt.api.get import yokai.domain.ui.UiPreferences import yokai.i18n.MR import yokai.util.lang.getString -import java.util.* -import kotlin.math.abs -import kotlin.math.max -import kotlin.math.roundToInt -import kotlin.random.Random -import kotlin.random.nextInt import android.R as AR open class LibraryController( @@ -610,6 +611,13 @@ open class LibraryController( setUpHopper() setPreferenceFlows() LibraryUpdateJob.updateFlow.onEach(::onUpdateManga).launchIn(viewScope) + viewScope.launchUI { + LibraryUpdateJob.isRunningFlow(view.context).collectLatest { + val holder = if (mAdapter != null) visibleHeaderHolder() else null + val category = holder?.category ?: return@collectLatest + holder.notifyStatus(LibraryUpdateJob.categoryInQueue(category.id), category) + } + } elevateAppBar = scrollViewWith( diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryHeaderHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryHeaderHolder.kt index a02248ad90..387f4688a6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryHeaderHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryHeaderHolder.kt @@ -47,6 +47,8 @@ class LibraryHeaderHolder(val view: View, val adapter: LibraryCategoryAdapter) : private val refreshDrawable = itemView.context.contextCompatDrawable(R.drawable.ic_refresh_24dp) var locked = false private val headerGestureDetector = LibraryHeaderGestureDetector(this, binding) + val category: Category? + get() = (adapter.getItem(flexibleAdapterPosition) as? LibraryHeaderItem)?.category init { binding.categoryHeaderLayout.setOnClickListener { @@ -56,8 +58,6 @@ class LibraryHeaderHolder(val view: View, val adapter: LibraryCategoryAdapter) : binding.updateButton.setOnClickListener { addCategoryToUpdate() } binding.categoryTitle.setOnLongClickListener { manageCategory() } binding.categoryTitle.setOnClickListener { - val category = - (adapter.getItem(flexibleAdapterPosition) as? LibraryHeaderItem)?.category if (category?.isHidden == false && adapter.mode == SelectableAdapter.Mode.MULTI) { selectAll() } else { @@ -209,32 +209,7 @@ class LibraryHeaderHolder(val view: View, val adapter: LibraryCategoryAdapter) : R.drawable.ic_expand_less_24dp }, ) - when { - adapter.mode == SelectableAdapter.Mode.MULTI -> { - binding.checkbox.isVisible = !category.isHidden - binding.collapseArrow.isVisible = category.isHidden && !adapter.isSingleCategory - binding.updateButton.isVisible = false - setSelection() - } - (category.id ?: -1) < 0 || adapter.libraryListener is FilteredLibraryController -> { - binding.collapseArrow.isVisible = false - binding.checkbox.isVisible = false - setRefreshing(false) - binding.updateButton.isVisible = false - } - LibraryUpdateJob.categoryInQueue(category.id) -> { - binding.collapseArrow.isVisible = !adapter.isSingleCategory - binding.checkbox.isVisible = false - binding.updateButton.isVisible = true - setRefreshing(true) - } - else -> { - binding.collapseArrow.isVisible = !adapter.isSingleCategory - binding.checkbox.isVisible = false - setRefreshing(false) - binding.updateButton.isVisible = !adapter.isSingleCategory - } - } + notifyStatus(LibraryUpdateJob.categoryInQueue(category.id), category) } @SuppressLint("DiscouragedApi") @@ -280,31 +255,29 @@ class LibraryHeaderHolder(val view: View, val adapter: LibraryCategoryAdapter) : } fun manageCategory(): Boolean { - val category = (adapter.getItem(flexibleAdapterPosition) as? LibraryHeaderItem)?.category adapter.libraryListener?.manageCategory(flexibleAdapterPosition) return category?.isDynamic == false } private fun showCatSortOptions() { - val category = - (adapter.getItem(flexibleAdapterPosition) as? LibraryHeaderItem)?.category ?: return + if (category == null) return adapter.controller?.activity?.let { activity -> - val items = LibrarySort.entries.map { it.menuSheetItem(category.isDynamic) } - val sortingMode = category.sortingMode(true) + val items = LibrarySort.entries.map { it.menuSheetItem(category!!.isDynamic) } + val sortingMode = category!!.sortingMode(true) val sheet = MaterialMenuSheet( activity, items, activity.getString(MR.strings.sort_by), sortingMode?.mainValue, ) { sheet, item -> - onCatSortClicked(category, item) + onCatSortClicked(category!!, item) val nCategory = (adapter.getItem(flexibleAdapterPosition) as? LibraryHeaderItem)?.category val isAscending = nCategory?.isAscending() ?: false val drawableRes = getSortRes(item, isAscending) sheet.setDrawable(item, drawableRes) false } - val isAscending = category.isAscending() + val isAscending = category!!.isAscending() val drawableRes = getSortRes(sortingMode, isAscending) sheet.setDrawable(sortingMode?.mainValue ?: -1, drawableRes) sheet.show() @@ -391,4 +364,33 @@ class LibraryHeaderHolder(val view: View, val adapter: LibraryCategoryAdapter) : super.onLongClick(view) return false } + + fun notifyStatus(isReloading: Boolean, category: Category) { + when { + adapter.mode == SelectableAdapter.Mode.MULTI -> { + binding.checkbox.isVisible = !category.isHidden + binding.collapseArrow.isVisible = category.isHidden && !adapter.isSingleCategory + binding.updateButton.isVisible = false + setSelection() + } + (category.id ?: -1) < 0 || adapter.libraryListener is FilteredLibraryController -> { + binding.collapseArrow.isVisible = false + binding.checkbox.isVisible = false + setRefreshing(false) + binding.updateButton.isVisible = false + } + isReloading -> { + binding.collapseArrow.isVisible = !adapter.isSingleCategory + binding.checkbox.isVisible = false + binding.updateButton.isVisible = true + setRefreshing(true) + } + else -> { + binding.collapseArrow.isVisible = !adapter.isSingleCategory + binding.checkbox.isVisible = false + setRefreshing(false) + binding.updateButton.isVisible = !adapter.isSingleCategory + } + } + } }