Merge "Check the binary dictionary magic number"
diff --git a/java/res/drawable-hdpi/keyboard_background_holo.9.png b/java/res/drawable-hdpi/keyboard_background_holo.9.png
index 39746ff..9f700c2 100644
--- a/java/res/drawable-hdpi/keyboard_background_holo.9.png
+++ b/java/res/drawable-hdpi/keyboard_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_feedback_space.png b/java/res/drawable-hdpi/sym_keyboard_feedback_space.png
deleted file mode 100644
index 67311fc..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_feedback_space.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_background_holo.9.png b/java/res/drawable-mdpi/keyboard_background_holo.9.png
index f1d55c6..4fe79b9 100644
--- a/java/res/drawable-mdpi/keyboard_background_holo.9.png
+++ b/java/res/drawable-mdpi/keyboard_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_space.png b/java/res/drawable-mdpi/sym_keyboard_feedback_space.png
deleted file mode 100644
index 36eb60c..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_feedback_space.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_background_holo.9.png b/java/res/drawable-xhdpi/keyboard_background_holo.9.png
index 58d1514..7b79f60 100644
--- a/java/res/drawable-xhdpi/keyboard_background_holo.9.png
+++ b/java/res/drawable-xhdpi/keyboard_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_feedback_space.png b/java/res/drawable-xhdpi/sym_keyboard_feedback_space.png
deleted file mode 100644
index cee1056..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_feedback_space.png
+++ /dev/null
Binary files differ
diff --git a/java/res/values-af/strings.xml b/java/res/values-af/strings.xml
index 3a9567f..57f29ca 100644
--- a/java/res/values-af/strings.xml
+++ b/java/res/values-af/strings.xml
@@ -59,8 +59,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Wys altyd"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Wys in portretmodus"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Versteek altyd"</string>
-    <!-- no translation found for prefs_use_spacebar_language_switch (8828538114550634449) -->
-    <skip />
     <string name="prefs_settings_key" msgid="4623341240804046498">"Wys instellingsleutel"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Outomaties"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Wys altyd"</string>
diff --git a/java/res/values-am/strings.xml b/java/res/values-am/strings.xml
index 307fdc9..8d76021 100644
--- a/java/res/values-am/strings.xml
+++ b/java/res/values-am/strings.xml
@@ -59,8 +59,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"ሁልጊዜ አሳይ"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"በቁመት ሁነታ አሳይ"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"ሁልጊዜ ደብቅ"</string>
-    <!-- no translation found for prefs_use_spacebar_language_switch (8828538114550634449) -->
-    <skip />
     <string name="prefs_settings_key" msgid="4623341240804046498">"የቅንብሮች ቁልፍ አሳይ"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"ራስ ሰር"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"ሁልጊዜ አሳይ"</string>
diff --git a/java/res/values-ar/strings.xml b/java/res/values-ar/strings.xml
index f996543..e0806f2 100644
--- a/java/res/values-ar/strings.xml
+++ b/java/res/values-ar/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"عرض دومًا"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"عرض في وضع رأسي"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"إخفاء دومًا"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"استخدام مفتاح المسافة لتبديل اللغة"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"عرض مفتاح الإعدادات"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"تلقائي"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"إظهار بشكل دائم"</string>
diff --git a/java/res/values-bg/strings.xml b/java/res/values-bg/strings.xml
index e925563..57d5553 100644
--- a/java/res/values-bg/strings.xml
+++ b/java/res/values-bg/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Винаги да се показва"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Показване с вертикална ориентация"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Винаги да се скрива"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Смяна на езика с клавиша за интервал"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Показване на клавиша за настройки"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Автоматично"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Да се показва винаги"</string>
diff --git a/java/res/values-ca/strings.xml b/java/res/values-ca/strings.xml
index c038f19..435cdbb 100644
--- a/java/res/values-ca/strings.xml
+++ b/java/res/values-ca/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Mostra sempre"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Mostra en mode vertical"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Amaga sempre"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Canvi d\'idioma amb la barra espaiadora"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Mostra la tecla de configuració"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Automàtic"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Mostra sempre"</string>
diff --git a/java/res/values-cs/strings.xml b/java/res/values-cs/strings.xml
index 5807773..dc7ad52 100644
--- a/java/res/values-cs/strings.xml
+++ b/java/res/values-cs/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Vždy zobrazovat"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Zobrazit v režimu na výšku"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Vždy skrývat"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Přepínání jazyků mezerníkem"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Zobrazit klávesu Nastavení"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Automaticky"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Vždy zobrazovat"</string>
diff --git a/java/res/values-da/strings.xml b/java/res/values-da/strings.xml
index c0dc9b7..e922de6 100644
--- a/java/res/values-da/strings.xml
+++ b/java/res/values-da/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Vis altid"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Vis i portrættilstand"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Skjul altid"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Brug mellemrumst. som sprogskifter"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Vis indstillingsnøgle"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Automatisk"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Vis altid"</string>
diff --git a/java/res/values-de/strings.xml b/java/res/values-de/strings.xml
index 1076132..3fd19a2 100644
--- a/java/res/values-de/strings.xml
+++ b/java/res/values-de/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Immer anzeigen"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Im Hochformat anzeigen"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Immer ausblenden"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Sprache mit Leertaste ändern"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Einstellungstaste anz."</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Automatisch"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Immer anzeigen"</string>
diff --git a/java/res/values-el/strings.xml b/java/res/values-el/strings.xml
index 544a834..21b17a8 100644
--- a/java/res/values-el/strings.xml
+++ b/java/res/values-el/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Να εμφανίζεται πάντα"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Εμφάνιση σε λειτουργία κατακόρυφης προβολής"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Πάντα απόκρυψη"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Χρησιμοποιήστε τη δυνατότητα εναλλαγής γλώσσας του πλήκτρου διαστήματος"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Εμφάνιση πλήκτρου ρυθμίσεων"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Αυτόματο"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Να εμφανίζεται πάντα"</string>
diff --git a/java/res/values-en-rGB/strings.xml b/java/res/values-en-rGB/strings.xml
index bb3588b..e4e3568 100644
--- a/java/res/values-en-rGB/strings.xml
+++ b/java/res/values-en-rGB/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Always show"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Show on portrait mode"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Always hide"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Use the spacebar language switcher"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Show settings key"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Automatic"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Always show"</string>
diff --git a/java/res/values-es-rUS/strings.xml b/java/res/values-es-rUS/strings.xml
index f5311b8..e92a641 100644
--- a/java/res/values-es-rUS/strings.xml
+++ b/java/res/values-es-rUS/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Mostrar siempre"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Mostrar en modo retrato"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Ocultar siempre"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Usa select. de id. de barra espac."</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Mostrar tecla de configuración"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Automático"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Mostrar siempre"</string>
diff --git a/java/res/values-es/strings.xml b/java/res/values-es/strings.xml
index 2298e55..5efd144 100644
--- a/java/res/values-es/strings.xml
+++ b/java/res/values-es/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Mostrar siempre"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Mostrar en modo vertical"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Ocultar siempre"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Utilizar espacio para cambiar idioma"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Mostrar tecla de ajustes"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Automáticamente"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Mostrar siempre"</string>
diff --git a/java/res/values-fa/strings.xml b/java/res/values-fa/strings.xml
index 3dccfb4..9567aca 100644
--- a/java/res/values-fa/strings.xml
+++ b/java/res/values-fa/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"همیشه نمایش داده شود"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"نمایش در حالت عمودی"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"همیشه پنهان شود"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"از ویژگی تعویض زبان کلید فاصله استفاده شود"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"نمایش کلید تنظیمات"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"خودکار"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"همیشه نمایش"</string>
diff --git a/java/res/values-fi/strings.xml b/java/res/values-fi/strings.xml
index bd9fc1c..69ef265 100644
--- a/java/res/values-fi/strings.xml
+++ b/java/res/values-fi/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Näytä aina"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Näytä pystysuunnassa"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Piilota aina"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Vaihda kieli välil."</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Näytä asetukset-näppäin"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Automaattinen"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Näytä aina"</string>
diff --git a/java/res/values-fr/strings.xml b/java/res/values-fr/strings.xml
index f54b27f..0db0354 100644
--- a/java/res/values-fr/strings.xml
+++ b/java/res/values-fr/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Toujours afficher"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Afficher en mode Portrait"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Toujours masquer"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Barre d\'espace pour changer langue"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Afficher touche param."</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Automatique"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Toujours afficher"</string>
diff --git a/java/res/values-hr/strings.xml b/java/res/values-hr/strings.xml
index d22432a..13657ce 100644
--- a/java/res/values-hr/strings.xml
+++ b/java/res/values-hr/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Uvijek prikaži"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Prikaži u portretnom načinu"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Uvijek sakrij"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Upotrijebite razmaknicu za prebacivanje jezika"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Prikaži tipku postavki"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Automatski"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Uvijek prikaži"</string>
diff --git a/java/res/values-hu/strings.xml b/java/res/values-hu/strings.xml
index 7411923..6364cd9 100644
--- a/java/res/values-hu/strings.xml
+++ b/java/res/values-hu/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Mindig látszik"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Megjelenítés álló tájolásban"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Mindig rejtve"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Nyelvváltó: szóköz"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Beállítások billentyű megjelenítése"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Automatikus"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Mindig látszik"</string>
diff --git a/java/res/values-in/strings.xml b/java/res/values-in/strings.xml
index 6cdf857..31bb784 100644
--- a/java/res/values-in/strings.xml
+++ b/java/res/values-in/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Selalu tampilkan"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Tampilkan pada mode potret"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Selalu sembunyikan"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Gunakan pengalih bahasa bilah spasi"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Lihat tombol setelan"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Otomatis"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Selalu tampilkan"</string>
diff --git a/java/res/values-it/strings.xml b/java/res/values-it/strings.xml
index 360b92f..99b04b4 100644
--- a/java/res/values-it/strings.xml
+++ b/java/res/values-it/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Mostra sempre"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Mostra in modalità verticale"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Nascondi sempre"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Selettore lingua da barra spaziatrice"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Mostra tasto impostaz."</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Automatico"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Mostra sempre"</string>
diff --git a/java/res/values-iw/strings.xml b/java/res/values-iw/strings.xml
index 93da028..02b5103 100644
--- a/java/res/values-iw/strings.xml
+++ b/java/res/values-iw/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"הצג תמיד"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"הצג בפריסה לאורך"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"הסתר תמיד"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"השתמש במחליף השפה שבמקש הרווח"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"הצג מקש הגדרות"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"אוטומטי"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"הצג תמיד"</string>
diff --git a/java/res/values-ja/strings.xml b/java/res/values-ja/strings.xml
index 3f819ce..3829482 100644
--- a/java/res/values-ja/strings.xml
+++ b/java/res/values-ja/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"常に表示"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"縦向きで表示"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"常に非表示"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"スペースバーで切替"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"設定キーを表示"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"自動"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"常に表示"</string>
diff --git a/java/res/values-ko/strings.xml b/java/res/values-ko/strings.xml
index e9c2e4c..a663ee5 100644
--- a/java/res/values-ko/strings.xml
+++ b/java/res/values-ko/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"항상 표시"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"세로 모드로 표시"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"항상 숨기기"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"스페이스 바 언어 교환기 사용"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"설정 키 표시"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"자동"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"항상 표시"</string>
diff --git a/java/res/values-lt/strings.xml b/java/res/values-lt/strings.xml
index 191b018..73285ef 100644
--- a/java/res/values-lt/strings.xml
+++ b/java/res/values-lt/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Visada rodyti"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Rodyti stačiuoju režimu"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Visada slėpti"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Naud. tarpo kl. k. jung."</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Rodyti nustatymų raktą"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Automatinis"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Visada rodyti"</string>
diff --git a/java/res/values-lv/strings.xml b/java/res/values-lv/strings.xml
index 8a77d00..1e3f577 100644
--- a/java/res/values-lv/strings.xml
+++ b/java/res/values-lv/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Vienmēr rādīt"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Rādīt portreta režīmā"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Vienmēr slēpt"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Izmantot valodu pārslēgšanai atstarpēšanas taustiņu"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Rādīt iestatījumu taustiņu"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Automātiski"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Vienmēr rādīt"</string>
diff --git a/java/res/values-ms/strings.xml b/java/res/values-ms/strings.xml
index a0f0c20..012823b 100644
--- a/java/res/values-ms/strings.xml
+++ b/java/res/values-ms/strings.xml
@@ -53,7 +53,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Sentiasa tunjukkan"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Tunjukkan pada mod potret"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Sentiasa sembunyikan"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Bar ruang tukar bhs"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Tunjukkan kekunci tetapan"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Automatik"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Sentiasa tunjukkan"</string>
diff --git a/java/res/values-nb/strings.xml b/java/res/values-nb/strings.xml
index 4689507..8a5a54f 100644
--- a/java/res/values-nb/strings.xml
+++ b/java/res/values-nb/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Vis alltid"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Vis i stående modus"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Skjul alltid"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Skift språk med mellomromstasten"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Vis innstillingsnøkkel"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Automatisk"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Vis alltid"</string>
diff --git a/java/res/values-nl/strings.xml b/java/res/values-nl/strings.xml
index 8dac48c..62dc7b2 100644
--- a/java/res/values-nl/strings.xml
+++ b/java/res/values-nl/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Altijd weergeven"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Weergeven in staande modus"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Altijd verbergen"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Taal schakelen via spatiebalk"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Instellingscode weergeven"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Automatisch"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Altijd weergeven"</string>
diff --git a/java/res/values-pl/strings.xml b/java/res/values-pl/strings.xml
index 3ff6bfc..83e7858 100644
--- a/java/res/values-pl/strings.xml
+++ b/java/res/values-pl/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Zawsze pokazuj"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Pokaż w trybie pionowym"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Zawsze ukrywaj"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Spacja przełącza język"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Pokaż klawisz ustawień"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Automatycznie"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Zawsze pokazuj"</string>
diff --git a/java/res/values-pt-rPT/strings.xml b/java/res/values-pt-rPT/strings.xml
index 3add66c..6e4d1f4 100644
--- a/java/res/values-pt-rPT/strings.xml
+++ b/java/res/values-pt-rPT/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Mostrar sempre"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Mostrar no modo de retrato"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Ocultar sempre"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Utilizar barra esp. alt. idioma"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Mostrar tecla das definições"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Automático"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Mostrar sempre"</string>
diff --git a/java/res/values-pt/strings.xml b/java/res/values-pt/strings.xml
index 38373e3..a82e40a 100644
--- a/java/res/values-pt/strings.xml
+++ b/java/res/values-pt/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Mostrar sempre"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Mostrar em modo retrato"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Sempre ocultar"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Alt. idiomas c/ a barra"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Mostrar tecla de config."</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Automático"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Mostrar sempre"</string>
diff --git a/java/res/values-rm/strings.xml b/java/res/values-rm/strings.xml
index d6d38ad..ed4e305 100644
--- a/java/res/values-rm/strings.xml
+++ b/java/res/values-rm/strings.xml
@@ -64,8 +64,6 @@
     <skip />
     <!-- no translation found for prefs_suggestion_visibility_hide_name (6309143926422234673) -->
     <skip />
-    <!-- no translation found for prefs_use_spacebar_language_switch (8828538114550634449) -->
-    <skip />
     <!-- no translation found for prefs_settings_key (4623341240804046498) -->
     <skip />
     <!-- no translation found for settings_key_mode_auto_name (2993460277873684680) -->
diff --git a/java/res/values-ro/strings.xml b/java/res/values-ro/strings.xml
index e9cbd50..8f02fe3 100644
--- a/java/res/values-ro/strings.xml
+++ b/java/res/values-ro/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Afişaţi întotdeauna"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Afişaţi în modul Portret"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Ascundeţi întotdeauna"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Spacebar – selector limbă"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Afişaţi tasta setări"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Automat"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Afişaţi întotdeauna"</string>
diff --git a/java/res/values-ru/strings.xml b/java/res/values-ru/strings.xml
index eac2026..14cd5e4 100644
--- a/java/res/values-ru/strings.xml
+++ b/java/res/values-ru/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Всегда показывать"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Показать вертикально"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Всегда скрывать"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Пробел меняет язык"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Кнопка настроек"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Автоматически"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Всегда показывать"</string>
diff --git a/java/res/values-sk/strings.xml b/java/res/values-sk/strings.xml
index 8cdc737..f286a24 100644
--- a/java/res/values-sk/strings.xml
+++ b/java/res/values-sk/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Vždy zobrazovať"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Zobraziť v režime na výšku"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Vždy skrývať"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Použite medzerník na prepínanie medzi jazykmi"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Zobraziť kláves Nastavenia"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Automaticky"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Vždy zobrazovať"</string>
diff --git a/java/res/values-sl/strings.xml b/java/res/values-sl/strings.xml
index a599ab5..8ea2e3c 100644
--- a/java/res/values-sl/strings.xml
+++ b/java/res/values-sl/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Vedno pokaži"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Pokaži v pokončnem načinu"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Vedno skrij"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Preklopite med jeziki s preslednico"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Pokaži tipko za nastavitve"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Samodejno"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Vedno pokaži"</string>
diff --git a/java/res/values-sr/strings.xml b/java/res/values-sr/strings.xml
index bfbcd1a..73dfbf4 100644
--- a/java/res/values-sr/strings.xml
+++ b/java/res/values-sr/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Увек прикажи"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Прикажи у усправном режиму"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Увек сакриј"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Користи размак за избор језика"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Прикажи тастер за подешавања"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Аутоматски"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Увек прикажи"</string>
diff --git a/java/res/values-sv/strings.xml b/java/res/values-sv/strings.xml
index 7387cfa..e8b1fe2 100644
--- a/java/res/values-sv/strings.xml
+++ b/java/res/values-sv/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Visa alltid"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Visa stående"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Dölj alltid"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Byt språk m. mellanslag"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Visa inställningsknapp"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Automatiskt"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Visa alltid"</string>
diff --git a/java/res/values-sw/strings.xml b/java/res/values-sw/strings.xml
index e9f077b..a8b53d5 100644
--- a/java/res/values-sw/strings.xml
+++ b/java/res/values-sw/strings.xml
@@ -59,8 +59,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Onyesha kila wakati"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Onyesha kwenye hali wima"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Ficha kila wakati"</string>
-    <!-- no translation found for prefs_use_spacebar_language_switch (8828538114550634449) -->
-    <skip />
     <string name="prefs_settings_key" msgid="4623341240804046498">"Onyesha kitufe cha mipangilio"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Kiotomatiki"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Onyesha kila wakati"</string>
diff --git a/java/res/values-sw600dp/config.xml b/java/res/values-sw600dp/config.xml
index 260f360..169802f 100644
--- a/java/res/values-sw600dp/config.xml
+++ b/java/res/values-sw600dp/config.xml
@@ -31,7 +31,6 @@
     <bool name="config_default_popup_preview">false</bool>
     <bool name="config_default_sound_enabled">true</bool>
     <bool name="config_auto_correction_spacebar_led_enabled">false</bool>
-    <bool name="config_use_spacebar_language_switcher">false</bool>
     <!-- Showing mini keyboard, just above the touched point if true, aligned to the key if false -->
     <bool name="config_show_mini_keyboard_at_touched_point">true</bool>
     <!-- The language is never displayed if == 0, always displayed if < 0 -->
diff --git a/java/res/values-sw768dp/config.xml b/java/res/values-sw768dp/config.xml
index 8260568..5fbd61d 100644
--- a/java/res/values-sw768dp/config.xml
+++ b/java/res/values-sw768dp/config.xml
@@ -31,7 +31,6 @@
     <bool name="config_default_popup_preview">false</bool>
     <bool name="config_default_sound_enabled">true</bool>
     <bool name="config_auto_correction_spacebar_led_enabled">false</bool>
-    <bool name="config_use_spacebar_language_switcher">false</bool>
     <!-- Showing mini keyboard, just above the touched point if true, aligned to the key if false -->
     <bool name="config_show_mini_keyboard_at_touched_point">true</bool>
     <integer name="config_delay_update_suggestions">180</integer>
diff --git a/java/res/values-th/strings.xml b/java/res/values-th/strings.xml
index 75befea..e282407 100644
--- a/java/res/values-th/strings.xml
+++ b/java/res/values-th/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"แสดงทุกครั้ง"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"แสดงในโหมดแนวตั้ง"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"ซ่อนทุกครั้ง"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"ใช้แป้น Spacebar เพื่อสลับภาษา"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"แสดงแป้นการตั้งค่า"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"อัตโนมัติ"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"แสดงตลอดเวลา"</string>
diff --git a/java/res/values-tl/strings.xml b/java/res/values-tl/strings.xml
index d8652ea..1a23997 100644
--- a/java/res/values-tl/strings.xml
+++ b/java/res/values-tl/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Palaging ipakita"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Ipakita sa portrait mode"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Palaging itago"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Gamitin ang panglipat ng wika sa spacebar"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Ipakita ang key ng mga setting"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Awtomatiko"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Palaging ipakita"</string>
diff --git a/java/res/values-tr/strings.xml b/java/res/values-tr/strings.xml
index 00dcaac..c7f7411 100644
--- a/java/res/values-tr/strings.xml
+++ b/java/res/values-tr/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Her zaman göster"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Dikey modda göster"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Her zaman gizle"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Dil geçişi &gt; boşluk çubuğuyla"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Ayarları göster tuşu"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Otomatik"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Her zaman göster"</string>
diff --git a/java/res/values-uk/strings.xml b/java/res/values-uk/strings.xml
index 9ba53ca..d531e6a 100644
--- a/java/res/values-uk/strings.xml
+++ b/java/res/values-uk/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Завжди показувати"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Показувати в книжковому режимі"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Завжди ховати"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Використ. зміну мови пробілом"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Показ. клав. налашт."</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Автоматично"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Завжди показ."</string>
diff --git a/java/res/values-vi/strings.xml b/java/res/values-vi/strings.xml
index d35bdb2..228f621 100644
--- a/java/res/values-vi/strings.xml
+++ b/java/res/values-vi/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Luôn hiển thị"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Hiển thị trên chế độ khổ đứng"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Luôn ẩn"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"Sử dụng trình chuyển đổi ngôn ngữ thanh cách"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"Hiển thị phím cài đặt"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Tự động"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Luôn hiển thị"</string>
diff --git a/java/res/values-zh-rCN/strings.xml b/java/res/values-zh-rCN/strings.xml
index 750e29c..ba60cac 100644
--- a/java/res/values-zh-rCN/strings.xml
+++ b/java/res/values-zh-rCN/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"始终显示"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"以纵向模式显示"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"始终隐藏"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"使用空格键切换语言"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"显示设置键"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"自动"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"始终显示"</string>
diff --git a/java/res/values-zh-rTW/strings.xml b/java/res/values-zh-rTW/strings.xml
index 6dca7ed..e2b4daf 100644
--- a/java/res/values-zh-rTW/strings.xml
+++ b/java/res/values-zh-rTW/strings.xml
@@ -46,7 +46,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"一律顯示"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"以垂直模式顯示"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"永遠隱藏"</string>
-    <string name="prefs_use_spacebar_language_switch" msgid="8828538114550634449">"使用空白鍵切換語言"</string>
     <string name="prefs_settings_key" msgid="4623341240804046498">"顯示設定金鑰"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"自動"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"一律顯示"</string>
diff --git a/java/res/values-zu/strings.xml b/java/res/values-zu/strings.xml
index 76f87b0..e7973f0 100644
--- a/java/res/values-zu/strings.xml
+++ b/java/res/values-zu/strings.xml
@@ -59,8 +59,6 @@
     <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Bonisa njalo"</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"Bonisa kwimodi emile"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Fihla njalo"</string>
-    <!-- no translation found for prefs_use_spacebar_language_switch (8828538114550634449) -->
-    <skip />
     <string name="prefs_settings_key" msgid="4623341240804046498">"Bonisa ukhiye wezilungiselelo"</string>
     <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"Okuzenzakalelayo"</string>
     <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"Bonisa njalo"</string>
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index fa5c08b..d79338a 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -78,8 +78,6 @@
         <attr name="keyPreviewLeftBackground" format="reference" />
         <!-- The background for the right edge key press feedback. -->
         <attr name="keyPreviewRightBackground" format="reference" />
-        <!-- The background for spacebar press feedback. -->
-        <attr name="keyPreviewSpacebarBackground" format="reference" />
         <!-- The text color for key press feedback. -->
         <attr name="keyPreviewTextColor" format="color" />
         <!-- Vertical offset of the key press feedback from the key. -->
@@ -165,7 +163,6 @@
         <attr name="iconSearchKey" format="reference" />
         <attr name="iconTabKey" format="reference" />
         <attr name="iconShiftedShiftKey" format="reference" />
-        <attr name="iconPreviewSpaceKey" format="reference" />
         <attr name="iconPreviewTabKey" format="reference" />
         <attr name="iconPreviewSettingsKey" format="reference" />
         <attr name="iconPreviewShortcutKey" format="reference" />
@@ -178,13 +175,6 @@
         <attr name="popupCharacters" format="string" />
         <!-- Maximum column of popup keyboard -->
         <attr name="maxPopupKeyboardColumn" format="integer" />
-        <!-- Key edge flags. -->
-        <attr name="keyEdgeFlags" format="integer">
-            <!-- Key is anchored to the left of the keyboard. -->
-            <flag name="left" value="1" />
-            <!-- Key is anchored to the right of the keyboard. -->
-            <flag name="right" value="2" />
-        </attr>
         <!-- Whether this is a functional key which has different key top than normal key. -->
         <attr name="isFunctional" format="boolean" />
         <!-- Whether this is a toggle key. -->
@@ -235,10 +225,9 @@
         <!-- The icon to show in the popup preview. -->
         <attr name="keyIconPreview" format="enum">
             <!-- This should be aligned with KeyboardIcons.ICON_PREVIEW_* -->
-            <enum name="iconPreviewSpaceKey" value="13" />
-            <enum name="iconPreviewTabKey" value="14" />
-            <enum name="iconPreviewSettingsKey" value="15" />
-            <enum name="iconPreviewShortcutKey" value="16" />
+            <enum name="iconPreviewTabKey" value="13" />
+            <enum name="iconPreviewSettingsKey" value="14" />
+            <enum name="iconPreviewShortcutKey" value="15" />
         </attr>
         <!-- The key style to specify a set of key attributes defined by <key_style/> -->
         <attr name="keyStyle" format="string" />
@@ -252,16 +241,6 @@
         <attr name="keyXPos" format="dimension|fraction" />
     </declare-styleable>
 
-    <declare-styleable name="Keyboard_Row">
-        <!-- Row edge flags. -->
-        <attr name="rowEdgeFlags" format="integer">
-            <!-- Row is anchored to the top of the keyboard. -->
-            <flag name="top" value="4" />
-            <!-- Row is anchored to the bottom of the keyboard. -->
-            <flag name="bottom" value="8" />
-        </attr>
-    </declare-styleable>
-
     <declare-styleable name="Keyboard_Include">
         <attr name="keyboardLayout" format="reference" />
     </declare-styleable>
diff --git a/java/res/values/config.xml b/java/res/values/config.xml
index bc64eb2..a14ba53 100644
--- a/java/res/values/config.xml
+++ b/java/res/values/config.xml
@@ -41,7 +41,6 @@
     <bool name="config_default_recorrection_enabled">true</bool>
     <bool name="config_default_sound_enabled">false</bool>
     <bool name="config_auto_correction_spacebar_led_enabled">true</bool>
-    <bool name="config_use_spacebar_language_switcher">true</bool>
     <!-- Showing mini keyboard, just above the touched point if true, aligned to the key if false -->
     <bool name="config_show_mini_keyboard_at_touched_point">false</bool>
     <!-- The language is never displayed if == 0, always displayed if < 0 -->
diff --git a/java/res/values/keyboard-icons-black.xml b/java/res/values/keyboard-icons-black.xml
index 313bf02..d527c15 100644
--- a/java/res/values/keyboard-icons-black.xml
+++ b/java/res/values/keyboard-icons-black.xml
@@ -33,7 +33,6 @@
         <item name="iconSearchKey">@drawable/sym_bkeyboard_search</item>
         <item name="iconTabKey">@drawable/sym_bkeyboard_tab</item>
         <item name="iconShiftedShiftKey">@drawable/sym_bkeyboard_shift_locked</item>
-        <item name="iconPreviewSpaceKey">@drawable/sym_keyboard_feedback_space</item>
         <item name="iconPreviewTabKey">@drawable/sym_keyboard_feedback_tab</item>
         <item name="iconPreviewSettingsKey">@drawable/sym_keyboard_feedback_settings</item>
         <item name="iconPreviewShortcutKey">@drawable/sym_keyboard_feedback_mic</item>
diff --git a/java/res/values/keyboard-icons-ics.xml b/java/res/values/keyboard-icons-ics.xml
index a2bfd7a..3d63a9e 100644
--- a/java/res/values/keyboard-icons-ics.xml
+++ b/java/res/values/keyboard-icons-ics.xml
@@ -32,7 +32,6 @@
         <item name="iconSearchKey">@drawable/sym_keyboard_search</item>
         <item name="iconTabKey">@drawable/sym_keyboard_tab_holo</item>
         <item name="iconShiftedShiftKey">@drawable/sym_keyboard_shift_locked_holo</item>
-        <item name="iconPreviewSpaceKey">@drawable/transparent</item>
         <item name="iconPreviewTabKey">@drawable/sym_keyboard_feedback_tab</item>
         <item name="iconPreviewSettingsKey">@drawable/sym_keyboard_settings_holo</item>
         <item name="iconPreviewShortcutKey">@drawable/sym_keyboard_feedback_mic</item>
diff --git a/java/res/values/keyboard-icons-white.xml b/java/res/values/keyboard-icons-white.xml
index b6fa890..c3889c3 100644
--- a/java/res/values/keyboard-icons-white.xml
+++ b/java/res/values/keyboard-icons-white.xml
@@ -29,7 +29,6 @@
         <item name="iconSearchKey">@drawable/sym_keyboard_search</item>
         <item name="iconTabKey">@drawable/sym_keyboard_tab</item>
         <item name="iconShiftedShiftKey">@drawable/sym_keyboard_shift_locked</item>
-        <item name="iconPreviewSpaceKey">@drawable/sym_keyboard_feedback_space</item>
         <item name="iconPreviewTabKey">@drawable/sym_keyboard_feedback_tab</item>
         <item name="iconPreviewSettingsKey">@drawable/sym_keyboard_feedback_settings</item>
         <item name="iconPreviewShortcutKey">@drawable/sym_keyboard_feedback_mic</item>
diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index 739f72f..b1cb6a7 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -81,8 +81,6 @@
     <string name="prefs_suggestion_visibility_show_name">Always show</string>
     <string name="prefs_suggestion_visibility_show_only_portrait_name">Show on portrait mode</string>
     <string name="prefs_suggestion_visibility_hide_name">Always hide</string>
-    <!-- Option to enable spacebar language switcher [CHAR LIMIT=20]-->
-    <string name="prefs_use_spacebar_language_switch">Use the spacebar language switcher</string>
 
     <!-- Option to show/hide the settings key -->
     <string name="prefs_settings_key">Show settings key</string>
@@ -301,6 +299,9 @@
     <!-- Title of the dialog for selecting input methods. [CHAR LIMIT=20] -->
     <string name="selectInputMethod">Select input method</string>
 
+    <!-- Title for configuring input method settings [CHAR LIMIT=35] -->
+    <string name="configure_input_method">Configure input methods</string>
+
     <!-- Title for input language selection screen -->
     <string name="language_selection_title">Input languages</string>
 
diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml
index 8ed3343..9f91ef5 100644
--- a/java/res/values/styles.xml
+++ b/java/res/values/styles.xml
@@ -56,7 +56,6 @@
         <item name="keyPreviewBackground">@drawable/keyboard_key_feedback</item>
         <item name="keyPreviewLeftBackground">@null</item>
         <item name="keyPreviewRightBackground">@null</item>
-        <item name="keyPreviewSpacebarBackground">@drawable/keyboard_key_feedback</item>
         <item name="keyPreviewTextColor">#FFFFFFFF</item>
         <item name="keyPreviewOffset">@dimen/key_preview_offset</item>
         <item name="keyPreviewHeight">@dimen/key_preview_height</item>
@@ -163,7 +162,6 @@
         <item name="keyPreviewBackground">@drawable/keyboard_key_feedback_ics</item>
         <item name="keyPreviewLeftBackground">@drawable/keyboard_key_feedback_left_ics</item>
         <item name="keyPreviewRightBackground">@drawable/keyboard_key_feedback_right_ics</item>
-        <item name="keyPreviewSpacebarBackground">@drawable/transparent</item>
         <item name="keyPreviewTextColor">#FFFFFFFF</item>
         <item name="keyPreviewHeight">@dimen/key_preview_height_ics</item>
         <item name="keyPreviewOffset">@dimen/key_preview_offset_ics</item>
diff --git a/java/res/xml-sw600dp/kbd_key_styles.xml b/java/res/xml-sw600dp/kbd_key_styles.xml
index 388e293..b813e6b 100644
--- a/java/res/xml-sw600dp/kbd_key_styles.xml
+++ b/java/res/xml-sw600dp/kbd_key_styles.xml
@@ -75,12 +75,10 @@
         latin:parentStyle="functionalKeyStyle" />
     <key-style
         latin:styleName="spaceKeyStyle"
-        latin:code="@integer/key_space"
-        latin:keyIconPreview="iconPreviewSpaceKey" />
+        latin:code="@integer/key_space" />
     <key-style
         latin:styleName="nonSpecialBackgroundSpaceKeyStyle"
-        latin:code="@integer/key_space"
-        latin:keyIconPreview="iconPreviewSpaceKey" />
+        latin:code="@integer/key_space" />
     <key-style
         latin:styleName="smileyKeyStyle"
         latin:keyLabel=":-)"
diff --git a/java/res/xml-sw600dp/kbd_number.xml b/java/res/xml-sw600dp/kbd_number.xml
index b3a1010..46114de 100644
--- a/java/res/xml-sw600dp/kbd_number.xml
+++ b/java/res/xml-sw600dp/kbd_number.xml
@@ -30,11 +30,12 @@
         <case
             latin:passwordInput="true"
         >
-            <!-- This row is intentionally not marked as a top row -->
             <Row>
+                <!-- Note: This Spacer prevents the below key from being marked as a left edge key. -->
+                <Spacer
+                    latin:keyWidth="24.875%p" />
                 <Key
-                    latin:keyStyle="num1KeyStyle"
-                    latin:keyXPos="24.875%p" />
+                    latin:keyStyle="num1KeyStyle" />
                 <Key
                     latin:keyStyle="num2KeyStyle" />
                 <Key
@@ -42,13 +43,14 @@
                 <Key
                     latin:keyStyle="deleteKeyStyle"
                     latin:keyXPos="-11.00%p"
-                    latin:keyWidth="fillRight"
-                    latin:keyEdgeFlags="right" />
+                    latin:keyWidth="fillRight" />
             </Row>
             <Row>
+                <!-- Note: This Spacer prevents the below key from being marked as a left edge key. -->
+                <Spacer
+                    latin:keyWidth="24.875%p" />
                 <Key
-                    latin:keyStyle="num4KeyStyle"
-                    latin:keyXPos="24.875%p" />
+                    latin:keyStyle="num4KeyStyle" />
                 <Key
                     latin:keyStyle="num5KeyStyle" />
                 <Key
@@ -56,24 +58,26 @@
                 <Key
                     latin:keyStyle="returnKeyStyle"
                     latin:keyXPos="-11.00%p"
-                    latin:keyWidth="fillRight"
-                    latin:keyEdgeFlags="right" />
+                    latin:keyWidth="fillRight" />
             </Row>
             <Row>
+                <!-- Note: This Spacer prevents the below key from being marked as a left edge key. -->
+                <Spacer
+                    latin:keyWidth="24.875%p" />
                 <Key
-                    latin:keyStyle="num7KeyStyle"
-                    latin:keyXPos="24.875%p" />
+                    latin:keyStyle="num7KeyStyle" />
                 <Key
                     latin:keyStyle="num8KeyStyle" />
                 <Key
                     latin:keyStyle="num9KeyStyle" />
+                <!-- Note: This Spacer prevents the above key from being marked as a right edge key. -->
+                <Spacer
+                    latin:keyWidth="0%p" />
             </Row>
-            <!-- This row is intentionally not marked as a bottom row -->
             <Row>
                 <Key
                     latin:keyStyle="tabKeyStyle"
-                    latin:keyWidth="11.00%p"
-                    latin:keyEdgeFlags="left" />
+                    latin:keyWidth="11.00%p" />
                 <Spacer
                     latin:keyXPos="24.875%p" />
                 <Key
@@ -87,12 +91,13 @@
         </case>
         <!-- latin:passwordInput="false" -->
         <default>
-            <!-- This row is intentionally not marked as a top row -->
             <Row>
+                <!-- Note: This Spacer prevents the below key from being marked as a left edge key. -->
+                <Spacer
+                    latin:keyWidth="11.00%p" />
                 <Key
                     latin:keyLabel="-"
                     latin:keyStyle="numKeyStyle"
-                    latin:keyXPos="11.00%p"
                     latin:keyWidth="9.25%p" />
                 <Key
                     latin:keyLabel="+"
@@ -115,13 +120,14 @@
                 <Key
                     latin:keyStyle="deleteKeyStyle"
                     latin:keyXPos="-11.00%p"
-                    latin:keyWidth="fillBoth"
-                    latin:keyEdgeFlags="right" />
+                    latin:keyWidth="fillBoth" />
             </Row>
             <Row>
+                <!-- Note: This Spacer prevents the below key from being marked as a left edge key. -->
+                <Spacer
+                    latin:keyWidth="11.00%p" />
                 <Key
                     latin:keyStyle="numStarKeyStyle"
-                    latin:keyXPos="11.00%p"
                     latin:keyWidth="9.25%p" />
                 <Key
                     latin:keyLabel="/"
@@ -144,17 +150,15 @@
                 <Key
                     latin:keyStyle="returnKeyStyle"
                     latin:keyXPos="-11.00%p"
-                    latin:keyWidth="fillBoth"
-                    latin:keyEdgeFlags="right" />
+                    latin:keyWidth="fillBoth" />
             </Row>
             <Row>
-                <!-- There is an empty area below the "More" key and left of the "(" key. To
-                     ignore the touch event on the area, "(" is intentionally not marked as a left
-                     edge key. -->
+                <!-- Note: This Spacer prevents the below key from being marked as a left edge key. -->
+                <Spacer
+                    latin:keyWidth="11.00%p" />
                 <Key
                     latin:keyLabel="("
                     latin:keyStyle="numKeyStyle"
-                    latin:keyXPos="11.00%p"
                     latin:keyWidth="9.25%p" />
                 <Key
                     latin:keyLabel=")"
@@ -174,13 +178,14 @@
                 <Key
                     latin:keyLabel="9"
                     latin:keyStyle="numKeyStyle" />
+                <!-- Note: This Spacer prevents the above key from being marked as a right edge key. -->
+                <Spacer
+                    latin:keyWidth="0%p" />
             </Row>
-            <!-- This row is intentionally not marked as a bottom row -->
             <Row>
                 <Key
                     latin:keyStyle="tabKeyStyle"
-                    latin:keyWidth="11.00%p"
-                    latin:keyEdgeFlags="left" />
+                    latin:keyWidth="11.00%p" />
                 <Key
                     latin:keyStyle="nonSpecialBackgroundSpaceKeyStyle"
                     latin:keyWidth="27.75%p" />
diff --git a/java/res/xml-sw600dp/kbd_phone.xml b/java/res/xml-sw600dp/kbd_phone.xml
index dd53a20..7b584c1 100644
--- a/java/res/xml-sw600dp/kbd_phone.xml
+++ b/java/res/xml-sw600dp/kbd_phone.xml
@@ -26,12 +26,13 @@
         latin:keyboardLayout="@xml/kbd_key_styles" />
     <include
         latin:keyboardLayout="@xml/kbd_numkey_styles" />
-    <!-- This row is intentionally not marked as a top row -->
     <Row>
+        <!-- Note: This Spacer prevents the below key from being marked as a left edge key. -->
+        <Spacer
+            latin:keyWidth="15.625%p" />
         <Key
             latin:keyLabel="-"
             latin:keyStyle="numKeyStyle"
-            latin:keyXPos="15.625%p"
             latin:keyWidth="9.25%p" />
         <Key
             latin:keyLabel="+"
@@ -47,14 +48,15 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-11.00%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row>
+        <!-- Note: This Spacer prevents the below key from being marked as a left edge key. -->
+        <Spacer
+            latin:keyWidth="15.625%p" />
         <Key
             latin:keyLabel=","
             latin:keyStyle="numKeyStyle"
-            latin:keyXPos="15.625%p"
             latin:keyWidth="9.25%p" />
         <Key
             latin:keyLabel="."
@@ -70,16 +72,12 @@
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-11.00%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row>
         <Key
             latin:keyStyle="moreKeyStyle"
-            latin:keyWidth="11.0%p"
-            latin:keyEdgeFlags="left" />
-        <!-- There is an empty area below the "More" key and left of the "(" key.  To ignore
-             the touch event on the area, "(" is intentionally not marked as a left edge key. -->
+            latin:keyWidth="11.0%p" />
         <Key
             latin:keyLabel="("
             latin:keyStyle="numKeyStyle"
@@ -96,13 +94,14 @@
             latin:keyStyle="num8KeyStyle" />
         <Key
             latin:keyStyle="num9KeyStyle" />
+        <!-- Note: This Spacer prevents the above key from being marked as a right edge key. -->
+        <Spacer
+            latin:keyWidth="0%p" />
         </Row>
-    <!-- This row is intentionally not marked as a bottom row -->
     <Row>
         <Key
             latin:keyStyle="tabKeyStyle"
-            latin:keyWidth="11.00%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="11.00%p" />
         <Key
             latin:keyStyle="nonSpecialBackgroundSpaceKeyStyle"
             latin:keyXPos="15.625%p"
diff --git a/java/res/xml-sw600dp/kbd_phone_symbols.xml b/java/res/xml-sw600dp/kbd_phone_symbols.xml
index d083ecb..4839645 100644
--- a/java/res/xml-sw600dp/kbd_phone_symbols.xml
+++ b/java/res/xml-sw600dp/kbd_phone_symbols.xml
@@ -26,12 +26,13 @@
         latin:keyboardLayout="@xml/kbd_key_styles" />
     <include
         latin:keyboardLayout="@xml/kbd_numkey_styles" />
-    <!-- This row is intentionally not marked as a top row -->
     <Row>
+        <!-- Note: This Spacer prevents the below key from being marked as a left edge key. -->
+        <Spacer
+            latin:keyWidth="11.00%p" />
         <Key
             latin:keyLabel="-"
             latin:keyStyle="numKeyStyle"
-            latin:keyXPos="11.00%p"
             latin:keyWidth="9.25%p" />
         <Key
             latin:keyLabel="+"
@@ -51,14 +52,15 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-11.00%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row>
+        <!-- Note: This Spacer prevents the below key from being marked as a left edge key. -->
+        <Spacer
+            latin:keyWidth="11.00%p" />
         <Key
             latin:keyLabel=","
             latin:keyStyle="numKeyStyle"
-            latin:keyXPos="11.00%p"
             latin:keyWidth="9.25%p" />
         <Key
             latin:keyLabel="."
@@ -78,16 +80,12 @@
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-11.00%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row>
         <Key
             latin:keyStyle="moreKeyStyle"
-            latin:keyWidth="11.00%p"
-            latin:keyEdgeFlags="left" />
-        <!-- There is an empty area below the "More" key and left of the "(" key.  To ignore
-             the touch event on the area, "(" is intentionally not marked as a left edge key. -->
+            latin:keyWidth="11.00%p" />
         <Key
             latin:keyLabel="("
             latin:keyStyle="numKeyStyle"
@@ -107,13 +105,14 @@
             latin:keyStyle="num8KeyStyle" />
         <Key
             latin:keyStyle="num9KeyStyle" />
+        <!-- Note: This Spacer prevents the above key from being marked as a right edge key. -->
+        <Spacer
+            latin:keyWidth="0%p" />
     </Row>
-    <!-- This row is intentionally not marked as a bottom row -->
     <Row>
         <Key
             latin:keyStyle="tabKeyStyle"
-            latin:keyWidth="11.00%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="11.00%p" />
         <Key
             latin:keyStyle="nonSpecialBackgroundSpaceKeyStyle"
             latin:keyWidth="27.75%p" />
diff --git a/java/res/xml-sw600dp/kbd_qwerty_f2.xml b/java/res/xml-sw600dp/kbd_qwerty_f2.xml
index 7638ee4..3ea1180 100644
--- a/java/res/xml-sw600dp/kbd_qwerty_f2.xml
+++ b/java/res/xml-sw600dp/kbd_qwerty_f2.xml
@@ -27,8 +27,7 @@
         >
             <Key
                 latin:keyStyle="settingsKeyStyle"
-                latin:keyWidth="fillBoth"
-                latin:keyEdgeFlags="right" />
+                latin:keyWidth="fillBoth" />
         </case>
         <case
             latin:f2KeyMode="shortcutIme"
@@ -39,8 +38,7 @@
                 >
                     <Key
                         latin:keyStyle="shortcutKeyStyle"
-                        latin:keyWidth="fillBoth"
-                        latin:keyEdgeFlags="right" />
+                        latin:keyWidth="fillBoth" />
                 </case>
                 <!-- voiceKeyEnabled="false" -->
                 <default>
@@ -57,15 +55,13 @@
                 >
                     <Key
                         latin:keyStyle="shortcutKeyStyle"
-                        latin:keyWidth="fillBoth"
-                        latin:keyEdgeFlags="right" />
+                        latin:keyWidth="fillBoth" />
                 </case>
                 <!-- voiceKeyEnabled="false" -->
                 <default>
                     <Key
                         latin:keyStyle="settingsKeyStyle"
-                        latin:keyWidth="fillBoth"
-                        latin:keyEdgeFlags="right" />
+                        latin:keyWidth="fillBoth" />
                 </default>
             </switch>
         </case>
diff --git a/java/res/xml-sw600dp/kbd_qwerty_row1.xml b/java/res/xml-sw600dp/kbd_qwerty_row1.xml
index b781d68..c7dfcc8 100644
--- a/java/res/xml-sw600dp/kbd_qwerty_row1.xml
+++ b/java/res/xml-sw600dp/kbd_qwerty_row1.xml
@@ -23,12 +23,10 @@
 >
     <Row
         latin:keyWidth="9.0%p"
-        latin:rowEdgeFlags="top"
     >
         <Key
             latin:keyLabel="q"
-            latin:popupCharacters="@string/alternates_for_q"
-            latin:keyEdgeFlags="left" />
+            latin:popupCharacters="@string/alternates_for_q" />
         <Key
             latin:keyLabel="w"
             latin:popupCharacters="@string/alternates_for_w" />
@@ -59,7 +57,6 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-10.0%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
 </merge>
diff --git a/java/res/xml-sw600dp/kbd_qwerty_row2.xml b/java/res/xml-sw600dp/kbd_qwerty_row2.xml
index 05b005a..78004fe 100644
--- a/java/res/xml-sw600dp/kbd_qwerty_row2.xml
+++ b/java/res/xml-sw600dp/kbd_qwerty_row2.xml
@@ -27,8 +27,7 @@
         <Key
             latin:keyLabel="a"
             latin:popupCharacters="@string/alternates_for_a"
-            latin:keyXPos="4.5%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyXPos="4.5%p" />
         <Key
             latin:keyLabel="s"
             latin:popupCharacters="@string/alternates_for_s" />
@@ -53,7 +52,6 @@
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-14.6%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
 </merge>
diff --git a/java/res/xml-sw600dp/kbd_qwerty_row3.xml b/java/res/xml-sw600dp/kbd_qwerty_row3.xml
index b4eed8a..456f3c8 100644
--- a/java/res/xml-sw600dp/kbd_qwerty_row3.xml
+++ b/java/res/xml-sw600dp/kbd_qwerty_row3.xml
@@ -26,8 +26,7 @@
     >
         <Key
             latin:keyStyle="shiftKeyStyle"
-            latin:keyWidth="10.0%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="10.0%p" />
         <Key
             latin:keyLabel="z"
             latin:popupCharacters="@string/alternates_for_z" />
diff --git a/java/res/xml-sw600dp/kbd_qwerty_row4.xml b/java/res/xml-sw600dp/kbd_qwerty_row4.xml
index 5cd47d9..f22b69f 100644
--- a/java/res/xml-sw600dp/kbd_qwerty_row4.xml
+++ b/java/res/xml-sw600dp/kbd_qwerty_row4.xml
@@ -21,15 +21,13 @@
 <merge
     xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
 >
-    <!-- This row is intentionally not marked as a bottom row -->
     <Row
         latin:keyWidth="8.9%p"
     >
         <Key
             latin:keyStyle="toSymbolKeyStyle"
             latin:keyLabelOption="alignLeft"
-            latin:keyWidth="13.0%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="13.0%p" />
         <Key
             latin:keyStyle="tabKeyStyle" />
         <switch>
diff --git a/java/res/xml-sw600dp/kbd_row3_smiley.xml b/java/res/xml-sw600dp/kbd_row3_smiley.xml
index 5e9584f..0ae3ae4 100644
--- a/java/res/xml-sw600dp/kbd_row3_smiley.xml
+++ b/java/res/xml-sw600dp/kbd_row3_smiley.xml
@@ -28,8 +28,7 @@
             <Key
                 latin:keyLabel="\@"
                 latin:keyXPos="-8.9%p"
-                latin:keyWidth="fillBoth"
-                latin:keyEdgeFlags="right" />
+                latin:keyWidth="fillBoth" />
         </case>
         <case
             latin:mode="url"
@@ -40,8 +39,7 @@
                 latin:keyHintLabel="_"
                 latin:popupCharacters="_"
                 latin:keyXPos="-8.9%p"
-                latin:keyWidth="fillBoth"
-                latin:keyEdgeFlags="right" />
+                latin:keyWidth="fillBoth" />
         </case>
         <case
             latin:imeAction="actionSearch"
@@ -52,15 +50,13 @@
                 latin:keyHintLabel="+"
                 latin:popupCharacters="+"
                 latin:keyXPos="-8.9%p"
-                latin:keyWidth="fillBoth"
-                latin:keyEdgeFlags="right" />
+                latin:keyWidth="fillBoth" />
         </case>
         <default>
             <Key
                 latin:keyStyle="smileyKeyStyle"
                 latin:keyXPos="-8.9%p"
-                latin:keyWidth="fillBoth"
-                latin:keyEdgeFlags="right" />
+                latin:keyWidth="fillBoth" />
         </default>
     </switch>
 </merge>
diff --git a/java/res/xml-sw600dp/kbd_rows_arabic.xml b/java/res/xml-sw600dp/kbd_rows_arabic.xml
index 4c19094..4c20f51 100644
--- a/java/res/xml-sw600dp/kbd_rows_arabic.xml
+++ b/java/res/xml-sw600dp/kbd_rows_arabic.xml
@@ -27,8 +27,7 @@
         latin:keyWidth="8.0%p"
     >
         <Key
-            latin:keyLabel="ض"
-            latin:keyEdgeFlags="left" />
+            latin:keyLabel="ض" />
         <Key
             latin:keyLabel="ص" />
         <Key
@@ -57,8 +56,7 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-10.0%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="8.0%p"
@@ -105,8 +103,7 @@
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-14.6%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="8.0%p"
@@ -117,8 +114,7 @@
                 latin:mode="email"
             >
                 <Key
-                    latin:keyLabel="\@"
-                    latin:keyEdgeFlags="left" />
+                    latin:keyLabel="\@" />
             </case>
             <case
                 latin:mode="url"
@@ -127,8 +123,7 @@
                     latin:keyLabel="-"
                     latin:keyLabelOption="hasUppercaseLetter"
                     latin:keyHintLabel="_"
-                    latin:popupCharacters="_"
-                    latin:keyEdgeFlags="left" />
+                    latin:popupCharacters="_" />
             </case>
             <case
                 latin:imeAction="actionSearch"
@@ -137,13 +132,11 @@
                     latin:keyLabel=":"
                     latin:keyLabelOption="hasUppercaseLetter"
                     latin:keyHintLabel="+"
-                    latin:popupCharacters="+"
-                    latin:keyEdgeFlags="left" />
+                    latin:popupCharacters="+" />
             </case>
             <default>
                 <Key
-                    latin:keyStyle="smileyKeyStyle"
-                    latin:keyEdgeFlags="left" />
+                    latin:keyStyle="smileyKeyStyle" />
             </default>
         </switch>
         <Key
diff --git a/java/res/xml-sw600dp/kbd_rows_azerty.xml b/java/res/xml-sw600dp/kbd_rows_azerty.xml
index 698ef22..406b4e6 100644
--- a/java/res/xml-sw600dp/kbd_rows_azerty.xml
+++ b/java/res/xml-sw600dp/kbd_rows_azerty.xml
@@ -25,12 +25,10 @@
         latin:keyboardLayout="@xml/kbd_key_styles" />
     <Row
         latin:keyWidth="8.5%p"
-        latin:rowEdgeFlags="top"
     >
         <Key
             latin:keyLabel="a"
-            latin:popupCharacters="@string/alternates_for_a"
-            latin:keyEdgeFlags="left" />
+            latin:popupCharacters="@string/alternates_for_a" />
         <Key
             latin:keyLabel="z"
             latin:popupCharacters="@string/alternates_for_z" />
@@ -61,8 +59,7 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-10.0%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="8.5%p"
@@ -70,8 +67,7 @@
         <Key
             latin:keyLabel="q"
             latin:popupCharacters="@string/alternates_for_q"
-            latin:keyXPos="5.0%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyXPos="5.0%p" />
         <Key
             latin:keyLabel="s"
             latin:popupCharacters="@string/alternates_for_s" />
@@ -98,16 +94,14 @@
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-14.6%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="8.5%p"
     >
         <Key
             latin:keyStyle="shiftKeyStyle"
-            latin:keyWidth="10.0%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="10.0%p" />
         <Key
             latin:keyLabel="w"
             latin:popupCharacters="@string/alternates_for_w" />
diff --git a/java/res/xml-sw600dp/kbd_rows_hebrew.xml b/java/res/xml-sw600dp/kbd_rows_hebrew.xml
index 8740915..fc2247c 100644
--- a/java/res/xml-sw600dp/kbd_rows_hebrew.xml
+++ b/java/res/xml-sw600dp/kbd_rows_hebrew.xml
@@ -25,7 +25,6 @@
         latin:keyboardLayout="@xml/kbd_key_styles" />
     <Row
         latin:keyWidth="9.0%p"
-        latin:rowEdgeFlags="top"
     >
         <include
             latin:keyboardLayout="@xml/kbd_row4_apostrophe_dash" />
@@ -48,8 +47,7 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-12.000%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="9.0%p"
@@ -89,8 +87,7 @@
             >
                 <Key
                     latin:keyLabel="\@"
-                    latin:keyWidth="10.0%p"
-                    latin:keyEdgeFlags="left" />
+                    latin:keyWidth="10.0%p" />
             </case>
             <case
                 latin:mode="url"
@@ -100,8 +97,7 @@
                     latin:keyLabelOption="hasUppercaseLetter"
                     latin:keyHintLabel="_"
                     latin:popupCharacters="_"
-                    latin:keyWidth="10.0%p"
-                    latin:keyEdgeFlags="left" />
+                    latin:keyWidth="10.0%p" />
             </case>
             <case
                 latin:imeAction="actionSearch"
@@ -111,14 +107,12 @@
                     latin:keyLabelOption="hasUppercaseLetter"
                     latin:keyHintLabel="+"
                     latin:popupCharacters="+"
-                    latin:keyWidth="10.0%p"
-                    latin:keyEdgeFlags="left" />
+                    latin:keyWidth="10.0%p" />
             </case>
             <default>
                 <Key
                     latin:keyStyle="smileyKeyStyle"
-                    latin:keyWidth="10.0%p"
-                    latin:keyEdgeFlags="left" />
+                    latin:keyWidth="10.0%p" />
             </default>
         </switch>
         <Key
@@ -146,8 +140,7 @@
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-10.400%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <include
         latin:keyboardLayout="@xml/kbd_qwerty_row4" />
diff --git a/java/res/xml-sw600dp/kbd_rows_qwertz.xml b/java/res/xml-sw600dp/kbd_rows_qwertz.xml
index 7ec895e..3d177e7 100644
--- a/java/res/xml-sw600dp/kbd_rows_qwertz.xml
+++ b/java/res/xml-sw600dp/kbd_rows_qwertz.xml
@@ -25,12 +25,10 @@
         latin:keyboardLayout="@xml/kbd_key_styles" />
     <Row
         latin:keyWidth="9.0%p"
-        latin:rowEdgeFlags="top"
     >
         <Key
             latin:keyLabel="q"
-            latin:popupCharacters="@string/alternates_for_q"
-            latin:keyEdgeFlags="left" />
+            latin:popupCharacters="@string/alternates_for_q" />
         <Key
             latin:keyLabel="w"
             latin:popupCharacters="@string/alternates_for_w" />
@@ -61,8 +59,7 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-10.0%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <include
         latin:keyboardLayout="@xml/kbd_qwerty_row2" />
@@ -71,8 +68,7 @@
     >
         <Key
             latin:keyStyle="shiftKeyStyle"
-            latin:keyWidth="10.0%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="10.0%p" />
         <Key
             latin:keyLabel="y"
             latin:popupCharacters="@string/alternates_for_y" />
diff --git a/java/res/xml-sw600dp/kbd_rows_russian.xml b/java/res/xml-sw600dp/kbd_rows_russian.xml
index 4452989..7588f6c 100644
--- a/java/res/xml-sw600dp/kbd_rows_russian.xml
+++ b/java/res/xml-sw600dp/kbd_rows_russian.xml
@@ -25,11 +25,9 @@
         latin:keyboardLayout="@xml/kbd_key_styles" />
     <Row
         latin:keyWidth="7.60%p"
-        latin:rowEdgeFlags="top"
     >
         <Key
-            latin:keyLabel="й"
-            latin:keyEdgeFlags="left" />
+            latin:keyLabel="й" />
         <Key
             latin:keyLabel="ц" />
         <Key
@@ -56,8 +54,7 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-10.0%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="7.60%p"
@@ -88,15 +85,13 @@
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-14.6%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="7.60%p"
     >
         <Key
-            latin:keyStyle="shiftKeyStyle"
-            latin:keyEdgeFlags="left" />
+            latin:keyStyle="shiftKeyStyle" />
         <Key
             latin:keyLabel="я" />
         <Key
diff --git a/java/res/xml-sw600dp/kbd_rows_scandinavian.xml b/java/res/xml-sw600dp/kbd_rows_scandinavian.xml
index 5ac2b36..5059137 100644
--- a/java/res/xml-sw600dp/kbd_rows_scandinavian.xml
+++ b/java/res/xml-sw600dp/kbd_rows_scandinavian.xml
@@ -25,12 +25,10 @@
         latin:keyboardLayout="@xml/kbd_key_styles" />
     <Row
         latin:keyWidth="7.9%p"
-        latin:rowEdgeFlags="top"
     >
         <Key
             latin:keyLabel="q"
-            latin:popupCharacters="@string/alternates_for_q"
-            latin:keyEdgeFlags="left" />
+            latin:popupCharacters="@string/alternates_for_q" />
         <Key
             latin:keyLabel="w"
             latin:popupCharacters="@string/alternates_for_w" />
@@ -63,8 +61,7 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-10.0%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="7.9%p"
@@ -72,8 +69,7 @@
         <Key
             latin:keyLabel="a"
             latin:keyXPos="3.5%p"
-            latin:popupCharacters="@string/alternates_for_a"
-            latin:keyEdgeFlags="left" />
+            latin:popupCharacters="@string/alternates_for_a" />
         <Key
             latin:keyLabel="s"
             latin:popupCharacters="@string/alternates_for_s" />
@@ -104,16 +100,14 @@
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-14.6%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="7.9%p"
     >
         <Key
             latin:keyStyle="shiftKeyStyle"
-            latin:keyWidth="10.0%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="10.0%p" />
         <Spacer
             latin:keyWidth="4.35%p" />
         <Key
diff --git a/java/res/xml-sw600dp/kbd_rows_serbian.xml b/java/res/xml-sw600dp/kbd_rows_serbian.xml
index 5d39fd4..db7560c 100644
--- a/java/res/xml-sw600dp/kbd_rows_serbian.xml
+++ b/java/res/xml-sw600dp/kbd_rows_serbian.xml
@@ -25,12 +25,10 @@
         latin:keyboardLayout="@xml/kbd_key_styles" />
     <Row
         latin:keyWidth="8.0%p"
-        latin:rowEdgeFlags="top"
     >
         <Key
             latin:keyLabel="љ"
-            latin:keyXPos="2.15%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyXPos="2.15%p" />
         <Key
             latin:keyLabel="њ" />
         <Key
@@ -54,15 +52,13 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-10.0%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="7.9%p"
     >
         <Key
-            latin:keyLabel="а"
-            latin:keyEdgeFlags="left" />
+            latin:keyLabel="а" />
         <Key
             latin:keyLabel="с" />
         <Key
@@ -86,16 +82,14 @@
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-14.6%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="7.5%p"
     >
         <Key
             latin:keyStyle="shiftKeyStyle"
-            latin:keyWidth="8.0%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="8.0%p" />
         <Key
             latin:keyLabel="ѕ" />
         <Key
diff --git a/java/res/xml-sw600dp/kbd_rows_spanish.xml b/java/res/xml-sw600dp/kbd_rows_spanish.xml
index 7ef44bb..49243eb 100644
--- a/java/res/xml-sw600dp/kbd_rows_spanish.xml
+++ b/java/res/xml-sw600dp/kbd_rows_spanish.xml
@@ -31,8 +31,7 @@
         <Key
             latin:keyLabel="a"
             latin:popupCharacters="@string/alternates_for_a"
-            latin:keyXPos="5.0%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyXPos="5.0%p" />
         <Key
             latin:keyLabel="s"
             latin:popupCharacters="@string/alternates_for_s" />
@@ -59,8 +58,7 @@
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-14.6%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <include
         latin:keyboardLayout="@xml/kbd_qwerty_row3" />
diff --git a/java/res/xml-sw600dp/kbd_symbols.xml b/java/res/xml-sw600dp/kbd_symbols.xml
index 03d37b0..fc89cd3 100644
--- a/java/res/xml-sw600dp/kbd_symbols.xml
+++ b/java/res/xml-sw600dp/kbd_symbols.xml
@@ -25,14 +25,12 @@
         latin:keyboardLayout="@xml/kbd_key_styles" />
     <include
         latin:keyboardLayout="@xml/kbd_currency_key_styles" />
-    <!-- This row is intentionally not marked as a top row -->
     <Row
         latin:keyWidth="9.0%p"
     >
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_1"
-            latin:popupCharacters="@string/alternates_for_symbols_1"
-            latin:keyEdgeFlags="left" />
+            latin:popupCharacters="@string/alternates_for_symbols_1" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_2"
             latin:popupCharacters="@string/alternates_for_symbols_2" />
@@ -63,8 +61,7 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-10.0%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="9.0%p"
@@ -97,16 +94,14 @@
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-14.6%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="8.9%p"
     >
         <Key
             latin:keyStyle="moreKeyStyle"
-            latin:keyWidth="10.0%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="10.0%p" />
         <Key
             latin:keyLabel="&lt;"
             latin:popupCharacters="≤,«,‹" />
@@ -147,15 +142,13 @@
             latin:keyLabel="/"
             latin:keyWidth="fillRight" />
     </Row>
-    <!-- This row is intentionally not marked as a bottom row -->
     <Row
         latin:keyWidth="8.9%p"
     >
         <Key
             latin:keyStyle="toAlphaKeyStyle"
             latin:keyLabelOption="alignLeft"
-            latin:keyWidth="13.0%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="13.0%p" />
         <Key
             latin:keyStyle="tabKeyStyle" />
         <Key
diff --git a/java/res/xml-sw600dp/kbd_symbols_shift.xml b/java/res/xml-sw600dp/kbd_symbols_shift.xml
index b25292f..99b78a4 100644
--- a/java/res/xml-sw600dp/kbd_symbols_shift.xml
+++ b/java/res/xml-sw600dp/kbd_symbols_shift.xml
@@ -23,7 +23,6 @@
 >
     <include
         latin:keyboardLayout="@xml/kbd_key_styles" />
-    <!-- This row is intentionally not marked as a top row -->
     <Row
         latin:keyWidth="9.0%p"
     >
@@ -60,8 +59,7 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-10.0%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="9.0%p"
@@ -97,16 +95,14 @@
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-14.6%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="8.9%p"
     >
         <Key
             latin:keyStyle="moreKeyStyle"
-            latin:keyWidth="10.0%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="10.0%p" />
         <Key
             latin:keyLabel="\\" />
         <Key
@@ -132,15 +128,13 @@
             latin:keyStyle="nonPasswordSymbolKeyStyle"
             latin:keyLabel="¿" />
     </Row>
-    <!-- This row is intentionally not marked as a bottom row -->
     <Row
         latin:keyWidth="8.9%p"
     >
         <Key
             latin:keyStyle="toAlphaKeyStyle"
             latin:keyLabelOption="alignLeft"
-            latin:keyWidth="13.0%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="13.0%p" />
         <Key
             latin:keyStyle="tabKeyStyle" />
         <Key
diff --git a/java/res/xml-sw768dp/kbd_key_styles.xml b/java/res/xml-sw768dp/kbd_key_styles.xml
index ab8784a..12ec0e7 100644
--- a/java/res/xml-sw768dp/kbd_key_styles.xml
+++ b/java/res/xml-sw768dp/kbd_key_styles.xml
@@ -57,12 +57,10 @@
         latin:parentStyle="functionalKeyStyle" />
     <key-style
         latin:styleName="spaceKeyStyle"
-        latin:code="@integer/key_space"
-        latin:keyIconPreview="iconPreviewSpaceKey" />
+        latin:code="@integer/key_space" />
     <key-style
         latin:styleName="nonSpecialBackgroundSpaceKeyStyle"
-        latin:code="@integer/key_space"
-        latin:keyIconPreview="iconPreviewSpaceKey" />
+        latin:code="@integer/key_space" />
     <key-style
         latin:styleName="smileyKeyStyle"
         latin:keyLabel=":-)"
diff --git a/java/res/xml-sw768dp/kbd_number.xml b/java/res/xml-sw768dp/kbd_number.xml
index a3bed2f..1706eaa 100644
--- a/java/res/xml-sw768dp/kbd_number.xml
+++ b/java/res/xml-sw768dp/kbd_number.xml
@@ -30,13 +30,11 @@
         <case
             latin:passwordInput="true"
         >
-            <!-- This row is intentionally not marked as a top row -->
             <Row>
                 <Key
                     latin:keyStyle="tabKeyStyle"
                     latin:keyLabelOption="alignLeft"
-                    latin:keyWidth="11.172%p"
-                    latin:keyEdgeFlags="left" />
+                    latin:keyWidth="11.172%p" />
                 <Key
                     latin:keyStyle="num1KeyStyle"
                     latin:keyXPos="32.076%p" />
@@ -47,13 +45,14 @@
                 <Key
                     latin:keyStyle="deleteKeyStyle"
                     latin:keyXPos="-11.172%p"
-                    latin:keyWidth="fillRight"
-                    latin:keyEdgeFlags="right" />
+                    latin:keyWidth="fillRight" />
             </Row>
             <Row>
+                <!-- Note: This Spacer prevents the below key from being marked as a left edge key. -->
+                <Spacer
+                    latin:keyWidth="32.076%p" />
                 <Key
-                    latin:keyStyle="num4KeyStyle"
-                    latin:keyXPos="32.076%p" />
+                    latin:keyStyle="num4KeyStyle" />
                 <Key
                     latin:keyStyle="num5KeyStyle" />
                 <Key
@@ -61,41 +60,39 @@
                 <Key
                     latin:keyStyle="returnKeyStyle"
                     latin:keyXPos="-11.172%p"
-                    latin:keyWidth="fillRight"
-                    latin:keyEdgeFlags="right" />
+                    latin:keyWidth="fillRight" />
             </Row>
             <Row>
+                <!-- Note: This Spacer prevents the below key from being marked as a left edge key. -->
+                <Spacer
+                    latin:keyWidth="32.076%p" />
                 <Key
-                    latin:keyStyle="num7KeyStyle"
-                    latin:keyXPos="32.076%p" />
+                    latin:keyStyle="num7KeyStyle" />
                 <Key
                     latin:keyStyle="num8KeyStyle" />
                 <Key
                     latin:keyStyle="num9KeyStyle" />
-                <!-- There is an empty area below the "Enter" key and right of the "9" key. To
-                     ignore the touch event on the area, "9" is intentionally not marked as a right
-                     edge key. -->
+                <!-- Note: This Spacer prevents the above key from being marked as a right edge key. -->
+                <Spacer
+                    latin:keyWidth="0%p" />
             </Row>
-            <!-- This row is intentionally not marked as a bottom row -->
             <Row>
                 <Spacer
                     latin:keyXPos="32.076%p" />
                 <Key
                     latin:keyStyle="num0KeyStyle" />
-                <!-- There is an empty area below the "Enter" key and right of the "#" key. To
-                     ignore the touch event on the area, "#" is intentionally not marked as a right
-                     edge key. -->
+                <!-- Note: This Spacer prevents the above key from being marked as a right edge key. -->
+                <Spacer
+                    latin:keyWidth="0%p" />
             </Row>
         </case>
         <!-- latin:passwordInput="false" -->
         <default>
-            <!-- This row is intentionally not marked as a top row -->
             <Row>
                 <Key
                     latin:keyStyle="tabKeyStyle"
                     latin:keyLabelOption="alignLeft"
-                    latin:keyWidth="11.172%p"
-                    latin:keyEdgeFlags="left" />
+                    latin:keyWidth="11.172%p" />
                 <Key
                     latin:keyLabel="-"
                     latin:keyStyle="numKeyStyle"
@@ -122,13 +119,14 @@
                 <Key
                     latin:keyStyle="deleteKeyStyle"
                     latin:keyXPos="-11.172%p"
-                    latin:keyWidth="fillRight"
-                    latin:keyEdgeFlags="right" />
+                    latin:keyWidth="fillRight" />
             </Row>
             <Row>
+                <!-- Note: This Spacer prevents the below key from being marked as a left edge key. -->
+                <Spacer
+                    latin:keyWidth="13.829%p" />
                 <Key
                     latin:keyStyle="numStarKeyStyle"
-                    latin:keyXPos="13.829%p"
                     latin:keyWidth="8.047%p" />
                 <Key
                     latin:keyLabel="/"
@@ -151,17 +149,15 @@
                 <Key
                     latin:keyStyle="returnKeyStyle"
                     latin:keyXPos="-11.172%p"
-                    latin:keyWidth="fillRight"
-                    latin:keyEdgeFlags="right" />
+                    latin:keyWidth="fillRight" />
             </Row>
             <Row>
-                <!-- There is an empty area below the "More" key and left of the "(" key. To
-                     ignore the touch event on the area, "(" is intentionally not marked as a left
-                     edge key. -->
+                <!-- Note: This Spacer prevents the below key from being marked as a left edge key. -->
+                <Spacer
+                    latin:keyWidth="13.829%p" />
                 <Key
                     latin:keyLabel="("
                     latin:keyStyle="numKeyStyle"
-                    latin:keyXPos="13.829%p"
                     latin:keyWidth="8.047%p" />
                 <Key
                     latin:keyLabel=")"
@@ -181,11 +177,10 @@
                 <Key
                     latin:keyLabel="9"
                     latin:keyStyle="numKeyStyle" />
-                <!-- There is an empty area below the "Enter" key and right of the "9" key. To
-                     ignore the touch event on the area, "9" is intentionally not marked as a right
-                     edge key. -->
+                <!-- Note: This Spacer prevents the above key from being marked as a right edge key. -->
+                <Spacer
+                    latin:keyWidth="0%p" />
             </Row>
-            <!-- This row is intentionally not marked as a bottom row -->
             <Row>
                 <switch>
                     <case latin:hasSettingsKey="true">
@@ -193,6 +188,11 @@
                             latin:keyStyle="settingsKeyStyle"
                             latin:keyWidth="8.047%p" />
                     </case>
+                    <default>
+                        <!-- Note: This Spacer prevents the below key from being marked as a left edge key. -->
+                        <Spacer
+                            latin:keyWidth="8.047%p" />
+                    </default>
                 </switch>
                 <Key
                     latin:keyStyle="nonSpecialBackgroundSpaceKeyStyle"
@@ -216,6 +216,11 @@
                             latin:keyXPos="-8.047%p"
                             latin:keyWidth="fillRight" />
                     </case>
+                    <default>
+                        <!-- Note: This Spacer prevents the above key from being marked as a right edge key. -->
+                        <Spacer
+                            latin:keyWidth="0%p" />
+                    </default>
                 </switch>
             </Row>
         </default>
diff --git a/java/res/xml-sw768dp/kbd_phone.xml b/java/res/xml-sw768dp/kbd_phone.xml
index 0935992..945b641 100644
--- a/java/res/xml-sw768dp/kbd_phone.xml
+++ b/java/res/xml-sw768dp/kbd_phone.xml
@@ -26,13 +26,11 @@
         latin:keyboardLayout="@xml/kbd_key_styles" />
     <include
         latin:keyboardLayout="@xml/kbd_numkey_styles" />
-    <!-- This row is intentionally not marked as a top row -->
     <Row>
         <Key
             latin:keyStyle="tabKeyStyle"
             latin:keyLabelOption="alignLeft"
-            latin:keyWidth="11.172%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="11.172%p" />
         <Key
             latin:keyLabel="-"
             latin:keyStyle="numKeyStyle"
@@ -52,14 +50,12 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-11.172%p"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <Row>
         <Key
             latin:keyStyle="moreKeyStyle"
-            latin:keyWidth="11.172%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="11.172%p" />
         <Key
             latin:keyLabel=","
             latin:keyStyle="numKeyStyle"
@@ -79,16 +75,15 @@
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-11.172%p"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <Row>
-        <!-- There is an empty area below the "More" key and left of the "(" key.  To ignore
-             the touch event on the area, "(" is intentionally not marked as a left edge key. -->
+        <!-- Note: This Spacer prevents the below key from being marked as a left edge key. -->
+        <Spacer
+            latin:keyWidth="20.400%p" />
         <Key
             latin:keyLabel="("
             latin:keyStyle="numKeyStyle"
-            latin:keyXPos="20.400%p"
             latin:keyWidth="8.047%p" />
         <Key
             latin:keyLabel=")"
@@ -101,10 +96,10 @@
             latin:keyStyle="num8KeyStyle" />
         <Key
             latin:keyStyle="num9KeyStyle" />
-        <!-- There is an empty area below the "Enter" key and right of the "9" key.  To ignore
-             the touch event on the area, "9" is intentionally not marked as a right edge key. -->
+        <!-- Note: This Spacer prevents the above key from being marked as a right edge key. -->
+        <Spacer
+            latin:keyWidth="0%p" />
         </Row>
-    <!-- This row is intentionally not marked as a bottom row -->
     <Row>
         <switch>
             <case latin:hasSettingsKey="true">
@@ -112,6 +107,11 @@
                     latin:keyStyle="settingsKeyStyle"
                     latin:keyWidth="8.047%p" />
             </case>
+            <default>
+                <!-- Note: This Spacer prevents the below key from being marked as a left edge key. -->
+                <Spacer
+                    latin:keyWidth="8.047%p" />
+            </default>
         </switch>
         <Key
             latin:keyStyle="nonSpecialBackgroundSpaceKeyStyle"
@@ -134,6 +134,11 @@
                     latin:keyXPos="-8.047%p"
                     latin:keyWidth="fillRight" />
             </case>
+            <default>
+                <!-- Note: This Spacer prevents the above key from being marked as a right edge key. -->
+                <Spacer
+                    latin:keyWidth="0%p" />
+            </default>
         </switch>
     </Row>
 </Keyboard>
diff --git a/java/res/xml-sw768dp/kbd_phone_symbols.xml b/java/res/xml-sw768dp/kbd_phone_symbols.xml
index 6ee57d6..693400e 100644
--- a/java/res/xml-sw768dp/kbd_phone_symbols.xml
+++ b/java/res/xml-sw768dp/kbd_phone_symbols.xml
@@ -26,13 +26,11 @@
         latin:keyboardLayout="@xml/kbd_key_styles" />
     <include
         latin:keyboardLayout="@xml/kbd_numkey_styles" />
-    <!-- This row is intentionally not marked as a top row -->
     <Row>
         <Key
             latin:keyStyle="tabKeyStyle"
             latin:keyLabelOption="alignLeft"
-            latin:keyWidth="11.172%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="11.172%p" />
         <Key
             latin:keyLabel="-"
             latin:keyStyle="numKeyStyle"
@@ -56,14 +54,12 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-11.172%p"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <Row>
         <Key
             latin:keyStyle="moreKeyStyle"
-            latin:keyWidth="11.172%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="11.172%p" />
         <Key
             latin:keyLabel=","
             latin:keyStyle="numKeyStyle"
@@ -87,16 +83,15 @@
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-11.172%p"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <Row>
-        <!-- There is an empty area below the "More" key and left of the "(" key.  To ignore
-             the touch event on the area, "(" is intentionally not marked as a left edge key. -->
+        <!-- Note: This Spacer prevents the below key from being marked as a left edge key. -->
+        <Spacer
+            latin:keyWidth="13.829%p" />
         <Key
             latin:keyLabel="("
             latin:keyStyle="numKeyStyle"
-            latin:keyXPos="13.829%p"
             latin:keyWidth="8.047%p" />
         <Key
             latin:keyLabel=")"
@@ -113,10 +108,10 @@
             latin:keyStyle="num8KeyStyle" />
         <Key
             latin:keyStyle="num9KeyStyle" />
-        <!-- There is an empty area below the "Enter" key and right of the "9" key.  To ignore
-             the touch event on the area, "9" is intentionally not marked as a right edge key. -->
+        <!-- Note: This Spacer prevents the above key from being marked as a right edge key. -->
+        <Spacer
+            latin:keyWidth="0%p" />
     </Row>
-    <!-- This row is intentionally not marked as a bottom row -->
     <Row>
         <switch>
             <case latin:hasSettingsKey="true">
@@ -124,6 +119,11 @@
                     latin:keyStyle="settingsKeyStyle"
                     latin:keyWidth="8.047%p" />
             </case>
+            <default>
+                <!-- Note: This Spacer prevents the below key from being marked as a left edge key. -->
+                <Spacer
+                    latin:keyWidth="8.047%p" />
+            </default>
         </switch>
         <Key
             latin:keyStyle="nonSpecialBackgroundSpaceKeyStyle"
@@ -146,6 +146,11 @@
                     latin:keyXPos="-8.047%p"
                     latin:keyWidth="fillRight" />
             </case>
+            <default>
+                <!-- Note: This Spacer prevents the above key from being marked as a right edge key. -->
+                <Spacer
+                    latin:keyWidth="0%p" />
+            </default>
         </switch>
     </Row>
 </Keyboard>
diff --git a/java/res/xml-sw768dp/kbd_qwerty_row1.xml b/java/res/xml-sw768dp/kbd_qwerty_row1.xml
index 3727cf3..0fdb463 100644
--- a/java/res/xml-sw768dp/kbd_qwerty_row1.xml
+++ b/java/res/xml-sw768dp/kbd_qwerty_row1.xml
@@ -21,15 +21,13 @@
 <merge
     xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
 >
-    <!-- This row is intentionally not marked as a top row -->
     <Row
         latin:keyWidth="8.282%p"
     >
         <Key
             latin:keyStyle="tabKeyStyle"
             latin:keyLabelOption="alignLeft"
-            latin:keyWidth="7.969%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="7.969%p" />
         <Key
             latin:keyLabel="q"
             latin:popupCharacters="@string/alternates_for_q" />
@@ -63,7 +61,6 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-9.219%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth"/>
     </Row>
 </merge>
diff --git a/java/res/xml-sw768dp/kbd_qwerty_row2.xml b/java/res/xml-sw768dp/kbd_qwerty_row2.xml
index 45af120..7f7dd57 100644
--- a/java/res/xml-sw768dp/kbd_qwerty_row2.xml
+++ b/java/res/xml-sw768dp/kbd_qwerty_row2.xml
@@ -27,8 +27,7 @@
         <Key
             latin:keyStyle="toSymbolKeyStyle"
             latin:keyLabelOption="alignLeft"
-            latin:keyWidth="11.172%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="11.172%p"/>
         <Key
             latin:keyLabel="a"
             latin:popupCharacters="@string/alternates_for_a" />
@@ -56,7 +55,6 @@
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-15.704%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
 </merge>
diff --git a/java/res/xml-sw768dp/kbd_qwerty_row3.xml b/java/res/xml-sw768dp/kbd_qwerty_row3.xml
index 9041a77..677235f 100644
--- a/java/res/xml-sw768dp/kbd_qwerty_row3.xml
+++ b/java/res/xml-sw768dp/kbd_qwerty_row3.xml
@@ -26,8 +26,7 @@
     >
         <Key
             latin:keyStyle="shiftKeyStyle"
-            latin:keyWidth="13.829%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="13.829%p"/>
         <Key
             latin:keyLabel="z"
             latin:popupCharacters="@string/alternates_for_z" />
@@ -51,7 +50,6 @@
         <Key
             latin:keyStyle="shiftKeyStyle"
             latin:keyXPos="-13.750%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
 </merge>
diff --git a/java/res/xml-sw768dp/kbd_qwerty_row4.xml b/java/res/xml-sw768dp/kbd_qwerty_row4.xml
index 48201c9..d463de9 100644
--- a/java/res/xml-sw768dp/kbd_qwerty_row4.xml
+++ b/java/res/xml-sw768dp/kbd_qwerty_row4.xml
@@ -21,7 +21,6 @@
 <merge
     xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
 >
-    <!-- This row is intentionally not marked as a bottom row -->
     <Row
         latin:keyWidth="8.047%p"
     >
diff --git a/java/res/xml-sw768dp/kbd_rows_arabic.xml b/java/res/xml-sw768dp/kbd_rows_arabic.xml
index f3283ae..2f10d54 100644
--- a/java/res/xml-sw768dp/kbd_rows_arabic.xml
+++ b/java/res/xml-sw768dp/kbd_rows_arabic.xml
@@ -29,8 +29,7 @@
         <Key
             latin:keyStyle="tabKeyStyle"
             latin:keyLabelOption="alignLeft"
-            latin:keyWidth="7.500%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="7.500%p" />
         <Key
             latin:keyLabel="ض" />
         <Key
@@ -61,8 +60,7 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-11.500%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="7.375%p"
@@ -70,8 +68,7 @@
         <Key
             latin:keyStyle="toSymbolKeyStyle"
             latin:keyLabelOption="alignLeft"
-            latin:keyWidth="9.375%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="9.375%p" />
         <Key
             latin:keyLabel="ش" />
         <Key
@@ -113,8 +110,7 @@
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-9.375%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="7.375%p"
diff --git a/java/res/xml-sw768dp/kbd_rows_azerty.xml b/java/res/xml-sw768dp/kbd_rows_azerty.xml
index 373bda9..7aec0d1 100644
--- a/java/res/xml-sw768dp/kbd_rows_azerty.xml
+++ b/java/res/xml-sw768dp/kbd_rows_azerty.xml
@@ -29,8 +29,7 @@
         <Key
             latin:keyStyle="tabKeyStyle"
             latin:keyLabelOption="alignLeft"
-            latin:keyWidth="7.969%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="7.969%p" />
         <Key
             latin:keyLabel="a"
             latin:popupCharacters="@string/alternates_for_a" />
@@ -64,8 +63,7 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-9.219%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="8.125%p"
@@ -73,8 +71,7 @@
         <Key
             latin:keyStyle="toSymbolKeyStyle"
             latin:keyLabelOption="alignLeft"
-            latin:keyWidth="10.167%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="10.167%p" />
         <Key
             latin:keyLabel="q"
             latin:popupCharacters="@string/alternates_for_q" />
@@ -100,21 +97,18 @@
             latin:keyLabel="l"
             latin:popupCharacters="@string/alternates_for_l" />
         <Key
-            latin:keyLabel="m"
-            latin:keyEdgeFlags="right" />
+            latin:keyLabel="m" />
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-15.704%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="8.047%p"
     >
         <Key
             latin:keyStyle="shiftKeyStyle"
-            latin:keyWidth="13.829%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="13.829%p" />
         <Key
             latin:keyLabel="w"
             latin:popupCharacters="@string/alternates_for_w" />
@@ -161,8 +155,7 @@
         <Key
             latin:keyStyle="shiftKeyStyle"
             latin:keyXPos="-13.750%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <include
         latin:keyboardLayout="@xml/kbd_qwerty_row4" />
diff --git a/java/res/xml-sw768dp/kbd_rows_hebrew.xml b/java/res/xml-sw768dp/kbd_rows_hebrew.xml
index 0ef68b6..bacc6a1 100644
--- a/java/res/xml-sw768dp/kbd_rows_hebrew.xml
+++ b/java/res/xml-sw768dp/kbd_rows_hebrew.xml
@@ -29,8 +29,7 @@
         <Key
             latin:keyStyle="tabKeyStyle"
             latin:keyLabelOption="alignLeft"
-            latin:keyWidth="7.969%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="7.969%p" />
         <include
             latin:keyboardLayout="@xml/kbd_row4_apostrophe_dash" />
         <Key
@@ -52,8 +51,7 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-12.000%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="8.125%p"
@@ -61,8 +59,7 @@
         <Key
             latin:keyStyle="toSymbolKeyStyle"
             latin:keyLabelOption="alignLeft"
-            latin:keyWidth="11.172%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="11.172%p" />
         <Key
             latin:keyLabel="ש" />
         <Key
@@ -116,8 +113,7 @@
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-10.400%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <include
         latin:keyboardLayout="@xml/kbd_qwerty_row4" />
diff --git a/java/res/xml-sw768dp/kbd_rows_qwertz.xml b/java/res/xml-sw768dp/kbd_rows_qwertz.xml
index 6567c31..5556d1f 100644
--- a/java/res/xml-sw768dp/kbd_rows_qwertz.xml
+++ b/java/res/xml-sw768dp/kbd_rows_qwertz.xml
@@ -29,8 +29,7 @@
         <Key
             latin:keyStyle="tabKeyStyle"
             latin:keyLabelOption="alignLeft"
-            latin:keyWidth="7.969%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="7.969%p" />
         <Key
             latin:keyLabel="q"
             latin:popupCharacters="@string/alternates_for_q" />
@@ -64,8 +63,7 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-9.219%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <include
         latin:keyboardLayout="@xml/kbd_qwerty_row2" />
@@ -74,8 +72,7 @@
     >
         <Key
             latin:keyStyle="shiftKeyStyle"
-            latin:keyWidth="13.829%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="13.829%p" />
         <Key
             latin:keyLabel="y"
             latin:popupCharacters="@string/alternates_for_y" />
@@ -119,8 +116,7 @@
         <Key
             latin:keyStyle="shiftKeyStyle"
             latin:keyXPos="-13.750%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
    <include
         latin:keyboardLayout="@xml/kbd_qwerty_row4" />
diff --git a/java/res/xml-sw768dp/kbd_rows_russian.xml b/java/res/xml-sw768dp/kbd_rows_russian.xml
index 35b2c8a..82ceaea 100644
--- a/java/res/xml-sw768dp/kbd_rows_russian.xml
+++ b/java/res/xml-sw768dp/kbd_rows_russian.xml
@@ -23,14 +23,12 @@
 >
     <include
         latin:keyboardLayout="@xml/kbd_key_styles" />
-    <!-- This row is intentionally not marked as a top row -->
     <Row
         latin:keyWidth="7.125%p"
     >
         <Key
             latin:keyStyle="tabKeyStyle"
-            latin:keyLabelOption="alignLeft"
-            latin:keyEdgeFlags="left" />
+            latin:keyLabelOption="alignLeft" />
         <Key
             latin:keyLabel="й" />
         <Key
@@ -58,8 +56,7 @@
             latin:keyLabel="ъ" />
         <Key
             latin:keyStyle="deleteKeyStyle"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="7.125%p"
@@ -67,8 +64,7 @@
         <Key
             latin:keyStyle="toSymbolKeyStyle"
             latin:keyLabelOption="alignLeft"
-            latin:keyWidth="9.375%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="9.375%p" />
         <Key
             latin:keyLabel="ф" />
         <Key
@@ -94,16 +90,14 @@
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-9.375%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="7.125%p"
     >
         <Key
             latin:keyStyle="shiftKeyStyle"
-            latin:keyWidth="12.750%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="12.750%p" />
         <Key
             latin:keyLabel="я" />
         <Key
@@ -126,8 +120,7 @@
             latin:keyboardLayout="@xml/kbd_row3_comma_period" />
         <Key
             latin:keyStyle="shiftKeyStyle"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <include
         latin:keyboardLayout="@xml/kbd_qwerty_row4" />
diff --git a/java/res/xml-sw768dp/kbd_rows_scandinavian.xml b/java/res/xml-sw768dp/kbd_rows_scandinavian.xml
index c20dcee..743c6bd 100644
--- a/java/res/xml-sw768dp/kbd_rows_scandinavian.xml
+++ b/java/res/xml-sw768dp/kbd_rows_scandinavian.xml
@@ -29,8 +29,7 @@
         <Key
             latin:keyStyle="tabKeyStyle"
             latin:keyLabelOption="alignLeft"
-            latin:keyWidth="7.500%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="7.500%p" />
         <Key
             latin:keyLabel="q"
             latin:popupCharacters="@string/alternates_for_q" />
@@ -66,8 +65,7 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-11.500%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="7.375%p"
@@ -75,8 +73,7 @@
         <Key
             latin:keyStyle="toSymbolKeyStyle"
             latin:keyLabelOption="alignLeft"
-            latin:keyWidth="9.375%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="9.375%p" />
         <Key
             latin:keyLabel="a"
             latin:popupCharacters="@string/alternates_for_a" />
@@ -110,16 +107,14 @@
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-9.375%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="7.375%p"
     >
         <Key
             latin:keyStyle="shiftKeyStyle"
-            latin:keyWidth="12.750%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="12.750%p" />
         <Key
             latin:keyLabel="z"
             latin:popupCharacters="@string/alternates_for_z" />
@@ -143,8 +138,7 @@
         <Key
             latin:keyStyle="shiftKeyStyle"
             latin:keyXPos="-12.750%p"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <include
         latin:keyboardLayout="@xml/kbd_qwerty_row4" />
diff --git a/java/res/xml-sw768dp/kbd_rows_serbian.xml b/java/res/xml-sw768dp/kbd_rows_serbian.xml
index f1576de..c07176e 100644
--- a/java/res/xml-sw768dp/kbd_rows_serbian.xml
+++ b/java/res/xml-sw768dp/kbd_rows_serbian.xml
@@ -23,14 +23,12 @@
 >
     <include
         latin:keyboardLayout="@xml/kbd_key_styles" />
-    <!-- This row is intentionally not marked as a top row -->
     <Row
         latin:keyWidth="7.125%p"
     >
         <Key
             latin:keyStyle="tabKeyStyle"
-            latin:keyLabelOption="alignLeft"
-            latin:keyEdgeFlags="left" />
+            latin:keyLabelOption="alignLeft" />
         <Key
             latin:keyLabel="љ" />
         <Key
@@ -57,8 +55,7 @@
             latin:keyLabel="ђ" />
         <Key
             latin:keyLabel="ж"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right"/>
+            latin:keyWidth="fillRight" />
     </Row>
     <Row
         latin:keyWidth="7.250%p"
@@ -66,8 +63,7 @@
         <Key
             latin:keyStyle="toSymbolKeyStyle"
             latin:keyLabelOption="alignLeft"
-            latin:keyWidth="11.172%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="11.172%p" />
         <Key
             latin:keyLabel="а" />
         <Key
@@ -93,16 +89,14 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-9.219%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="7.250%p"
     >
         <Key
             latin:keyStyle="shiftKeyStyle"
-            latin:keyWidth="13.829%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="13.829%p" />
         <Key
             latin:keyLabel="ѕ" />
         <Key
@@ -122,8 +116,7 @@
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-13.750%p"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <include
         latin:keyboardLayout="@xml/kbd_qwerty_row4" />
diff --git a/java/res/xml-sw768dp/kbd_rows_spanish.xml b/java/res/xml-sw768dp/kbd_rows_spanish.xml
index 300592e..510cafb 100644
--- a/java/res/xml-sw768dp/kbd_rows_spanish.xml
+++ b/java/res/xml-sw768dp/kbd_rows_spanish.xml
@@ -31,8 +31,7 @@
         <Key
             latin:keyStyle="toSymbolKeyStyle"
             latin:keyLabelOption="alignLeft"
-            latin:keyWidth="10.167%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="10.167%p" />
         <Key
             latin:keyLabel="a"
             latin:popupCharacters="@string/alternates_for_a" />
@@ -62,8 +61,7 @@
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-15.704%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <include
         latin:keyboardLayout="@xml/kbd_qwerty_row3" />
diff --git a/java/res/xml-sw768dp/kbd_symbols.xml b/java/res/xml-sw768dp/kbd_symbols.xml
index 44ee2fd..ba0715c 100644
--- a/java/res/xml-sw768dp/kbd_symbols.xml
+++ b/java/res/xml-sw768dp/kbd_symbols.xml
@@ -25,15 +25,13 @@
         latin:keyboardLayout="@xml/kbd_key_styles" />
     <include
         latin:keyboardLayout="@xml/kbd_currency_key_styles" />
-    <!-- This row is intentionally not marked as a top row -->
     <Row
         latin:keyWidth="8.282%p"
     >
         <Key
             latin:keyStyle="tabKeyStyle"
             latin:keyLabelOption="alignLeft"
-            latin:keyWidth="7.969%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="7.969%p" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_1"
             latin:popupCharacters="@string/alternates_for_symbols_1" />
@@ -67,8 +65,7 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-9.219%p"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <Row
         latin:keyWidth="8.125%p"
@@ -76,8 +73,7 @@
         <Key
             latin:keyStyle="toAlphaKeyStyle"
             latin:keyLabelOption="alignLeft"
-            latin:keyWidth="11.172%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="11.172%p" />
         <Key
             latin:keyLabel="#" />
         <Key
@@ -105,16 +101,14 @@
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-15.704%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="8.047%p"
     >
         <Key
             latin:keyStyle="moreKeyStyle"
-            latin:keyWidth="13.829%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="13.829%p" />
         <Key
             latin:keyLabel="&lt;"
             latin:popupCharacters="≤,«,‹" />
@@ -154,10 +148,8 @@
         <Key
             latin:keyStyle="moreKeyStyle"
             latin:keyXPos="-13.750%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
-    <!-- This row is intentionally not marked as a bottom row -->
     <Row
         latin:keyWidth="8.047%p"
     >
diff --git a/java/res/xml-sw768dp/kbd_symbols_shift.xml b/java/res/xml-sw768dp/kbd_symbols_shift.xml
index b368141..1ddd64b 100644
--- a/java/res/xml-sw768dp/kbd_symbols_shift.xml
+++ b/java/res/xml-sw768dp/kbd_symbols_shift.xml
@@ -23,15 +23,13 @@
 >
     <include
         latin:keyboardLayout="@xml/kbd_key_styles" />
-    <!-- This row is intentionally not marked as a top row -->
     <Row
         latin:keyWidth="8.282%p"
     >
         <Key
             latin:keyStyle="tabKeyStyle"
             latin:keyLabelOption="alignLeft"
-            latin:keyWidth="7.969%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="7.969%p" />
         <Key
             latin:keyLabel="~" />
         <Key
@@ -65,8 +63,7 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-9.219%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="8.125%p"
@@ -74,8 +71,7 @@
         <Key
             latin:keyStyle="toAlphaKeyStyle"
             latin:keyLabelOption="alignLeft"
-            latin:keyWidth="11.172%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="11.172%p" />
         <Key
             latin:keyStyle="nonPasswordSymbolKeyStyle"
             latin:keyLabel="£" />
@@ -106,16 +102,14 @@
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-15.704%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
     <Row
         latin:keyWidth="8.047%p"
     >
         <Key
             latin:keyStyle="moreKeyStyle"
-            latin:keyWidth="13.829%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="13.829%p" />
         <Key
             latin:keyLabel="\\" />
         <Key
@@ -143,10 +137,8 @@
         <Key
             latin:keyStyle="moreKeyStyle"
             latin:keyXPos="-13.750%p"
-            latin:keyWidth="fillBoth"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillBoth" />
     </Row>
-    <!-- This row is intentionally not marked as a bottom row -->
     <Row
         latin:keyWidth="8.047%p"
     >
diff --git a/java/res/xml/kbd_key_styles.xml b/java/res/xml/kbd_key_styles.xml
index 9791001..c40481c 100644
--- a/java/res/xml/kbd_key_styles.xml
+++ b/java/res/xml/kbd_key_styles.xml
@@ -137,7 +137,6 @@
     <key-style
         latin:styleName="spaceKeyStyle"
         latin:code="@integer/key_space"
-        latin:keyIconPreview="iconPreviewSpaceKey"
         latin:parentStyle="functionalKeyStyle" />
     <key-style
         latin:styleName="smileyKeyStyle"
diff --git a/java/res/xml/kbd_number.xml b/java/res/xml/kbd_number.xml
index 4d7b6d9..aabf0eb 100644
--- a/java/res/xml/kbd_number.xml
+++ b/java/res/xml/kbd_number.xml
@@ -30,12 +30,9 @@
         <case
             latin:passwordInput="true"
         >
-            <Row
-                latin:rowEdgeFlags="top"
-            >
+            <Row>
                 <Key
-                    latin:keyStyle="num1KeyStyle"
-                    latin:keyEdgeFlags="left" />
+                    latin:keyStyle="num1KeyStyle" />
                 <Key
                     latin:keyStyle="num2KeyStyle" />
                 <Key
@@ -43,8 +40,7 @@
             </Row>
             <Row>
                 <Key
-                    latin:keyStyle="num4KeyStyle"
-                    latin:keyEdgeFlags="left" />
+                    latin:keyStyle="num4KeyStyle" />
                 <Key
                     latin:keyStyle="num5KeyStyle" />
                 <Key
@@ -52,39 +48,31 @@
             </Row>
             <Row>
                 <Key
-                    latin:keyStyle="num7KeyStyle"
-                    latin:keyEdgeFlags="left" />
+                    latin:keyStyle="num7KeyStyle" />
                 <Key
                     latin:keyStyle="num8KeyStyle" />
                 <Key
                     latin:keyStyle="num9KeyStyle" />
                 <Key
                     latin:keyStyle="deleteKeyStyle"
-                    latin:keyWidth="fillRight"
-                    latin:keyEdgeFlags="right" />
+                    latin:keyWidth="fillRight" />
             </Row>
-            <Row
-                latin:rowEdgeFlags="bottom"
-            >
+            <Row>
                 <Spacer />
                 <Key
                     latin:keyStyle="num0KeyStyle" />
                 <Spacer />
                 <Key
                     latin:keyStyle="returnKeyStyle"
-                    latin:keyWidth="fillRight"
-                    latin:keyEdgeFlags="right" />
+                    latin:keyWidth="fillRight" />
             </Row>
         </case>
         <!-- latin:passwordInput="false" -->
         <default>
-            <Row
-                latin:rowEdgeFlags="top"
-            >
+            <Row>
                 <Key
                     latin:keyLabel="1"
-                    latin:keyStyle="numKeyStyle"
-                    latin:keyEdgeFlags="left" />
+                    latin:keyStyle="numKeyStyle" />
                 <Key
                     latin:keyLabel="2"
                     latin:keyStyle="numKeyStyle" />
@@ -94,14 +82,12 @@
                 <Key
                     latin:keyLabel="-"
                     latin:keyStyle="numFunctionalKeyStyle"
-                    latin:keyWidth="fillRight"
-                    latin:keyEdgeFlags="right" />
+                    latin:keyWidth="fillRight" />
             </Row>
             <Row>
                 <Key
                     latin:keyLabel="4"
-                    latin:keyStyle="numKeyStyle"
-                    latin:keyEdgeFlags="left" />
+                    latin:keyStyle="numKeyStyle" />
                 <Key
                     latin:keyLabel="5"
                     latin:keyStyle="numKeyStyle" />
@@ -111,14 +97,12 @@
                 <Key
                     latin:keyLabel=","
                     latin:keyStyle="numFunctionalKeyStyle"
-                    latin:keyWidth="fillRight"
-                    latin:keyEdgeFlags="right" />
+                    latin:keyWidth="fillRight" />
             </Row>
             <Row>
                 <Key
                     latin:keyLabel="7"
-                    latin:keyStyle="numKeyStyle"
-                    latin:keyEdgeFlags="left" />
+                    latin:keyStyle="numKeyStyle" />
                 <Key
                     latin:keyLabel="8"
                     latin:keyStyle="numKeyStyle"/>
@@ -127,15 +111,11 @@
                     latin:keyStyle="numKeyStyle" />
                 <Key
                     latin:keyStyle="deleteKeyStyle"
-                    latin:keyWidth="fillRight"
-                    latin:keyEdgeFlags="right" />
+                    latin:keyWidth="fillRight" />
             </Row>
-            <Row
-                latin:rowEdgeFlags="bottom"
-            >
+            <Row>
                 <Key
-                    latin:keyStyle="numSpaceKeyStyle"
-                    latin:keyEdgeFlags="left" />
+                    latin:keyStyle="numSpaceKeyStyle" />
                 <Key
                     latin:keyLabel="0"
                     latin:keyStyle="numKeyStyle" />
@@ -144,8 +124,7 @@
                     latin:keyStyle="numKeyStyle" />
                 <Key
                     latin:keyStyle="returnKeyStyle"
-                    latin:keyWidth="fillRight"
-                    latin:keyEdgeFlags="right" />
+                    latin:keyWidth="fillRight" />
             </Row>
         </default>
     </switch>
diff --git a/java/res/xml/kbd_numkey_styles.xml b/java/res/xml/kbd_numkey_styles.xml
index 657bfbc..a40acaf 100644
--- a/java/res/xml/kbd_numkey_styles.xml
+++ b/java/res/xml/kbd_numkey_styles.xml
@@ -102,6 +102,5 @@
     <key-style
         latin:styleName="numSpaceKeyStyle"
         latin:code="@integer/key_space"
-        latin:keyIcon="iconSpaceKey"
-        latin:keyIconPreview="iconPreviewSpaceKey" />
+        latin:keyIcon="iconSpaceKey" />
 </merge>
diff --git a/java/res/xml/kbd_phone.xml b/java/res/xml/kbd_phone.xml
index c6508fb..4588ab2 100644
--- a/java/res/xml/kbd_phone.xml
+++ b/java/res/xml/kbd_phone.xml
@@ -26,12 +26,9 @@
         latin:keyboardLayout="@xml/kbd_key_styles" />
     <include
         latin:keyboardLayout="@xml/kbd_numkey_styles" />
-    <Row
-        latin:rowEdgeFlags="top"
-    >
+    <Row>
         <Key
-            latin:keyStyle="num1KeyStyle"
-            latin:keyEdgeFlags="left" />
+            latin:keyStyle="num1KeyStyle" />
         <Key
             latin:keyStyle="num2KeyStyle" />
         <Key
@@ -39,13 +36,11 @@
         <Key
             latin:keyLabel="-"
             latin:keyStyle="numFunctionalKeyStyle"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <Row>
         <Key
-            latin:keyStyle="num4KeyStyle"
-            latin:keyEdgeFlags="left" />
+            latin:keyStyle="num4KeyStyle" />
         <Key
             latin:keyStyle="num5KeyStyle" />
         <Key
@@ -53,35 +48,28 @@
         <Key
             latin:keyLabel="."
             latin:keyStyle="numFunctionalKeyStyle"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <Row>
         <Key
-            latin:keyStyle="num7KeyStyle"
-            latin:keyEdgeFlags="left" />
+            latin:keyStyle="num7KeyStyle" />
         <Key
             latin:keyStyle="num8KeyStyle" />
         <Key
             latin:keyStyle="num9KeyStyle" />
         <Key
             latin:keyStyle="deleteKeyStyle"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
-    <Row
-        latin:rowEdgeFlags="bottom"
-    >
+    <Row>
         <Key
-            latin:keyStyle="numSwitchToAltKeyStyle"
-            latin:keyEdgeFlags="left" />
+            latin:keyStyle="numSwitchToAltKeyStyle" />
         <Key
             latin:keyStyle="num0KeyStyle" />
         <Key
             latin:keyStyle="numSpaceKeyStyle" />
         <Key
             latin:keyStyle="returnKeyStyle"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
 </Keyboard>
diff --git a/java/res/xml/kbd_phone_symbols.xml b/java/res/xml/kbd_phone_symbols.xml
index 5d99122..89a9bd0 100644
--- a/java/res/xml/kbd_phone_symbols.xml
+++ b/java/res/xml/kbd_phone_symbols.xml
@@ -26,13 +26,10 @@
         latin:keyboardLayout="@xml/kbd_key_styles" />
     <include
         latin:keyboardLayout="@xml/kbd_numkey_styles" />
-    <Row
-        latin:rowEdgeFlags="top"
-    >
+    <Row>
         <Key
             latin:keyLabel="("
-            latin:keyStyle="numKeyStyle"
-            latin:keyEdgeFlags="left" />
+            latin:keyStyle="numKeyStyle" />
         <Key
             latin:keyLabel="/"
             latin:keyStyle="numKeyStyle" />
@@ -42,13 +39,11 @@
         <Key
             latin:keyLabel="-"
             latin:keyStyle="numFunctionalKeyStyle"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <Row>
         <Key
-            latin:keyLabel="N"
-            latin:keyEdgeFlags="left" />
+            latin:keyLabel="N" />
         <!-- Pause is a comma. Check PhoneNumberUtils.java to see if this 
             has changed. -->
         <Key
@@ -61,13 +56,11 @@
         <Key
             latin:keyLabel="."
             latin:keyStyle="numFunctionalKeyStyle"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <Row>
         <Key
-            latin:keyStyle="numStarKeyStyle"
-            latin:keyEdgeFlags="left" />
+            latin:keyStyle="numStarKeyStyle" />
         <!-- Wait is a semicolon. -->
         <Key
             latin:code="59"
@@ -78,15 +71,11 @@
             latin:keyStyle="numKeyStyle" />
         <Key
             latin:keyStyle="deleteKeyStyle"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
-    <Row
-        latin:rowEdgeFlags="bottom"
-    >
+    <Row>
         <Key
-            latin:keyStyle="numSwitchToNumericKeyStyle"
-            latin:keyEdgeFlags="left" />
+            latin:keyStyle="numSwitchToNumericKeyStyle" />
         <Key
             latin:keyLabel="+"
             latin:keyStyle="numKeyStyle" />
@@ -94,7 +83,6 @@
             latin:keyStyle="numSpaceKeyStyle" />
         <Key
             latin:keyStyle="returnKeyStyle"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
 </Keyboard>
diff --git a/java/res/xml/kbd_qwerty_row1.xml b/java/res/xml/kbd_qwerty_row1.xml
index cfd2efd..daa1382 100644
--- a/java/res/xml/kbd_qwerty_row1.xml
+++ b/java/res/xml/kbd_qwerty_row1.xml
@@ -23,13 +23,11 @@
 >
     <Row
         latin:keyWidth="10%p"
-        latin:rowEdgeFlags="top"
     >
         <Key
             latin:keyLabel="q"
             latin:keyHintLabel="1"
-            latin:popupCharacters="@string/alternates_for_q"
-            latin:keyEdgeFlags="left" />
+            latin:popupCharacters="@string/alternates_for_q" />
         <Key
             latin:keyLabel="w"
             latin:keyHintLabel="2"
@@ -66,7 +64,6 @@
             latin:keyLabel="p"
             latin:keyHintLabel="0"
             latin:popupCharacters="@string/alternates_for_p"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
 </merge>
diff --git a/java/res/xml/kbd_qwerty_row2.xml b/java/res/xml/kbd_qwerty_row2.xml
index 57bbad7..6e4872e 100644
--- a/java/res/xml/kbd_qwerty_row2.xml
+++ b/java/res/xml/kbd_qwerty_row2.xml
@@ -27,8 +27,7 @@
         <Key
             latin:keyLabel="a"
             latin:popupCharacters="@string/alternates_for_a"
-            latin:keyXPos="5%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyXPos="5%p" />
         <Key
             latin:keyLabel="s"
             latin:popupCharacters="@string/alternates_for_s" />
@@ -49,8 +48,7 @@
             latin:popupCharacters="@string/alternates_for_k" />
         <Key
             latin:keyLabel="l"
-            latin:popupCharacters="@string/alternates_for_l"
-            latin:keyEdgeFlags="right" />
+            latin:popupCharacters="@string/alternates_for_l" />
         <!-- Here is 5%p space -->
     </Row>
 </merge>
diff --git a/java/res/xml/kbd_qwerty_row3.xml b/java/res/xml/kbd_qwerty_row3.xml
index 98f0404..6a20355 100644
--- a/java/res/xml/kbd_qwerty_row3.xml
+++ b/java/res/xml/kbd_qwerty_row3.xml
@@ -27,8 +27,7 @@
         <Key
             latin:keyStyle="shiftKeyStyle"
             latin:keyWidth="15%p"
-            latin:visualInsetsRight="1%p"
-            latin:keyEdgeFlags="left" />
+            latin:visualInsetsRight="1%p" />
         <Key
             latin:keyLabel="z"
             latin:popupCharacters="@string/alternates_for_z" />
@@ -50,7 +49,6 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyWidth="fillBoth"
-            latin:visualInsetsLeft="1%p"
-            latin:keyEdgeFlags="right" />
+            latin:visualInsetsLeft="1%p" />
     </Row>
 </merge>
diff --git a/java/res/xml/kbd_qwerty_row4.xml b/java/res/xml/kbd_qwerty_row4.xml
index 298f0f6..771333c 100644
--- a/java/res/xml/kbd_qwerty_row4.xml
+++ b/java/res/xml/kbd_qwerty_row4.xml
@@ -23,7 +23,6 @@
 >
     <Row
         latin:keyWidth="10%p"
-        latin:rowEdgeFlags="bottom"
     >
         <switch>
             <case
@@ -31,8 +30,7 @@
             >
                 <Key
                     latin:keyStyle="toSymbolKeyStyle"
-                    latin:keyWidth="13.75%p"
-                    latin:keyEdgeFlags="left" />
+                    latin:keyWidth="13.75%p" />
                 <Key
                     latin:keyStyle="settingsKeyStyle"
                     latin:keyWidth="9.2%p" />
@@ -49,8 +47,7 @@
             <default>
                 <Key
                     latin:keyStyle="toSymbolKeyStyle"
-                    latin:keyWidth="15%p"
-                    latin:keyEdgeFlags="left" />
+                    latin:keyWidth="15%p" />
                 <include
                     latin:keyboardLayout="@xml/kbd_qwerty_f1" />
                 <Key
@@ -66,14 +63,12 @@
             >
                 <Key
                     latin:keyStyle="smileyKeyStyle"
-                    latin:keyWidth="fillRight"
-                    latin:keyEdgeFlags="right" />
+                    latin:keyWidth="fillRight" />
             </case>
             <default>
                 <Key
                     latin:keyStyle="returnKeyStyle"
-                    latin:keyWidth="fillRight"
-                    latin:keyEdgeFlags="right" />
+                    latin:keyWidth="fillRight" />
             </default>
         </switch>
     </Row>
diff --git a/java/res/xml/kbd_rows_arabic.xml b/java/res/xml/kbd_rows_arabic.xml
index 07e6274..e9de4ad 100644
--- a/java/res/xml/kbd_rows_arabic.xml
+++ b/java/res/xml/kbd_rows_arabic.xml
@@ -29,8 +29,7 @@
         <Key
             latin:keyLabel="ض"
             latin:keyHintLabel="1"
-            latin:popupCharacters="1,١"
-            latin:keyEdgeFlags="left" />
+            latin:popupCharacters="1,١" />
         <Key
             latin:keyLabel="ص"
             latin:keyHintLabel="2"
@@ -71,15 +70,13 @@
             latin:keyLabel="ج"
             latin:keyHintLabel="0"
             latin:popupCharacters="0,٠,\u0686"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <Row
         latin:keyWidth="10%p"
     >
         <Key
-            latin:keyLabel="ش"
-            latin:keyEdgeFlags="left" />
+            latin:keyLabel="ش" />
         <Key
             latin:keyLabel="س" />
         <!-- \u0626: ARABIC LETTER YEH WITH HAMZA ABOVE
@@ -119,16 +116,14 @@
         <Key
             latin:keyLabel="ك"
             latin:popupCharacters="گ"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <Row
         latin:keyWidth="10%p"
     >
         <Key
             latin:keyLabel="ظ"
-            latin:keyXPos="5.0%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyXPos="5.0%p" />
         <Key
             latin:keyLabel="ط" />
         <Key
@@ -148,8 +143,7 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyWidth="fillRight"
-            latin:visualInsetsLeft="1%p"
-            latin:keyEdgeFlags="right" />
+            latin:visualInsetsLeft="1%p" />
     </Row>
     <include
         latin:keyboardLayout="@xml/kbd_qwerty_row4" />
diff --git a/java/res/xml/kbd_rows_azerty.xml b/java/res/xml/kbd_rows_azerty.xml
index 96efb66..dbf25eb 100644
--- a/java/res/xml/kbd_rows_azerty.xml
+++ b/java/res/xml/kbd_rows_azerty.xml
@@ -25,13 +25,11 @@
         latin:keyboardLayout="@xml/kbd_key_styles" />
     <Row
         latin:keyWidth="10%p"
-        latin:rowEdgeFlags="top"
     >
         <Key
             latin:keyLabel="a"
             latin:keyHintLabel="1"
-            latin:popupCharacters="@string/alternates_for_a"
-            latin:keyEdgeFlags="left" />
+            latin:popupCharacters="@string/alternates_for_a" />
         <Key
             latin:keyLabel="z"
             latin:keyHintLabel="2"
@@ -68,16 +66,14 @@
             latin:keyLabel="p"
             latin:keyHintLabel="0"
             latin:popupCharacters="@string/alternates_for_p"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <Row
         latin:keyWidth="10%p"
     >
         <Key
             latin:keyLabel="q"
-            latin:popupCharacters="@string/alternates_for_q"
-            latin:keyEdgeFlags="left" />
+            latin:popupCharacters="@string/alternates_for_q" />
         <Key
             latin:keyLabel="s"
             latin:popupCharacters="@string/alternates_for_s" />
@@ -101,8 +97,7 @@
             latin:popupCharacters="@string/alternates_for_l" />
         <Key
             latin:keyLabel="m"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <Row
         latin:keyWidth="10%p"
@@ -110,8 +105,7 @@
         <Key
             latin:keyStyle="shiftKeyStyle"
             latin:keyWidth="15%p"
-            latin:visualInsetsRight="1%p"
-            latin:keyEdgeFlags="left" />
+            latin:visualInsetsRight="1%p" />
         <Key
             latin:keyLabel="w"
             latin:popupCharacters="@string/alternates_for_w" />
@@ -135,8 +129,7 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyWidth="fillRight"
-            latin:visualInsetsLeft="1%p"
-            latin:keyEdgeFlags="right" />
+            latin:visualInsetsLeft="1%p" />
     </Row>
     <include
         latin:keyboardLayout="@xml/kbd_qwerty_row4" />
diff --git a/java/res/xml/kbd_rows_hebrew.xml b/java/res/xml/kbd_rows_hebrew.xml
index af34885..1ec0768 100644
--- a/java/res/xml/kbd_rows_hebrew.xml
+++ b/java/res/xml/kbd_rows_hebrew.xml
@@ -25,12 +25,10 @@
         latin:keyboardLayout="@xml/kbd_key_styles" />
     <Row
         latin:keyWidth="10%p"
-        latin:rowEdgeFlags="top"
     >
         <Key
             latin:keyLabel="ק"
-            latin:keyXPos="5%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyXPos="5%p" />
         <Key
             latin:keyLabel="ר" />
         <Key
@@ -48,15 +46,13 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyWidth="fillRight"
-            latin:visualInsetsLeft="1%p"
-            latin:keyEdgeFlags="right" />
+            latin:visualInsetsLeft="1%p" />
     </Row>
     <Row
         latin:keyWidth="10%p"
     >
         <Key
-            latin:keyLabel="ש"
-            latin:keyEdgeFlags="left" />
+            latin:keyLabel="ש" />
         <Key
             latin:keyLabel="ד" />
         <Key
@@ -78,8 +74,7 @@
             latin:keyLabel="ך" />
         <Key
             latin:keyLabel="ף"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <Row
         latin:keyWidth="10%p"
@@ -87,8 +82,7 @@
         <Key
             latin:keyLabel="ז"
             latin:popupCharacters="ז׳"
-            latin:keyXPos="5%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyXPos="5%p" />
         <Key
             latin:keyLabel="ס" />
         <Key
@@ -107,8 +101,7 @@
             latin:popupCharacters="ת׳" />
         <Key
             latin:keyLabel="ץ"
-            latin:popupCharacters="ץ׳"
-            latin:keyEdgeFlags="right" />
+            latin:popupCharacters="ץ׳" />
         <!-- Here is 5%p space -->
     </Row>
     <include
diff --git a/java/res/xml/kbd_rows_qwertz.xml b/java/res/xml/kbd_rows_qwertz.xml
index 347ef60..f948921 100644
--- a/java/res/xml/kbd_rows_qwertz.xml
+++ b/java/res/xml/kbd_rows_qwertz.xml
@@ -25,13 +25,11 @@
         latin:keyboardLayout="@xml/kbd_key_styles" />
     <Row
         latin:keyWidth="10%p"
-        latin:rowEdgeFlags="top"
     >
         <Key
             latin:keyLabel="q"
             latin:keyHintLabel="1"
-            latin:popupCharacters="@string/alternates_for_q"
-            latin:keyEdgeFlags="left" />
+            latin:popupCharacters="@string/alternates_for_q" />
         <Key
             latin:keyLabel="w"
             latin:keyHintLabel="2"
@@ -68,8 +66,7 @@
             latin:keyLabel="p"
             latin:keyHintLabel="0"
             latin:popupCharacters="@string/alternates_for_p"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <include
         latin:keyboardLayout="@xml/kbd_qwerty_row2" />
@@ -79,8 +76,7 @@
         <Key
             latin:keyStyle="shiftKeyStyle"
             latin:keyWidth="15%p"
-            latin:visualInsetsRight="1%p"
-            latin:keyEdgeFlags="left" />
+            latin:visualInsetsRight="1%p" />
         <Key
             latin:keyLabel="y"
             latin:popupCharacters="@string/alternates_for_y" />
@@ -102,8 +98,7 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyWidth="fillRight"
-            latin:visualInsetsLeft="1%p"
-            latin:keyEdgeFlags="right" />
+            latin:visualInsetsLeft="1%p" />
     </Row>
    <include
         latin:keyboardLayout="@xml/kbd_qwerty_row4" />
diff --git a/java/res/xml/kbd_rows_russian.xml b/java/res/xml/kbd_rows_russian.xml
index 2c10c31..216d749 100644
--- a/java/res/xml/kbd_rows_russian.xml
+++ b/java/res/xml/kbd_rows_russian.xml
@@ -25,14 +25,12 @@
         latin:keyboardLayout="@xml/kbd_key_styles" />
     <Row
         latin:keyWidth="9.091%p"
-        latin:rowEdgeFlags="top"
     >
         <Key
             latin:keyLabel="й"
             latin:keyHintLabel="1"
             latin:popupCharacters="1"
-            latin:keyWidth="8.75%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="8.75%p" />
         <Key
             latin:keyLabel="ц"
             latin:keyHintLabel="2"
@@ -71,16 +69,14 @@
             latin:popupCharacters="0" />
         <Key
             latin:keyLabel="х"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <Row
             latin:keyWidth="9.091%p"
     >
         <Key
             latin:keyLabel="ф"
-            latin:keyWidth="8.75%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="8.75%p" />
         <Key
             latin:keyLabel="ы" />
         <Key
@@ -101,16 +97,14 @@
             latin:keyLabel="ж" />
         <Key
             latin:keyLabel="э"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <Row
         latin:keyWidth="8.5%p"
     >
         <Key
             latin:keyStyle="shiftKeyStyle"
-            latin:keyWidth="11.75%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="11.75%p" />
         <Key
             latin:keyLabel="я" />
         <Key
@@ -132,8 +126,7 @@
             latin:keyLabel="ю" />
         <Key
             latin:keyStyle="deleteKeyStyle"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <include
         latin:keyboardLayout="@xml/kbd_qwerty_row4" />
diff --git a/java/res/xml/kbd_rows_scandinavian.xml b/java/res/xml/kbd_rows_scandinavian.xml
index 3f25601..7e8902e 100644
--- a/java/res/xml/kbd_rows_scandinavian.xml
+++ b/java/res/xml/kbd_rows_scandinavian.xml
@@ -25,14 +25,12 @@
         latin:keyboardLayout="@xml/kbd_key_styles" />
     <Row
         latin:keyWidth="9.09%p"
-        latin:rowEdgeFlags="top"
     >
         <Key
             latin:keyLabel="q"
             latin:keyHintLabel="1"
             latin:popupCharacters="@string/alternates_for_q"
-            latin:keyWidth="8.75%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="8.75%p" />
         <Key
             latin:keyLabel="w"
             latin:keyHintLabel="2"
@@ -71,8 +69,7 @@
             latin:popupCharacters="@string/alternates_for_p" />
         <Key
             latin:keyLabel="å"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <Row
         latin:keyWidth="9.09%p"
@@ -80,8 +77,7 @@
         <Key
             latin:keyLabel="a"
             latin:popupCharacters="@string/alternates_for_a"
-            latin:keyWidth="8.75%p"
-            latin:keyEdgeFlags="left" />
+            latin:keyWidth="8.75%p" />
         <Key
             latin:keyLabel="s"
             latin:popupCharacters="@string/alternates_for_s" />
@@ -109,8 +105,7 @@
         <Key
             latin:keyLabel="@string/keylabel_for_scandinavia_row2_11"
             latin:popupCharacters="@string/alternates_for_scandinavia_row2_11"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <include
         latin:keyboardLayout="@xml/kbd_qwerty_row3" />
diff --git a/java/res/xml/kbd_rows_serbian.xml b/java/res/xml/kbd_rows_serbian.xml
index 2bed276..73c807f 100644
--- a/java/res/xml/kbd_rows_serbian.xml
+++ b/java/res/xml/kbd_rows_serbian.xml
@@ -25,13 +25,11 @@
         latin:keyboardLayout="@xml/kbd_key_styles" />
     <Row
         latin:keyWidth="9.09%p"
-        latin:rowEdgeFlags="top"
     >
         <Key
             latin:keyLabel="љ"
             latin:keyHintLabel="1"
-            latin:popupCharacters="1"
-            latin:keyEdgeFlags="left" />
+            latin:popupCharacters="1" />
         <Key
             latin:keyLabel="њ"
             latin:keyHintLabel="2"
@@ -70,15 +68,13 @@
             latin:popupCharacters="0" />
         <Key
             latin:keyLabel="ш"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <Row
         latin:keyWidth="9.09%p"
     >
         <Key
-            latin:keyLabel="а"
-            latin:keyEdgeFlags="left" />
+            latin:keyLabel="а" />
         <Key
             latin:keyLabel="с" />
         <Key
@@ -99,15 +95,13 @@
             latin:keyLabel="ч" />
         <Key
             latin:keyLabel="ћ"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <Row
         latin:keyWidth="8.90%p"
     >
         <Key
-            latin:keyStyle="shiftKeyStyle"
-            latin:keyEdgeFlags="left" />
+            latin:keyStyle="shiftKeyStyle" />
         <Key
             latin:keyLabel="ѕ" />
         <Key
@@ -128,8 +122,7 @@
             latin:keyLabel="ж" />
         <Key
             latin:keyStyle="deleteKeyStyle"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <include
         latin:keyboardLayout="@xml/kbd_qwerty_row4" />
diff --git a/java/res/xml/kbd_rows_spanish.xml b/java/res/xml/kbd_rows_spanish.xml
index c5ead10..6d00718 100644
--- a/java/res/xml/kbd_rows_spanish.xml
+++ b/java/res/xml/kbd_rows_spanish.xml
@@ -30,8 +30,7 @@
     >
         <Key
             latin:keyLabel="a"
-            latin:popupCharacters="@string/alternates_for_a"
-            latin:keyEdgeFlags="left" />
+            latin:popupCharacters="@string/alternates_for_a" />
         <Key
             latin:keyLabel="s"
             latin:popupCharacters="@string/alternates_for_s" />
@@ -54,8 +53,7 @@
             latin:keyLabel="l"
             latin:popupCharacters="@string/alternates_for_l" />
         <Key
-            latin:keyLabel="ñ"
-            latin:keyEdgeFlags="right" />
+            latin:keyLabel="ñ" />
     </Row>
     <include
         latin:keyboardLayout="@xml/kbd_qwerty_row3" />
diff --git a/java/res/xml/kbd_symbols.xml b/java/res/xml/kbd_symbols.xml
index 7c0cee6..7bb8d02 100644
--- a/java/res/xml/kbd_symbols.xml
+++ b/java/res/xml/kbd_symbols.xml
@@ -26,13 +26,10 @@
         latin:keyboardLayout="@xml/kbd_key_styles" />
     <include
         latin:keyboardLayout="@xml/kbd_currency_key_styles" />
-    <Row
-        latin:rowEdgeFlags="top"
-    >
+    <Row>
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_1"
-            latin:popupCharacters="@string/alternates_for_symbols_1"
-            latin:keyEdgeFlags="left" />
+            latin:popupCharacters="@string/alternates_for_symbols_1" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_2"
             latin:popupCharacters="@string/alternates_for_symbols_2" />
@@ -60,13 +57,11 @@
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_0"
             latin:popupCharacters="@string/alternates_for_symbols_0"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <Row>
         <Key
-            latin:keyLabel="\@"
-            latin:keyEdgeFlags="left" />
+            latin:keyLabel="\@" />
         <Key
             latin:keyLabel="\#" />
         <Key
@@ -91,15 +86,13 @@
         <Key
             latin:keyLabel=")"
             latin:popupCharacters="],},&gt;"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <Row>
         <Key
             latin:keyStyle="altKeyStyle"
             latin:keyWidth="15%p"
-            latin:visualInsetsRight="1%p"
-            latin:keyEdgeFlags="left" />
+            latin:visualInsetsRight="1%p" />
         <Key
             latin:keyLabel="!"
             latin:popupCharacters="¡" />
@@ -125,8 +118,7 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyWidth="fillRight"
-            latin:visualInsetsLeft="1%p"
-            latin:keyEdgeFlags="right" />
+            latin:visualInsetsLeft="1%p" />
     </Row>
     <include
         latin:keyboardLayout="@xml/kbd_symbols_row4" />
diff --git a/java/res/xml/kbd_symbols_row4.xml b/java/res/xml/kbd_symbols_row4.xml
index 24313ac..3fda888 100644
--- a/java/res/xml/kbd_symbols_row4.xml
+++ b/java/res/xml/kbd_symbols_row4.xml
@@ -23,7 +23,6 @@
 >
     <Row
         latin:keyWidth="10%p"
-        latin:rowEdgeFlags="bottom"
     >
         <switch>
             <case
@@ -31,8 +30,7 @@
             >
                 <Key
                     latin:keyStyle="toAlphaKeyStyle"
-                    latin:keyWidth="13.75%p"
-                    latin:keyEdgeFlags="left" />
+                    latin:keyWidth="13.75%p" />
                 <Key
                     latin:keyStyle="settingsKeyStyle"
                     latin:keyWidth="9.2%p" />
@@ -49,8 +47,7 @@
             <default>
                 <Key
                     latin:keyStyle="toAlphaKeyStyle"
-                    latin:keyWidth="15%p"
-                    latin:keyEdgeFlags="left" />
+                    latin:keyWidth="15%p" />
                 <include
                     latin:keyboardLayout="@xml/kbd_symbols_f1" />
                 <Key
@@ -66,14 +63,12 @@
             >
                 <Key
                     latin:keyStyle="smileyKeyStyle"
-                    latin:keyWidth="fillRight"
-                    latin:keyEdgeFlags="right" />
+                    latin:keyWidth="fillRight" />
             </case>
             <default>
                 <Key
                     latin:keyStyle="returnKeyStyle"
-                    latin:keyWidth="fillRight"
-                    latin:keyEdgeFlags="right" />
+                    latin:keyWidth="fillRight" />
             </default>
         </switch>
     </Row>
diff --git a/java/res/xml/kbd_symbols_shift.xml b/java/res/xml/kbd_symbols_shift.xml
index f22d45a..f4ccd6c 100644
--- a/java/res/xml/kbd_symbols_shift.xml
+++ b/java/res/xml/kbd_symbols_shift.xml
@@ -24,12 +24,9 @@
 >
     <include
         latin:keyboardLayout="@xml/kbd_key_styles" />
-    <Row
-        latin:rowEdgeFlags="top"
-    >
+    <Row>
         <Key
-            latin:keyLabel="~"
-            latin:keyEdgeFlags="left" />
+            latin:keyLabel="~" />
         <Key
             latin:keyLabel="`" />
         <Key
@@ -55,13 +52,11 @@
             latin:keyLabel="{" />
         <Key
             latin:keyLabel="}"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <Row>
         <Key
-            latin:keyStyle="nonSpecialBackgroundTabKeyStyle"
-            latin:keyEdgeFlags="left" />
+            latin:keyStyle="nonSpecialBackgroundTabKeyStyle" />
         <Key
             latin:keyStyle="nonPasswordSymbolKeyStyle"
             latin:keyLabel="£" />
@@ -87,15 +82,13 @@
             latin:keyLabel="[" />
         <Key
             latin:keyLabel="]"
-            latin:keyWidth="fillRight"
-            latin:keyEdgeFlags="right" />
+            latin:keyWidth="fillRight" />
     </Row>
     <Row>
         <Key
             latin:keyStyle="shiftKeyStyle"
             latin:keyWidth="15%p"
-            latin:visualInsetsRight="1%p"
-            latin:keyEdgeFlags="left" />
+            latin:visualInsetsRight="1%p" />
         <Key
             latin:keyStyle="nonPasswordSymbolKeyStyle"
             latin:keyLabel="™" />
@@ -120,8 +113,7 @@
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyWidth="fillRight"
-            latin:visualInsetsLeft="1%p"
-            latin:keyEdgeFlags="right" />
+            latin:visualInsetsLeft="1%p" />
     </Row>
     <include latin:keyboardLayout="@xml/kbd_symbols_shift_row4" />
 </Keyboard>
diff --git a/java/res/xml/kbd_symbols_shift_row4.xml b/java/res/xml/kbd_symbols_shift_row4.xml
index 90a96e4..35d444a 100644
--- a/java/res/xml/kbd_symbols_shift_row4.xml
+++ b/java/res/xml/kbd_symbols_shift_row4.xml
@@ -23,7 +23,6 @@
 >
     <Row
         latin:keyWidth="10%p"
-        latin:rowEdgeFlags="bottom"
     >
         <switch>
             <case
@@ -31,8 +30,7 @@
             >
                 <Key
                     latin:keyStyle="toAlphaKeyStyle"
-                    latin:keyWidth="13.75%p"
-                    latin:keyEdgeFlags="left" />
+                    latin:keyWidth="13.75%p" />
                 <Key
                     latin:keyStyle="settingsKeyStyle"
                     latin:keyWidth="9.2%p" />
@@ -53,8 +51,7 @@
             <default>
                 <Key
                     latin:keyStyle="toAlphaKeyStyle"
-                    latin:keyWidth="15%p"
-                    latin:keyEdgeFlags="left" />
+                    latin:keyWidth="15%p" />
                 <Key
                     latin:keyLabel="„"
                     latin:popupCharacters="“,”,„,‟,«,»,‘,’,‚,‛"
@@ -73,14 +70,12 @@
             >
                 <Key
                     latin:keyStyle="smileyKeyStyle"
-                    latin:keyWidth="fillRight"
-                    latin:keyEdgeFlags="right" />
+                    latin:keyWidth="fillRight" />
             </case>
             <default>
                 <Key
                     latin:keyStyle="returnKeyStyle"
-                    latin:keyWidth="fillRight"
-                    latin:keyEdgeFlags="right" />
+                    latin:keyWidth="fillRight" />
             </default>
         </switch>
     </Row>
diff --git a/java/res/xml/prefs_for_debug.xml b/java/res/xml/prefs_for_debug.xml
index 477461d..2dad171 100644
--- a/java/res/xml/prefs_for_debug.xml
+++ b/java/res/xml/prefs_for_debug.xml
@@ -36,13 +36,6 @@
             />
 
     <CheckBoxPreference
-            android:key="use_spacebar_language_switch"
-            android:title="@string/prefs_use_spacebar_language_switch"
-            android:persistent="true"
-            android:defaultValue="false"
-            />
-
-    <CheckBoxPreference
             android:key="debug_mode"
             android:title="@string/prefs_debug_mode"
             android:persistent="true"
diff --git a/java/src/com/android/inputmethod/compat/InputMethodInfoCompatWrapper.java b/java/src/com/android/inputmethod/compat/InputMethodInfoCompatWrapper.java
index 8e22bbc..8315598 100644
--- a/java/src/com/android/inputmethod/compat/InputMethodInfoCompatWrapper.java
+++ b/java/src/com/android/inputmethod/compat/InputMethodInfoCompatWrapper.java
@@ -16,6 +16,7 @@
 
 package com.android.inputmethod.compat;
 
+import android.content.pm.PackageManager;
 import android.content.pm.ServiceInfo;
 import android.view.inputmethod.InputMethodInfo;
 
@@ -56,4 +57,21 @@
         return new InputMethodSubtypeCompatWrapper(CompatUtils.invoke(mImi, null,
                 METHOD_getSubtypeAt, index));
     }
+
+    public CharSequence loadLabel(PackageManager pm) {
+        return mImi.loadLabel(pm);
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (o instanceof InputMethodInfoCompatWrapper) {
+            return mImi.equals(((InputMethodInfoCompatWrapper)o).mImi);
+        }
+        return false;
+    }
+
+    @Override
+    public int hashCode() {
+        return mImi.hashCode();
+    }
 }
diff --git a/java/src/com/android/inputmethod/compat/InputMethodManagerCompatWrapper.java b/java/src/com/android/inputmethod/compat/InputMethodManagerCompatWrapper.java
index 1cc13f2..51dc4cd 100644
--- a/java/src/com/android/inputmethod/compat/InputMethodManagerCompatWrapper.java
+++ b/java/src/com/android/inputmethod/compat/InputMethodManagerCompatWrapper.java
@@ -16,21 +16,28 @@
 
 package com.android.inputmethod.compat;
 
-import com.android.inputmethod.deprecated.LanguageSwitcherProxy;
-import com.android.inputmethod.latin.LatinIME;
-import com.android.inputmethod.latin.SubtypeSwitcher;
-import com.android.inputmethod.latin.Utils;
-
+import android.app.AlertDialog;
 import android.content.Context;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
 import android.os.IBinder;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.inputmethod.InputMethodInfo;
 import android.view.inputmethod.InputMethodManager;
 
+import com.android.inputmethod.deprecated.LanguageSwitcherProxy;
+import com.android.inputmethod.latin.R;
+import com.android.inputmethod.latin.SubtypeSwitcher;
+import com.android.inputmethod.latin.Utils;
+
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
@@ -72,27 +79,27 @@
     private static final String VOICE_MODE = "voice";
     private static final String KEYBOARD_MODE = "keyboard";
 
+    private InputMethodServiceCompatWrapper mService;
     private InputMethodManager mImm;
+    private PackageManager mPackageManager;
+    private ApplicationInfo mApplicationInfo;
     private LanguageSwitcherProxy mLanguageSwitcherProxy;
     private String mLatinImePackageName;
 
-    private InputMethodManagerCompatWrapper() {
-    }
-
-    public static InputMethodManagerCompatWrapper getInstance(Context context) {
-        if (sInstance.mImm == null) {
-            sInstance.init(context);
-        }
+    public static InputMethodManagerCompatWrapper getInstance() {
+        if (sInstance.mImm == null)
+            Log.w(TAG, "getInstance() is called before initialization");
         return sInstance;
     }
 
-    private synchronized void init(Context context) {
-        mImm = (InputMethodManager) context.getSystemService(
+    public static void init(InputMethodServiceCompatWrapper service) {
+        sInstance.mService = service;
+        sInstance.mImm = (InputMethodManager) service.getSystemService(
                 Context.INPUT_METHOD_SERVICE);
-        if (context instanceof LatinIME) {
-            mLatinImePackageName = context.getPackageName();
-        }
-        mLanguageSwitcherProxy = LanguageSwitcherProxy.getInstance();
+        sInstance.mLatinImePackageName = service.getPackageName();
+        sInstance.mPackageManager = service.getPackageManager();
+        sInstance.mApplicationInfo = service.getApplicationInfo();
+        sInstance.mLanguageSwitcherProxy = LanguageSwitcherProxy.getInstance();
     }
 
     public InputMethodSubtypeCompatWrapper getCurrentInputMethodSubtype() {
@@ -196,11 +203,15 @@
         return shortcutMap;
     }
 
+    // We don't call this method when we switch between subtypes within this IME.
     public void setInputMethodAndSubtype(
             IBinder token, String id, InputMethodSubtypeCompatWrapper subtype) {
+        // TODO: Support subtype change on non-subtype-supported platform.
         if (subtype != null && subtype.hasOriginalObject()) {
             CompatUtils.invoke(mImm, null, METHOD_setInputMethodAndSubtype,
                     token, id, subtype.getOriginalObject());
+        } else {
+            mImm.setInputMethod(token, id);
         }
     }
 
@@ -222,6 +233,87 @@
 
     public void showInputMethodPicker() {
         if (mImm == null) return;
-        mImm.showInputMethodPicker();
+        if (SUBTYPE_SUPPORTED) {
+            mImm.showInputMethodPicker();
+            return;
+        }
+
+        // The code below are based on {@link InputMethodManager#showInputMethodMenuInternal}.
+
+        final InputMethodInfoCompatWrapper myImi = Utils.getInputMethodInfo(
+                this, mLatinImePackageName);
+        final List<InputMethodSubtypeCompatWrapper> myImsList = getEnabledInputMethodSubtypeList(
+                myImi, true);
+        final InputMethodSubtypeCompatWrapper currentIms = getCurrentInputMethodSubtype();
+        final List<InputMethodInfoCompatWrapper> imiList = getEnabledInputMethodList();
+        imiList.remove(myImi);
+        Collections.sort(imiList, new Comparator<InputMethodInfoCompatWrapper>() {
+            @Override
+            public int compare(InputMethodInfoCompatWrapper imi1,
+                    InputMethodInfoCompatWrapper imi2) {
+                final CharSequence imiId1 = imi1.loadLabel(mPackageManager) + "/" + imi1.getId();
+                final CharSequence imiId2 = imi2.loadLabel(mPackageManager) + "/" + imi2.getId();
+                return imiId1.toString().compareTo(imiId2.toString());
+            }
+        });
+
+        final int myImsCount = myImsList.size();
+        final int imiCount = imiList.size();
+        final CharSequence[] items = new CharSequence[myImsCount + imiCount];
+
+        int checkedItem = 0;
+        int index = 0;
+        final CharSequence myImiLabel = myImi.loadLabel(mPackageManager);
+        for (int i = 0; i < myImsCount; i++) {
+            InputMethodSubtypeCompatWrapper ims = myImsList.get(i);
+            if (currentIms.equals(ims))
+                checkedItem = index;
+            final CharSequence title = TextUtils.concat(
+                    ims.getDisplayName(mService, mLatinImePackageName, mApplicationInfo),
+                    " (" + myImiLabel, ")");
+            items[index] = title;
+            index++;
+        }
+
+        for (int i = 0; i < imiCount; i++) {
+            final InputMethodInfoCompatWrapper imi = imiList.get(i);
+            final CharSequence title = imi.loadLabel(mPackageManager);
+            items[index] = title;
+            index++;
+        }
+
+        final OnClickListener buttonListener = new OnClickListener() {
+            @Override
+            public void onClick(DialogInterface di, int whichButton) {
+                final Intent intent = new Intent("android.settings.INPUT_METHOD_SETTINGS");
+                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
+                        | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
+                        | Intent.FLAG_ACTIVITY_CLEAR_TOP);
+                mService.startActivity(intent);
+            }
+        };
+        final InputMethodServiceCompatWrapper service = mService;
+        final IBinder token = service.getWindow().getWindow().getAttributes().token;
+        final OnClickListener selectionListener = new OnClickListener() {
+            @Override
+            public void onClick(DialogInterface di, int which) {
+                di.dismiss();
+                if (which < myImsCount) {
+                    final int imsIndex = which;
+                    final InputMethodSubtypeCompatWrapper ims = myImsList.get(imsIndex);
+                    service.notifyOnCurrentInputMethodSubtypeChanged(ims);
+                } else {
+                    final int imiIndex = which - myImsCount;
+                    final InputMethodInfoCompatWrapper imi = imiList.get(imiIndex);
+                    setInputMethodAndSubtype(token, imi.getId(), null);
+                }
+            }
+        };
+
+        final AlertDialog.Builder builder = new AlertDialog.Builder(mService)
+                .setTitle(mService.getString(R.string.selectInputMethod))
+                .setNeutralButton(R.string.configure_input_method, buttonListener)
+                .setSingleChoiceItems(items, checkedItem, selectionListener);
+        mService.showOptionDialogInternal(builder.create());
     }
 }
diff --git a/java/src/com/android/inputmethod/compat/InputMethodServiceCompatWrapper.java b/java/src/com/android/inputmethod/compat/InputMethodServiceCompatWrapper.java
index 7d8c745..7aab66d 100644
--- a/java/src/com/android/inputmethod/compat/InputMethodServiceCompatWrapper.java
+++ b/java/src/com/android/inputmethod/compat/InputMethodServiceCompatWrapper.java
@@ -16,10 +16,15 @@
 
 package com.android.inputmethod.compat;
 
+import android.app.AlertDialog;
 import android.inputmethodservice.InputMethodService;
+import android.os.IBinder;
+import android.view.Window;
+import android.view.WindowManager;
 import android.view.inputmethod.InputMethodSubtype;
 
 import com.android.inputmethod.deprecated.LanguageSwitcherProxy;
+import com.android.inputmethod.keyboard.KeyboardSwitcher;
 import com.android.inputmethod.latin.SubtypeSwitcher;
 
 public class InputMethodServiceCompatWrapper extends InputMethodService {
@@ -32,10 +37,33 @@
 
     private InputMethodManagerCompatWrapper mImm;
 
+    // For compatibility of {@link InputMethodManager#showInputMethodPicker}.
+    // TODO: Move this variable back to LatinIME when this compatibility wrapper is removed.
+    protected AlertDialog mOptionsDialog;
+
+    public void showOptionDialogInternal(AlertDialog dialog) {
+        final IBinder windowToken = KeyboardSwitcher.getInstance().getKeyboardView()
+                .getWindowToken();
+        if (windowToken == null) return;
+
+        dialog.setCancelable(true);
+        dialog.setCanceledOnTouchOutside(true);
+
+        final Window window = dialog.getWindow();
+        final WindowManager.LayoutParams lp = window.getAttributes();
+        lp.token = windowToken;
+        lp.type = WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG;
+        window.setAttributes(lp);
+        window.addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
+
+        mOptionsDialog = dialog;
+        dialog.show();
+    }
+
     @Override
     public void onCreate() {
         super.onCreate();
-        mImm = InputMethodManagerCompatWrapper.getInstance(this);
+        mImm = InputMethodManagerCompatWrapper.getInstance();
     }
 
     // When the API level is 10 or previous, notifyOnCurrentInputMethodSubtypeChanged should
diff --git a/java/src/com/android/inputmethod/compat/InputMethodSubtypeCompatWrapper.java b/java/src/com/android/inputmethod/compat/InputMethodSubtypeCompatWrapper.java
index 667d86c..b6b86a4 100644
--- a/java/src/com/android/inputmethod/compat/InputMethodSubtypeCompatWrapper.java
+++ b/java/src/com/android/inputmethod/compat/InputMethodSubtypeCompatWrapper.java
@@ -16,13 +16,16 @@
 
 package com.android.inputmethod.compat;
 
-import com.android.inputmethod.latin.LatinImeLogger;
-
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
 import android.text.TextUtils;
 import android.util.Log;
 
+import com.android.inputmethod.latin.LatinImeLogger;
+
 import java.lang.reflect.Method;
 import java.util.Arrays;
+import java.util.Locale;
 
 // TODO: Override this class with the concrete implementation if we need to take care of the
 // performance.
@@ -50,6 +53,9 @@
             CompatUtils.getMethod(CLASS_InputMethodSubtype, "getExtraValueOf", String.class);
     private static final Method METHOD_isAuxiliary =
             CompatUtils.getMethod(CLASS_InputMethodSubtype, "isAuxiliary");
+    private static final Method METHOD_getDisplayName =
+            CompatUtils.getMethod(CLASS_InputMethodSubtype, "getDisplayName", Context.class,
+                    String.class, ApplicationInfo.class);
 
     private final int mDummyNameResId;
     private final int mDummyIconResId;
@@ -122,6 +128,28 @@
         return (Boolean)CompatUtils.invoke(mObj, false, METHOD_isAuxiliary);
     }
 
+    public CharSequence getDisplayName(Context context, String packageName,
+            ApplicationInfo appInfo) {
+        if (mObj != null) {
+            return (CharSequence)CompatUtils.invoke(
+                    mObj, "", METHOD_getDisplayName, context, packageName, appInfo);
+        }
+
+        // The code below are based on {@link InputMethodSubtype#getDisplayName}.
+
+        final Locale locale = new Locale(getLocale());
+        final String localeStr = locale.getDisplayName();
+        if (getNameResId() == 0) {
+            return localeStr;
+        }
+        final CharSequence subtypeName = context.getText(getNameResId());
+        if (!TextUtils.isEmpty(localeStr)) {
+            return String.format(subtypeName.toString(), localeStr);
+        } else {
+            return localeStr;
+        }
+    }
+
     public boolean isDummy() {
         return !hasOriginalObject();
     }
diff --git a/java/src/com/android/inputmethod/compat/VibratorCompatWrapper.java b/java/src/com/android/inputmethod/compat/VibratorCompatWrapper.java
index 8e2a2e0..a6304d8 100644
--- a/java/src/com/android/inputmethod/compat/VibratorCompatWrapper.java
+++ b/java/src/com/android/inputmethod/compat/VibratorCompatWrapper.java
@@ -23,7 +23,7 @@
 
 public class VibratorCompatWrapper {
     private static final Method METHOD_hasVibrator = CompatUtils.getMethod(Vibrator.class,
-            "hasVibrator", int.class);
+            "hasVibrator");
 
     private static final VibratorCompatWrapper sInstance = new VibratorCompatWrapper();
     private Vibrator mVibrator;
diff --git a/java/src/com/android/inputmethod/deprecated/VoiceProxy.java b/java/src/com/android/inputmethod/deprecated/VoiceProxy.java
index 85993ea..c82c570 100644
--- a/java/src/com/android/inputmethod/deprecated/VoiceProxy.java
+++ b/java/src/com/android/inputmethod/deprecated/VoiceProxy.java
@@ -129,7 +129,7 @@
         mHandler = h;
         mMinimumVoiceRecognitionViewHeightPixel = Utils.dipToPixel(
                 Utils.getDipScale(service), RECOGNITIONVIEW_MINIMUM_HEIGHT_DIP);
-        mImm = InputMethodManagerCompatWrapper.getInstance(service);
+        mImm = InputMethodManagerCompatWrapper.getInstance();
         mSubtypeSwitcher = SubtypeSwitcher.getInstance();
         if (VOICE_INSTALLED) {
             mVoiceInput = new VoiceInput(service, this);
diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java
index 45bf68c..33ab511 100644
--- a/java/src/com/android/inputmethod/keyboard/Key.java
+++ b/java/src/com/android/inputmethod/keyboard/Key.java
@@ -95,7 +95,7 @@
      * {@link Keyboard#EDGE_LEFT}, {@link Keyboard#EDGE_RIGHT},
      * {@link Keyboard#EDGE_TOP} and {@link Keyboard#EDGE_BOTTOM}.
      */
-    public final int mEdgeFlags;
+    private int mEdgeFlags;
     /** Whether this is a functional key which has different key top than normal key */
     public final boolean mFunctional;
     /** Whether this key repeats itself when held down */
@@ -273,8 +273,7 @@
             mFunctional = style.getBoolean(keyAttr, R.styleable.Keyboard_Key_isFunctional, false);
             mSticky = style.getBoolean(keyAttr, R.styleable.Keyboard_Key_isSticky, false);
             mEnabled = style.getBoolean(keyAttr, R.styleable.Keyboard_Key_enabled, true);
-            mEdgeFlags = style.getFlag(keyAttr, R.styleable.Keyboard_Key_keyEdgeFlags, 0)
-                    | row.mRowEdgeFlags;
+            mEdgeFlags = 0;
 
             final KeyboardIconsSet iconsSet = mKeyboard.mIconsSet;
             mVisualInsetsLeft = KeyboardParser.getDimensionOrFraction(keyAttr,
@@ -316,6 +315,10 @@
         }
     }
 
+    public void addEdgeFlags(int flags) {
+        mEdgeFlags |= flags;
+    }
+
     public CharSequence getCaseAdjustedLabel() {
         return mKeyboard.adjustLabelCase(mLabel);
     }
@@ -441,15 +444,18 @@
      * assume that all points between the key and the edge are considered to be on the key.
      */
     public boolean isOnKey(int x, int y) {
-        final int flags = mEdgeFlags;
-        final boolean leftEdge = (flags & Keyboard.EDGE_LEFT) != 0;
-        final boolean rightEdge = (flags & Keyboard.EDGE_RIGHT) != 0;
-        final boolean topEdge = (flags & Keyboard.EDGE_TOP) != 0;
-        final boolean bottomEdge = (flags & Keyboard.EDGE_BOTTOM) != 0;
         final int left = mX - mGap / 2;
         final int right = left + mWidth + mGap;
         final int top = mY;
         final int bottom = top + mHeight + mKeyboard.getVerticalGap();
+        final int flags = mEdgeFlags;
+        if (flags == 0) {
+            return x >= left && x <= right && y >= top && y <= bottom;
+        }
+        final boolean leftEdge = (flags & Keyboard.EDGE_LEFT) != 0;
+        final boolean rightEdge = (flags & Keyboard.EDGE_RIGHT) != 0;
+        final boolean topEdge = (flags & Keyboard.EDGE_TOP) != 0;
+        final boolean bottomEdge = (flags & Keyboard.EDGE_BOTTOM) != 0;
         // In order to mitigate rounding errors, we use (left <= x <= right) here.
         return (x >= left || leftEdge) && (x <= right || rightEdge)
                 && (y >= top || topEdge) && (y <= bottom || bottomEdge);
diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java
index 3e45793..d4a23aa 100644
--- a/java/src/com/android/inputmethod/keyboard/Keyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/Keyboard.java
@@ -400,15 +400,6 @@
         return mMostCommonKeyWidth;
     }
 
-    /**
-     * Return true if spacebar needs showing preview even when "popup on keypress" is off.
-     * @param keyIndex index of the pressing key
-     * @return true if spacebar needs showing preview
-     */
-    public boolean needSpacebarPreview(int keyIndex) {
-        return false;
-    }
-
     private void loadKeyboard(Context context, int xmlLayoutResId) {
         try {
             KeyboardParser parser = new KeyboardParser(this, context);
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
index 7ad947c..37c5014 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
@@ -241,7 +241,6 @@
         // we should reset the text fade factor. It is also applicable to shortcut key.
         keyboard.setSpacebarTextFadeFactor(0.0f, null);
         keyboard.updateShortcutKey(mSubtypeSwitcher.isShortcutImeReady(), null);
-        keyboard.setSpacebarSlidingLanguageSwitchDiff(0);
         return keyboard;
     }
 
@@ -821,7 +820,7 @@
             if (settingsKeyMode.equals(res.getString(SETTINGS_KEY_MODE_ALWAYS_SHOW))
                     || (settingsKeyMode.equals(res.getString(SETTINGS_KEY_MODE_AUTO))
                             && Utils.hasMultipleEnabledIMEsOrSubtypes(
-                                    (InputMethodManagerCompatWrapper.getInstance(context))))) {
+                                    (InputMethodManagerCompatWrapper.getInstance())))) {
                 return true;
             }
             return false;
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
index 2e06831..71c4896 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
@@ -265,7 +265,6 @@
         public final Drawable mPreviewBackground;
         public final Drawable mPreviewLeftBackground;
         public final Drawable mPreviewRightBackground;
-        public final Drawable mPreviewSpacebarBackground;
         public final int mPreviewTextColor;
         public final int mPreviewOffset;
         public final int mPreviewHeight;
@@ -286,8 +285,6 @@
                     R.styleable.KeyboardView_keyPreviewLeftBackground);
             mPreviewRightBackground = a.getDrawable(
                     R.styleable.KeyboardView_keyPreviewRightBackground);
-            mPreviewSpacebarBackground = a.getDrawable(
-                    R.styleable.KeyboardView_keyPreviewSpacebarBackground);
             setAlpha(mPreviewBackground, PREVIEW_ALPHA);
             setAlpha(mPreviewLeftBackground, PREVIEW_ALPHA);
             setAlpha(mPreviewRightBackground, PREVIEW_ALPHA);
@@ -768,9 +765,6 @@
     public void showKeyPreview(int keyIndex, PointerTracker tracker) {
         if (mShowKeyPreviewPopup) {
             mDrawingHandler.showKeyPreview(mDelayBeforePreview, keyIndex, tracker);
-        } else if (mKeyboard.needSpacebarPreview(keyIndex)) {
-            // Show key preview (in this case, slide language switcher) without any delay.
-            showKey(keyIndex, tracker);
         }
     }
 
@@ -784,9 +778,6 @@
         if (mShowKeyPreviewPopup) {
             mDrawingHandler.cancelShowKeyPreview(tracker);
             mDrawingHandler.dismissKeyPreview(mDelayAfterPreview, tracker);
-        } else if (mKeyboard.needSpacebarPreview(KeyDetector.NOT_A_KEY)) {
-            // Dismiss key preview (in this case, slide language switcher) without any delay.
-            mPreviewText.setVisibility(View.INVISIBLE);
         }
     }
 
@@ -838,11 +829,7 @@
                    previewIcon != null ? previewIcon : key.getIcon());
             previewText.setText(null);
         }
-        if (key.mCode == Keyboard.CODE_SPACE) {
-            previewText.setBackgroundDrawable(params.mPreviewSpacebarBackground);
-        } else {
-            previewText.setBackgroundDrawable(params.mPreviewBackground);
-        }
+        previewText.setBackgroundDrawable(params.mPreviewBackground);
 
         previewText.measure(MEASURESPEC_UNSPECIFIED, MEASURESPEC_UNSPECIFIED);
         final int previewWidth = Math.max(previewText.getMeasuredWidth(), keyDrawWidth
diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java
index d925b8c..3c27129 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java
@@ -31,7 +31,6 @@
 import android.graphics.drawable.Drawable;
 import android.text.TextUtils;
 
-import com.android.inputmethod.keyboard.internal.SlidingLocaleDrawable;
 import com.android.inputmethod.latin.R;
 import com.android.inputmethod.latin.SubtypeSwitcher;
 
@@ -45,9 +44,6 @@
 public class LatinKeyboard extends Keyboard {
     private static final int SPACE_LED_LENGTH_PERCENT = 80;
 
-    public static final int CODE_NEXT_LANGUAGE = -100;
-    public static final int CODE_PREV_LANGUAGE = -101;
-
     private final Resources mRes;
     private final Theme mTheme;
     private final SubtypeSwitcher mSubtypeSwitcher = SubtypeSwitcher.getInstance();
@@ -55,16 +51,11 @@
     /* Space key and its icons, drawables and colors. */
     private final Key mSpaceKey;
     private final Drawable mSpaceIcon;
-    private final Drawable mSpacePreviewIcon;
-    private final int mSpaceKeyIndex;
     private final boolean mAutoCorrectionSpacebarLedEnabled;
     private final Drawable mAutoCorrectionSpacebarLedIcon;
     private final int mSpacebarTextColor;
     private final int mSpacebarTextShadowColor;
     private float mSpacebarTextFadeFactor = 0.0f;
-    private final int mSpacebarLanguageSwitchThreshold;
-    private int mSpacebarSlidingLanguageSwitchDiff;
-    private final SlidingLocaleDrawable mSlidingLocaleIcon;
     private final HashMap<Integer, SoftReference<BitmapDrawable>> mSpaceDrawableCache =
             new HashMap<Integer, SoftReference<BitmapDrawable>>();
 
@@ -73,16 +64,6 @@
     private final Drawable mEnabledShortcutIcon;
     private final Drawable mDisabledShortcutIcon;
 
-    // BLACK LEFT-POINTING TRIANGLE and two spaces.
-    public static final String ARROW_LEFT = "\u25C0  ";
-    // Two spaces and BLACK RIGHT-POINTING TRIANGLE.
-    public static final String ARROW_RIGHT = "  \u25B6";
-
-    // Minimum width of spacebar dragging to trigger the language switch (represented by the number
-    // of the most common key width of this keyboard).
-    private static final int SPACEBAR_DRAG_WIDTH = 3;
-    // Minimum width of space key preview (proportional to keyboard width).
-    private static final float SPACEBAR_POPUP_MIN_RATIO = 0.5f;
     // Height in space key the language name will be drawn. (proportional to space key height)
     public static final float SPACEBAR_LANGUAGE_BASELINE = 0.6f;
     // If the full language name needs to be smaller than this value to be drawn on space key,
@@ -116,8 +97,6 @@
         // The index of space key is available only after Keyboard constructor has finished.
         mSpaceKey = (spaceKeyIndex >= 0) ? keys.get(spaceKeyIndex) : null;
         mSpaceIcon = (mSpaceKey != null) ? mSpaceKey.getIcon() : null;
-        mSpacePreviewIcon = (mSpaceKey != null) ? mSpaceKey.getPreviewIcon() : null;
-        mSpaceKeyIndex = spaceKeyIndex;
 
         mShortcutKey = (shortcutKeyIndex >= 0) ? keys.get(shortcutKeyIndex) : null;
         mEnabledShortcutIcon = (mShortcutKey != null) ? mShortcutKey.getIcon() : null;
@@ -133,20 +112,6 @@
         mSpacebarTextShadowColor = a.getColor(
                 R.styleable.LatinKeyboard_spacebarTextShadowColor, 0);
         a.recycle();
-
-        // The threshold is "key width" x 1.25
-        mSpacebarLanguageSwitchThreshold = (getMostCommonKeyWidth() * 5) / 4;
-
-        if (mSpaceKey != null && mSpacePreviewIcon != null) {
-            final int slidingIconWidth = Math.max(mSpaceKey.mWidth,
-                    (int)(getMinWidth() * SPACEBAR_POPUP_MIN_RATIO));
-            final int spaceKeyheight = mSpacePreviewIcon.getIntrinsicHeight();
-            mSlidingLocaleIcon = new SlidingLocaleDrawable(
-                    context, mSpacePreviewIcon, slidingIconWidth, spaceKeyheight);
-            mSlidingLocaleIcon.setBounds(0, 0, slidingIconWidth, spaceKeyheight);
-        } else {
-            mSlidingLocaleIcon = null;
-        }
     }
 
     public void setSpacebarTextFadeFactor(float fadeFactor, LatinKeyboardView view) {
@@ -219,8 +184,7 @@
         final Rect bounds = new Rect();
 
         // Estimate appropriate language name text size to fit in maxTextWidth.
-        String language = ARROW_LEFT + SubtypeSwitcher.getFullDisplayName(locale, true)
-                + ARROW_RIGHT;
+        String language = SubtypeSwitcher.getFullDisplayName(locale, true);
         int textWidth = getTextWidth(paint, language, origTextSize, bounds);
         // Assuming text width and text size are proportional to each other.
         float textSize = origTextSize * Math.min(width / textWidth, 1.0f);
@@ -232,7 +196,7 @@
 
         final boolean useShortName;
         if (useMiddleName) {
-            language = ARROW_LEFT + SubtypeSwitcher.getMiddleDisplayLanguage(locale) + ARROW_RIGHT;
+            language = SubtypeSwitcher.getMiddleDisplayLanguage(locale);
             textWidth = getTextWidth(paint, language, origTextSize, bounds);
             textSize = origTextSize * Math.min(width / textWidth, 1.0f);
             useShortName = (textSize / origTextSize < MINIMUM_SCALE_OF_LANGUAGE_NAME)
@@ -242,7 +206,7 @@
         }
 
         if (useShortName) {
-            language = ARROW_LEFT + SubtypeSwitcher.getShortDisplayLanguage(locale) + ARROW_RIGHT;
+            language = SubtypeSwitcher.getShortDisplayLanguage(locale);
             textWidth = getTextWidth(paint, language, origTextSize, bounds);
             textSize = origTextSize * Math.min(width / textWidth, 1.0f);
         }
@@ -327,63 +291,6 @@
         return buffer;
     }
 
-    public void setSpacebarSlidingLanguageSwitchDiff(int diff) {
-        mSpacebarSlidingLanguageSwitchDiff = diff;
-    }
-
-    public void updateSpacebarPreviewIcon(int diff) {
-        if (mSpacebarSlidingLanguageSwitchDiff == diff)
-            return;
-        mSpacebarSlidingLanguageSwitchDiff = diff;
-        if (mSlidingLocaleIcon == null)
-            return;
-        mSlidingLocaleIcon.setDiff(diff);
-        if (Math.abs(diff) == Integer.MAX_VALUE) {
-            mSpaceKey.setPreviewIcon(mSpacePreviewIcon);
-        } else {
-            mSpaceKey.setPreviewIcon(mSlidingLocaleIcon);
-        }
-        mSpaceKey.getPreviewIcon().invalidateSelf();
-    }
-
-    public boolean shouldTriggerSpacebarSlidingLanguageSwitch(int diff) {
-        // On phone and number layouts, sliding language switch is disabled.
-        // TODO: Sort out how to enable language switch on these layouts.
-        if (isPhoneKeyboard() || isNumberKeyboard())
-            return false;
-        return Math.abs(diff) > mSpacebarLanguageSwitchThreshold;
-    }
-
-    /**
-     * Return true if spacebar needs showing preview even when "popup on keypress" is off.
-     * @param keyIndex index of the pressing key
-     * @return true if spacebar needs showing preview
-     */
-    @Override
-    public boolean needSpacebarPreview(int keyIndex) {
-        // This method is called when "popup on keypress" is off.
-        if (!mSubtypeSwitcher.useSpacebarLanguageSwitcher())
-            return false;
-        // Dismiss key preview.
-        if (keyIndex == KeyDetector.NOT_A_KEY)
-            return true;
-        // Key is not a spacebar.
-        if (keyIndex != mSpaceKeyIndex)
-            return false;
-        // The language switcher will be displayed only when the dragging distance is greater
-        // than the threshold.
-        return shouldTriggerSpacebarSlidingLanguageSwitch(mSpacebarSlidingLanguageSwitchDiff);
-    }
-
-    public int getLanguageChangeDirection() {
-        if (mSpaceKey == null || mSubtypeSwitcher.getEnabledKeyboardLocaleCount() <= 1
-                || Math.abs(mSpacebarSlidingLanguageSwitchDiff)
-                    < getMostCommonKeyWidth() * SPACEBAR_DRAG_WIDTH) {
-            return 0; // No change
-        }
-        return mSpacebarSlidingLanguageSwitchDiff > 0 ? 1 : -1;
-    }
-
     @Override
     public int[] getNearestKeys(int x, int y) {
         // Avoid dead pixels at edges of the keyboard
diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboardBaseView.java
index 078d89f..fb57a2d 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboardBaseView.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboardBaseView.java
@@ -348,7 +348,6 @@
     }
 
     // This default implementation returns a popup mini keyboard panel.
-    // A derived class may return a language switcher popup panel, for instance.
     protected PopupPanel onCreatePopupPanel(Key parentKey) {
         if (parentKey.mPopupCharacters == null)
             return null;
diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
index 617961b..c404a5d 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
@@ -40,8 +40,6 @@
     private boolean mDisableDisambiguation;
     /** The distance threshold at which we start treating the touch session as a multi-touch */
     private int mJumpThresholdSquare = Integer.MAX_VALUE;
-    /** The y coordinate of the last row */
-    private int mLastRowY;
     private int mLastX;
     private int mLastY;
 
@@ -71,8 +69,6 @@
         // One-seventh of the keyboard width seems like a reasonable threshold
         mJumpThresholdSquare = newKeyboard.getMinWidth() / 7;
         mJumpThresholdSquare *= mJumpThresholdSquare;
-        // Assuming there are 4 rows, this is the coordinate of the last row
-        mLastRowY = (newKeyboard.getHeight() * 3) / 4;
     }
 
     private LatinKeyboard getLatinKeyboard() {
@@ -127,7 +123,7 @@
      * the sudden moves subside, a DOWN event is simulated for the second key.
      * @param me the motion event
      * @return true if the event was consumed, so that it doesn't continue to be handled by
-     * KeyboardView.
+     * {@link LatinKeyboardBaseView}.
      */
     private boolean handleSuddenJump(MotionEvent me) {
         // If device has distinct multi touch panel, there is no need to check sudden jump.
@@ -157,11 +153,8 @@
         case MotionEvent.ACTION_MOVE:
             // Is this a big jump?
             final int distanceSquare = (mLastX - x) * (mLastX - x) + (mLastY - y) * (mLastY - y);
-            // Check the distance and also if the move is not entirely within the bottom row
-            // If it's only in the bottom row, it might be an intentional slide gesture
-            // for language switching
-            if (distanceSquare > mJumpThresholdSquare
-                    && (mLastY < mLastRowY || y < mLastRowY)) {
+            // Check the distance.
+            if (distanceSquare > mJumpThresholdSquare) {
                 // If we're not yet dropping events, start dropping and send an UP event
                 if (!mDroppingEvents) {
                     mDroppingEvents = true;
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index 8d7496c..5b03ef4 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -23,7 +23,6 @@
 import com.android.inputmethod.keyboard.internal.PointerTrackerQueue;
 import com.android.inputmethod.latin.LatinImeLogger;
 import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.SubtypeSwitcher;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -133,12 +132,6 @@
     // ignore modifier key if true
     private boolean mIgnoreModifierKey;
 
-    // TODO: Remove these hacking variables
-    // true if this pointer is in sliding language switch
-    private boolean mIsInSlidingLanguageSwitch;
-    private int mSpaceKeyIndex;
-    private static SubtypeSwitcher sSubtypeSwitcher;
-
     // Empty {@link KeyboardActionListener}
     private static final KeyboardActionListener EMPTY_LISTENER = new KeyboardActionListener() {
         @Override
@@ -172,7 +165,6 @@
         sTouchNoiseThresholdDistanceSquared = (int)(
                 touchNoiseThresholdDistance * touchNoiseThresholdDistance);
         sKeyboardSwitcher = KeyboardSwitcher.getInstance();
-        sSubtypeSwitcher = SubtypeSwitcher.getInstance();
     }
 
     public static PointerTracker getPointerTracker(final int id, KeyEventHandler handler) {
@@ -436,7 +428,6 @@
         mKeyAlreadyProcessed = false;
         mIsRepeatableKey = false;
         mIsInSlidingKeyInput = false;
-        mIsInSlidingLanguageSwitch = false;
         mIgnoreModifierKey = false;
         if (isValidKeyIndex(keyIndex)) {
             // This onPress call may have changed keyboard layout. Those cases are detected at
@@ -464,12 +455,6 @@
         if (mKeyAlreadyProcessed)
             return;
 
-        // TODO: Remove this hacking code
-        if (mIsInSlidingLanguageSwitch) {
-            ((LatinKeyboard)mKeyboard).updateSpacebarPreviewIcon(x - mKeyX);
-            showKeyPreview(mSpaceKeyIndex);
-            return;
-        }
         final int lastX = mLastX;
         final int lastY = mLastY;
         final int oldKeyIndex = mKeyIndex;
@@ -527,26 +512,6 @@
                     }
                 }
             }
-            // TODO: Remove this hack code
-            else if (isSpaceKey(keyIndex) && !mIsInSlidingLanguageSwitch
-                    && mKeyboard instanceof LatinKeyboard) {
-                final LatinKeyboard keyboard = ((LatinKeyboard)mKeyboard);
-                if (sSubtypeSwitcher.useSpacebarLanguageSwitcher()
-                        && sSubtypeSwitcher.getEnabledKeyboardLocaleCount() > 1) {
-                    final int diff = x - mKeyX;
-                    if (keyboard.shouldTriggerSpacebarSlidingLanguageSwitch(diff)) {
-                        // Detect start sliding language switch.
-                        mIsInSlidingLanguageSwitch = true;
-                        mSpaceKeyIndex = keyIndex;
-                        keyboard.updateSpacebarPreviewIcon(diff);
-                        // Display spacebar slide language switcher.
-                        showKeyPreview(keyIndex);
-                        final PointerTrackerQueue queue = sPointerTrackerQueue;
-                        if (queue != null)
-                            queue.releaseAllPointersExcept(this, eventTime, true);
-                    }
-                }
-            }
         } else {
             if (oldKey != null && isMajorEnoughMoveToBeOnNewKey(x, y, keyIndex)) {
                 // The pointer has been slid out from the previous key, we must call onRelease() to
@@ -613,20 +578,6 @@
             setReleasedKeyGraphics(keyIndex);
         if (mKeyAlreadyProcessed)
             return;
-        // TODO: Remove this hacking code
-        if (mIsInSlidingLanguageSwitch) {
-            setReleasedKeyGraphics(mSpaceKeyIndex);
-            final int languageDir = ((LatinKeyboard)mKeyboard).getLanguageChangeDirection();
-            if (languageDir != 0) {
-                final int code = (languageDir == 1)
-                        ? LatinKeyboard.CODE_NEXT_LANGUAGE : LatinKeyboard.CODE_PREV_LANGUAGE;
-                // This will change keyboard layout.
-                mListener.onCodeInput(code, new int[] {code}, keyX, keyY);
-            }
-            mIsInSlidingLanguageSwitch = false;
-            ((LatinKeyboard)mKeyboard).setSpacebarSlidingLanguageSwitchDiff(0);
-            return;
-        }
         if (!mIsRepeatableKey) {
             detectAndSendKey(keyIndex, keyX, keyY);
         }
@@ -700,9 +651,6 @@
         final Key key = getKey(keyIndex);
         if (key == null || !key.isEnabled())
             return true;
-        // Such as spacebar sliding language switch.
-        if (mKeyboard.needSpacebarPreview(keyIndex))
-            return false;
         final int code = key.mCode;
         return isModifierCode(code) || code == Keyboard.CODE_DELETE
                 || code == Keyboard.CODE_ENTER || code == Keyboard.CODE_SPACE;
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java
index 535a695..6256e7f 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java
@@ -35,7 +35,7 @@
     private static final int ICON_TO_SYMBOL_KEY_WITH_SHORTCUT = 3;
     private static final int ICON_DELETE_KEY = 4;
     private static final int ICON_DELETE_RTL_KEY = 5;
-    private static final int ICON_SETTINGS_KEY = 6;
+    private static final int ICON_SETTINGS_KEY = 6; // This is also represented as "@icon/6" in xml.
     private static final int ICON_SHORTCUT_KEY = 7;
     private static final int ICON_SPACE_KEY = 8;
     private static final int ICON_RETURN_KEY = 9;
@@ -44,12 +44,11 @@
     // This should be aligned with Keyboard.keyIconShifted enum.
     private static final int ICON_SHIFTED_SHIFT_KEY = 12;
     // This should be aligned with Keyboard.keyIconPreview enum.
-    private static final int ICON_PREVIEW_SPACE_KEY = 13;
-    private static final int ICON_PREVIEW_TAB_KEY = 14;
-    private static final int ICON_PREVIEW_SETTINGS_KEY = 15;
-    private static final int ICON_PREVIEW_SHORTCUT_KEY = 16;
+    private static final int ICON_PREVIEW_TAB_KEY = 13;
+    private static final int ICON_PREVIEW_SETTINGS_KEY = 14;
+    private static final int ICON_PREVIEW_SHORTCUT_KEY = 15;
 
-    private static final int ICON_LAST = 16;
+    private static final int ICON_LAST = 15;
 
     private final Drawable mIcons[] = new Drawable[ICON_LAST + 1];
 
@@ -79,8 +78,6 @@
             return ICON_TAB_KEY;
         case R.styleable.Keyboard_iconShiftedShiftKey:
             return ICON_SHIFTED_SHIFT_KEY;
-        case R.styleable.Keyboard_iconPreviewSpaceKey:
-            return ICON_PREVIEW_SPACE_KEY;
         case R.styleable.Keyboard_iconPreviewTabKey:
             return ICON_PREVIEW_TAB_KEY;
         case R.styleable.Keyboard_iconPreviewSettingsKey:
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardParser.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardParser.java
index e35db89..fcda919 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardParser.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardParser.java
@@ -135,6 +135,8 @@
     private int mMaxRowWidth = 0;
     private int mTotalHeight = 0;
     private Row mCurrentRow = null;
+    private boolean mLeftEdge;
+    private Key mRightEdgeKey = null;
     private final KeyStyles mKeyStyles = new KeyStyles();
 
     public KeyboardParser(Keyboard keyboard, Context context) {
@@ -623,6 +625,8 @@
         mCurrentX = 0;
         setSpacer(mCurrentX, mHorizontalEdgesPadding);
         mCurrentRow = row;
+        mLeftEdge = true;
+        mRightEdgeKey = null;
     }
 
     private void endRow() {
@@ -633,10 +637,19 @@
             mMaxRowWidth = mCurrentX;
         mCurrentY += mCurrentRow.mDefaultHeight;
         mCurrentRow = null;
+        if (mRightEdgeKey != null) {
+            mRightEdgeKey.addEdgeFlags(Keyboard.EDGE_RIGHT);
+            mRightEdgeKey = null;
+        }
     }
 
     private void endKey(Key key) {
         mCurrentX = key.mX - key.mGap / 2 + key.mWidth + key.mGap;
+        if (mLeftEdge) {
+            key.addEdgeFlags(Keyboard.EDGE_LEFT);
+            mLeftEdge = false;
+        }
+        mRightEdgeKey = key;
     }
 
     private void endKeyboard(int defaultVerticalGap) {
@@ -646,6 +659,8 @@
 
     private void setSpacer(int keyXPos, int width) {
         mCurrentX = keyXPos + width;
+        mLeftEdge = false;
+        mRightEdgeKey = null;
     }
 
     public static int getDimensionOrFraction(TypedArray a, int index, int base, int defValue) {
diff --git a/java/src/com/android/inputmethod/keyboard/internal/Row.java b/java/src/com/android/inputmethod/keyboard/internal/Row.java
index 06aadcc..b34d6d0 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/Row.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/Row.java
@@ -38,11 +38,6 @@
     public final int mDefaultHorizontalGap;
     /** Vertical gap following this row. */
     public final int mVerticalGap;
-    /**
-     * Edge flags for this row of keys. Possible values that can be assigned are
-     * {@link Keyboard#EDGE_TOP EDGE_TOP} and {@link Keyboard#EDGE_BOTTOM EDGE_BOTTOM}
-     */
-    public final int mRowEdgeFlags;
 
     private final Keyboard mKeyboard;
 
@@ -61,10 +56,6 @@
         mVerticalGap = KeyboardParser.getDimensionOrFraction(a,
                 R.styleable.Keyboard_verticalGap, keyboardHeight, keyboard.getVerticalGap());
         a.recycle();
-        a = res.obtainAttributes(Xml.asAttributeSet(parser),
-                R.styleable.Keyboard_Row);
-        mRowEdgeFlags = a.getInt(R.styleable.Keyboard_Row_rowEdgeFlags, 0);
-        a.recycle();
     }
 
     public Keyboard getKeyboard() {
diff --git a/java/src/com/android/inputmethod/keyboard/internal/SlidingLocaleDrawable.java b/java/src/com/android/inputmethod/keyboard/internal/SlidingLocaleDrawable.java
deleted file mode 100644
index ef3ea4c..0000000
--- a/java/src/com/android/inputmethod/keyboard/internal/SlidingLocaleDrawable.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package com.android.inputmethod.keyboard.internal;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.ColorFilter;
-import android.graphics.Paint;
-import android.graphics.Paint.Align;
-import android.graphics.PixelFormat;
-import android.graphics.drawable.Drawable;
-import android.text.TextPaint;
-import android.view.ViewConfiguration;
-
-import com.android.inputmethod.keyboard.Keyboard;
-import com.android.inputmethod.keyboard.LatinKeyboard;
-import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.SubtypeSwitcher;
-
-/**
- * Animation to be displayed on the spacebar preview popup when switching languages by swiping the
- * spacebar. It draws the current, previous and next languages and moves them by the delta of touch
- * movement on the spacebar.
- */
-public class SlidingLocaleDrawable extends Drawable {
-    private static final int SLIDE_SPEED_MULTIPLIER_RATIO = 150;
-    private final int mWidth;
-    private final int mHeight;
-    private final Drawable mBackground;
-    private final int mSpacebarTextColor;
-    private final TextPaint mTextPaint;
-    private final int mMiddleX;
-    private final boolean mDrawArrows;
-    private final int mThreshold;
-
-    private int mDiff;
-    private boolean mHitThreshold;
-    private String mCurrentLanguage;
-    private String mNextLanguage;
-    private String mPrevLanguage;
-
-    public SlidingLocaleDrawable(Context context, Drawable background, int width, int height) {
-        mBackground = background;
-        Keyboard.setDefaultBounds(background);
-        mWidth = width;
-        mHeight = height;
-        final TextPaint textPaint = new TextPaint();
-        textPaint.setTextSize(LatinKeyboard.getTextSizeFromTheme(
-                context.getTheme(), android.R.style.TextAppearance_Medium, 18));
-        textPaint.setColor(Color.TRANSPARENT);
-        textPaint.setAntiAlias(true);
-        mTextPaint = textPaint;
-        mMiddleX = (background != null) ? (mWidth - mBackground.getIntrinsicWidth()) / 2 : 0;
-
-        final TypedArray a = context.obtainStyledAttributes(
-                null, R.styleable.KeyboardView, R.attr.keyboardViewStyle, R.style.KeyboardView);
-        mSpacebarTextColor = a.getColor(R.styleable.KeyboardView_keyPreviewTextColor, 0);
-        final int spacebarPreviewBackrgound = a.getResourceId(
-                R.styleable.KeyboardView_keyPreviewSpacebarBackground, 0);
-        // If spacebar preview background is transparent, we need not draw arrows.
-        mDrawArrows = (spacebarPreviewBackrgound != R.drawable.transparent);
-        a.recycle();
-
-        mThreshold = ViewConfiguration.get(context).getScaledTouchSlop();
-    }
-
-    public void setDiff(int diff) {
-        if (diff == Integer.MAX_VALUE) {
-            mHitThreshold = false;
-            mCurrentLanguage = null;
-            return;
-        }
-        mDiff = Math.max(diff, diff * SLIDE_SPEED_MULTIPLIER_RATIO / 100);
-        if (mDiff > mWidth) mDiff = mWidth;
-        if (mDiff < -mWidth) mDiff = -mWidth;
-        if (Math.abs(mDiff) > mThreshold) mHitThreshold = true;
-        invalidateSelf();
-    }
-
-
-    @Override
-    public void draw(Canvas canvas) {
-        canvas.save();
-        if (mHitThreshold) {
-            Paint paint = mTextPaint;
-            final int width = mWidth;
-            final int height = mHeight;
-            final int diff = mDiff;
-            canvas.clipRect(0, 0, width, height);
-            if (mCurrentLanguage == null) {
-                SubtypeSwitcher subtypeSwitcher = SubtypeSwitcher.getInstance();
-                mCurrentLanguage = subtypeSwitcher.getInputLanguageName();
-                mNextLanguage = subtypeSwitcher.getNextInputLanguageName();
-                mPrevLanguage = subtypeSwitcher.getPreviousInputLanguageName();
-            }
-            // Draw language text.
-            final float baseline = mHeight * LatinKeyboard.SPACEBAR_LANGUAGE_BASELINE
-                    - paint.descent();
-            paint.setColor(mSpacebarTextColor);
-            paint.setTextAlign(Align.CENTER);
-            canvas.drawText(mCurrentLanguage, width / 2 + diff, baseline, paint);
-            canvas.drawText(mNextLanguage, diff - width / 2, baseline, paint);
-            canvas.drawText(mPrevLanguage, diff + width + width / 2, baseline, paint);
-            if (mDrawArrows) {
-                paint.setTextAlign(Align.LEFT);
-                canvas.drawText(LatinKeyboard.ARROW_LEFT, 0, baseline, paint);
-                paint.setTextAlign(Align.RIGHT);
-                canvas.drawText(LatinKeyboard.ARROW_RIGHT, width, baseline, paint);
-            }
-        }
-        if (mBackground != null) {
-            canvas.translate(mMiddleX, 0);
-            mBackground.draw(canvas);
-        }
-        canvas.restore();
-    }
-
-    @Override
-    public int getOpacity() {
-        return PixelFormat.TRANSLUCENT;
-    }
-
-    @Override
-    public void setAlpha(int alpha) {
-        // Ignore
-    }
-
-    @Override
-    public void setColorFilter(ColorFilter cf) {
-        // Ignore
-    }
-
-    @Override
-    public int getIntrinsicWidth() {
-        return mWidth;
-    }
-
-    @Override
-    public int getIntrinsicHeight() {
-        return mHeight;
-    }
-}
diff --git a/java/src/com/android/inputmethod/latin/DebugSettings.java b/java/src/com/android/inputmethod/latin/DebugSettings.java
index fd62d61..2f1e7c2 100644
--- a/java/src/com/android/inputmethod/latin/DebugSettings.java
+++ b/java/src/com/android/inputmethod/latin/DebugSettings.java
@@ -33,7 +33,6 @@
 
     private boolean mServiceNeedsRestart = false;
     private CheckBoxPreference mDebugMode;
-    private CheckBoxPreference mUseSpacebarLanguageSwitch;
 
     @Override
     protected void onCreate(Bundle icicle) {
@@ -61,13 +60,6 @@
                 updateDebugMode();
                 mServiceNeedsRestart = true;
             }
-        } else if (key.equals(SubtypeSwitcher.USE_SPACEBAR_LANGUAGE_SWITCH_KEY)) {
-            if (mUseSpacebarLanguageSwitch != null) {
-                mUseSpacebarLanguageSwitch.setChecked(
-                        prefs.getBoolean(SubtypeSwitcher.USE_SPACEBAR_LANGUAGE_SWITCH_KEY,
-                                getResources().getBoolean(
-                                        R.bool.config_use_spacebar_language_switcher)));
-            }
         }
     }
 
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 95cae6e..5d8fd34 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -29,7 +29,6 @@
 import android.media.AudioManager;
 import android.net.ConnectivityManager;
 import android.os.Debug;
-import android.os.IBinder;
 import android.os.Message;
 import android.os.SystemClock;
 import android.preference.PreferenceActivity;
@@ -45,8 +44,6 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewParent;
-import android.view.Window;
-import android.view.WindowManager;
 import android.view.inputmethod.CompletionInfo;
 import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.ExtractedText;
@@ -142,8 +139,6 @@
     private Suggest mSuggest;
     private CompletionInfo[] mApplicationSpecifiedCompletions;
 
-    private AlertDialog mOptionsDialog;
-
     private InputMethodManagerCompatWrapper mImm;
     private Resources mResources;
     private SharedPreferences mPrefs;
@@ -361,14 +356,15 @@
         mPrefs = prefs;
         LatinImeLogger.init(this, prefs);
         LanguageSwitcherProxy.init(this, prefs);
-        SubtypeSwitcher.init(this, prefs);
+        InputMethodManagerCompatWrapper.init(this);
+        SubtypeSwitcher.init(this);
         KeyboardSwitcher.init(this, prefs);
         Recorrection.init(this, prefs);
         AccessibilityUtils.init(this, prefs);
 
         super.onCreate();
 
-        mImm = InputMethodManagerCompatWrapper.getInstance(this);
+        mImm = InputMethodManagerCompatWrapper.getInstance();
         mInputMethodId = Utils.getInputMethodId(mImm, getPackageName());
         mSubtypeSwitcher = SubtypeSwitcher.getInstance();
         mKeyboardSwitcher = KeyboardSwitcher.getInstance();
@@ -1134,12 +1130,6 @@
         case Keyboard.CODE_SETTINGS_LONGPRESS:
             onSettingsKeyLongPressed();
             break;
-        case LatinKeyboard.CODE_NEXT_LANGUAGE:
-            toggleLanguage(true);
-            break;
-        case LatinKeyboard.CODE_PREV_LANGUAGE:
-            toggleLanguage(false);
-            break;
         case Keyboard.CODE_CAPSLOCK:
             switcher.toggleCapsLock();
             break;
@@ -1911,17 +1901,6 @@
         mKeyboardSwitcher.updateShiftState();
     }
 
-    // "reset" and "next" are used only for USE_SPACEBAR_LANGUAGE_SWITCHER.
-    private void toggleLanguage(boolean next) {
-        if (mSubtypeSwitcher.useSpacebarLanguageSwitcher()) {
-            mSubtypeSwitcher.toggleLanguage(next);
-        }
-        // The following is necessary because on API levels < 10, we don't get notified when
-        // subtype changes.
-        if (!CAN_HANDLE_ON_CURRENT_INPUT_METHOD_SUBTYPE_CHANGED)
-            onRefreshKeyboard();
-    }
-
     @Override
     public void onPress(int primaryCode, boolean withSliding) {
         if (mKeyboardSwitcher.isVibrateAndSoundFeedbackRequired()) {
@@ -2097,7 +2076,12 @@
                 }
             }
         };
-        showOptionsMenuInternal(title, items, listener);
+        final AlertDialog.Builder builder = new AlertDialog.Builder(this)
+                .setIcon(R.drawable.ic_dialog_keyboard)
+                .setNegativeButton(android.R.string.cancel, null)
+                .setItems(items, listener)
+                .setTitle(title);
+        showOptionDialogInternal(builder.create());
     }
 
     private void showOptionsMenu() {
@@ -2120,28 +2104,12 @@
                 }
             }
         };
-        showOptionsMenuInternal(title, items, listener);
-    }
-
-    private void showOptionsMenuInternal(CharSequence title, CharSequence[] items,
-            DialogInterface.OnClickListener listener) {
-        final IBinder windowToken = mKeyboardSwitcher.getKeyboardView().getWindowToken();
-        if (windowToken == null) return;
-        AlertDialog.Builder builder = new AlertDialog.Builder(this);
-        builder.setCancelable(true);
-        builder.setIcon(R.drawable.ic_dialog_keyboard);
-        builder.setNegativeButton(android.R.string.cancel, null);
-        builder.setItems(items, listener);
-        builder.setTitle(title);
-        mOptionsDialog = builder.create();
-        mOptionsDialog.setCanceledOnTouchOutside(true);
-        Window window = mOptionsDialog.getWindow();
-        WindowManager.LayoutParams lp = window.getAttributes();
-        lp.token = windowToken;
-        lp.type = WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG;
-        window.setAttributes(lp);
-        window.addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
-        mOptionsDialog.show();
+        final AlertDialog.Builder builder = new AlertDialog.Builder(this)
+                .setIcon(R.drawable.ic_dialog_keyboard)
+                .setNegativeButton(android.R.string.cancel, null)
+                .setItems(items, listener)
+                .setTitle(title);
+        showOptionDialogInternal(builder.create());
     }
 
     @Override
diff --git a/java/src/com/android/inputmethod/latin/Settings.java b/java/src/com/android/inputmethod/latin/Settings.java
index 33e9bc3..54f0a1b 100644
--- a/java/src/com/android/inputmethod/latin/Settings.java
+++ b/java/src/com/android/inputmethod/latin/Settings.java
@@ -498,7 +498,7 @@
         if (pref == mInputLanguageSelection) {
             startActivity(CompatUtils.getInputLanguageSelectionIntent(
                     Utils.getInputMethodId(
-                            InputMethodManagerCompatWrapper.getInstance(getActivityInternal()),
+                            InputMethodManagerCompatWrapper.getInstance(),
                             getActivityInternal().getApplicationInfo().packageName), 0));
             return true;
         }
diff --git a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
index 8fc19ae..6580cbc 100644
--- a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
+++ b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
@@ -16,16 +16,8 @@
 
 package com.android.inputmethod.latin;
 
-import com.android.inputmethod.compat.InputMethodInfoCompatWrapper;
-import com.android.inputmethod.compat.InputMethodManagerCompatWrapper;
-import com.android.inputmethod.compat.InputMethodSubtypeCompatWrapper;
-import com.android.inputmethod.deprecated.VoiceProxy;
-import com.android.inputmethod.keyboard.KeyboardSwitcher;
-import com.android.inputmethod.keyboard.LatinKeyboard;
-
 import android.content.Context;
 import android.content.Intent;
-import android.content.SharedPreferences;
 import android.content.pm.PackageManager;
 import android.content.res.Configuration;
 import android.content.res.Resources;
@@ -37,6 +29,13 @@
 import android.text.TextUtils;
 import android.util.Log;
 
+import com.android.inputmethod.compat.InputMethodInfoCompatWrapper;
+import com.android.inputmethod.compat.InputMethodManagerCompatWrapper;
+import com.android.inputmethod.compat.InputMethodSubtypeCompatWrapper;
+import com.android.inputmethod.deprecated.VoiceProxy;
+import com.android.inputmethod.keyboard.KeyboardSwitcher;
+import com.android.inputmethod.keyboard.LatinKeyboard;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -52,7 +51,6 @@
     private static final String VOICE_MODE = "voice";
     private static final String SUBTYPE_EXTRAVALUE_REQUIRE_NETWORK_CONNECTIVITY =
             "requireNetworkConnectivity";
-    public static final String USE_SPACEBAR_LANGUAGE_SWITCH_KEY = "use_spacebar_language_switch";
 
     private final TextUtils.SimpleStringSplitter mLocaleSplitter =
             new TextUtils.SimpleStringSplitter(LOCALE_SEPARATER);
@@ -62,13 +60,10 @@
     private /* final */ InputMethodManagerCompatWrapper mImm;
     private /* final */ Resources mResources;
     private /* final */ ConnectivityManager mConnectivityManager;
-    private /* final */ boolean mConfigUseSpacebarLanguageSwitcher;
-    private /* final */ SharedPreferences mPrefs;
     private final ArrayList<InputMethodSubtypeCompatWrapper>
             mEnabledKeyboardSubtypesOfCurrentInputMethod =
                     new ArrayList<InputMethodSubtypeCompatWrapper>();
     private final ArrayList<String> mEnabledLanguagesOfCurrentInputMethod = new ArrayList<String>();
-    private final LanguageBarInfo mLanguageBarInfo = new LanguageBarInfo();
 
     /*-----------------------------------------------------------*/
     // Variants which should be changed only by reload functions.
@@ -81,7 +76,6 @@
     private Locale mSystemLocale;
     private Locale mInputLocale;
     private String mInputLocaleStr;
-    private String mInputMethodId;
     private VoiceProxy.VoiceInputWrapper mVoiceInputWrapper;
     /*-----------------------------------------------------------*/
 
@@ -91,9 +85,9 @@
         return sInstance;
     }
 
-    public static void init(LatinIME service, SharedPreferences prefs) {
+    public static void init(LatinIME service) {
         SubtypeLocale.init(service);
-        sInstance.initialize(service, prefs);
+        sInstance.initialize(service);
         sInstance.updateAllParameters();
     }
 
@@ -101,10 +95,10 @@
         // Intentional empty constructor for singleton.
     }
 
-    private void initialize(LatinIME service, SharedPreferences prefs) {
+    private void initialize(LatinIME service) {
         mService = service;
         mResources = service.getResources();
-        mImm = InputMethodManagerCompatWrapper.getInstance(service);
+        mImm = InputMethodManagerCompatWrapper.getInstance();
         mConnectivityManager = (ConnectivityManager) service.getSystemService(
                 Context.CONNECTIVITY_SERVICE);
         mEnabledKeyboardSubtypesOfCurrentInputMethod.clear();
@@ -115,11 +109,9 @@
         mCurrentSubtype = null;
         mAllEnabledSubtypesOfCurrentInputMethod = null;
         mVoiceInputWrapper = null;
-        mPrefs = prefs;
 
         final NetworkInfo info = mConnectivityManager.getActiveNetworkInfo();
         mIsNetworkConnected = (info != null && info.isConnected());
-        mInputMethodId = Utils.getInputMethodId(mImm, service.getPackageName());
     }
 
     // Update all parameters stored in SubtypeSwitcher.
@@ -133,9 +125,6 @@
     // Update parameters which are changed outside LatinIME. This parameters affect UI so they
     // should be updated every time onStartInputview.
     public void updateParametersOnStartInputView() {
-        mConfigUseSpacebarLanguageSwitcher = mPrefs.getBoolean(USE_SPACEBAR_LANGUAGE_SWITCH_KEY,
-                mService.getResources().getBoolean(
-                        R.bool.config_use_spacebar_language_switcher));
         updateEnabledSubtypes();
         updateShortcutIME();
     }
@@ -170,10 +159,6 @@
                 Log.w(TAG, "Last subtype was disabled. Update to the current one.");
             }
             updateSubtype(mImm.getCurrentInputMethodSubtype());
-        } else {
-            // mLanguageBarInfo.update() will be called in updateSubtype so there is no need
-            // to call this in the if-clause above.
-            mLanguageBarInfo.update();
         }
     }
 
@@ -273,7 +258,6 @@
                 mVoiceInputWrapper.reset();
             }
         }
-        mLanguageBarInfo.update();
     }
 
     // Update the current input locale from Locale string.
@@ -427,10 +411,6 @@
         return mEnabledKeyboardSubtypesOfCurrentInputMethod.size();
     }
 
-    public boolean useSpacebarLanguageSwitcher() {
-        return mConfigUseSpacebarLanguageSwitcher;
-    }
-
     public boolean needsToDisplayLanguage() {
         return mNeedsToDisplayLanguage;
     }
@@ -508,75 +488,6 @@
                 KeyboardSwitcher.getInstance().getKeyboardView().getWindowToken());
     }
 
-    //////////////////////////////////////
-    // Spacebar Language Switch support //
-    //////////////////////////////////////
-
-    private class LanguageBarInfo {
-        private int mCurrentKeyboardSubtypeIndex;
-        private InputMethodSubtypeCompatWrapper mNextKeyboardSubtype;
-        private InputMethodSubtypeCompatWrapper mPreviousKeyboardSubtype;
-        private String mNextLanguage;
-        private String mPreviousLanguage;
-        public LanguageBarInfo() {
-            update();
-        }
-
-        private String getNextLanguage() {
-            return mNextLanguage;
-        }
-
-        private String getPreviousLanguage() {
-            return mPreviousLanguage;
-        }
-
-        public InputMethodSubtypeCompatWrapper getNextKeyboardSubtype() {
-            return mNextKeyboardSubtype;
-        }
-
-        public InputMethodSubtypeCompatWrapper getPreviousKeyboardSubtype() {
-            return mPreviousKeyboardSubtype;
-        }
-
-        public void update() {
-            if (!mConfigUseSpacebarLanguageSwitcher
-                    || mEnabledKeyboardSubtypesOfCurrentInputMethod == null
-                    || mEnabledKeyboardSubtypesOfCurrentInputMethod.size() == 0) return;
-            mCurrentKeyboardSubtypeIndex = getCurrentIndex();
-            mNextKeyboardSubtype = getNextKeyboardSubtypeInternal(mCurrentKeyboardSubtypeIndex);
-            Locale locale = Utils.constructLocaleFromString(mNextKeyboardSubtype.getLocale());
-            mNextLanguage = getFullDisplayName(locale, true);
-            mPreviousKeyboardSubtype = getPreviousKeyboardSubtypeInternal(
-                    mCurrentKeyboardSubtypeIndex);
-            locale = Utils.constructLocaleFromString(mPreviousKeyboardSubtype.getLocale());
-            mPreviousLanguage = getFullDisplayName(locale, true);
-        }
-
-        private int normalize(int index) {
-            final int N = mEnabledKeyboardSubtypesOfCurrentInputMethod.size();
-            final int ret = index % N;
-            return ret < 0 ? ret + N : ret;
-        }
-
-        private int getCurrentIndex() {
-            final int N = mEnabledKeyboardSubtypesOfCurrentInputMethod.size();
-            for (int i = 0; i < N; ++i) {
-                if (mEnabledKeyboardSubtypesOfCurrentInputMethod.get(i).equals(mCurrentSubtype)) {
-                    return i;
-                }
-            }
-            return 0;
-        }
-
-        private InputMethodSubtypeCompatWrapper getNextKeyboardSubtypeInternal(int index) {
-            return mEnabledKeyboardSubtypesOfCurrentInputMethod.get(normalize(index + 1));
-        }
-
-        private InputMethodSubtypeCompatWrapper getPreviousKeyboardSubtypeInternal(int index) {
-            return mEnabledKeyboardSubtypesOfCurrentInputMethod.get(normalize(index - 1));
-        }
-    }
-
     public static String getFullDisplayName(Locale locale, boolean returnsNameInThisLocale) {
         if (returnsNameInThisLocale) {
             return toTitleCase(SubtypeLocale.getFullDisplayName(locale), locale);
@@ -609,14 +520,6 @@
         return getDisplayLanguage(getInputLocale());
     }
 
-    public String getNextInputLanguageName() {
-        return mLanguageBarInfo.getNextLanguage();
-    }
-
-    public String getPreviousInputLanguageName() {
-        return mLanguageBarInfo.getPreviousLanguage();
-    }
-
     /////////////////////////////
     // Other utility functions //
     /////////////////////////////
@@ -653,24 +556,4 @@
                 supportedLocalesString.split("\\s+"));
         return voiceInputSupportedLocales.contains(locale);
     }
-
-    private void changeToNextSubtype() {
-        final InputMethodSubtypeCompatWrapper subtype =
-                mLanguageBarInfo.getNextKeyboardSubtype();
-        switchToTargetIME(mInputMethodId, subtype);
-    }
-
-    private void changeToPreviousSubtype() {
-        final InputMethodSubtypeCompatWrapper subtype =
-                mLanguageBarInfo.getPreviousKeyboardSubtype();
-        switchToTargetIME(mInputMethodId, subtype);
-    }
-
-    public void toggleLanguage(boolean next) {
-        if (next) {
-            changeToNextSubtype();
-        } else {
-            changeToPreviousSubtype();
-        }
-    }
 }