From 9dbce40fd72d11aa2bbd8f904d9fdfa6ea7ffee7 Mon Sep 17 00:00:00 2001 From: Helium314 Date: Sat, 24 May 2025 09:14:35 +0200 Subject: [PATCH] remove essentially duplicate functions --- .../main/java/helium314/keyboard/latin/App.kt | 7 ++++--- .../keyboard/latin/RichInputMethodManager.java | 5 ++--- .../keyboard/latin/RichInputMethodSubtype.kt | 5 +++-- .../latin/utils/LanguageOnSpacebarUtils.java | 6 +----- .../keyboard/latin/utils/LayoutUtils.kt | 2 +- .../keyboard/latin/utils/SubtypeLocaleUtils.kt | 18 +++--------------- .../keyboard/latin/utils/SubtypeSettings.kt | 2 +- .../keyboard/latin/utils/SubtypeUtils.kt | 4 +++- 8 files changed, 18 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/helium314/keyboard/latin/App.kt b/app/src/main/java/helium314/keyboard/latin/App.kt index 631929dbf..47ee42fea 100644 --- a/app/src/main/java/helium314/keyboard/latin/App.kt +++ b/app/src/main/java/helium314/keyboard/latin/App.kt @@ -34,6 +34,7 @@ import helium314.keyboard.latin.utils.defaultPinnedToolbarPref import helium314.keyboard.latin.utils.getResourceSubtypes import helium314.keyboard.latin.utils.locale import helium314.keyboard.latin.utils.mainLayoutName +import helium314.keyboard.latin.utils.mainLayoutNameOrQwerty import helium314.keyboard.latin.utils.prefs import helium314.keyboard.latin.utils.upgradeToolbarPrefs import helium314.keyboard.latin.utils.writeCustomKeyCodes @@ -445,19 +446,19 @@ fun checkVersionUpgrade(context: Context) { val mainLayoutName = oldSplit[1] // we now need more information than just locale and main layout name, get it from existing subtypes val filtered = additionalSubtypes.filter { - it.locale().toLanguageTag() == languageTag && (it.mainLayoutName() ?: "qwerty") == mainLayoutName + it.locale().toLanguageTag() == languageTag && (it.mainLayoutNameOrQwerty()) == mainLayoutName } if (filtered.isNotEmpty()) return@joinToString filtered.first().toSettingsSubtype().toPref() // find best matching resource subtype val goodMatch = resourceSubtypes.filter { - it.locale().toLanguageTag() == languageTag && (it.mainLayoutName() ?: "qwerty") == mainLayoutName + it.locale().toLanguageTag() == languageTag && (it.mainLayoutNameOrQwerty()) == mainLayoutName } if (goodMatch.isNotEmpty()) return@joinToString goodMatch.first().toSettingsSubtype().toPref() // not sure how we can get here, but better deal with it val okMatch = resourceSubtypes.filter { - it.locale().language == languageTag.constructLocale().language && (it.mainLayoutName() ?: "qwerty") == mainLayoutName + it.locale().language == languageTag.constructLocale().language && (it.mainLayoutNameOrQwerty()) == mainLayoutName } if (okMatch.isNotEmpty()) okMatch.first().toSettingsSubtype().toPref() diff --git a/app/src/main/java/helium314/keyboard/latin/RichInputMethodManager.java b/app/src/main/java/helium314/keyboard/latin/RichInputMethodManager.java index 92ac1c73f..55888a1e7 100644 --- a/app/src/main/java/helium314/keyboard/latin/RichInputMethodManager.java +++ b/app/src/main/java/helium314/keyboard/latin/RichInputMethodManager.java @@ -305,9 +305,8 @@ public class RichInputMethodManager { final int count = myImi.getSubtypeCount(); for (int i = 0; i < count; i++) { final InputMethodSubtype subtype = myImi.getSubtypeAt(i); - final String layoutName = SubtypeLocaleUtils.getMainLayoutName(subtype); - if (locale.equals(SubtypeUtilsKt.locale(subtype)) - && keyboardLayoutSetName.equals(layoutName)) { + final String layoutName = SubtypeUtilsKt.mainLayoutNameOrQwerty(subtype); + if (locale.equals(SubtypeUtilsKt.locale(subtype)) && keyboardLayoutSetName.equals(layoutName)) { return subtype; } } diff --git a/app/src/main/java/helium314/keyboard/latin/RichInputMethodSubtype.kt b/app/src/main/java/helium314/keyboard/latin/RichInputMethodSubtype.kt index ce68511b5..c26f79df8 100644 --- a/app/src/main/java/helium314/keyboard/latin/RichInputMethodSubtype.kt +++ b/app/src/main/java/helium314/keyboard/latin/RichInputMethodSubtype.kt @@ -17,6 +17,7 @@ import helium314.keyboard.latin.utils.ScriptUtils import helium314.keyboard.latin.utils.ScriptUtils.script import helium314.keyboard.latin.utils.SubtypeLocaleUtils import helium314.keyboard.latin.utils.locale +import helium314.keyboard.latin.utils.mainLayoutNameOrQwerty import java.util.Locale /** @@ -43,7 +44,7 @@ class RichInputMethodSubtype private constructor(val rawSubtype: InputMethodSubt val fullDisplayName: String get() { if (isNoLanguage) { - return SubtypeLocaleUtils.getMainLayoutDisplayName(rawSubtype)!! + return SubtypeLocaleUtils.getMainLayoutDisplayName(rawSubtype.mainLayoutNameOrQwerty())!! } return SubtypeLocaleUtils.getSubtypeLocaleDisplayName(locale) } @@ -52,7 +53,7 @@ class RichInputMethodSubtype private constructor(val rawSubtype: InputMethodSubt // Get the RichInputMethodSubtype's middle display name in its locale. get() { if (isNoLanguage) { - return SubtypeLocaleUtils.getMainLayoutDisplayName(rawSubtype)!! + return SubtypeLocaleUtils.getMainLayoutDisplayName(rawSubtype.mainLayoutNameOrQwerty())!! } return SubtypeLocaleUtils.getSubtypeLanguageDisplayName(locale) } diff --git a/app/src/main/java/helium314/keyboard/latin/utils/LanguageOnSpacebarUtils.java b/app/src/main/java/helium314/keyboard/latin/utils/LanguageOnSpacebarUtils.java index f942157ca..f7c400da2 100644 --- a/app/src/main/java/helium314/keyboard/latin/utils/LanguageOnSpacebarUtils.java +++ b/app/src/main/java/helium314/keyboard/latin/utils/LanguageOnSpacebarUtils.java @@ -43,16 +43,12 @@ public final class LanguageOnSpacebarUtils { return FORMAT_TYPE_NONE; } final Locale locale = subtype.getLocale(); - if (locale == null) { - return FORMAT_TYPE_NONE; - } final String keyboardLanguage = locale.getLanguage(); final String keyboardLayout = subtype.getMainLayoutName(); int sameLanguageAndLayoutCount = 0; for (final InputMethodSubtype ims : sEnabledSubtypes) { final String language = SubtypeUtilsKt.locale(ims).getLanguage(); - if (keyboardLanguage.equals(language) && keyboardLayout.equals( - SubtypeLocaleUtils.getMainLayoutName(ims))) { + if (keyboardLanguage.equals(language) && keyboardLayout.equals(SubtypeUtilsKt.mainLayoutNameOrQwerty(ims))) { sameLanguageAndLayoutCount++; } } diff --git a/app/src/main/java/helium314/keyboard/latin/utils/LayoutUtils.kt b/app/src/main/java/helium314/keyboard/latin/utils/LayoutUtils.kt index 68a99be99..13bcb24c0 100644 --- a/app/src/main/java/helium314/keyboard/latin/utils/LayoutUtils.kt +++ b/app/src/main/java/helium314/keyboard/latin/utils/LayoutUtils.kt @@ -17,7 +17,7 @@ object LayoutUtils { return context.assets.list(layoutType.folder)?.map { it.substringBefore(".") }.orEmpty() if (locale == null) return SubtypeSettings.getAllAvailableSubtypes() - .mapTo(HashSet()) { it.mainLayoutName()?.substringBefore("+") ?: "qwerty" } + .mapTo(HashSet()) { it.mainLayoutNameOrQwerty().substringBefore("+") } .apply { addAll(context.resources.getStringArray(R.array.predefined_layouts)) } val layouts = SubtypeSettings.getResourceSubtypesForLocale(locale).mapNotNullTo(mutableSetOf()) { it.mainLayoutName() } if (locale.script() == ScriptUtils.SCRIPT_LATIN) diff --git a/app/src/main/java/helium314/keyboard/latin/utils/SubtypeLocaleUtils.kt b/app/src/main/java/helium314/keyboard/latin/utils/SubtypeLocaleUtils.kt index 8c19650d6..f2da7d7c7 100644 --- a/app/src/main/java/helium314/keyboard/latin/utils/SubtypeLocaleUtils.kt +++ b/app/src/main/java/helium314/keyboard/latin/utils/SubtypeLocaleUtils.kt @@ -17,7 +17,6 @@ import helium314.keyboard.latin.common.StringUtils import helium314.keyboard.latin.utils.LayoutType.Companion.getMainLayoutFromExtraValue import helium314.keyboard.latin.utils.LayoutUtilsCustom.getDisplayName import helium314.keyboard.latin.utils.LayoutUtilsCustom.isCustomLayout -import helium314.keyboard.latin.utils.SubtypeSettings.getResourceSubtypesForLocale import java.util.Locale import kotlin.concurrent.Volatile @@ -189,7 +188,7 @@ object SubtypeLocaleUtils { getMainLayoutDisplayName(mainLayoutName)?.let { return it } // works for custom and latin layouts // we have some locale-specific layout - for (subtype in getResourceSubtypesForLocale(locale)) { + for (subtype in SubtypeSettings.getResourceSubtypesForLocale(locale)) { if (mainLayoutName == getMainLayoutFromExtraValue(subtype.extraValue)) return getSubtypeDisplayNameInSystemLocale(subtype) } @@ -216,7 +215,7 @@ object SubtypeLocaleUtils { if (subtype == null) { return "" } - return subtype.locale().toString() + "/" + getMainLayoutName(subtype) + return subtype.locale().toString() + "/" + subtype.mainLayoutNameOrQwerty() } private fun getSubtypeDisplayNameInternal(subtype: InputMethodSubtype, displayLocale: Locale): String { @@ -231,23 +230,12 @@ object SubtypeLocaleUtils { } } - fun getMainLayoutDisplayName(subtype: InputMethodSubtype): String? = - getMainLayoutDisplayName(getMainLayoutName(subtype)) - fun getMainLayoutDisplayName(layoutName: String): String? = if (isCustomLayout(layoutName)) getDisplayName(layoutName) else keyboardLayoutToDisplayName[layoutName] @JvmStatic - fun getMainLayoutName(subtype: InputMethodSubtype): String { - subtype.mainLayoutName()?.let { return it } - if (!subtype.isAsciiCapable) - Log.w(TAG, "KeyboardLayoutSet not found, use QWERTY: locale=${subtype.locale()} extraValue=${subtype.extraValue}") - return QWERTY - } - - @JvmStatic - fun getCombiningRulesExtraValue(subtype: InputMethodSubtype): String = subtype.getExtraValueOf(ExtraValue.COMBINING_RULES) + fun getCombiningRulesExtraValue(subtype: InputMethodSubtype): String? = subtype.getExtraValueOf(ExtraValue.COMBINING_RULES) // Special language code to represent "no language". const val NO_LANGUAGE = "zz" diff --git a/app/src/main/java/helium314/keyboard/latin/utils/SubtypeSettings.kt b/app/src/main/java/helium314/keyboard/latin/utils/SubtypeSettings.kt index 86486adb9..69db1b4a4 100644 --- a/app/src/main/java/helium314/keyboard/latin/utils/SubtypeSettings.kt +++ b/app/src/main/java/helium314/keyboard/latin/utils/SubtypeSettings.kt @@ -241,7 +241,7 @@ object SubtypeSettings { continue } - val subtype = subtypesForLocale.firstOrNull { SubtypeLocaleUtils.getMainLayoutName(it) == (settingsSubtype.mainLayoutName() ?: SubtypeLocaleUtils.QWERTY) } + val subtype = subtypesForLocale.firstOrNull { it.mainLayoutNameOrQwerty() == (settingsSubtype.mainLayoutName() ?: SubtypeLocaleUtils.QWERTY) } if (subtype == null) { val message = "subtype $settingsSubtype could not be loaded" Log.w(TAG, message) diff --git a/app/src/main/java/helium314/keyboard/latin/utils/SubtypeUtils.kt b/app/src/main/java/helium314/keyboard/latin/utils/SubtypeUtils.kt index a210174ac..7351e5453 100644 --- a/app/src/main/java/helium314/keyboard/latin/utils/SubtypeUtils.kt +++ b/app/src/main/java/helium314/keyboard/latin/utils/SubtypeUtils.kt @@ -30,6 +30,8 @@ fun InputMethodSubtype.mainLayoutName(): String? { return map[LayoutType.MAIN] } +fun InputMethodSubtype.mainLayoutNameOrQwerty(): String = mainLayoutName() ?: SubtypeLocaleUtils.QWERTY + fun getResourceSubtypes(resources: Resources): List { val subtypes = mutableListOf() val xml = resources.getXml(R.xml.method) @@ -67,7 +69,7 @@ fun getResourceSubtypes(resources: Resources): List { /** Workaround for SubtypeLocaleUtils.getSubtypeDisplayNameInSystemLocale ignoring custom layout names */ // todo (later): this should be done properly and in SubtypeLocaleUtils fun InputMethodSubtype.displayName(context: Context): String { - val layoutName = SubtypeLocaleUtils.getMainLayoutName(this) + val layoutName = mainLayoutNameOrQwerty() if (LayoutUtilsCustom.isCustomLayout(layoutName)) return "${locale().localizedDisplayName(context)} (${LayoutUtilsCustom.getDisplayName(layoutName)})" return SubtypeLocaleUtils.getSubtypeDisplayNameInSystemLocale(this)