Compare commits

...
8 Commits
Author SHA1 Message Date
Jules Aguillon 063756eb50 Release 2.0.1 (52) 2026-05-03 19:30:18 +02:00
Jules Aguillon 9189921719 Add languages for which a dictionary is available (#1267)
* gen_method_xml.py: Warn for unused dictionaries

Helps catch missing locales.

* Add languages for which a dictionary is available

Make dictionaries are available to more languages. Extra keys are added
for as many languages as possible but no layout is added.

Some languages are still not added, mainly because they use a script
that the keyboard doesn't support yet:

    pa, gu, or, te, mai, sat, km, iw, zgh, sd, ml, sa
2026-05-03 19:19:51 +02:00
Jules Aguillon 2e1859fb1a Fix the keyboard drawing behind the navigation bar (#1265)
The width of the navigation was not accounted correctly.

This reverts be8a99bd
2026-05-03 18:10:43 +02:00
Jules Aguillon 139d1c5691 Fix crash when the cursor moves past an emoji (#1264)
The cursor might move in the middle of a surrogate pair.
2026-05-03 17:09:43 +02:00
Jules Aguillon 20a4916ff6 Fix wrong locale selection for English (#1263)
The "en" locale, which was meant to be the default for English locales
that are not in the list, was used instead of exact locales like "en_US".

The "en" locale was also used as the default locale for languages that
are not in the list at all. The "en_GB" locale is used for this instead.
2026-05-03 16:50:41 +02:00
Jules Aguillon 54c25b79e4 Update dictionaries.xml (#1262)
The dictionary sizes were not correct.
2026-05-03 13:50:51 +02:00
Jules Aguillon 82d61d4406 Fix crash when installing dictionaries (#1261)
This happens in release mode due to minification.
2026-05-03 12:55:27 +02:00
Jules Aguillon e2fdced765 releases: Update languages supported by Google Play (#1257)
Remove languages from fastlane metadata that are not supported by Google
Play and prevented the release from continuing.
2026-05-02 21:34:19 +02:00
26 changed files with 150 additions and 128 deletions
+5 -2
View File
@@ -20,8 +20,8 @@ android {
applicationId = "juloo.keyboard2"
minSdk = 21
targetSdk { version = release(36) }
versionCode = 51
versionName = "2.0.0"
versionCode = 52
versionName = "2.0.1"
}
sourceSets {
@@ -69,6 +69,9 @@ android {
buildTypes {
named("release") {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro")
isShrinkResources = true
isDebuggable = false
resValue("string", "app_name", "@string/app_name_release")
@@ -1,6 +0,0 @@
الميزة الرئيسية إنّه تقدر تكتب حروف أكثر عن طريق تمرير المفاتيح باتّجاه الزوايا
هذا التطبيق أصلاً تسوّى علشان المبرمجين إلّي يستخدمون طرفية Termux.
الآن صار تمام للاستخدام اليومي.
هذا التطبيق ما فيه إعلانات، ما يقدّم أي طلبات على الشبكة ومفتوح المصدر.
@@ -1 +0,0 @@
كيبورد افتراضي خفيف الوزن ويراعي الخصوصية لآندرويد.
-1
View File
@@ -1 +0,0 @@
Unexpected Keyboard
@@ -1,6 +0,0 @@
الميزة الرئيسة هي أنّه يمكنك كتابة المزيد من الأحرف عن طريق تمرير المفاتيح نحو الزوايا.
هذا التطبيق كان مُصممًا للمُبرمجين الذين يستخدمون طرفية Termux.
الآن صار مثاليًا للاستخدام اليومي.
هذا التطبيق لا يحتوي على إعلانات، ولا يقوم بأيّ طلبات شبكة، وكما أنّه مفتوح المصدر.
@@ -1 +0,0 @@
لوحة مفاتيح افتراضية خفيفة ومُراعية للخصوصية لنظام آندرويد.
-1
View File
@@ -1 +0,0 @@
Unexpected Keyboard
@@ -1,6 +0,0 @@
এর প্রধান বৈশিষ্ট্য হলো, কি-গুলোর কোণার দিকে সোয়াইপ করে আপনি আরও বেশি অক্ষর টাইপ করতে পারবেন।
এই অ্যাপ্লিকেশনটি মূলত টার্মাক্স (Termux) ব্যবহারকারী প্রোগ্রামারদের জন্য ডিজাইন করা হয়েছিল।
এখন এটি দৈনন্দিন ব্যবহারের জন্য উপযুক্ত।
এই অ্যাপ্লিকেশনটিতে কোনো বিজ্ঞাপন নেই, এটি কোনো নেটওয়ার্ক রিকোয়েস্ট করে না এবং এটি ওপেন সোর্স।
@@ -1 +0,0 @@
অ্যান্ড্রোয়েডের জন্য হালকা এবং গোপনীয়তা-সচেতন ভার্চুয়াল কিবোর্ড।
@@ -1 +0,0 @@
অপ্রত্যাশিত কীবোর্ড
@@ -0,0 +1,6 @@
Spell checking and autocorrect are here !
This releases comes with a very large number of improvements,
support for many languages and new themes!
Huge thanks to the contributors: @10Develops @anaskaejdar @andyca111100 @Autissima @bqv @cillyvms @domportera @dzaima @exzombie @Harry-Ais0 @Houfalafel @JeelsBoobz @JFronny @Julow @lan700ng @malbajun @matejdro @n-ce @skynetcat @sperareine @Spike-from-NH @xxcavemanxx
@@ -1,6 +0,0 @@
ویژگی اصلی این است که می‌توانید با کشیدن کلیدها به سمت گوشه‌ها، نویسه های (کاراکترهای) بیشتری تایپ کنید.
این برنامه در ابتدا برای برنامه‌نویسانی که از Termux استفاده می‌کنند طراحی شده بود.
اکنون برای استفاده روزمره عالی است.
این برنامه هیچ تبلیغاتی ندارد، هیچ درخواست شبکه‌ای انجام نمی‌دهد و متن‌باز است.
@@ -1 +0,0 @@
صفحه‌کلید مجازی سبک و با حفظ حریم خصوصی برای اندروید.
@@ -1 +0,0 @@
صفحه‌کلید غیرمنتظره
@@ -1,6 +0,0 @@
အဓိကလုပ်‌‌ဆောင်မှုကတော့လျင်မြန်စွာစာလုံးရေများများရိုက်ရလွယ်ကူစေရန်ဖိဆွဲလိုက်ရုံဖြင့်အက္ခရာများကိုပြောင်းလဲရိုက်နိုင်ခြင်းပါပဲ။
ဒီအပ်ပလီကေးရှင်းရဲ့ကနဦးရည်ရွယ်ချက်ကတော့ ပရိုဂရမ်မာတွေ Termux မှာအသုံးပြုဖို့ဖန်တီးခဲ့ခြင်းဖြစ်ပါတယ်။
အခုတော့ Termux သာမကပဲနိစ္စဓူ၀ကိစ္စများအတွက်အသုံးပြုနိုင်ပါပြီ။
ဤအပ်ပလီကေးရှင်းတွင်မည်သည့်ကြော်ငြာ၊ အင်တာနက်ကွန်နက်ရှင်ချိတ်ဆက်မှုဆိုင်ရာများမပါ၀င်သလို Open source လည်းဖြစ်ပါတယ်။
@@ -1 +0,0 @@
Android အတွက် သေးငယ်ပေါ့ပါးပြီးကိုယ်ရေးကိုယ်တာလုံခြုံမှုဆိုင်ရာအထူးဦးစား‌ပေးထားသည့်ကီးဘုတ်ဆော့ဝဲ.
-1
View File
@@ -1 +0,0 @@
Unexpected Keyboard
@@ -1 +0,0 @@
supa nena ni li suli ala lon ilo, supa nena ni li sona e len, ni li lon ilo Android.
-1
View File
@@ -1 +0,0 @@
Unexpected Keyboard
+46 -11
View File
@@ -1,11 +1,15 @@
import xml.etree.ElementTree as ET
import itertools as it
import sys
# This script generates res/xml/method.xml.
def warn(msg):
print("Warning: " + msg, file=sys.stderr)
def loc(loc_name, script, default_layout, **kwargs):
return { "name": loc_name, "script": script,
"default_layout": default_layout, **kwargs }
"default_layout": default_layout, **kwargs }
# The locales are defined here. To add support for a language, add it to the
# following block:
@@ -13,17 +17,21 @@ def loc(loc_name, script, default_layout, **kwargs):
LOCALES = [
loc("ar", "arabic", "arab_pc_hindu"),
loc("ar_TN", "arabic", "arab_pc"),
loc("ay_AM", "armenian", "armenian_ph_am"),
loc("as", "beng", "beng_assamese"),
loc("az_AZ", "latin", "latn_qwerty_az", extra_keys="accent_trema:ü:ö@w|accent_cedille:ç:ş@s|ğ@g|ı@k|ə@l"),
loc("be_BY", "cyrillic", "cyrl_jcuken_ru", extra_keys="ґ|є|і|ї|ў"),
loc("bg_BG", "cyrillic", "cyrl_ueishsht", extra_keys="€"),
loc("bn_BD", "latin", "latn_qwerty_us", extra_keys="৳"),
loc("bs", "latin", "latn_qwerty_us", extra_keys="đ|ž|lj|nj|ć|č|dž|š"),
loc("ca", "latin", "latn_qwerty_us", extra_keys="accent_grave:à:ò:è|accent_cedille:ç@c|accent_aigu:é:í:ú:ó|accent_trema:ï:ü|ŀl|€"),
loc("cs_CZ", "latin", "latn_qwertz_cz", extra_keys="accent_aigu:á:é:í:ó:ú:ý@d|accent_ring:ů@s|accent_caron:č:ě:ň:ř:š:ž:ď:ť@f"),
loc("cy_GB", "latin", "latn_qwerty_cy"),
loc("da_DK", "latin", "latn_qwerty_da", extra_keys="€|æ|å|ø"),
loc("de_BE", "latin", "latn_azerty_be", extra_keys="accent_grave:è@f|accent_aigu:á:é:í:ó:ú:ý:j́@d|accent_circonflexe:ê@f|accent_cedille:ç@c|accent_trema@u|€"),
loc("de_CH", "latin", "latn_qwertz_de", extra_keys="accent_trema:ä:ö:ü@u|ß"),
loc("de_DE", "latin", "latn_qwertz_de", extra_keys="accent_trema:ä:ö:ü@u|ß|€"),
loc("el", "latin", "grek_qwerty", extra_keys="£@l|€"),
loc("en", "latin", "latn_qwerty_us", dictionary="en_GB"),
loc("en_AU", "latin", "latn_qwerty_us"),
loc("en_CA", "latin", "latn_qwerty_us"),
loc("en_GB", "latin", "latn_qwerty_gb", extra_keys="£@l"),
@@ -32,6 +40,7 @@ LOCALES = [
loc("en_US", "latin", "latn_qwerty_us"),
loc("es_ES", "latin", "latn_qwerty_es", extra_keys="accent_aigu:á:é:í:ó:ú@d|accent_tilde:ñ@n|accent_grave@f|accent_trema@u|€"),
loc("et_EE", "latin", "latn_qwerty_et", extra_keys="accent_trema:ä:ö:ü@u|accent_tilde:õ@o|accent_caron:š:ž@s|€"),
loc("eu", "latin", "latn_qwerty_us", extra_keys="ñ|ç|ü|dd|ll|rr|ts|tt|tx|tz"),
loc("fa_IR", "persian", "arab_pc_ir"),
loc("fi", "latin", "latn_qwerty_fi", extra_keys="å|accent_ring|accent_aigu|accent_trema|ö|ä|€"),
loc("fr_BE", "latin", "latn_azerty_be", extra_keys="accent_grave:à:è:ù@f|accent_aigu:é@d|accent_circonflexe:ê:û@f|accent_cedille:ç@c|accent_trema@u|€"),
@@ -39,11 +48,14 @@ LOCALES = [
loc("fr_CH", "latin", "latn_qwertz_fr_ch", extra_keys="accent_grave:à:è:ù@f|accent_aigu:é@d|accent_circonflexe:â:ê:ô:û@o|accent_cedille:ç@c|accent_trema:ë:ï:ü:ÿ@u|€"),
loc("fr_FR", "latin", "latn_azerty_fr", extra_keys="accent_grave:à:è:ù@d|accent_aigu:é@d|accent_circonflexe:â:ê:ô:û@o|accent_cedille:ç@c|accent_trema:ë:ï:ü@l|€"),
loc("ga_IE", "latin", "latn_qwerty_ga", extra_keys="accent_aigu:á:é:í:ó:ú@k|accent_dot_above@l"),
loc("gl", "latin", "latn_qwerty_us"),
loc("ha_NG", "latin", "latn_qwerty_us", extra_keys="₦|ɓ|ɗ|ƙ|’|ƴ|r̃"),
loc("haw_US", "latin", "latn_qwerty_haw", extra_keys="ʻ@l|accent_macron:ā:ē:ī:ō:ū@m"),
loc("he_IL", "hebrew", "default_layout=hebr_1_il,extra_keys=₪@r|€"),
loc("hi_IN", "devanagari", "deva_inscript", extra_keys="₹"),
loc("hr", "latin", "latn_qwerty_us", extra_keys="č|ć|dž|đ|lj|nj|š|ž"),
loc("hu_HU", "latin", "latn_qwertz_hu", extra_keys="accent_aigu:á:é:í:ó:ú@d|accent_trema:ö:ü@u|accent_ogonek@s|accent_double_aigu:ő:ű@k|€"),
loc("hy", "armenian", "armenian_ph_am"),
loc("ig_NG", "latin", "latn_qwerty_us", extra_keys="₦|ṅ|ọ|ụ"),
loc("is_IS", "latin", "latn_qwerty_is", extra_keys="ð|þ|æ|accent_trema:ö@o|accent_aigu:á:é:í:ó:ú:ý@d|accent_circonflexe|accent_ring|accent_grave"),
loc("it_IT", "latin", "latn_qwerty_us", extra_keys="accent_grave:à:è:ì:ò:ù@f|accent_aigu:é:ó@d|accent_circonflexe:î@f|€|ə"),
@@ -51,21 +63,25 @@ LOCALES = [
loc("kk_KZ", "latin", "cyrl_jcuken_kk"),
loc("kn_IN", "kannada", "kann_kannada"),
loc("ko_KR", "hangul", "hang_dubeolsik_kr"),
loc("lb", "latin", "latn_qwerty_us", extra_keys="é|ä|ë|accent_grave|accent_cedille@c|accent_aigu|accent_trema|€"),
loc("lt_LT", "latin", "latn_qwerty_lt", extra_keys="accent_ogonek:ą:ę:į:ų@s|accent_caron:č:š:ž@f|accent_dot_above:ė@s|accent_macron:ū@o|€"),
loc("lv_LV", "latin", "latn_qwerty_lv", extra_keys="accent_macron:ā:ē:ī:ū@o|accent_caron:č:š:ž@f|accent_ogonek:ķ:ļ:ņ@s|accent_cedille:ģ@c|€"),
loc("mk", "cyrillic", "cyrl_lynyertdz_mk", extra_keys="ѕ|ѓ|ќ|ѝ|ѐ|љ|њ|џ|„|“|€"),
loc("mn_MN", "cyrillic", "cyrl_fcuzhen_mn", extra_keys="ү|ө"),
loc("mr_IN", "devanagari", "deva_inscript", extra_keys="₹"),
loc("mt_MT", "latin", "latn_qwerty_mt", extra_keys="accent_grave:à:è:ì:ò:ù|accent_dot_above:ċ:ż:ġ|ħ"),
loc("nb", "latin", "latn_qwerty_us", extra_keys="€|æ@a|å@a|ø@o|accent_aigu:é:ó@d|accent_grave:è:ò:ù@f|accent_circonflexe:ê:ô@f"),
loc("ne_NE", "devanagari", "deva_inscript", extra_keys="₹"),
loc("nl_BE", "latin", "latn_azerty_be", extra_keys="accent_grave:è@f|accent_aigu:á:é:í:ó:ú:ý:j́@d|accent_circonflexe:ê@f|accent_cedille:ç@c|accent_trema@u|€"),
loc("no_NO", "latin", "latn_qwerty_us", extra_keys="€|æ@a|å@a|ø@o|accent_aigu:é:ó@d|accent_grave:è:ò:ù@f|accent_circonflexe:ê:ô@f"),
loc("pl_PL", "latin", "latn_qwerty_pl"),
loc("pt_BR", "latin", "latn_qwerty_pt", extra_keys="accent_aigu:á:é:í:ó:ú@d|accent_cedille:ç@c|accent_circonflexe:â:ê:ô@f|accent_grave:à:ò@f|accent_tilde:ã:õ@n|€|ª|º"),
loc("pt_PT", "latin", "latn_qwerty_pt", extra_keys="accent_aigu:á:é:í:ó:ú@d|accent_cedille:ç@c|accent_circonflexe:â:ê:ô@f|accent_grave:à:ò@f|accent_tilde:ã:õ@n|€|ª|º"),
loc("ro_RO", "latin", "latn_qwerty_ro", extra_keys="ă|â|î|ș|ț|€|$"),
loc("ru_RU", "latin", "cyrl_jcuken_ru"),
loc("si_LK", "sinhala", "sinhala_phonetic", extra_keys="₨"),
loc("sk_SK", "latin", "latn_qwertz_sk", extra_keys="accent_caron:ě:ř:ž:š:č:ň:ď:ľ:ť@f|accent_ring:ů@s|accent_circonflexe:ô@f|accent_trema:ä:ü:ö@u|accent_aigu:á:é:í:ó:ú:ŕ:ś:ĺ:ý@d"),
loc("sl", "latin", "latn_qwerty_us", extra_keys="accent_caron:Č:Š:Ž|€"),
loc("sq_AL", "latin", "latn_qwertz_sq"),
loc("sr_", "latin", "cyrl_lynyertz_sr"),
loc("sv_SE", "latin", "latn_qwerty_se", extra_keys="accent_aigu:á@d|accent_trema:ä:ö@o|accent_ring:å@s|€"),
@@ -74,13 +90,14 @@ LOCALES = [
loc("tly_IR", "persian", "arab_hamvaj_tly"),
loc("tr_TR", "latin", "latn_qwerty_tr", extra_keys="accent_cedille:ç:ş@c|accent_trema:ö:ü@u|accent_circonflexe:â:î:û@f|₺|ı|ğ"),
loc("uk_UA", "cyrillic", "cyrl_jcuken_uk", extra_keys="ґ|є|і|ї|₴"),
loc("ur", "persian", "arab_pc_ir"),
loc("uz_UZ", "latin", "latn_qwerty_uz", extra_keys="ʻ|ʼ"),
loc("vi_VN", "latin", "latn_qwerty_vi"),
loc("yo_NG", "latin", "latn_qwerty_us", extra_keys="₦|ẹ|ọ|ṣ")
]
# The locale that is at the beginning of the list
DEFAULT_LOCALE = loc("en", "latin", "latn_qwerty_us", tag="en", dictionary="en_GB")
# The locale that is at the beginning of the list.
DEFAULT_LOCALE = "en_GB"
def parse_dictionaries():
tree = ET.parse("res/values/dictionaries.xml")
@@ -90,6 +107,13 @@ def parse_dictionaries():
# Available dictionares of the form "de" or "de_CH".
available_dictionaries = parse_dictionaries()
# Warn when a dictionary is attached to no locale
def check_locales_for_dictionaries(locales):
used = { l["dictionary"] for l in locales if "dictionary" in l }
for d in available_dictionaries:
if d not in used:
warn("Dictionary '%s' is attached to no locale" % d)
def subtype_elem(root, loc):
tag = loc["tag"].replace("_", "-")
extra_keys = ",extra_keys=" + loc["extra_keys"] if "extra_keys" in loc else ""
@@ -104,8 +128,7 @@ def subtype_elem(root, loc):
"android:imeSubtypeExtraValue": extra_value
})
# Return locales in sorted order with the "tag" and "dictionary" attributes
# added.
# Return locales with the "tag" and "dictionary" attributes added.
def compute_attrs():
locales_grouped = {} # Locales grouped by language tag
def lang(loc):
@@ -113,8 +136,8 @@ def compute_attrs():
for loc in LOCALES:
locales_grouped.setdefault(lang(loc), []).append(loc)
def tag(loc):
if "tag" in loc: return loc["tag"]
l = lang(loc)
if loc["name"] == l: return l # Locales like "en"
if loc["name"] == f"{l}_{l.upper()}": return l # Locales like "fr_FR"
# Return a short tag when it's not shared between several locales
return l if len(locales_grouped[l]) == 1 else loc["name"]
@@ -124,11 +147,24 @@ def compute_attrs():
if l in available_dictionaries: return l
return None
def add_attrs(loc):
return dict(tag=tag(loc), dictionary=dictionary(loc), **loc)
loc = dict(**loc)
loc["tag"] = tag(loc)
loc["dictionary"] = dictionary(loc)
return loc
return map(add_attrs, LOCALES)
def sort_locales(locales):
# The default locale for a language (eg. "en") might shadow the exact
# locale (eg. "en_US"). Makes sure the default locale sorts after the exact
# ones.
def key(l):
s = l["name"].split("_")
return (l["name"] != DEFAULT_LOCALE), s[0], (len(s) == 1), s[1:]
return sorted(locales, key=key)
def gen():
locales = compute_attrs()
locales = sort_locales(compute_attrs())
check_locales_for_dictionaries(locales)
root = ET.Element("input-method", attrib={
"xmlns:android": "http://schemas.android.com/apk/res/android",
"android:settingsActivity": "juloo.keyboard2.SettingsActivity",
@@ -139,8 +175,7 @@ def gen():
Update this file with 'gradle test'.
"""))
subtype_elem(root, DEFAULT_LOCALE)
for loc in sorted(locales, key=lambda loc: loc["name"]):
for loc in locales:
subtype_elem(root, loc)
ET.indent(root)
print(ET.tostring(root, encoding="utf-8", xml_declaration=True).decode("UTF-8"))
+3
View File
@@ -0,0 +1,3 @@
-keep public class juloo.cdict.* {
public protected private *;
}
+57 -57
View File
@@ -176,62 +176,62 @@
<item>@string/dict_name_zgh</item>
</string-array>
<integer-array name="dictionaries_size">
<item>455658</item>
<item>307451</item>
<item>1745968</item>
<item>347735</item>
<item>301586</item>
<item>481783</item>
<item>335099</item>
<item>657214</item>
<item>933060</item>
<item>1071580</item>
<item>1075177</item>
<item>964195</item>
<item>645068</item>
<item>644719</item>
<item>650605</item>
<item>635119</item>
<item>359849</item>
<item>1003794</item>
<item>871636</item>
<item>240926</item>
<item>279333</item>
<item>301928</item>
<item>727487</item>
<item>331818</item>
<item>948362</item>
<item>696974</item>
<item>352933</item>
<item>488139</item>
<item>263411</item>
<item>286588</item>
<item>331897</item>
<item>736799</item>
<item>854603</item>
<item>333644</item>
<item>354875</item>
<item>301259</item>
<item>776481</item>
<item>926933</item>
<item>357107</item>
<item>107120</item>
<item>740895</item>
<item>705536</item>
<item>996904</item>
<item>1421447</item>
<item>907625</item>
<item>342293</item>
<item>322250</item>
<item>256078</item>
<item>228729</item>
<item>740293</item>
<item>916845</item>
<item>297338</item>
<item>304295</item>
<item>690598</item>
<item>1179318</item>
<item>265324</item>
<item>628168</item>
<item>1077292</item>
<item>311112</item>
<item>11487846</item>
<item>2211253</item>
<item>301784</item>
<item>906326</item>
<item>407170</item>
<item>1568998</item>
<item>1546716</item>
<item>2255836</item>
<item>2266732</item>
<item>2238294</item>
<item>965128</item>
<item>965329</item>
<item>975297</item>
<item>1052729</item>
<item>414036</item>
<item>1658585</item>
<item>1605664</item>
<item>357847</item>
<item>481771</item>
<item>470063</item>
<item>1321154</item>
<item>707030</item>
<item>928493</item>
<item>893066</item>
<item>353376</item>
<item>488110</item>
<item>263418</item>
<item>286778</item>
<item>697624</item>
<item>1516546</item>
<item>1979217</item>
<item>459935</item>
<item>354845</item>
<item>495624</item>
<item>1082569</item>
<item>1084717</item>
<item>364229</item>
<item>107132</item>
<item>1447993</item>
<item>1139131</item>
<item>1829662</item>
<item>2101184</item>
<item>2253446</item>
<item>610950</item>
<item>323065</item>
<item>535713</item>
<item>373039</item>
<item>1770217</item>
<item>1587792</item>
<item>297746</item>
<item>304874</item>
<item>1497533</item>
<item>7456277</item>
<item>573464</item>
<item>628174</item>
</integer-array>
</resources>
+17 -5
View File
@@ -5,28 +5,32 @@
Update this file with 'gradle test'.
-->
<subtype android:label="%s" android:languageTag="en" android:imeSubtypeLocale="en" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,dictionary=en_GB" />
<subtype android:label="%s" android:languageTag="ar" android:imeSubtypeLocale="ar" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=arabic,default_layout=arab_pc_hindu,dictionary=ar" />
<subtype android:label="%s" android:languageTag="en-GB" android:imeSubtypeLocale="en_GB" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_gb,dictionary=en_GB,extra_keys=£@l" />
<subtype android:label="%s" android:languageTag="ar-TN" android:imeSubtypeLocale="ar_TN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=arabic,default_layout=arab_pc,dictionary=ar" />
<subtype android:label="%s" android:languageTag="ay" android:imeSubtypeLocale="ay_AM" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=armenian,default_layout=armenian_ph_am" />
<subtype android:label="%s" android:languageTag="ar" android:imeSubtypeLocale="ar" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=arabic,default_layout=arab_pc_hindu,dictionary=ar" />
<subtype android:label="%s" android:languageTag="as" android:imeSubtypeLocale="as" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=beng,default_layout=beng_assamese,dictionary=as" />
<subtype android:label="%s" android:languageTag="az" android:imeSubtypeLocale="az_AZ" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_az,extra_keys=accent_trema:ü:ö@w|accent_cedille:ç:ş@s|ğ@g|ı@k|ə@l" />
<subtype android:label="%s" android:languageTag="be" android:imeSubtypeLocale="be_BY" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=cyrillic,default_layout=cyrl_jcuken_ru,dictionary=be,extra_keys=ґ|є|і|ї|ў" />
<subtype android:label="%s" android:languageTag="bg" android:imeSubtypeLocale="bg_BG" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=cyrillic,default_layout=cyrl_ueishsht,dictionary=bg,extra_keys=€" />
<subtype android:label="%s" android:languageTag="bn" android:imeSubtypeLocale="bn_BD" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,dictionary=bn,extra_keys=৳" />
<subtype android:label="%s" android:languageTag="bs" android:imeSubtypeLocale="bs" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,dictionary=bs,extra_keys=đ|ž|lj|nj|ć|č|dž|š" />
<subtype android:label="%s" android:languageTag="ca" android:imeSubtypeLocale="ca" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,dictionary=ca,extra_keys=accent_grave:à:ò:è|accent_cedille:ç@c|accent_aigu:é:í:ú:ó|accent_trema:ï:ü|ŀl|€" />
<subtype android:label="%s" android:languageTag="cs" android:imeSubtypeLocale="cs_CZ" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_cz,dictionary=cs,extra_keys=accent_aigu:á:é:í:ó:ú:ý@d|accent_ring:ů@s|accent_caron:č:ě:ň:ř:š:ž:ď:ť@f" />
<subtype android:label="%s" android:languageTag="cy" android:imeSubtypeLocale="cy_GB" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_cy" />
<subtype android:label="%s" android:languageTag="da" android:imeSubtypeLocale="da_DK" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_da,dictionary=da,extra_keys=€|æ|å|ø" />
<subtype android:label="%s" android:languageTag="de-BE" android:imeSubtypeLocale="de_BE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_azerty_be,dictionary=de,extra_keys=accent_grave:è@f|accent_aigu:á:é:í:ó:ú:ý:j́@d|accent_circonflexe:ê@f|accent_cedille:ç@c|accent_trema@u|€" />
<subtype android:label="%s" android:languageTag="de-CH" android:imeSubtypeLocale="de_CH" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_de,dictionary=de_CH,extra_keys=accent_trema:ä:ö:ü@u|ß" />
<subtype android:label="%s" android:languageTag="de" android:imeSubtypeLocale="de_DE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_de,dictionary=de,extra_keys=accent_trema:ä:ö:ü@u|ß|€" />
<subtype android:label="%s" android:languageTag="el" android:imeSubtypeLocale="el" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=grek_qwerty,dictionary=el,extra_keys=£@l|€" />
<subtype android:label="%s" android:languageTag="en-AU" android:imeSubtypeLocale="en_AU" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,dictionary=en_AU" />
<subtype android:label="%s" android:languageTag="en-CA" android:imeSubtypeLocale="en_CA" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us" />
<subtype android:label="%s" android:languageTag="en-GB" android:imeSubtypeLocale="en_GB" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_gb,dictionary=en_GB,extra_keys=£@l" />
<subtype android:label="%s" android:languageTag="en-IN" android:imeSubtypeLocale="en_IN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us" />
<subtype android:label="%s" android:languageTag="en-NG" android:imeSubtypeLocale="en_NG" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,extra_keys=₦" />
<subtype android:label="%s" android:languageTag="en-US" android:imeSubtypeLocale="en_US" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,dictionary=en_US" />
<subtype android:label="%s" android:languageTag="en" android:imeSubtypeLocale="en" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us" />
<subtype android:label="%s" android:languageTag="es" android:imeSubtypeLocale="es_ES" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_es,dictionary=es,extra_keys=accent_aigu:á:é:í:ó:ú@d|accent_tilde:ñ@n|accent_grave@f|accent_trema@u|€" />
<subtype android:label="%s" android:languageTag="et" android:imeSubtypeLocale="et_EE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_et,extra_keys=accent_trema:ä:ö:ü@u|accent_tilde:õ@o|accent_caron:š:ž@s|€" />
<subtype android:label="%s" android:languageTag="eu" android:imeSubtypeLocale="eu" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,dictionary=eu,extra_keys=ñ|ç|ü|dd|ll|rr|ts|tt|tx|tz" />
<subtype android:label="%s" android:languageTag="fa" android:imeSubtypeLocale="fa_IR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=persian,default_layout=arab_pc_ir" />
<subtype android:label="%s" android:languageTag="fi" android:imeSubtypeLocale="fi" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_fi,dictionary=fi,extra_keys=å|accent_ring|accent_aigu|accent_trema|ö|ä|€" />
<subtype android:label="%s" android:languageTag="fr-BE" android:imeSubtypeLocale="fr_BE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_azerty_be,dictionary=fr,extra_keys=accent_grave:à:è:ù@f|accent_aigu:é@d|accent_circonflexe:ê:û@f|accent_cedille:ç@c|accent_trema@u|€" />
@@ -34,11 +38,14 @@
<subtype android:label="%s" android:languageTag="fr-CH" android:imeSubtypeLocale="fr_CH" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_fr_ch,dictionary=fr,extra_keys=accent_grave:à:è:ù@f|accent_aigu:é@d|accent_circonflexe:â:ê:ô:û@o|accent_cedille:ç@c|accent_trema:ë:ï:ü:ÿ@u|€" />
<subtype android:label="%s" android:languageTag="fr" android:imeSubtypeLocale="fr_FR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_azerty_fr,dictionary=fr,extra_keys=accent_grave:à:è:ù@d|accent_aigu:é@d|accent_circonflexe:â:ê:ô:û@o|accent_cedille:ç@c|accent_trema:ë:ï:ü@l|€" />
<subtype android:label="%s" android:languageTag="ga" android:imeSubtypeLocale="ga_IE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_ga,extra_keys=accent_aigu:á:é:í:ó:ú@k|accent_dot_above@l" />
<subtype android:label="%s" android:languageTag="gl" android:imeSubtypeLocale="gl" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,dictionary=gl" />
<subtype android:label="%s" android:languageTag="ha" android:imeSubtypeLocale="ha_NG" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,extra_keys=₦|ɓ|ɗ|ƙ|’|ƴ|r̃" />
<subtype android:label="%s" android:languageTag="haw" android:imeSubtypeLocale="haw_US" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_haw,extra_keys=ʻ@l|accent_macron:ā:ē:ī:ō:ū@m" />
<subtype android:label="%s" android:languageTag="he" android:imeSubtypeLocale="he_IL" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=hebrew,default_layout=default_layout=hebr_1_il,extra_keys=₪@r|€" />
<subtype android:label="%s" android:languageTag="hi" android:imeSubtypeLocale="hi_IN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=devanagari,default_layout=deva_inscript,dictionary=hi,extra_keys=₹" />
<subtype android:label="%s" android:languageTag="hr" android:imeSubtypeLocale="hr" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,dictionary=hr,extra_keys=č|ć|dž|đ|lj|nj|š|ž" />
<subtype android:label="%s" android:languageTag="hu" android:imeSubtypeLocale="hu_HU" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_hu,dictionary=hu,extra_keys=accent_aigu:á:é:í:ó:ú@d|accent_trema:ö:ü@u|accent_ogonek@s|accent_double_aigu:ő:ű@k|€" />
<subtype android:label="%s" android:languageTag="hy" android:imeSubtypeLocale="hy" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=armenian,default_layout=armenian_ph_am,dictionary=hy" />
<subtype android:label="%s" android:languageTag="ig" android:imeSubtypeLocale="ig_NG" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,extra_keys=₦|ṅ|ọ|ụ" />
<subtype android:label="%s" android:languageTag="is" android:imeSubtypeLocale="is_IS" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_is,extra_keys=ð|þ|æ|accent_trema:ö@o|accent_aigu:á:é:í:ó:ú:ý@d|accent_circonflexe|accent_ring|accent_grave" />
<subtype android:label="%s" android:languageTag="it" android:imeSubtypeLocale="it_IT" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,dictionary=it,extra_keys=accent_grave:à:è:ì:ò:ù@f|accent_aigu:é:ó@d|accent_circonflexe:î@f|€|ə" />
@@ -46,21 +53,25 @@
<subtype android:label="%s" android:languageTag="kk" android:imeSubtypeLocale="kk_KZ" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=cyrl_jcuken_kk" />
<subtype android:label="%s" android:languageTag="kn" android:imeSubtypeLocale="kn_IN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=kannada,default_layout=kann_kannada,dictionary=kn" />
<subtype android:label="%s" android:languageTag="ko" android:imeSubtypeLocale="ko_KR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=hangul,default_layout=hang_dubeolsik_kr" />
<subtype android:label="%s" android:languageTag="lb" android:imeSubtypeLocale="lb" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,dictionary=lb,extra_keys=é|ä|ë|accent_grave|accent_cedille@c|accent_aigu|accent_trema|€" />
<subtype android:label="%s" android:languageTag="lt" android:imeSubtypeLocale="lt_LT" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_lt,dictionary=lt,extra_keys=accent_ogonek:ą:ę:į:ų@s|accent_caron:č:š:ž@f|accent_dot_above:ė@s|accent_macron:ū@o|€" />
<subtype android:label="%s" android:languageTag="lv" android:imeSubtypeLocale="lv_LV" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_lv,dictionary=lv,extra_keys=accent_macron:ā:ē:ī:ū@o|accent_caron:č:š:ž@f|accent_ogonek:ķ:ļ:ņ@s|accent_cedille:ģ@c|€" />
<subtype android:label="%s" android:languageTag="mk" android:imeSubtypeLocale="mk" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=cyrillic,default_layout=cyrl_lynyertdz_mk,extra_keys=ѕ|ѓ|ќ|ѝ|ѐ|љ|њ|џ|„|“|€" />
<subtype android:label="%s" android:languageTag="mn" android:imeSubtypeLocale="mn_MN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=cyrillic,default_layout=cyrl_fcuzhen_mn,extra_keys=ү|ө" />
<subtype android:label="%s" android:languageTag="mr" android:imeSubtypeLocale="mr_IN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=devanagari,default_layout=deva_inscript,dictionary=mr,extra_keys=₹" />
<subtype android:label="%s" android:languageTag="mt" android:imeSubtypeLocale="mt_MT" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_mt,extra_keys=accent_grave:à:è:ì:ò:ù|accent_dot_above:ċ:ż:ġ|ħ" />
<subtype android:label="%s" android:languageTag="nb" android:imeSubtypeLocale="nb" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,dictionary=nb,extra_keys=€|æ@a|å@a|ø@o|accent_aigu:é:ó@d|accent_grave:è:ò:ù@f|accent_circonflexe:ê:ô@f" />
<subtype android:label="%s" android:languageTag="ne" android:imeSubtypeLocale="ne_NE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=devanagari,default_layout=deva_inscript,extra_keys=₹" />
<subtype android:label="%s" android:languageTag="nl" android:imeSubtypeLocale="nl_BE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_azerty_be,dictionary=nl,extra_keys=accent_grave:è@f|accent_aigu:á:é:í:ó:ú:ý:j́@d|accent_circonflexe:ê@f|accent_cedille:ç@c|accent_trema@u|€" />
<subtype android:label="%s" android:languageTag="no" android:imeSubtypeLocale="no_NO" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,extra_keys=€|æ@a|å@a|ø@o|accent_aigu:é:ó@d|accent_grave:è:ò:ù@f|accent_circonflexe:ê:ô@f" />
<subtype android:label="%s" android:languageTag="pl" android:imeSubtypeLocale="pl_PL" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_pl,dictionary=pl" />
<subtype android:label="%s" android:languageTag="pt" android:imeSubtypeLocale="pt_BR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_pt,dictionary=pt_BR,extra_keys=accent_aigu:á:é:í:ó:ú@d|accent_cedille:ç@c|accent_circonflexe:â:ê:ô@f|accent_grave:à:ò@f|accent_tilde:ã:õ@n|€|ª|º" />
<subtype android:label="%s" android:languageTag="pt-BR" android:imeSubtypeLocale="pt_BR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_pt,dictionary=pt_BR,extra_keys=accent_aigu:á:é:í:ó:ú@d|accent_cedille:ç@c|accent_circonflexe:â:ê:ô@f|accent_grave:à:ò@f|accent_tilde:ã:õ@n|€|ª|º" />
<subtype android:label="%s" android:languageTag="pt" android:imeSubtypeLocale="pt_PT" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_pt,dictionary=pt_PT,extra_keys=accent_aigu:á:é:í:ó:ú@d|accent_cedille:ç@c|accent_circonflexe:â:ê:ô@f|accent_grave:à:ò@f|accent_tilde:ã:õ@n|€|ª|º" />
<subtype android:label="%s" android:languageTag="ro" android:imeSubtypeLocale="ro_RO" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_ro,dictionary=ro,extra_keys=ă|â|î|ș|ț|€|$" />
<subtype android:label="%s" android:languageTag="ru" android:imeSubtypeLocale="ru_RU" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=cyrl_jcuken_ru,dictionary=ru" />
<subtype android:label="%s" android:languageTag="si" android:imeSubtypeLocale="si_LK" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=sinhala,default_layout=sinhala_phonetic,extra_keys=₨" />
<subtype android:label="%s" android:languageTag="sk" android:imeSubtypeLocale="sk_SK" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_sk,extra_keys=accent_caron:ě:ř:ž:š:č:ň:ď:ľ:ť@f|accent_ring:ů@s|accent_circonflexe:ô@f|accent_trema:ä:ü:ö@u|accent_aigu:á:é:í:ó:ú:ŕ:ś:ĺ:ý@d" />
<subtype android:label="%s" android:languageTag="sl" android:imeSubtypeLocale="sl" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,dictionary=sl,extra_keys=accent_caron:Č:Š:Ž|€" />
<subtype android:label="%s" android:languageTag="sq" android:imeSubtypeLocale="sq_AL" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_sq" />
<subtype android:label="%s" android:languageTag="sr" android:imeSubtypeLocale="sr_" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=cyrl_lynyertz_sr,dictionary=sr" />
<subtype android:label="%s" android:languageTag="sv" android:imeSubtypeLocale="sv_SE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_se,dictionary=sv,extra_keys=accent_aigu:á@d|accent_trema:ä:ö@o|accent_ring:å@s|€" />
@@ -69,6 +80,7 @@
<subtype android:label="%s" android:languageTag="tly-IR" android:imeSubtypeLocale="tly_IR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=persian,default_layout=arab_hamvaj_tly" />
<subtype android:label="%s" android:languageTag="tr" android:imeSubtypeLocale="tr_TR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_tr,dictionary=tr,extra_keys=accent_cedille:ç:ş@c|accent_trema:ö:ü@u|accent_circonflexe:â:î:û@f|₺|ı|ğ" />
<subtype android:label="%s" android:languageTag="uk" android:imeSubtypeLocale="uk_UA" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=cyrillic,default_layout=cyrl_jcuken_uk,dictionary=uk,extra_keys=ґ|є|і|ї|₴" />
<subtype android:label="%s" android:languageTag="ur" android:imeSubtypeLocale="ur" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=persian,default_layout=arab_pc_ir,dictionary=ur" />
<subtype android:label="%s" android:languageTag="uz" android:imeSubtypeLocale="uz_UZ" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_uz,extra_keys=ʻ|ʼ" />
<subtype android:label="%s" android:languageTag="vi" android:imeSubtypeLocale="vi_VN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_vi" />
<subtype android:label="%s" android:languageTag="yo" android:imeSubtypeLocale="yo_NG" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,extra_keys=₦|ẹ|ọ|ṣ" />
+3 -1
View File
@@ -127,7 +127,9 @@ public final class CurrentlyTypedWord
int c = Character.codePointAt(s, i);
i += Character.charCount(c);
_cursor++;
if (!Character.isLetter(c))
// [i >= end] might happen when the cursor is in the middle of a
// surrogate pair
if (!Character.isLetter(c) && i < end)
insert_start = i;
}
if (insert_start > 0)
+1 -3
View File
@@ -264,13 +264,11 @@ public class Keyboard2View extends View
@Override
public void onMeasure(int wSpec, int hSpec)
{
int width;
DisplayMetrics dm = getContext().getResources().getDisplayMetrics();
width = dm.widthPixels;
int width = dm.widthPixels;
_marginLeft = Math.max(_config.horizontal_margin, _insets_left);
_marginRight = Math.max(_config.horizontal_margin, _insets_right);
_marginBottom = _config.margin_bottom + _insets_bottom;
width += _insets_left + _insets_right;
_keyWidth = (width - _marginLeft - _marginRight) / _keyboard.keysWidth;
_tc = new Theme.Computed(_theme, _config, _keyWidth, _keyboard);
// Compute the size of labels based on the width or the height of keys. The
+12 -7
View File
@@ -8,17 +8,19 @@ import glob, os, sys
# The baseline is 'values/strings.xml', which is english.
# Sync store title and descriptions to the metadata directory.
# Map language codes to the codes that Google Play understands. Languages
# mapped to [None] are not supported by Google Play.
VALUE_DIR_TO_METADATA = {
"ar": "ar",
"ars": "ars",
"arz": "arz",
"bn-rBD": "bn-BD",
"ars": None,
"arz": None,
"bn-rBD": None,
"ca": "ca",
"cs": "cs-CZ",
"de": "de-DE",
"en": "en-US",
"es": "es-ES",
"fa": "fa-IR",
"fa": None,
"fil": "fil",
"fr": "fr-FR",
"in": "id",
@@ -26,14 +28,14 @@ VALUE_DIR_TO_METADATA = {
"ja": "ja-JP",
"ko": "ko-KR",
"lv": "lv",
"my": "my",
"my": None,
"nl": "nl-NL",
"pl": "pl-PL",
"pt": "pt-BR",
"ro": "ro",
"ru": "ru-RU",
"th": "th",
"tok": "tok",
"tok": None,
"tr": "tr-TR",
"uk": "uk",
"vi": "vi",
@@ -78,7 +80,10 @@ def sync_metadata(value_dir, strings):
locale = os.path.basename(value_dir).removeprefix("values-")
if not locale in VALUE_DIR_TO_METADATA:
raise Exception("Locale '%s' not known, please add it into sync_translations.py" % locale)
meta_dir = "fastlane/metadata/android/" + VALUE_DIR_TO_METADATA[locale]
metadata_name = VALUE_DIR_TO_METADATA[locale]
if metadata_name == None:
return # Not supported by the play store
meta_dir = "fastlane/metadata/android/" + metadata_name
def sync_meta_file(fname, string_name):
if string_name in strings:
string = strings[string_name]