diff --git a/CHANGELOG.md b/CHANGELOG.md index 6398367b..933dbf45 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Keyboard language management dialog now respects `Use English language` preference ([#238]) +- Fixed incorrect sorting in keyboard language selection dialog ([#239]) ## [1.4.0] - 2025-08-22 ### Added @@ -87,6 +88,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 [#222]: https://github.com/FossifyOrg/Keyboard/issues/222 [#230]: https://github.com/FossifyOrg/Keyboard/issues/230 [#238]: https://github.com/FossifyOrg/Keyboard/issues/238 +[#239]: https://github.com/FossifyOrg/Keyboard/issues/239 [Unreleased]: https://github.com/FossifyOrg/Keyboard/compare/1.4.0...HEAD [1.4.0]: https://github.com/FossifyOrg/Keyboard/compare/1.3.0...1.4.0 diff --git a/app/src/main/kotlin/org/fossify/keyboard/adapters/ManageKeyboardLanguagesAdapter.kt b/app/src/main/kotlin/org/fossify/keyboard/adapters/ManageKeyboardLanguagesAdapter.kt index ee910696..238cc3d2 100644 --- a/app/src/main/kotlin/org/fossify/keyboard/adapters/ManageKeyboardLanguagesAdapter.kt +++ b/app/src/main/kotlin/org/fossify/keyboard/adapters/ManageKeyboardLanguagesAdapter.kt @@ -6,12 +6,13 @@ import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import org.fossify.commons.views.MyAppCompatCheckbox import org.fossify.keyboard.R -import org.fossify.keyboard.extensions.getKeyboardLanguageText import org.fossify.keyboard.helpers.Config +typealias LanguageItem = Pair + internal class ManageKeyboardLanguagesAdapter( private val config: Config, - private var languagesList: List, + private var languagesList: List, ) : RecyclerView.Adapter() { private val selectedLanguages = config.selectedLanguages @@ -28,14 +29,14 @@ internal class ManageKeyboardLanguagesAdapter( override fun onBindViewHolder(holder: MyViewHolder, position: Int) { val item = languagesList[position] holder.languageCheckboxItem.apply { - text = context.getKeyboardLanguageText(item) - isChecked = selectedLanguages.contains(item) + text = item.second + isChecked = selectedLanguages.contains(item.first) setOnClickListener { if (isChecked) { - selectedLanguages.add(item) + selectedLanguages.add(item.first) } else { - selectedLanguages.remove(item) + selectedLanguages.remove(item.first) } } } diff --git a/app/src/main/kotlin/org/fossify/keyboard/dialogs/ManageKeyboardLanguagesDialog.kt b/app/src/main/kotlin/org/fossify/keyboard/dialogs/ManageKeyboardLanguagesDialog.kt index 6f57fbf3..2f3efa19 100644 --- a/app/src/main/kotlin/org/fossify/keyboard/dialogs/ManageKeyboardLanguagesDialog.kt +++ b/app/src/main/kotlin/org/fossify/keyboard/dialogs/ManageKeyboardLanguagesDialog.kt @@ -7,6 +7,7 @@ import org.fossify.keyboard.R import org.fossify.keyboard.adapters.ManageKeyboardLanguagesAdapter import org.fossify.keyboard.databinding.DialogManageKeyboardLanguagesBinding import org.fossify.keyboard.extensions.config +import org.fossify.keyboard.extensions.getKeyboardLanguageText import org.fossify.keyboard.helpers.SUPPORTED_LANGUAGES class ManageKeyboardLanguagesDialog( @@ -15,7 +16,11 @@ class ManageKeyboardLanguagesDialog( ) { init { val binding = DialogManageKeyboardLanguagesBinding.inflate(activity.layoutInflater) - val adapter = ManageKeyboardLanguagesAdapter(activity.config, SUPPORTED_LANGUAGES) + val languageItems = SUPPORTED_LANGUAGES.map { + it to activity.getKeyboardLanguageText(it) + }.sortedBy { it.second } + + val adapter = ManageKeyboardLanguagesAdapter(activity.config, languageItems) binding.keyboardLanguageList.adapter = adapter activity.getAlertDialogBuilder() diff --git a/app/src/main/kotlin/org/fossify/keyboard/extensions/Context.kt b/app/src/main/kotlin/org/fossify/keyboard/extensions/Context.kt index 060abca7..77211b32 100644 --- a/app/src/main/kotlin/org/fossify/keyboard/extensions/Context.kt +++ b/app/src/main/kotlin/org/fossify/keyboard/extensions/Context.kt @@ -270,6 +270,8 @@ fun Context.getKeyboardLanguagesRadioItems(): ArrayList { } return selectedLanguagesRadioItems + .sortedBy { it.title } + .toMutableList() as ArrayList } fun Context.getKeyboardLanguageText(language: Int): String {