From f60cb9bb646eb60faa9fcee30ebba737a30a247e Mon Sep 17 00:00:00 2001
From: AntsyLich <59261191+AntsyLich@users.noreply.github.com>
Date: Thu, 27 Feb 2025 13:11:41 +0600
Subject: [PATCH] Remove alphabetical category sort option (#1781)

(cherry picked from commit 2b0c28938bfd74577d2ff0736b2cc72f4e4705cf)

# Conflicts:
#	CHANGELOG.md
#	app/src/main/java/eu/kanade/presentation/category/CategoryScreen.kt
---
 .../presentation/category/CategoryScreen.kt   | 16 ----------
 .../category/components/CategoryDialogs.kt    | 29 -------------------
 .../tachiyomi/ui/category/CategoryScreen.kt   |  8 -----
 .../ui/category/CategoryScreenModel.kt        | 12 +-------
 .../category/interactor/ReorderCategory.kt    | 24 +--------------
 .../moko-resources/base/strings.xml           |  2 --
 6 files changed, 2 insertions(+), 89 deletions(-)

diff --git a/app/src/main/java/eu/kanade/presentation/category/CategoryScreen.kt b/app/src/main/java/eu/kanade/presentation/category/CategoryScreen.kt
index 76cdd953b..cbb7dfdc8 100644
--- a/app/src/main/java/eu/kanade/presentation/category/CategoryScreen.kt
+++ b/app/src/main/java/eu/kanade/presentation/category/CategoryScreen.kt
@@ -8,8 +8,6 @@ import androidx.compose.foundation.lazy.LazyColumn
 import androidx.compose.foundation.lazy.LazyListState
 import androidx.compose.foundation.lazy.items
 import androidx.compose.foundation.lazy.rememberLazyListState
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.outlined.SortByAlpha
 import androidx.compose.material3.MaterialTheme
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.LaunchedEffect
@@ -19,10 +17,8 @@ import androidx.compose.ui.Modifier
 import eu.kanade.presentation.category.components.CategoryFloatingActionButton
 import eu.kanade.presentation.category.components.CategoryListItem
 import eu.kanade.presentation.components.AppBar
-import eu.kanade.presentation.components.AppBarActions
 import eu.kanade.tachiyomi.ui.category.CategoryScreenState
 import kotlinx.collections.immutable.ImmutableList
-import kotlinx.collections.immutable.persistentListOf
 import sh.calvin.reorderable.ReorderableItem
 import sh.calvin.reorderable.rememberReorderableLazyListState
 import tachiyomi.domain.category.model.Category
@@ -38,7 +34,6 @@ import tachiyomi.presentation.core.util.plus
 fun CategoryScreen(
     state: CategoryScreenState.Success,
     onClickCreate: () -> Unit,
-    onClickSortAlphabetically: () -> Unit,
     onClickRename: (Category) -> Unit,
     onClickDelete: (Category) -> Unit,
     onChangeOrder: (Category, Int) -> Unit,
@@ -50,17 +45,6 @@ fun CategoryScreen(
             AppBar(
                 title = stringResource(MR.strings.action_edit_categories),
                 navigateUp = navigateUp,
-                actions = {
-                    AppBarActions(
-                        persistentListOf(
-                            AppBar.Action(
-                                title = stringResource(MR.strings.action_sort),
-                                icon = Icons.Outlined.SortByAlpha,
-                                onClick = onClickSortAlphabetically,
-                            ),
-                        ),
-                    )
-                },
                 scrollBehavior = scrollBehavior,
             )
         },
diff --git a/app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt b/app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt
index f343f9034..723cc6e99 100644
--- a/app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt
+++ b/app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt
@@ -219,35 +219,6 @@ fun CategoryDeleteDialog(
     )
 }
 
-@Composable
-fun CategorySortAlphabeticallyDialog(
-    onDismissRequest: () -> Unit,
-    onSort: () -> Unit,
-) {
-    AlertDialog(
-        onDismissRequest = onDismissRequest,
-        confirmButton = {
-            TextButton(onClick = {
-                onSort()
-                onDismissRequest()
-            }) {
-                Text(text = stringResource(MR.strings.action_ok))
-            }
-        },
-        dismissButton = {
-            TextButton(onClick = onDismissRequest) {
-                Text(text = stringResource(MR.strings.action_cancel))
-            }
-        },
-        title = {
-            Text(text = stringResource(MR.strings.action_sort_category))
-        },
-        text = {
-            Text(text = stringResource(MR.strings.sort_category_confirmation))
-        },
-    )
-}
-
 @Composable
 fun ChangeCategoryDialog(
     initialSelection: ImmutableList<CheckboxState<Category>>,
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreen.kt
index 4bafb277f..6d20c630e 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreen.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreen.kt
@@ -13,7 +13,6 @@ import eu.kanade.presentation.category.CategoryScreen
 import eu.kanade.presentation.category.components.CategoryCreateDialog
 import eu.kanade.presentation.category.components.CategoryDeleteDialog
 import eu.kanade.presentation.category.components.CategoryRenameDialog
-import eu.kanade.presentation.category.components.CategorySortAlphabeticallyDialog
 import eu.kanade.presentation.util.Screen
 import eu.kanade.tachiyomi.util.system.toast
 import kotlinx.collections.immutable.toImmutableList
@@ -40,7 +39,6 @@ class CategoryScreen : Screen() {
         CategoryScreen(
             state = successState,
             onClickCreate = { screenModel.showDialog(CategoryDialog.Create) },
-            onClickSortAlphabetically = { screenModel.showDialog(CategoryDialog.SortAlphabetically) },
             onClickRename = { screenModel.showDialog(CategoryDialog.Rename(it)) },
             onClickDelete = { screenModel.showDialog(CategoryDialog.Delete(it)) },
             onChangeOrder = screenModel::changeOrder,
@@ -71,12 +69,6 @@ class CategoryScreen : Screen() {
                     category = dialog.category.name,
                 )
             }
-            is CategoryDialog.SortAlphabetically -> {
-                CategorySortAlphabeticallyDialog(
-                    onDismissRequest = screenModel::dismissDialog,
-                    onSort = { screenModel.sortAlphabetically() },
-                )
-            }
         }
 
         LaunchedEffect(Unit) {
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreenModel.kt
index 09c543479..b98b77e4e 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreenModel.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreenModel.kt
@@ -65,18 +65,9 @@ class CategoryScreenModel(
         }
     }
 
-    fun sortAlphabetically() {
-        screenModelScope.launch {
-            when (reorderCategory.sortAlphabetically()) {
-                is ReorderCategory.Result.InternalError -> _events.send(CategoryEvent.InternalError)
-                else -> {}
-            }
-        }
-    }
-
     fun changeOrder(category: Category, newIndex: Int) {
         screenModelScope.launch {
-            when (reorderCategory.changeOrder(category, newIndex)) {
+            when (reorderCategory.await(category, newIndex)) {
                 is ReorderCategory.Result.InternalError -> _events.send(CategoryEvent.InternalError)
                 else -> {}
             }
@@ -113,7 +104,6 @@ class CategoryScreenModel(
 
 sealed interface CategoryDialog {
     data object Create : CategoryDialog
-    data object SortAlphabetically : CategoryDialog
     data class Rename(val category: Category) : CategoryDialog
     data class Delete(val category: Category) : CategoryDialog
 }
diff --git a/domain/src/main/java/tachiyomi/domain/category/interactor/ReorderCategory.kt b/domain/src/main/java/tachiyomi/domain/category/interactor/ReorderCategory.kt
index 4f91a9901..498366154 100644
--- a/domain/src/main/java/tachiyomi/domain/category/interactor/ReorderCategory.kt
+++ b/domain/src/main/java/tachiyomi/domain/category/interactor/ReorderCategory.kt
@@ -12,10 +12,9 @@ import tachiyomi.domain.category.repository.CategoryRepository
 class ReorderCategory(
     private val categoryRepository: CategoryRepository,
 ) {
-
     private val mutex = Mutex()
 
-    suspend fun changeOrder(category: Category, newIndex: Int) = withNonCancellableContext {
+    suspend fun await(category: Category, newIndex: Int) = withNonCancellableContext {
         mutex.withLock {
             val categories = categoryRepository.getAll()
                 .filterNot(Category::isSystemCategory)
@@ -45,27 +44,6 @@ class ReorderCategory(
         }
     }
 
-    suspend fun sortAlphabetically() = withNonCancellableContext {
-        mutex.withLock {
-            val updates = categoryRepository.getAll()
-                .sortedBy { category -> category.name }
-                .mapIndexed { index, category ->
-                    CategoryUpdate(
-                        id = category.id,
-                        order = index.toLong(),
-                    )
-                }
-
-            try {
-                categoryRepository.updatePartial(updates)
-                Result.Success
-            } catch (e: Exception) {
-                logcat(LogPriority.ERROR, e)
-                Result.InternalError(e)
-            }
-        }
-    }
-
     sealed interface Result {
         data object Success : Result
         data object Unchanged : Result
diff --git a/i18n/src/commonMain/moko-resources/base/strings.xml b/i18n/src/commonMain/moko-resources/base/strings.xml
index 3d8a56c76..a5951521f 100755
--- a/i18n/src/commonMain/moko-resources/base/strings.xml
+++ b/i18n/src/commonMain/moko-resources/base/strings.xml
@@ -97,8 +97,6 @@
     <string name="action_move_category">Set categories</string>
     <string name="delete_category_confirmation">Do you wish to delete the category \"%s\"?</string>
     <string name="delete_category">Delete category</string>
-    <string name="action_sort_category">Sort categories</string>
-    <string name="sort_category_confirmation">Would you like to sort the categories alphabetically?</string>
     <string name="action_edit_cover">Edit cover</string>
     <string name="action_view_chapters">View chapters</string>
     <string name="action_pause">Pause</string>