diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/LanguageFilterList.kt b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/LanguageFilterList.kt index 855491147..b003cfc40 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/LanguageFilterList.kt +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/LanguageFilterList.kt @@ -11,7 +11,10 @@ import android.text.style.StyleSpan import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.* +import android.widget.EditText +import android.widget.LinearLayout +import android.widget.TextView +import androidx.appcompat.widget.SwitchCompat import androidx.core.view.isGone import androidx.core.view.isVisible import androidx.core.widget.doAfterTextChanged @@ -48,7 +51,7 @@ class LanguageFilterListFakePreference(searchField: EditText, recyclerView: Recy } -class LanguageAdapter(list: List> = listOf(), context: Context) : +private class LanguageAdapter(list: List> = listOf(), context: Context) : RecyclerView.Adapter() { var onlySystemLocales = false private val prefs = DeviceProtectedUtils.getSharedPreferences(context) @@ -107,8 +110,8 @@ class LanguageAdapter(list: List> = listOf(), context: else isVisible = true } - view.findViewById(R.id.language_switch).apply { - isEnabled = !onlySystemLocales && infos.size == 1 + view.findViewById(R.id.language_switch).apply { + isEnabled = !onlySystemLocales // take care: isChecked changes if the language is scrolled out of view and comes back! // disable the change listener when setting the checked status on scroll // so it's only triggered on user interactions @@ -116,26 +119,26 @@ class LanguageAdapter(list: List> = listOf(), context: isChecked = onlySystemLocales || infos.any { it.isEnabled } setOnCheckedChangeListener { _, b -> if (b) { - if (infos.size == 1) { - if (!infos.first().hasDictionary) - showMissingDictionaryDialog(context, infos.first().subtype.locale().toLocale()) - addEnabledSubtype(prefs, infos.first().subtype) - infos.single().isEnabled = true - } else { - // currently switch is disabled in this case - LanguageSettingsDialog(view.context, infos, fragment, onlySystemLocales, { setupDetailsTextAndSwitch() }).show() - } + if (!infos.first().hasDictionary) + showMissingDictionaryDialog(context, infos.first().subtype.locale().toLocale()) + addEnabledSubtype(prefs, infos.first().subtype) + infos.first().isEnabled = true } else { - if (infos.size == 1) { - removeEnabledSubtype(prefs, infos.first().subtype) - infos.single().isEnabled = false - } else { - // currently switch is disabled in this case - LanguageSettingsDialog(view.context, infos, fragment, onlySystemLocales, { setupDetailsTextAndSwitch() }).show() - } + removeEnabledSubtype(prefs, infos.first().subtype) + infos.first().isEnabled = false } } } + view.findViewById(R.id.blocker).apply { + if (infos.size < 2) { + isGone = true + return@apply + } + isVisible = true + setOnClickListener { + LanguageSettingsDialog(view.context, infos, fragment, onlySystemLocales, { setupDetailsTextAndSwitch() }).show() + } + } } view.findViewById(R.id.language_name).text = infos.first().displayName diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/LanguageSettingsDialog.kt b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/LanguageSettingsDialog.kt index af563688f..de7266229 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/LanguageSettingsDialog.kt +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/LanguageSettingsDialog.kt @@ -8,8 +8,11 @@ import android.net.Uri import android.text.method.LinkMovementMethod import android.view.LayoutInflater import android.view.View -import android.widget.* +import android.widget.ImageView +import android.widget.ScrollView +import android.widget.TextView import androidx.appcompat.app.AlertDialog +import androidx.appcompat.widget.SwitchCompat import androidx.core.view.get import androidx.core.view.isGone import androidx.core.view.isVisible @@ -99,7 +102,7 @@ class LanguageSettingsDialog( SubtypeLocaleUtils.getKeyboardLayoutSetDisplayName(subtype.subtype) ?: SubtypeLocaleUtils.getSubtypeDisplayNameInSystemLocale(subtype.subtype) row.findViewById(R.id.language_details).isGone = true - row.findViewById(R.id.language_switch).apply { + row.findViewById(R.id.language_switch).apply { isChecked = subtype.isEnabled isEnabled = !onlySystemLocales setOnCheckedChangeListener { _, b -> @@ -115,7 +118,7 @@ class LanguageSettingsDialog( } } if (isAdditionalSubtype(subtype.subtype)) { - row.findViewById(R.id.language_switch).isEnabled = true + row.findViewById(R.id.language_switch).isEnabled = true row.findViewById(R.id.delete_button).apply { isVisible = true setOnClickListener { diff --git a/app/src/main/res/layout/language_list_item.xml b/app/src/main/res/layout/language_list_item.xml index 99a2fd21a..f7ebdb9d5 100644 --- a/app/src/main/res/layout/language_list_item.xml +++ b/app/src/main/res/layout/language_list_item.xml @@ -35,11 +35,24 @@ android:layout_gravity="center_vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" /> - + android:layout_height="wrap_content" > + + +