From 0565fc2665df1c47e338f7788fb1fbe05a2e450e Mon Sep 17 00:00:00 2001 From: Ahmad Ansori Palembani Date: Mon, 6 Jan 2025 08:02:00 +0700 Subject: [PATCH] fix: Selected icon for Random should be a reload icon --- .../data/database/models/Category.kt | 3 +- .../ui/library/LibraryHeaderHolder.kt | 56 ++++++++++--------- .../tachiyomi/ui/library/LibrarySort.kt | 5 +- 3 files changed, 36 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/database/models/Category.kt b/app/src/main/java/eu/kanade/tachiyomi/data/database/models/Category.kt index 3c4763dbfc..d9969b931b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/database/models/Category.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/database/models/Category.kt @@ -37,8 +37,7 @@ interface Category : Serializable { return ((mangaSort?.minus('a') ?: 0) % 2) != 1 } - fun sortingMode(nullAsDND: Boolean = false): LibrarySort? = LibrarySort.valueOf(mangaSort) - ?: if (nullAsDND && !isDynamic) LibrarySort.DragAndDrop else null + fun sortingMode(): LibrarySort? = LibrarySort.valueOf(mangaSort) val isDragAndDrop get() = ( 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 2dc76b726a..435c209366 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 @@ -201,7 +201,7 @@ class LibraryHeaderHolder(val view: View, val adapter: LibraryCategoryAdapter) : val isAscending = category.isAscending() val sortingMode = category.sortingMode() - val sortDrawable = getSortRes(sortingMode, isAscending, R.drawable.ic_sort_24dp) + val sortDrawable = getSortRes(sortingMode, isAscending, category.isDynamic, false) binding.categorySort.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, sortDrawable, 0) binding.categorySort.setText(category.sortRes()) @@ -266,7 +266,7 @@ class LibraryHeaderHolder(val view: View, val adapter: LibraryCategoryAdapter) : val cat = category ?: return adapter.controller?.activity?.let { activity -> val items = LibrarySort.entries.map { it.menuSheetItem(cat.isDynamic) } - val sortingMode = cat.sortingMode(true) + val sortingMode = cat.sortingMode() ?: if (!cat.isDynamic) LibrarySort.DragAndDrop else null val sheet = MaterialMenuSheet( activity, items, @@ -275,42 +275,48 @@ class LibraryHeaderHolder(val view: View, val adapter: LibraryCategoryAdapter) : ) { sheet, item -> onCatSortClicked(cat, item) val nCategory = (adapter.getItem(flexibleAdapterPosition) as? LibraryHeaderItem)?.category - val isAscending = nCategory?.isAscending() ?: false - val drawableRes = getSortRes(item, isAscending) - sheet.setDrawable(item, drawableRes) + sheet.updateSortIcon(nCategory, LibrarySort.valueOf(item)) false } - val isAscending = cat.isAscending() - val drawableRes = getSortRes(sortingMode, isAscending) - sheet.setDrawable(sortingMode?.mainValue ?: -1, drawableRes) + sheet.updateSortIcon(cat, sortingMode) sheet.show() } } + private fun MaterialMenuSheet.updateSortIcon(category: Category?, sortingMode: LibrarySort?) { + val isAscending = category?.isAscending() ?: false + val drawableRes = getSortRes(sortingMode, isAscending, category?.isDynamic ?: false, true) + this.setDrawable(sortingMode?.mainValue ?: -1, drawableRes) + } + private fun getSortRes( sortMode: LibrarySort?, isAscending: Boolean, - @DrawableRes defaultDrawableRes: Int = R.drawable.ic_check_24dp, + isDynamic: Boolean, + onSelection: Boolean, + @DrawableRes defaultDrawableRes: Int = R.drawable.ic_sort_24dp, + @DrawableRes defaultSelectedDrawableRes: Int = R.drawable.ic_check_24dp, ): Int { - sortMode ?: return defaultDrawableRes - return when (sortMode) { - LibrarySort.DragAndDrop -> defaultDrawableRes - LibrarySort.Random -> R.drawable.ic_shuffle_24dp - else -> { - if (if (sortMode.hasInvertedSort) !isAscending else isAscending) { - R.drawable.ic_arrow_downward_24dp - } else { - R.drawable.ic_arrow_upward_24dp - } + sortMode ?: return if (onSelection) defaultSelectedDrawableRes else defaultDrawableRes + + if (sortMode.isDirectional) { + return if (if (sortMode.hasInvertedSort) !isAscending else isAscending) { + R.drawable.ic_arrow_downward_24dp + } else { + R.drawable.ic_arrow_upward_24dp } } - } - private fun getSortRes( - sortingMode: Int?, - isAscending: Boolean, - @DrawableRes defaultDrawableRes: Int = R.drawable.ic_check_24dp, - ): Int = getSortRes(sortingMode?.let { LibrarySort.valueOf(it) }, isAscending, defaultDrawableRes) + if (onSelection) { + return when(sortMode) { + LibrarySort.DragAndDrop -> R.drawable.ic_check_24dp + LibrarySort.Random -> R.drawable.ic_refresh_24dp + else -> defaultSelectedDrawableRes + } + } + + return sortMode.iconRes(isDynamic) + } private fun onCatSortClicked(category: Category, menuId: Int?) { val (mode, modType) = if (menuId == null) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySort.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySort.kt index ded5ecea84..460906a65b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySort.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySort.kt @@ -34,7 +34,7 @@ enum class LibrarySort( 8, MR.strings.random, R.drawable.ic_shuffle_24dp, - ) + ), ; val categoryValue: Char @@ -65,6 +65,9 @@ enum class LibrarySort( val hasInvertedSort: Boolean get() = this in listOf(LastRead, DateAdded, LatestChapter, DateFetched) + val isDirectional: Boolean + get() = this !in listOf(DragAndDrop, Random) + fun menuSheetItem(isDynamic: Boolean): MaterialMenuSheet.MenuSheetItem { return MaterialMenuSheet.MenuSheetItem( mainValue,