diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dcb63d111..5e0fbaefa 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,7 +9,7 @@ If you have difficulties implementing some functionality, you're welcome to ask # Guidelines HeliBoard is a complex application, when contributing, you must take a step back and make sure your contribution: -- **Is actually wanted**. Best check related open issues before you start working on a PR. Issues with "PR" and "contributor needed" labels are accepted, but still it would be good if you announced that you are working on it, so we can discuss how changes are best implemented. +- **Is actually wanted**. Best check related open issues before you start working on a PR. Issues with [_PR_](https://github.com/Helium314/HeliBoard/labels/PR) and [_contributor needed_](https://github.com/Helium314/HeliBoard/issues?q=label%3A%22contributor%20needed%22) [labels](https://github.com/Helium314/HeliBoard/labels) are accepted, but still it would be good if you announced that you are working on it, so we can discuss how changes are best implemented. If there is no accepted issue related to your intended contribution, it's a good idea to open a new one (and of course getting one of "PR" or "contributor needed" labels) to avoid disappointment of the contribution not being accepted. For small changes or fixing obvious bugs this step is not necessary. - **Is only about a single thing**. Mixing unrelated or semi-related contributions into a single PR is hard to review and can get messy. - **Is finished or a draft**. When you keep changing the PR without reviewer's feedback, any attempt to review it is doomed and a waste of time. Better mark it as a draft in this case. diff --git a/app/src/main/assets/locale_key_texts/af.txt b/app/src/main/assets/locale_key_texts/af.txt index de2685f2d..556e2290b 100644 --- a/app/src/main/assets/locale_key_texts/af.txt +++ b/app/src/main/assets/locale_key_texts/af.txt @@ -6,3 +6,6 @@ o ó ô ö ò õ œ ø ō u ú û ü ù ū n ñ ń y ý ij + +[tlds] +za diff --git a/app/src/main/assets/locale_key_texts/ar.txt b/app/src/main/assets/locale_key_texts/ar.txt index 884976182..5c4b3c007 100644 --- a/app/src/main/assets/locale_key_texts/ar.txt +++ b/app/src/main/assets/locale_key_texts/ar.txt @@ -24,3 +24,6 @@ question: ؟ [number_row] ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩ ٠ + +[tlds] +sa diff --git a/app/src/main/assets/locale_key_texts/bg.txt b/app/src/main/assets/locale_key_texts/bg.txt index a0d8740f6..40924464c 100644 --- a/app/src/main/assets/locale_key_texts/bg.txt +++ b/app/src/main/assets/locale_key_texts/bg.txt @@ -3,3 +3,6 @@ [labels] alphabet: АБВ + +[tlds] +bg diff --git a/app/src/main/assets/locale_key_texts/ca.txt b/app/src/main/assets/locale_key_texts/ca.txt index d386f7606..619481bcd 100644 --- a/app/src/main/assets/locale_key_texts/ca.txt +++ b/app/src/main/assets/locale_key_texts/ca.txt @@ -10,3 +10,6 @@ punctuation !autoColumnOrder!9 \, ? ! · # ) ( / ; ' @ : - " + \% & [extra_keys] 2: ç + +[tlds] +cat es diff --git a/app/src/main/assets/locale_key_texts/cs.txt b/app/src/main/assets/locale_key_texts/cs.txt index 83e844e6f..a34abb417 100644 --- a/app/src/main/assets/locale_key_texts/cs.txt +++ b/app/src/main/assets/locale_key_texts/cs.txt @@ -14,3 +14,6 @@ y ý z ž ' ’ ‚ ‘ › ‹ " ” „ “ » « + +[tlds] +cz diff --git a/app/src/main/assets/locale_key_texts/da.txt b/app/src/main/assets/locale_key_texts/da.txt index b12cd4160..17094de22 100644 --- a/app/src/main/assets/locale_key_texts/da.txt +++ b/app/src/main/assets/locale_key_texts/da.txt @@ -9,3 +9,6 @@ o ø 1: å 2: æ ä 2: ø ö + +[tlds] +dk diff --git a/app/src/main/assets/locale_key_texts/de.txt b/app/src/main/assets/locale_key_texts/de.txt index d51c37f2e..0cc11904f 100644 --- a/app/src/main/assets/locale_key_texts/de.txt +++ b/app/src/main/assets/locale_key_texts/de.txt @@ -5,3 +5,6 @@ u ü s ß ' ’ ‚ ‘ › ‹ " ” „ “ » « + +[tlds] +de at ch diff --git a/app/src/main/assets/locale_key_texts/el.txt b/app/src/main/assets/locale_key_texts/el.txt index 6372cd786..0dd59534e 100644 --- a/app/src/main/assets/locale_key_texts/el.txt +++ b/app/src/main/assets/locale_key_texts/el.txt @@ -9,3 +9,6 @@ [labels] alphabet: ΑΒΓ + +[tlds] +gr diff --git a/app/src/main/assets/locale_key_texts/es.txt b/app/src/main/assets/locale_key_texts/es.txt index 5e66d9810..bfaa35a94 100644 --- a/app/src/main/assets/locale_key_texts/es.txt +++ b/app/src/main/assets/locale_key_texts/es.txt @@ -10,3 +10,6 @@ punctuation !autoColumnOrder!9 \, ? ! # ) ( / ; ¡ ' @ : - " + \% & ¿ [extra_keys] 2: ñ + +[tlds] +es com.es diff --git a/app/src/main/assets/locale_key_texts/et.txt b/app/src/main/assets/locale_key_texts/et.txt index 0ad69c235..2ee735f5a 100644 --- a/app/src/main/assets/locale_key_texts/et.txt +++ b/app/src/main/assets/locale_key_texts/et.txt @@ -12,3 +12,6 @@ z ž 2: ö õ 2: ä 3: õ + +[tlds] +ee diff --git a/app/src/main/assets/locale_key_texts/fa.txt b/app/src/main/assets/locale_key_texts/fa.txt index 1fce5e719..3ce747ec4 100644 --- a/app/src/main/assets/locale_key_texts/fa.txt +++ b/app/src/main/assets/locale_key_texts/fa.txt @@ -17,3 +17,6 @@ question: ؟ [number_row] ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۰ + +[tlds] +ir diff --git a/app/src/main/assets/locale_key_texts/fi.txt b/app/src/main/assets/locale_key_texts/fi.txt index bfb587327..287d329f8 100644 --- a/app/src/main/assets/locale_key_texts/fi.txt +++ b/app/src/main/assets/locale_key_texts/fi.txt @@ -8,3 +8,6 @@ z ž 1: å 2: ö ø 2: ä æ + +[tlds] +fi diff --git a/app/src/main/assets/locale_key_texts/fr.txt b/app/src/main/assets/locale_key_texts/fr.txt index 4311b0918..02772665f 100644 --- a/app/src/main/assets/locale_key_texts/fr.txt +++ b/app/src/main/assets/locale_key_texts/fr.txt @@ -11,3 +11,6 @@ y ÿ 1: è ü 2: é ö 2: à ä + +[tlds] +fr diff --git a/app/src/main/assets/locale_key_texts/hi-Latn.txt b/app/src/main/assets/locale_key_texts/hi-Latn.txt index e69de29bb..b77e1c872 100644 --- a/app/src/main/assets/locale_key_texts/hi-Latn.txt +++ b/app/src/main/assets/locale_key_texts/hi-Latn.txt @@ -0,0 +1,2 @@ +[tlds] +in diff --git a/app/src/main/assets/locale_key_texts/hi.txt b/app/src/main/assets/locale_key_texts/hi.txt index e69478234..c30631dca 100644 --- a/app/src/main/assets/locale_key_texts/hi.txt +++ b/app/src/main/assets/locale_key_texts/hi.txt @@ -73,3 +73,6 @@ period: । [number_row] १ २ ३ ४ ५ ६ ७ ८ ९ ० + +[tlds] +in diff --git a/app/src/main/assets/locale_key_texts/hr.txt b/app/src/main/assets/locale_key_texts/hr.txt index 2f20257ae..dbe04049c 100644 --- a/app/src/main/assets/locale_key_texts/hr.txt +++ b/app/src/main/assets/locale_key_texts/hr.txt @@ -5,3 +5,6 @@ c č ć d đ ' ‘ ‚ ’ › ‹ " “ „ ” » « + +[tlds] +hr diff --git a/app/src/main/assets/locale_key_texts/hu.txt b/app/src/main/assets/locale_key_texts/hu.txt index f973343ab..423b45149 100644 --- a/app/src/main/assets/locale_key_texts/hu.txt +++ b/app/src/main/assets/locale_key_texts/hu.txt @@ -6,3 +6,6 @@ o ó ö ő u ú ü ű ' ‘ ‚ ’ › ‹ " “ „ ” » « + +[tlds] +hu gov.hu diff --git a/app/src/main/assets/locale_key_texts/hy.txt b/app/src/main/assets/locale_key_texts/hy.txt index 4808e31b5..66b3f3443 100644 --- a/app/src/main/assets/locale_key_texts/hy.txt +++ b/app/src/main/assets/locale_key_texts/hy.txt @@ -6,3 +6,6 @@ punctuation !autoColumnOrder!8 \, ՞ ՜ ․ … ' = / ՝ ՛ ֊ » « ― ) ( [labels] alphabet: ԱԲԳ period: ։ + +[tlds] +am diff --git a/app/src/main/assets/locale_key_texts/is.txt b/app/src/main/assets/locale_key_texts/is.txt index b8380b2e1..4474bc166 100644 --- a/app/src/main/assets/locale_key_texts/is.txt +++ b/app/src/main/assets/locale_key_texts/is.txt @@ -9,3 +9,6 @@ y ý t þ ' ’ ‚ ‘ " ” „ “ + +[tlds] +is diff --git a/app/src/main/assets/locale_key_texts/it.txt b/app/src/main/assets/locale_key_texts/it.txt index 305127e24..8ee569cfd 100644 --- a/app/src/main/assets/locale_key_texts/it.txt +++ b/app/src/main/assets/locale_key_texts/it.txt @@ -4,3 +4,6 @@ e è é ə i ì o ò ó º u ù + +[tlds] +it gov.it edu.it diff --git a/app/src/main/assets/locale_key_texts/iw.txt b/app/src/main/assets/locale_key_texts/iw.txt index 70f5f0a2b..781fe76b4 100644 --- a/app/src/main/assets/locale_key_texts/iw.txt +++ b/app/src/main/assets/locale_key_texts/iw.txt @@ -10,3 +10,6 @@ [labels] alphabet: אבג + +[tlds] +il co.il gov.il diff --git a/app/src/main/assets/locale_key_texts/kab.txt b/app/src/main/assets/locale_key_texts/kab.txt index 47a02ff2a..34df72124 100644 --- a/app/src/main/assets/locale_key_texts/kab.txt +++ b/app/src/main/assets/locale_key_texts/kab.txt @@ -14,3 +14,5 @@ b p [labels] alphabet: AƐΓ +[tlds] +dz fr diff --git a/app/src/main/assets/locale_key_texts/ko.txt b/app/src/main/assets/locale_key_texts/ko.txt index 10535b9ad..9f7c4e37b 100644 --- a/app/src/main/assets/locale_key_texts/ko.txt +++ b/app/src/main/assets/locale_key_texts/ko.txt @@ -1,2 +1,5 @@ [labels] alphabet: ㄱㄴㄷ + +[tlds] +kr diff --git a/app/src/main/assets/locale_key_texts/lt.txt b/app/src/main/assets/locale_key_texts/lt.txt index a55b16039..d017e3812 100644 --- a/app/src/main/assets/locale_key_texts/lt.txt +++ b/app/src/main/assets/locale_key_texts/lt.txt @@ -8,3 +8,6 @@ u ū ų z ž ' ’ ‚ ‘ " ” „ “ + +[tlds] +lt diff --git a/app/src/main/assets/locale_key_texts/lv.txt b/app/src/main/assets/locale_key_texts/lv.txt index cf6f53653..de243b16f 100644 --- a/app/src/main/assets/locale_key_texts/lv.txt +++ b/app/src/main/assets/locale_key_texts/lv.txt @@ -13,3 +13,6 @@ u ū z ž ' ’ ‚ ‘ " ” „ “ + +[tlds] +lv diff --git a/app/src/main/assets/locale_key_texts/nb.txt b/app/src/main/assets/locale_key_texts/nb.txt index 05c9c8773..5b75b95c2 100644 --- a/app/src/main/assets/locale_key_texts/nb.txt +++ b/app/src/main/assets/locale_key_texts/nb.txt @@ -9,3 +9,6 @@ o ø 1: å 2: ø ö 2: æ ä + +[tlds] +no diff --git a/app/src/main/assets/locale_key_texts/pl.txt b/app/src/main/assets/locale_key_texts/pl.txt index a92ce9c4f..91baf0d31 100644 --- a/app/src/main/assets/locale_key_texts/pl.txt +++ b/app/src/main/assets/locale_key_texts/pl.txt @@ -9,3 +9,6 @@ z ż ź l ł ' ‘ ‚ ’ " “ „ ” + +[tlds] +pl diff --git a/app/src/main/assets/locale_key_texts/ro.txt b/app/src/main/assets/locale_key_texts/ro.txt index 49b4c2efa..988644ef5 100644 --- a/app/src/main/assets/locale_key_texts/ro.txt +++ b/app/src/main/assets/locale_key_texts/ro.txt @@ -5,3 +5,6 @@ s ș t ț ' ‘ ‚ ’ " “ „ ” + +[tlds] +ro diff --git a/app/src/main/assets/locale_key_texts/ru.txt b/app/src/main/assets/locale_key_texts/ru.txt index f6062fb5a..bbb9a2478 100644 --- a/app/src/main/assets/locale_key_texts/ru.txt +++ b/app/src/main/assets/locale_key_texts/ru.txt @@ -6,3 +6,6 @@ [labels] alphabet: АБВ + +[tlds] +ru diff --git a/app/src/main/assets/locale_key_texts/sk.txt b/app/src/main/assets/locale_key_texts/sk.txt index 36ec252bb..b699ff6b1 100644 --- a/app/src/main/assets/locale_key_texts/sk.txt +++ b/app/src/main/assets/locale_key_texts/sk.txt @@ -15,3 +15,6 @@ z ž l ľ ĺ ' ’ ‚ ‘ › ‹ " ” „ “ » « + +[tlds] +sk diff --git a/app/src/main/assets/locale_key_texts/sl.txt b/app/src/main/assets/locale_key_texts/sl.txt index 1a7c5ebe5..beb841433 100644 --- a/app/src/main/assets/locale_key_texts/sl.txt +++ b/app/src/main/assets/locale_key_texts/sl.txt @@ -4,3 +4,6 @@ c č ć z ž ' ’ ‚ ‘ › ‹ " ” „ “ » « + +[tlds] +si diff --git a/app/src/main/assets/locale_key_texts/sr-Latn.txt b/app/src/main/assets/locale_key_texts/sr-Latn.txt index ecce81e47..7f0b254da 100644 --- a/app/src/main/assets/locale_key_texts/sr-Latn.txt +++ b/app/src/main/assets/locale_key_texts/sr-Latn.txt @@ -10,3 +10,6 @@ d đ 2: ć 3: đ 3: ž + +[tlds] +rs diff --git a/app/src/main/assets/locale_key_texts/sr.txt b/app/src/main/assets/locale_key_texts/sr.txt index 89e06672f..039e1f481 100644 --- a/app/src/main/assets/locale_key_texts/sr.txt +++ b/app/src/main/assets/locale_key_texts/sr.txt @@ -6,3 +6,6 @@ [labels] alphabet: АБВ + +[tlds] +rs diff --git a/app/src/main/assets/locale_key_texts/sv.txt b/app/src/main/assets/locale_key_texts/sv.txt index 0425538d2..233e02c3b 100644 --- a/app/src/main/assets/locale_key_texts/sv.txt +++ b/app/src/main/assets/locale_key_texts/sv.txt @@ -8,3 +8,6 @@ o ö 1: å 2: ö 2: ä + +[tlds] +sv diff --git a/app/src/main/assets/locale_key_texts/tr.txt b/app/src/main/assets/locale_key_texts/tr.txt index a729bd4d1..e2f1771b1 100644 --- a/app/src/main/assets/locale_key_texts/tr.txt +++ b/app/src/main/assets/locale_key_texts/tr.txt @@ -7,3 +7,6 @@ u ü û s ş g ğ c ç + +[tlds] +tr gov.tr edu.tr com.tr diff --git a/app/src/main/assets/locale_key_texts/uk.txt b/app/src/main/assets/locale_key_texts/uk.txt index 851c7280f..9ee926c94 100644 --- a/app/src/main/assets/locale_key_texts/uk.txt +++ b/app/src/main/assets/locale_key_texts/uk.txt @@ -7,3 +7,6 @@ [labels] alphabet: АБВ + +[tlds] +ua diff --git a/app/src/main/assets/locale_key_texts/vi.txt b/app/src/main/assets/locale_key_texts/vi.txt index 8f8fb9d7d..83db93bb6 100644 --- a/app/src/main/assets/locale_key_texts/vi.txt +++ b/app/src/main/assets/locale_key_texts/vi.txt @@ -6,3 +6,6 @@ o ò ó ỏ õ ọ ô ồ ố ổ ỗ ộ ơ ờ ớ ở ỡ ợ u ù ú ủ ũ ụ ư ừ ứ ử ữ ự y ỳ ý ỷ ỹ ỵ d đ + +[tlds] +vn diff --git a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/LocaleKeyboardInfos.kt b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/LocaleKeyboardInfos.kt index bd7f80645..722fb822f 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/LocaleKeyboardInfos.kt +++ b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/LocaleKeyboardInfos.kt @@ -43,6 +43,7 @@ class LocaleKeyboardInfos(dataStream: InputStream?, locale: Locale) { "mns" -> Key.LABEL_FLAGS_FOLLOW_KEY_LETTER_RATIO else -> 0 } + val tlds = getLocaleTlds(locale) // todo: USE IT init { readStream(dataStream, false, true) @@ -74,17 +75,25 @@ class LocaleKeyboardInfos(dataStream: InputStream?, locale: Locale) { "[extra_keys]" -> { mode = READER_MODE_EXTRA_KEYS; return@forEachLine } "[labels]" -> { mode = READER_MODE_LABELS; return@forEachLine } "[number_row]" -> { mode = READER_MODE_NUMBER_ROW; return@forEachLine } + "[tlds]" -> { mode = READER_MODE_TLD; return@forEachLine } } when (mode) { READER_MODE_POPUP_KEYS -> addPopupKeys(line, priority) READER_MODE_EXTRA_KEYS -> if (!onlyPopupKeys) addExtraKey(line.split(colonSpaceRegex, 2)) READER_MODE_LABELS -> if (!onlyPopupKeys) addLabel(line.split(colonSpaceRegex, 2)) READER_MODE_NUMBER_ROW -> localizedNumberKeys = line.splitOnWhitespace() + READER_MODE_TLD -> line.splitOnWhitespace().forEach { tlds.add(".$it") } } } } } + fun addDefaultTlds(locale: Locale) { + if ((locale.language != "en" && euroLocales.matches(locale.language)) || euroCountries.matches(locale.country)) + tlds.add(".eu") + tlds.addAll(defaultTlds.splitOnWhitespace()) + } + /** Pair(extraKeysLeft, extraKeysRight) */ fun getTabletExtraKeys(elementId: Int): Pair, List> { val flags = Key.LABEL_FLAGS_FONT_DEFAULT @@ -192,6 +201,7 @@ private fun createLocaleKeyTexts(context: Context, params: KeyboardParams, popup if (locale == params.mId.locale) return@forEach lkt.addFile(getStreamForLocale(locale, context), true) } + lkt.addDefaultTlds(params.mId.locale) when (popupKeysSetting) { POPUP_KEYS_MAIN -> lkt.addFile(context.assets.open("$LOCALE_TEXTS_FOLDER/more_popups_main.txt"), false) POPUP_KEYS_MORE -> lkt.addFile(context.assets.open("$LOCALE_TEXTS_FOLDER/more_popups_more.txt"), false) @@ -212,6 +222,20 @@ private fun getStreamForLocale(locale: Locale, context: Context) = } } +private fun getLocaleTlds(locale: Locale): LinkedHashSet { + val ccLower = locale.country.lowercase() + val tlds = LinkedHashSet() + if (ccLower.isEmpty() || ccLower == "zz") + return tlds + specialCountryTlds.forEach { + if (ccLower != it.first) return@forEach + tlds.addAll(it.second.splitOnWhitespace()) + return tlds + } + tlds.add(".$ccLower") + return tlds +} + fun clearCache() = localeKeyboardInfosCache.clear() // cache the texts, so they don't need to be read over and over @@ -222,6 +246,7 @@ private const val READER_MODE_POPUP_KEYS = 1 private const val READER_MODE_EXTRA_KEYS = 2 private const val READER_MODE_LABELS = 3 private const val READER_MODE_NUMBER_ROW = 4 +private const val READER_MODE_TLD = 5 // probably could be improved and extended, currently this is what's done in key_styles_currency.xml private fun getCurrencyKey(locale: Locale): Pair> { @@ -294,3 +319,16 @@ const val POPUP_KEYS_MAIN = 3 const val POPUP_KEYS_NORMAL = 0 private const val LOCALE_TEXTS_FOLDER = "locale_key_texts" + +// either tld is not lowecase ISO 3166-1 code, or there are multiple according to some list +private val specialCountryTlds = listOf( + "bd" to ".bd .com.bd", + "bq" to ".bq .an .nl", + "bl" to ".bl .gp .fr", + "sx" to ".sx .an", + "gb" to ".uk .co.uk", + "eh" to ".eh .ma", + "mf" to ".mf .gp .fr", + "tl" to ".tl .tp", +) +private const val defaultTlds = ".com .gov .edu .org .net"