From 1717394b2bdc7ac709bbe4f9856d2a32be8b9da3 Mon Sep 17 00:00:00 2001 From: Vladimir Tanakov Date: Wed, 11 Aug 2021 18:58:08 +0300 Subject: [PATCH] fix: show language name in picker for product edit screen (#4149) --- .../edit/overview/EditOverviewFragment.kt | 28 +++---------------- .../edit/overview/ProductLanguagePicker.kt | 26 +++++++++++++++++ 2 files changed, 30 insertions(+), 24 deletions(-) create mode 100644 app/src/main/java/openfoodfacts/github/scrachx/openfood/features/product/edit/overview/ProductLanguagePicker.kt diff --git a/app/src/main/java/openfoodfacts/github/scrachx/openfood/features/product/edit/overview/EditOverviewFragment.kt b/app/src/main/java/openfoodfacts/github/scrachx/openfood/features/product/edit/overview/EditOverviewFragment.kt index 97a256e1e154..14453f329264 100644 --- a/app/src/main/java/openfoodfacts/github/scrachx/openfood/features/product/edit/overview/EditOverviewFragment.kt +++ b/app/src/main/java/openfoodfacts/github/scrachx/openfood/features/product/edit/overview/EditOverviewFragment.kt @@ -30,7 +30,6 @@ import androidx.core.net.toFile import androidx.fragment.app.viewModels import androidx.lifecycle.lifecycleScope import com.canhub.cropper.CropImage -import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.snackbar.BaseTransientBottomBar import com.google.android.material.snackbar.Snackbar import com.google.zxing.integration.android.IntentIntegrator @@ -847,30 +846,11 @@ class EditOverviewFragment : ProductEditFragment() { } private fun selectProductLanguage() { - val localeValues = SupportedLanguages.codes() - val localeLabels = arrayOfNulls(localeValues.size) - val finalLocalValues = mutableListOf() - val finalLocalLabels = mutableListOf() - var selectedIndex = 0 - localeValues.forEachIndexed { i, localeCode -> - if (localeCode == languageCode) { - selectedIndex = i - } - val current = LocaleUtils.parseLocale(localeCode) - localeLabels[i] = current.getDisplayName(current).replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.ROOT) else it.toString() } - finalLocalLabels += localeCode - finalLocalValues += localeCode + ProductLanguagePicker.showPicker(requireContext(), languageCode) { code -> + binding.name.text = null + (activity as? ProductEditActivity)?.setIngredients("set", null) + setProductLanguage(code) } - MaterialAlertDialogBuilder(requireContext()) - .setTitle(R.string.preference_choose_language_dialog_title) - .setSingleChoiceItems(finalLocalLabels.toTypedArray(), selectedIndex) { _, which -> - binding.name.text = null - - (activity as? ProductEditActivity)?.setIngredients("set", null) - - setProductLanguage(finalLocalValues[which]) - } - .show() } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { diff --git a/app/src/main/java/openfoodfacts/github/scrachx/openfood/features/product/edit/overview/ProductLanguagePicker.kt b/app/src/main/java/openfoodfacts/github/scrachx/openfood/features/product/edit/overview/ProductLanguagePicker.kt new file mode 100644 index 000000000000..f8980bec2f36 --- /dev/null +++ b/app/src/main/java/openfoodfacts/github/scrachx/openfood/features/product/edit/overview/ProductLanguagePicker.kt @@ -0,0 +1,26 @@ +package openfoodfacts.github.scrachx.openfood.features.product.edit.overview + +import android.content.Context +import com.google.android.material.dialog.MaterialAlertDialogBuilder +import openfoodfacts.github.scrachx.openfood.R +import openfoodfacts.github.scrachx.openfood.utils.LocaleUtils +import openfoodfacts.github.scrachx.openfood.utils.SupportedLanguages + +object ProductLanguagePicker { + fun showPicker(context: Context, currentLanguageCode: String?, onItemSelected: (String) -> Unit) { + val languageCodes = SupportedLanguages.codes() + val selectedIndex = languageCodes.indexOf(currentLanguageCode) + val languageItems = languageCodes.map { languageCode -> + val locale = LocaleUtils.parseLocale(languageCode) + val languageName = locale.getDisplayName(locale).replaceFirstChar { if (it.isLowerCase()) it.titlecase(locale) else it.toString() } + "$languageName [$languageCode]" + } + MaterialAlertDialogBuilder(context) + .setTitle(R.string.preference_choose_language_dialog_title) + .setSingleChoiceItems(languageItems.toTypedArray(), selectedIndex) { dialog, which -> + dialog.dismiss() + onItemSelected(languageCodes[which]) + } + .show() + } +}