merge in jb-mr1-release history after reset to jb-mr1-dev
diff --git a/java/res/values-af/strings.xml b/java/res/values-af/strings.xml
index 7afc743..be692bf 100644
--- a/java/res/values-af/strings.xml
+++ b/java/res/values-af/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Gebaseer op vorige woord"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Gebaarinvoer"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Voer \'n woord in deur die letters van \'n woord te trek"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Wys gebaarspoor"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Wys gebaar se woord"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Wys swewende voorskouwoord saam met die gebaar"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : Gestoor"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Gaan"</string>
     <string name="label_next_key" msgid="362972844525672568">"Volgende"</string>
diff --git a/java/res/values-am/strings.xml b/java/res/values-am/strings.xml
index a0cdd9e..f4a9de6 100644
--- a/java/res/values-am/strings.xml
+++ b/java/res/values-am/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"በቀዳሚው ቃል ላይ የተመሠረተ"</string>
     <string name="gesture_input" msgid="3310827802759290774">"የእጅ ምልክት ግብዓት"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"የአንድ ቃል ፊደሎችን በመከታተል አንድ ቃል አስገባ"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"ምልክት የሚሄድበት መንገድ አሳይ"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"የምልክት ቃል አሳይ"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"ተንሳፋፊ የቅድመ እይታ ቃል ከምልክት ጋር አሳይ"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : ተቀምጧል"</string>
     <string name="label_go_key" msgid="1635148082137219148">"ሂድ"</string>
     <string name="label_next_key" msgid="362972844525672568">"በመቀጠል"</string>
diff --git a/java/res/values-ar/strings.xml b/java/res/values-ar/strings.xml
index 8d880c5..29d046e 100644
--- a/java/res/values-ar/strings.xml
+++ b/java/res/values-ar/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"استنادًا إلى الكلمة السابقة"</string>
     <string name="gesture_input" msgid="3310827802759290774">"إدخال الإيماءة"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"يمكنك إدخال كلمة من خلال تتبع أحرف كلمة ما"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"عرض مسار الإيماءة"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"عرض كلمة الإيماءة"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"عرض كلمة معاينة متحركة مع الإيماءة"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : تم الحفظ"</string>
     <string name="label_go_key" msgid="1635148082137219148">"تنفيذ"</string>
     <string name="label_next_key" msgid="362972844525672568">"التالي"</string>
diff --git a/java/res/values-be/strings.xml b/java/res/values-be/strings.xml
index eacb89f..30217fb 100644
--- a/java/res/values-be/strings.xml
+++ b/java/res/values-be/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"На аснове папярэдняга слова"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Уваход жэстам"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Увядзiце слова, адсочваючы лiтары"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Паказаць след жэста"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Паказаць слова жэста"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Паказаць плаваючы прагляд слова з жэстам"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : Захаваныя"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Пачаць"</string>
     <string name="label_next_key" msgid="362972844525672568">"Далей"</string>
diff --git a/java/res/values-bg/strings.xml b/java/res/values-bg/strings.xml
index 7f62376..dc25205 100644
--- a/java/res/values-bg/strings.xml
+++ b/java/res/values-bg/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Въз основа на предишната дума"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Въвеждане чрез жест"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Въвеждане на дума чрез проследяване на буквите й"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Следа на жестовете: Показване"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Показване на дума при жестове"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Показване на дума с плаваща визуализация при жест"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : Запазено"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Старт"</string>
     <string name="label_next_key" msgid="362972844525672568">"Напред"</string>
diff --git a/java/res/values-ca/strings.xml b/java/res/values-ca/strings.xml
index a1265bb..57b55d3 100644
--- a/java/res/values-ca/strings.xml
+++ b/java/res/values-ca/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"En funció de la paraula anterior"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Entrada de gestos"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Dibuixa les lletres d\'una paraula per escriure-la"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Mostra el recorregut del gest"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Mostra paraules en fer gestos"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Mostra la paraula de visualització prèvia flotant en fer gestos"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: desada"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Vés"</string>
     <string name="label_next_key" msgid="362972844525672568">"Següent"</string>
diff --git a/java/res/values-cs/strings.xml b/java/res/values-cs/strings.xml
index c6b7aa9..930cf13 100644
--- a/java/res/values-cs/strings.xml
+++ b/java/res/values-cs/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Na základě předchozího slova"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Zadávání gesty"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Napište slovo zadáním jeho písmen."</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Zobrazovat stopu gesta"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Zobrazovat slovo gesta"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Zobrazovat plovoucí náhled slova gesta"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: Uloženo"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Přejít"</string>
     <string name="label_next_key" msgid="362972844525672568">"Další"</string>
diff --git a/java/res/values-da/strings.xml b/java/res/values-da/strings.xml
index 5c543b1..f04c43d 100644
--- a/java/res/values-da/strings.xml
+++ b/java/res/values-da/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Baseret på tidligere ord"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Berøringsindtastning"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Indtast et ord ved at skrive bogstaverne for et ord med fingeren"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Vis spor af berøring"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Vis berøringsord"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Vis flydende eksempelord under berøring"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: Gemt"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Gå"</string>
     <string name="label_next_key" msgid="362972844525672568">"Næste"</string>
diff --git a/java/res/values-de/strings.xml b/java/res/values-de/strings.xml
index a3e03bd..59d8e73 100644
--- a/java/res/values-de/strings.xml
+++ b/java/res/values-de/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Auf Grundlage des vorherigen Wortes"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Bewegungseingabe"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Wort durch Nachzeichnen der Buchstaben eingeben"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Spur der Bewegung anzeigen"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Wort bei Bewegung anzeigen"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Vorgeschlagenes Wort bei Bewegung anzeigen"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: gespeichert"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Los"</string>
     <string name="label_next_key" msgid="362972844525672568">"Weiter"</string>
diff --git a/java/res/values-el/strings.xml b/java/res/values-el/strings.xml
index 727699b..2803ed2 100644
--- a/java/res/values-el/strings.xml
+++ b/java/res/values-el/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Βάσει προηγούμενης λέξης"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Καταχώριση κίνησης"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Καταχώριση μιας λέξης με εντοπισμό των γραμμάτων μιας λέξης"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Εμφάνιση διαδρομής χειρονομίας"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Εμφάνιση λέξης χειρονομίας"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Εμφάνιση κινούμενης προεπισκόπησης λέξης με χειρονομία"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : Αποθηκεύτηκε"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Μετ."</string>
     <string name="label_next_key" msgid="362972844525672568">"Επόμενο"</string>
diff --git a/java/res/values-en-rGB/strings.xml b/java/res/values-en-rGB/strings.xml
index 91eb965..4d960d7 100644
--- a/java/res/values-en-rGB/strings.xml
+++ b/java/res/values-en-rGB/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Based on previous word"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Gesture input"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Input a word by tracing the letters of a word"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Show gesture trail"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Show gesture word"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Show floating preview word with gesture"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : Saved"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Go"</string>
     <string name="label_next_key" msgid="362972844525672568">"Next"</string>
diff --git a/java/res/values-es-rUS/strings.xml b/java/res/values-es-rUS/strings.xml
index e687cde..42efb20 100644
--- a/java/res/values-es-rUS/strings.xml
+++ b/java/res/values-es-rUS/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Según la palabra anterior"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Entrada de gestos"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Ingresa una palabra trazando sus letras."</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Mostrar recorrido de gesto"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Mostrar palabra de gesto"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Mostrar palabra de vista previa flotante al realizar gestos"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: guardada"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Ir"</string>
     <string name="label_next_key" msgid="362972844525672568">"Siguiente"</string>
diff --git a/java/res/values-es/strings.xml b/java/res/values-es/strings.xml
index f24d6ce..8028645 100644
--- a/java/res/values-es/strings.xml
+++ b/java/res/values-es/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Según la palabra anterior"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Entrada de gestos"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Trazar las letras de una palabra para introducirla"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Mostrar recorrido del gesto"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Mostrar palabra del gesto"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Mostrar la palabra de vista previa flotante al realizar un gesto"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: guardada"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Ir"</string>
     <string name="label_next_key" msgid="362972844525672568">"Sig."</string>
diff --git a/java/res/values-et/strings.xml b/java/res/values-et/strings.xml
index 8c340a1..152c030 100644
--- a/java/res/values-et/strings.xml
+++ b/java/res/values-et/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Eelmise sõna põhjal"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Liigutusega sisest."</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Sisestage sõna, kirjutades sõna tähed sõrmega"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Näita liigutuse jälge"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Näita liigutuse sõna"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Ujuva sõna eelvaate näitamine koos liigutusega"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : salvestatud"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Mine"</string>
     <string name="label_next_key" msgid="362972844525672568">"Edasi"</string>
diff --git a/java/res/values-fa/strings.xml b/java/res/values-fa/strings.xml
index fb1e025..4b14229 100644
--- a/java/res/values-fa/strings.xml
+++ b/java/res/values-fa/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"بر اساس کلمه قبلی"</string>
     <string name="gesture_input" msgid="3310827802759290774">"ورودی اشاره"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"با دنبال کردن حروف یک کلمه، کلمه را وارد کنید"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"نمایش نسخه آزمایشی حرکت"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"نمایش کلمه در طول ورودی حرکتی"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"نمایش کلمه پیش‌نمایش متحرک با حرکت"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : ذخیره شد"</string>
     <string name="label_go_key" msgid="1635148082137219148">"برو"</string>
     <string name="label_next_key" msgid="362972844525672568">"بعدی"</string>
diff --git a/java/res/values-fi/strings.xml b/java/res/values-fi/strings.xml
index ef9393d..28eeced 100644
--- a/java/res/values-fi/strings.xml
+++ b/java/res/values-fi/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Perustuu edelliseen sanan"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Eleiden syöttö"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Syötä sana piirtämällä kirjaimet sormella"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Näytä eleen jälki"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Näytä elesanat"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Näytä eleen yhteydessä kelluva esikatselusana"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : Tallennettu"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Siirry"</string>
     <string name="label_next_key" msgid="362972844525672568">"Seur."</string>
diff --git a/java/res/values-fr/strings.xml b/java/res/values-fr/strings.xml
index 47e494d..a8556e8 100644
--- a/java/res/values-fr/strings.xml
+++ b/java/res/values-fr/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Suggestions basées sur le mot précédent"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Saisie gestuelle"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Saisir un mot en traçant ses lettres avec le doigt"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Afficher le tracé du geste"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Afficher un mot lors du geste"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Afficher un aperçu flottant du mot lors de la saisie gestuelle"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : enregistré"</string>
     <string name="label_go_key" msgid="1635148082137219148">"OK"</string>
     <string name="label_next_key" msgid="362972844525672568">"Suiv."</string>
diff --git a/java/res/values-hi/strings.xml b/java/res/values-hi/strings.xml
index dbc6376..254c2d2 100644
--- a/java/res/values-hi/strings.xml
+++ b/java/res/values-hi/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"पिछले शब्द के आधार पर"</string>
     <string name="gesture_input" msgid="3310827802759290774">"जेस्‍चर इनपुट"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"किसी शब्द के अक्षरों को ट्रेस करके कोई शब्द इनपुट करें"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"जेस्चर ट्रेल दिखाएं"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"जेस्चर शब्द दिखाएं"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"जेस्चर के साथ फ़्लोटिंग पूर्वावलोकन शब्द दिखाएं"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: सहेजा गया"</string>
     <string name="label_go_key" msgid="1635148082137219148">"जाएं"</string>
     <string name="label_next_key" msgid="362972844525672568">"अगला"</string>
diff --git a/java/res/values-hr/strings.xml b/java/res/values-hr/strings.xml
index 550008a..cb20880 100644
--- a/java/res/values-hr/strings.xml
+++ b/java/res/values-hr/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Na temelju prethodne riječi"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Unos pokretom"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Unos riječi ispisivanjem slova riječi"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Prikaži trag pokreta"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Prikaži riječ pokreta"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Prikaži lebdeći pregled riječi uz pokret"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : Spremljeno"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Idi"</string>
     <string name="label_next_key" msgid="362972844525672568">"Dalje"</string>
diff --git a/java/res/values-hu/strings.xml b/java/res/values-hu/strings.xml
index e5a0072..62d1dd1 100644
--- a/java/res/values-hu/strings.xml
+++ b/java/res/values-hu/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Az előző szó alapján"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Kézi bevitel"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Szó beírása a betűk megrajzolásával"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Mozdulat irányának mutatása"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Mozdulatot leíró szó mutatása"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Mozdulatot leíró szó mutatása lebegő előnézetben"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : mentve"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Ugrás"</string>
     <string name="label_next_key" msgid="362972844525672568">"Tovább"</string>
diff --git a/java/res/values-in/strings.xml b/java/res/values-in/strings.xml
index 406d181..8273d54 100644
--- a/java/res/values-in/strings.xml
+++ b/java/res/values-in/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Berdasarkan kata sebelumnya"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Masukan isyarat"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Masukkan kata dengan melacak huruf dari sebuah kata"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Tampilkan jalur isyarat"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Tampilkan kata isyarat"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Tampilkan kata pratinjau melayang dengan isyarat"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : Telah disimpan"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Buka"</string>
     <string name="label_next_key" msgid="362972844525672568">"Berikutnya"</string>
diff --git a/java/res/values-it/strings.xml b/java/res/values-it/strings.xml
index 2e8ad24..d529b8a 100644
--- a/java/res/values-it/strings.xml
+++ b/java/res/values-it/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"In base alla parola precedente"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Inserimento con gesti"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Inserisci una parola tracciandone le lettere"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Mostra traccia con gesto"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Mostra parola con gesto"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Mostra parola di anteprima floating con gesto"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : parola salvata"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Vai"</string>
     <string name="label_next_key" msgid="362972844525672568">"Avanti"</string>
diff --git a/java/res/values-iw/strings.xml b/java/res/values-iw/strings.xml
index c15a8da..5c10716 100644
--- a/java/res/values-iw/strings.xml
+++ b/java/res/values-iw/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"בהתבסס על המילה הקודמת"</string>
     <string name="gesture_input" msgid="3310827802759290774">"קלט מחווה"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"הזן מילה על ידי החלקת האצבע מאות לאות"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"הצג שובל מחווה"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"הצג מילת מחווה"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"הצג תצוגה מקדימה צפה של המילה בזמן המחווה"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : נשמרה"</string>
     <string name="label_go_key" msgid="1635148082137219148">"בצע"</string>
     <string name="label_next_key" msgid="362972844525672568">"הבא"</string>
diff --git a/java/res/values-ja/strings.xml b/java/res/values-ja/strings.xml
index dfdd74d..fae12ab 100644
--- a/java/res/values-ja/strings.xml
+++ b/java/res/values-ja/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"前の語句に基づいた入力候補表示"</string>
     <string name="gesture_input" msgid="3310827802759290774">"ジェスチャー入力"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"単語の文字をトレースして単語を入力"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"ジェスチャートレイルを表示"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"ジェスチャーワードを表示"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"ジェスチャーでプレビューワードをフローティング表示できます"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>:保存しました"</string>
     <string name="label_go_key" msgid="1635148082137219148">"実行"</string>
     <string name="label_next_key" msgid="362972844525672568">"次へ"</string>
diff --git a/java/res/values-ko/strings.xml b/java/res/values-ko/strings.xml
index 5fac188..c89d878 100644
--- a/java/res/values-ko/strings.xml
+++ b/java/res/values-ko/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"이전 단어에 기반한 추천"</string>
     <string name="gesture_input" msgid="3310827802759290774">"동작 입력"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"한번에 문자를 그려서 단어 입력"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"동작 흔적 표시"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"동작 단어 표시"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"동작과 함께 이동식 단어 미리보기 표시"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: 저장됨"</string>
     <string name="label_go_key" msgid="1635148082137219148">"이동"</string>
     <string name="label_next_key" msgid="362972844525672568">"다음"</string>
diff --git a/java/res/values-lt/strings.xml b/java/res/values-lt/strings.xml
index ca8f533..f3b9003 100644
--- a/java/res/values-lt/strings.xml
+++ b/java/res/values-lt/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Pagal ankstesnį žodį"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Įvestis gestais"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Įveskite žodį brėždami jo raides"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Rodyti gestų kelią"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Rodyti gesto žodį"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Rodyti kintantį peržiūros žodį gestu"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: išsaugota"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Pradėti"</string>
     <string name="label_next_key" msgid="362972844525672568">"Kitas"</string>
diff --git a/java/res/values-lv/strings.xml b/java/res/values-lv/strings.xml
index 7e09415..55be052 100644
--- a/java/res/values-lv/strings.xml
+++ b/java/res/values-lv/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Pamatojoties uz iepriekšējo vārdu"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Ievade ar žestu"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Ievadiet vārdu, norādot tā burtus."</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Rādīt žesta pēdas"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Rādīt žesta vārdu"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Rādīt peldošo priekšskatījuma vārdu ar žestu"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: saglabāts"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Sākt"</string>
     <string name="label_next_key" msgid="362972844525672568">"Tālāk"</string>
diff --git a/java/res/values-nb/strings.xml b/java/res/values-nb/strings.xml
index 2fd52c0..f603dfa 100644
--- a/java/res/values-nb/strings.xml
+++ b/java/res/values-nb/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Basert på det forrige ordet"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Bevegelseskommandoer"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Angi et ord ved å skrive bokstavene på skjermen med fingeren"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Vis bevegelsesspor"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Vis bevegelsesord"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Vis flytende forhåndsvisningsord under bevegelser"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: Lagret"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Utfør"</string>
     <string name="label_next_key" msgid="362972844525672568">"Neste"</string>
diff --git a/java/res/values-nl/strings.xml b/java/res/values-nl/strings.xml
index 5c1cf34..33816f8 100644
--- a/java/res/values-nl/strings.xml
+++ b/java/res/values-nl/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Op basis van het vorige woord"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Invoer met gebaren"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Voer een woord in door de letters van een woord te volgen"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Gebarenspoor weergeven"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Woord met gebaar weergeven"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Zwevend voorbeeldwoord met gebaar weergeven"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: opgeslagen"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Start"</string>
     <string name="label_next_key" msgid="362972844525672568">"Verder"</string>
diff --git a/java/res/values-pl/strings.xml b/java/res/values-pl/strings.xml
index 8d8d58d..7e15566 100644
--- a/java/res/values-pl/strings.xml
+++ b/java/res/values-pl/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Na podstawie poprzedniego słowa"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Wprowadzanie gestem"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Podaj słowo, pisząc litery palcem"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Pokazuj ślad gestu"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Podpowiadaj przy pisaniu gestem"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Pokazuj pływający podgląd słowa podczas pisania gestem"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : Zapisano"</string>
     <string name="label_go_key" msgid="1635148082137219148">"OK"</string>
     <string name="label_next_key" msgid="362972844525672568">"Dalej"</string>
diff --git a/java/res/values-pt-rPT/strings.xml b/java/res/values-pt-rPT/strings.xml
index 7282ebd..fcab817 100644
--- a/java/res/values-pt-rPT/strings.xml
+++ b/java/res/values-pt-rPT/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Com base na palavra anterior"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Introd. por gestos"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Introduza uma palavra, desenhando as letras de uma palavra"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Mostrar percurso do gesto"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Mostrar palavra gesto"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Mostrar palavra de visualização flutuante com gesto"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: guardada"</string>
     <string name="label_go_key" msgid="1635148082137219148">"OK"</string>
     <string name="label_next_key" msgid="362972844525672568">"Avançar"</string>
diff --git a/java/res/values-ro/strings.xml b/java/res/values-ro/strings.xml
index ca8fbf6..e47ed63 100644
--- a/java/res/values-ro/strings.xml
+++ b/java/res/values-ro/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Bazate pe cuvântul precedent"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Utilizaţi gesturi"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Introduceţi un cuvânt desenând literele acestuia"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Se afişează urma gestului"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Sugestie cuvinte la gesturi"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Se afişează previzualizarea cuvântului flotant la gesturi"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: salvat"</string>
     <string name="label_go_key" msgid="1635148082137219148">"OK"</string>
     <string name="label_next_key" msgid="362972844525672568">"Înainte"</string>
diff --git a/java/res/values-ru/strings.xml b/java/res/values-ru/strings.xml
index a6c5eec..f780650 100644
--- a/java/res/values-ru/strings.xml
+++ b/java/res/values-ru/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Подсказки, основанные на предыдущих словах"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Ввод жестами"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Перемещайте палец от буквы к букве, чтобы составить слово"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Рисовать линию"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Подсказывать слово"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Показывать подсказку во время ввода"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: сохранено"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Поиск"</string>
     <string name="label_next_key" msgid="362972844525672568">"Далее"</string>
diff --git a/java/res/values-sk/strings.xml b/java/res/values-sk/strings.xml
index d0b043d..4aa0c5c 100644
--- a/java/res/values-sk/strings.xml
+++ b/java/res/values-sk/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Na základe predchádzajúceho slova"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Zadávanie gestami"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Napíšte slovo zadaním jeho písmen"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Zobrazovať stopu gesta"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Zobrazovať slovo gesta"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Zobrazovať plávajúcu ukážku slova gesta"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : Uložené"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Hľadať"</string>
     <string name="label_next_key" msgid="362972844525672568">"Ďalej"</string>
diff --git a/java/res/values-sr/strings.xml b/java/res/values-sr/strings.xml
index 907155d..3b209b3 100644
--- a/java/res/values-sr/strings.xml
+++ b/java/res/values-sr/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"На основу претходне речи"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Унос покретом"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Унесите реч исписивањем слова речи"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Прикажи траг покрета"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Прикажи реч уз покрет"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Приказ плутајућег прегледа речи уз покрет"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : Сачувано"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Иди"</string>
     <string name="label_next_key" msgid="362972844525672568">"Следеће"</string>
diff --git a/java/res/values-sv/strings.xml b/java/res/values-sv/strings.xml
index 690053e..71ba620 100644
--- a/java/res/values-sv/strings.xml
+++ b/java/res/values-sv/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Baserat på föregående ord"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Gestinmatning"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Skriv ett ord för hand genom att rita bokstäverna i ordet"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Visa spår efter rörelse"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Visa svävande ord för rörelse"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Visa förhandsgranskning av svävande ord med rörelse"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: sparat"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Kör"</string>
     <string name="label_next_key" msgid="362972844525672568">"Nästa"</string>
diff --git a/java/res/values-sw/strings.xml b/java/res/values-sw/strings.xml
index d58130a..ec960bc 100644
--- a/java/res/values-sw/strings.xml
+++ b/java/res/values-sw/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Kulingana na neno la awali"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Ingizo la ishara"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Ingiza neno kwa kufuatilia herufi za neno"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Onyesha njia ya ishara"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Onyesha neno la ishara"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Onyesha neno hakiki linaloelea lililo na ishara"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : Imehifadhiwa"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Nenda"</string>
     <string name="label_next_key" msgid="362972844525672568">"Ifuatayo"</string>
@@ -97,7 +94,7 @@
     <string name="spoken_description_search" msgid="1247236163755920808">"Tafuta"</string>
     <string name="spoken_description_dot" msgid="40711082435231673">"Nukta"</string>
     <string name="spoken_description_language_switch" msgid="5507091328222331316">"Badili lugha"</string>
-    <string name="spoken_description_action_next" msgid="8636078276664150324">"Ifuatayo"</string>
+    <string name="spoken_description_action_next" msgid="8636078276664150324">"Inayofuata"</string>
     <string name="spoken_description_action_previous" msgid="800872415009336208">"Iliyotangulia"</string>
     <string name="spoken_description_shiftmode_on" msgid="5700440798609574589">"Shift imewezeshwa"</string>
     <string name="spoken_description_shiftmode_locked" msgid="593175803181701830">"Caps lock imewezeshwa"</string>
diff --git a/java/res/values-th/strings.xml b/java/res/values-th/strings.xml
index 6df83ae..4e8d2e2 100644
--- a/java/res/values-th/strings.xml
+++ b/java/res/values-th/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"ตามคำก่อนหน้า"</string>
     <string name="gesture_input" msgid="3310827802759290774">"ป้อนท่าทางสัมผัส"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"ป้อนคำโดยลากนิ้วเป็นรูปตัวอักษรที่อยู่ในคำ โดยไม่ยกนิ้วขึ้น"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"แสดงรอยทางเดินของท่าทาง"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"แสดงคำแนะนำท่าทาง"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"แสดงตัวอย่างคำแนะนำพร้อมด้วยท่าทาง"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : บันทึกแล้ว"</string>
     <string name="label_go_key" msgid="1635148082137219148">"ไป"</string>
     <string name="label_next_key" msgid="362972844525672568">"ถัดไป"</string>
diff --git a/java/res/values-tl/strings.xml b/java/res/values-tl/strings.xml
index 9ad841d..a2b46a6 100644
--- a/java/res/values-tl/strings.xml
+++ b/java/res/values-tl/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Batay sa nakaraang salita"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Pagpasok ng galaw"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Magpasok ng salita sa gamit ang pagsulat sa mga titik ng salita"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Ipakita ang trail ng galaw"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Ipakita ang salita ng galaw"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Ipakita ang lumulutang na preview ng salita na may galaw"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : Na-save"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Punta"</string>
     <string name="label_next_key" msgid="362972844525672568">"Susunod"</string>
diff --git a/java/res/values-tr/strings.xml b/java/res/values-tr/strings.xml
index cd800ce..f9eb598 100644
--- a/java/res/values-tr/strings.xml
+++ b/java/res/values-tr/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Önceki kelimeye dayanarak"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Hareket girişi"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Bir kelimeyi harflerini izleyerek girin"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Hareket izini göster"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Hareketle yazılan kelimeyi göster"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Hareketle kayan önizleme kelimesini göster"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : Kaydedildi"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Git"</string>
     <string name="label_next_key" msgid="362972844525672568">"İleri"</string>
diff --git a/java/res/values-uk/strings.xml b/java/res/values-uk/strings.xml
index f1f68ef..d62f420 100644
--- a/java/res/values-uk/strings.xml
+++ b/java/res/values-uk/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"На основі попереднього слова"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Введення жестами"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Введіть слово, малюючи літери, з яких воно складається"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Показувати слід жестів"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Показувати слово для жесту"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Показувати спливаючий перегляд слова під час жесту"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : збережено"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Іти"</string>
     <string name="label_next_key" msgid="362972844525672568">"Далі"</string>
diff --git a/java/res/values-vi/strings.xml b/java/res/values-vi/strings.xml
index 69285f9..13f51ad 100644
--- a/java/res/values-vi/strings.xml
+++ b/java/res/values-vi/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Dựa trên từ trước đó"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Nhập bằng cử chỉ"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Nhập từ bằng cách lần theo các chữ cái của từ"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Hiển thị vệt cử chỉ"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Hiển thị từ theo cử chỉ"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Hiển thị từ xem trước nổi bằng cử chỉ"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : Đã lưu"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Tìm"</string>
     <string name="label_next_key" msgid="362972844525672568">"Tiếp theo"</string>
@@ -98,7 +95,7 @@
     <string name="spoken_description_dot" msgid="40711082435231673">"Dấu chấm"</string>
     <string name="spoken_description_language_switch" msgid="5507091328222331316">"Chuyển ngôn ngữ"</string>
     <string name="spoken_description_action_next" msgid="8636078276664150324">"Tiếp theo"</string>
-    <string name="spoken_description_action_previous" msgid="800872415009336208">"Trước đó"</string>
+    <string name="spoken_description_action_previous" msgid="800872415009336208">"Trước"</string>
     <string name="spoken_description_shiftmode_on" msgid="5700440798609574589">"Đã bật Shift"</string>
     <string name="spoken_description_shiftmode_locked" msgid="593175803181701830">"Đã bật Caps lock"</string>
     <string name="spoken_description_shiftmode_off" msgid="657219998449174808">"Đã tắt Shift"</string>
diff --git a/java/res/values-zh-rTW/strings.xml b/java/res/values-zh-rTW/strings.xml
index 36a5553..120ae33 100644
--- a/java/res/values-zh-rTW/strings.xml
+++ b/java/res/values-zh-rTW/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"根據上一個字詞產生"</string>
     <string name="gesture_input" msgid="3310827802759290774">"手勢輸入"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"以手指寫出字詞中字母的方式來輸入字詞"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"顯示手勢軌跡"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"顯示手勢字詞"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"使用手勢輸入時顯示浮動預覽字詞"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>:已儲存"</string>
     <string name="label_go_key" msgid="1635148082137219148">"開始"</string>
     <string name="label_next_key" msgid="362972844525672568">"繼續"</string>
diff --git a/java/res/values-zu/strings.xml b/java/res/values-zu/strings.xml
index c721921..2b2a587 100644
--- a/java/res/values-zu/strings.xml
+++ b/java/res/values-zu/strings.xml
@@ -60,12 +60,9 @@
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Ngokususela egameni langaphambilini"</string>
     <string name="gesture_input" msgid="3310827802759290774">"Okokufaka kokuthinta"</string>
     <string name="gesture_input_summary" msgid="7019742443455085809">"Faka igama ngokulandela ngomkhondo izinhlamvu zegama"</string>
-    <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text (6859416520117939680) -->
-    <skip />
-    <!-- no translation found for gesture_floating_preview_text_summary (3333754126434989709) -->
-    <skip />
+    <string name="gesture_preview_trail" msgid="3802333369335722221">"Bonisa i-trail yokuthinta"</string>
+    <string name="gesture_floating_preview_text" msgid="6859416520117939680">"Bonisa igama lokuthinta"</string>
+    <string name="gesture_floating_preview_text_summary" msgid="3333754126434989709">"Bonisa igama lokuhlola kuqala elintantayo nokuthinta"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : Kulondoloziwe"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Iya"</string>
     <string name="label_next_key" msgid="362972844525672568">"Okulandelayo"</string>
diff --git a/java/src/com/android/inputmethod/compat/InputMethodServiceCompatUtils.java b/java/src/com/android/inputmethod/compat/InputMethodServiceCompatUtils.java
new file mode 100644
index 0000000..0befa7a
--- /dev/null
+++ b/java/src/com/android/inputmethod/compat/InputMethodServiceCompatUtils.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2012 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.compat;
+
+import android.inputmethodservice.InputMethodService;
+
+import java.lang.reflect.Method;
+
+public class InputMethodServiceCompatUtils {
+    private static final Method METHOD_enableHardwareAcceleration =
+            CompatUtils.getMethod(InputMethodService.class, "enableHardwareAcceleration");
+
+    private InputMethodServiceCompatUtils() {
+        // This utility class is not publicly instantiable.
+    }
+
+    public static boolean enableHardwareAcceleration(InputMethodService ims) {
+        return (Boolean)CompatUtils.invoke(ims, false, METHOD_enableHardwareAcceleration);
+    }
+}
diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java
index f1a35b2..3abe890 100644
--- a/java/src/com/android/inputmethod/keyboard/Keyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/Keyboard.java
@@ -604,9 +604,6 @@
             }
 
             public float getKeyX(TypedArray keyAttr) {
-                final int widthType = Builder.getEnumValue(keyAttr,
-                        R.styleable.Keyboard_Key_keyWidth, KEYWIDTH_NOT_ENUM);
-
                 final int keyboardRightEdge = mParams.mOccupiedWidth
                         - mParams.mHorizontalEdgesPadding;
                 if (keyAttr.hasValue(R.styleable.Keyboard_Key_keyXPos)) {
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
index d7ce659..6b1320d 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
@@ -25,7 +25,7 @@
 import android.graphics.Paint.Align;
 import android.graphics.PorterDuff;
 import android.graphics.Rect;
-import android.graphics.Region.Op;
+import android.graphics.Region;
 import android.graphics.Typeface;
 import android.graphics.drawable.Drawable;
 import android.os.Message;
@@ -120,12 +120,12 @@
     private boolean mInvalidateAllKeys;
     /** The keys that should be drawn */
     private final HashSet<Key> mInvalidatedKeys = new HashSet<Key>();
-    /** The region of invalidated keys */
-    private final Rect mInvalidatedKeysRect = new Rect();
+    /** The working rectangle variable */
+    private final Rect mWorkingRect = new Rect();
     /** The keyboard bitmap buffer for faster updates */
-    private Bitmap mBuffer;
+    private Bitmap mOffscreenBuffer;
     /** The canvas for the above mutable keyboard bitmap */
-    private Canvas mCanvas;
+    private Canvas mOffscreenCanvas;
     private final Paint mPaint = new Paint();
     private final Paint.FontMetrics mFontMetrics = new Paint.FontMetrics();
     // This sparse array caches key label text height in pixel indexed by key label text size.
@@ -457,46 +457,61 @@
     @Override
     public void onDraw(Canvas canvas) {
         super.onDraw(canvas);
-        if (mBufferNeedsUpdate || mBuffer == null) {
+        if (mBufferNeedsUpdate || mOffscreenBuffer == null) {
             mBufferNeedsUpdate = false;
-            onBufferDraw();
+            if (maybeAllocateOffscreenBuffer()) {
+                mInvalidateAllKeys = true;
+                if (mOffscreenCanvas != null) {
+                    mOffscreenCanvas.setBitmap(mOffscreenBuffer);
+                } else {
+                    mOffscreenCanvas = new Canvas(mOffscreenBuffer);
+                }
+            }
+            onDrawKeyboard(mOffscreenCanvas);
         }
-        canvas.drawBitmap(mBuffer, 0, 0, null);
+        canvas.drawBitmap(mOffscreenBuffer, 0, 0, null);
     }
 
-    private void onBufferDraw() {
+    private boolean maybeAllocateOffscreenBuffer() {
         final int width = getWidth();
         final int height = getHeight();
-        if (width == 0 || height == 0)
-            return;
-        if (mBuffer == null || mBuffer.getWidth() != width || mBuffer.getHeight() != height) {
-            if (mBuffer != null)
-                mBuffer.recycle();
-            mBuffer = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
-            mInvalidateAllKeys = true;
-            if (mCanvas != null) {
-                mCanvas.setBitmap(mBuffer);
-            } else {
-                mCanvas = new Canvas(mBuffer);
-            }
+        if (width == 0 || height == 0) {
+            return false;
         }
+        if (mOffscreenBuffer != null && mOffscreenBuffer.getWidth() == width
+                && mOffscreenBuffer.getHeight() == height) {
+            return false;
+        }
+        freeOffscreenBuffer();
+        mOffscreenBuffer = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
+        return true;
+    }
 
+    private void freeOffscreenBuffer() {
+        if (mOffscreenBuffer != null) {
+            mOffscreenBuffer.recycle();
+            mOffscreenBuffer = null;
+        }
+    }
+
+    private void onDrawKeyboard(final Canvas canvas) {
         if (mKeyboard == null) return;
 
-        final Canvas canvas = mCanvas;
+        final int width = getWidth();
+        final int height = getHeight();
         final Paint paint = mPaint;
         final KeyDrawParams params = mKeyDrawParams;
 
         if (mInvalidateAllKeys || mInvalidatedKeys.isEmpty()) {
-            mInvalidatedKeysRect.set(0, 0, width, height);
-            canvas.clipRect(mInvalidatedKeysRect, Op.REPLACE);
+            mWorkingRect.set(0, 0, width, height);
+            canvas.clipRect(mWorkingRect, Region.Op.REPLACE);
             canvas.drawColor(Color.BLACK, PorterDuff.Mode.CLEAR);
             // Draw all keys.
             for (final Key key : mKeyboard.mKeys) {
                 onDrawKey(key, canvas, paint, params);
             }
             if (mNeedsToDimEntireKeyboard) {
-                drawDimRectangle(canvas, mInvalidatedKeysRect, mBackgroundDimAlpha, paint);
+                drawDimRectangle(canvas, mWorkingRect, mBackgroundDimAlpha, paint);
             }
         } else {
             // Draw invalidated keys.
@@ -506,12 +521,12 @@
                 }
                 final int x = key.mX + getPaddingLeft();
                 final int y = key.mY + getPaddingTop();
-                mInvalidatedKeysRect.set(x, y, x + key.mWidth, y + key.mHeight);
-                canvas.clipRect(mInvalidatedKeysRect, Op.REPLACE);
+                mWorkingRect.set(x, y, x + key.mWidth, y + key.mHeight);
+                canvas.clipRect(mWorkingRect, Region.Op.REPLACE);
                 canvas.drawColor(Color.BLACK, PorterDuff.Mode.CLEAR);
                 onDrawKey(key, canvas, paint, params);
                 if (mNeedsToDimEntireKeyboard) {
-                    drawDimRectangle(canvas, mInvalidatedKeysRect, mBackgroundDimAlpha, paint);
+                    drawDimRectangle(canvas, mWorkingRect, mBackgroundDimAlpha, paint);
                 }
             }
         }
@@ -524,7 +539,6 @@
         }
 
         mInvalidatedKeys.clear();
-        mInvalidatedKeysRect.setEmpty();
         mInvalidateAllKeys = false;
     }
 
@@ -1026,9 +1040,9 @@
         mInvalidatedKeys.add(key);
         final int x = key.mX + getPaddingLeft();
         final int y = key.mY + getPaddingTop();
-        mInvalidatedKeysRect.union(x, y, x + key.mWidth, y + key.mHeight);
+        mWorkingRect.set(x, y, x + key.mWidth, y + key.mHeight);
         mBufferNeedsUpdate = true;
-        invalidate(mInvalidatedKeysRect);
+        invalidate(mWorkingRect);
     }
 
     public void closing() {
@@ -1054,9 +1068,6 @@
         super.onDetachedFromWindow();
         closing();
         mPreviewPlacerView.removeAllViews();
-        if (mBuffer != null) {
-            mBuffer.recycle();
-            mBuffer = null;
-        }
+        freeOffscreenBuffer();
     }
 }
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index 0a284cc..e7e11f4 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -408,7 +408,7 @@
             if (mDrawingProxy != null) {
                 setReleasedKeyGraphics(mCurrentKey);
             }
-            mCurrentKey = newKey;
+            // Keep {@link #mCurrentKey} that comes from previous keyboard.
         }
         final int keyQuarterWidth = mKeyboard.mMostCommonKeyWidth / 4;
         mKeyQuarterWidthSquared = keyQuarterWidth * keyQuarterWidth;
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 30edd20..8dc1081 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -60,6 +60,7 @@
 import com.android.inputmethod.accessibility.AccessibleKeyboardViewProxy;
 import com.android.inputmethod.compat.CompatUtils;
 import com.android.inputmethod.compat.InputMethodManagerCompatWrapper;
+import com.android.inputmethod.compat.InputMethodServiceCompatUtils;
 import com.android.inputmethod.compat.SuggestionSpanUtils;
 import com.android.inputmethod.keyboard.KeyDetector;
 import com.android.inputmethod.keyboard.Keyboard;
@@ -175,6 +176,8 @@
 
     private AlertDialog mOptionsDialog;
 
+    private final boolean mIsHardwareAcceleratedDrawingEnabled;
+
     public final UIHandler mHandler = new UIHandler(this);
 
     public static class UIHandler extends StaticInnerHandlerWrapper<LatinIME> {
@@ -347,6 +350,9 @@
         super();
         mSubtypeSwitcher = SubtypeSwitcher.getInstance();
         mKeyboardSwitcher = KeyboardSwitcher.getInstance();
+        mIsHardwareAcceleratedDrawingEnabled =
+                InputMethodServiceCompatUtils.enableHardwareAcceleration(this);
+        Log.i(TAG, "Hardware accelerated drawing: " + mIsHardwareAcceleratedDrawingEnabled);
     }
 
     @Override
diff --git a/native/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp b/native/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp
index fb55ea7..93e19b3 100644
--- a/native/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp
+++ b/native/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp
@@ -21,11 +21,6 @@
 #include "jni_common.h"
 #include "proximity_info.h"
 
-#include <cassert>
-#include <cerrno>
-#include <cstdio>
-#include <cstring>
-
 namespace latinime {
 
 static jlong latinime_Keyboard_setProximityInfo(JNIEnv *env, jobject object,
diff --git a/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp b/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
index 435e837..2d3d963 100644
--- a/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
+++ b/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
@@ -17,30 +17,24 @@
 #define LOG_TAG "LatinIME: jni: BinaryDictionary"
 
 #include "binary_format.h"
-#include "correction.h"
 #include "com_android_inputmethod_latin_BinaryDictionary.h"
+#include "correction.h"
 #include "defines.h"
 #include "dictionary.h"
 #include "jni.h"
 #include "jni_common.h"
-#include "proximity_info.h"
-
-#include <cassert>
-#include <cerrno>
-#include <cstdio>
 
 #ifdef USE_MMAP_FOR_DICTIONARY
 #include <sys/mman.h>
-#include <sys/types.h>
-#include <sys/stat.h>
 #include <fcntl.h>
-#include <unistd.h>
 #else // USE_MMAP_FOR_DICTIONARY
 #include <cstdlib>
 #endif // USE_MMAP_FOR_DICTIONARY
 
 namespace latinime {
 
+class ProximityInfo;
+
 void releaseDictBuf(void *dictBuf, const size_t length, int fd);
 
 static jlong latinime_BinaryDictionary_open(JNIEnv *env, jobject object,
diff --git a/native/jni/jni_common.cpp b/native/jni/jni_common.cpp
index 94e279f..cb2351d 100644
--- a/native/jni/jni_common.cpp
+++ b/native/jni/jni_common.cpp
@@ -21,6 +21,7 @@
 #include "com_android_inputmethod_latin_NativeUtils.h"
 #include "defines.h"
 #include "jni.h"
+#include "jni_common.h"
 #include "proximity_info.h"
 
 #include <cassert>
diff --git a/native/jni/src/binary_format.h b/native/jni/src/binary_format.h
index fdc13bf..2ee4077 100644
--- a/native/jni/src/binary_format.h
+++ b/native/jni/src/binary_format.h
@@ -572,8 +572,8 @@
     // 0 for the bigram frequency represents the middle of the 16th step from the top,
     // while a value of 15 represents the middle of the top step.
     // See makedict.BinaryDictInputOutput for details.
-    const float stepSize = ((float)MAX_FREQ - unigramFreq) / (1.5f + MAX_BIGRAM_FREQ);
-    return (int)(unigramFreq + (bigramFreq + 1) * stepSize);
+    const float stepSize = (static_cast<float>(MAX_FREQ) - unigramFreq) / (1.5f + MAX_BIGRAM_FREQ);
+    return static_cast<int>(unigramFreq + (bigramFreq + 1) * stepSize);
 }
 
 // This returns a probability in log space.
diff --git a/native/jni/src/char_utils.cpp b/native/jni/src/char_utils.cpp
index 88803cb..45d49b0 100644
--- a/native/jni/src/char_utils.cpp
+++ b/native/jni/src/char_utils.cpp
@@ -16,6 +16,8 @@
 
 #include <cstdlib>
 
+#include "char_utils.h"
+
 namespace latinime {
 
 struct LatinCapitalSmallPair {
diff --git a/native/jni/src/correction.cpp b/native/jni/src/correction.cpp
index 921ab0a..ea4bdda 100644
--- a/native/jni/src/correction.cpp
+++ b/native/jni/src/correction.cpp
@@ -24,12 +24,12 @@
 #include "char_utils.h"
 #include "correction.h"
 #include "defines.h"
-#include "dictionary.h"
-#include "proximity_info.h"
 #include "proximity_info_state.h"
 
 namespace latinime {
 
+class ProximityInfo;
+
 /////////////////////////////
 // edit distance funcitons //
 /////////////////////////////
@@ -94,11 +94,11 @@
 //////////////////////
 // inline functions //
 //////////////////////
-static const char QUOTE = '\'';
+static const char SINGLE_QUOTE = '\'';
 
-inline bool Correction::isQuote(const unsigned short c) {
+inline bool Correction::isSingleQuote(const unsigned short c) {
     const unsigned short userTypedChar = mProximityInfoState.getPrimaryCharAt(mInputIndex);
-    return (c == QUOTE && userTypedChar != QUOTE);
+    return (c == SINGLE_QUOTE && userTypedChar != SINGLE_QUOTE);
 }
 
 ////////////////
@@ -325,7 +325,7 @@
     mDistances[mOutputIndex] = NOT_A_DISTANCE;
 
     // Skip checking this node
-    if (mNeedsToTraverseAllNodes || isQuote(c)) {
+    if (mNeedsToTraverseAllNodes || isSingleQuote(c)) {
         bool incremented = false;
         if (mLastCharExceeded && mInputIndex == mInputLength - 1) {
             // TODO: Do not check the proximity if EditDistance exceeds the threshold
@@ -343,7 +343,7 @@
                 mDistances[mOutputIndex] = mProximityInfoState.getNormalizedSquaredDistance(
                         mInputIndex, proximityIndex);
             }
-            if (!isQuote(c)) {
+            if (!isSingleQuote(c)) {
                 incrementInputIndex();
                 incremented = true;
             }
@@ -790,7 +790,7 @@
                 static const float MIN = 0.3f;
                 static const float R1 = NEUTRAL_SCORE_SQUARED_RADIUS;
                 static const float R2 = HALF_SCORE_SQUARED_RADIUS;
-                const float x = (float)squaredDistance
+                const float x = static_cast<float>(squaredDistance)
                         / ProximityInfoState::NORMALIZED_SQUARED_DISTANCE_SCALING_FACTOR;
                 const float factor = max((x < R1)
                     ? (A * (R1 - x) + B * x) / R1
@@ -1132,13 +1132,14 @@
     }
 
     const float maxScore = score >= S_INT_MAX ? S_INT_MAX : MAX_INITIAL_SCORE
-            * pow((float)TYPED_LETTER_MULTIPLIER,
-                    (float)min(beforeLength, afterLength - spaceCount)) * FULL_WORD_MULTIPLIER;
+            * pow(static_cast<float>(TYPED_LETTER_MULTIPLIER),
+                    static_cast<float>(min(beforeLength, afterLength - spaceCount)))
+            * FULL_WORD_MULTIPLIER;
 
     // add a weight based on edit distance.
     // distance <= max(afterLength, beforeLength) == afterLength,
     // so, 0 <= distance / afterLength <= 1
-    const float weight = 1.0 - (float) distance / afterLength;
+    const float weight = 1.0f - static_cast<float>(distance) / static_cast<float>(afterLength);
     return (score / maxScore) * weight;
 }
 } // namespace latinime
diff --git a/native/jni/src/correction.h b/native/jni/src/correction.h
index a7028ac..81623a4 100644
--- a/native/jni/src/correction.h
+++ b/native/jni/src/correction.h
@@ -197,7 +197,7 @@
     inline void incrementInputIndex();
     inline void incrementOutputIndex();
     inline void startToTraverseAllNodes();
-    inline bool isQuote(const unsigned short c);
+    inline bool isSingleQuote(const unsigned short c);
     inline CorrectionType processSkipChar(
             const int32_t c, const bool isTerminal, const bool inputIndexIncremented);
     inline CorrectionType processUnrelatedCorrectionType();
diff --git a/native/jni/src/defines.h b/native/jni/src/defines.h
index e172b04..2b30f3c 100644
--- a/native/jni/src/defines.h
+++ b/native/jni/src/defines.h
@@ -88,7 +88,7 @@
         AKLOGI("Error: You must call PROF_OPEN before PROF_CLOSE.");
     }
     AKLOGI("Total time is %6.3f ms.",
-            profile_buf[PROF_BUF_SIZE - 1] * 1000 / (float)CLOCKS_PER_SEC);
+            profile_buf[PROF_BUF_SIZE - 1] * 1000.0f / static_cast<float>(CLOCKS_PER_SEC));
     float all = 0;
     for (int i = 0; i < PROF_BUF_SIZE - 1; ++i) {
         all += profile_buf[i];
@@ -98,7 +98,8 @@
         if (profile_buf[i]) {
             AKLOGI("(%d): Used %4.2f%%, %8.4f ms. Called %d times.",
                     i, (profile_buf[i] * 100 / all),
-                    profile_buf[i] * 1000 / (float)CLOCKS_PER_SEC, profile_counter[i]);
+                    profile_buf[i] * 1000.0f / static_cast<float>(CLOCKS_PER_SEC),
+                    profile_counter[i]);
         }
     }
 }
diff --git a/native/jni/src/dictionary.cpp b/native/jni/src/dictionary.cpp
index b9f6534..6c72211 100644
--- a/native/jni/src/dictionary.cpp
+++ b/native/jni/src/dictionary.cpp
@@ -16,10 +16,14 @@
 
 #define LOG_TAG "LatinIME: dictionary.cpp"
 
+#include <stdint.h>
+
+#include "bigram_dictionary.h"
 #include "binary_format.h"
 #include "defines.h"
 #include "dictionary.h"
 #include "gesture_decoder_wrapper.h"
+#include "unigram_dictionary.h"
 
 namespace latinime {
 
@@ -52,6 +56,37 @@
     delete mGestureDecoder;
 }
 
+int Dictionary::getSuggestions(ProximityInfo *proximityInfo, int *xcoordinates, int *ycoordinates,
+        int *times, int *pointerIds, int *codes, int codesSize, int *prevWordChars,
+        int prevWordLength, int commitPoint, bool isGesture,
+        bool useFullEditDistance, unsigned short *outWords,
+        int *frequencies, int *spaceIndices, int *outputTypes) {
+    int result = 0;
+    if (isGesture) {
+        mGestureDecoder->setPrevWord(prevWordChars, prevWordLength);
+        result = mGestureDecoder->getSuggestions(proximityInfo, xcoordinates, ycoordinates,
+                times, pointerIds, codes, codesSize, commitPoint,
+                outWords, frequencies, spaceIndices, outputTypes);
+        return result;
+    } else {
+        std::map<int, int> bigramMap;
+        uint8_t bigramFilter[BIGRAM_FILTER_BYTE_SIZE];
+        mBigramDictionary->fillBigramAddressToFrequencyMapAndFilter(prevWordChars,
+                prevWordLength, &bigramMap, bigramFilter);
+        result = mUnigramDictionary->getSuggestions(proximityInfo, xcoordinates,
+                ycoordinates, codes, codesSize, &bigramMap, bigramFilter,
+                useFullEditDistance, outWords, frequencies, outputTypes);
+        return result;
+    }
+}
+
+int Dictionary::getBigrams(const int32_t *word, int length, int *codes, int codesSize,
+        unsigned short *outWords, int *frequencies, int *outputTypes) const {
+    if (length <= 0) return 0;
+    return mBigramDictionary->getBigrams(word, length, codes, codesSize, outWords, frequencies,
+            outputTypes);
+}
+
 int Dictionary::getFrequency(const int32_t *word, int length) const {
     return mUnigramDictionary->getFrequency(word, length);
 }
diff --git a/native/jni/src/dictionary.h b/native/jni/src/dictionary.h
index f625813..ab238c8 100644
--- a/native/jni/src/dictionary.h
+++ b/native/jni/src/dictionary.h
@@ -17,18 +17,17 @@
 #ifndef LATINIME_DICTIONARY_H
 #define LATINIME_DICTIONARY_H
 
-#include <map>
+#include <stdint.h>
 
-#include "bigram_dictionary.h"
-#include "char_utils.h"
 #include "defines.h"
-#include "incremental_decoder_interface.h"
-#include "proximity_info.h"
-#include "unigram_dictionary.h"
-#include "words_priority_queue_pool.h"
 
 namespace latinime {
 
+class BigramDictionary;
+class IncrementalDecoderInterface;
+class ProximityInfo;
+class UnigramDictionary;
+
 class Dictionary {
  public:
     // Taken from SuggestedWords.java
@@ -49,32 +48,10 @@
             int *times, int *pointerIds, int *codes, int codesSize, int *prevWordChars,
             int prevWordLength, int commitPoint, bool isGesture,
             bool useFullEditDistance, unsigned short *outWords,
-            int *frequencies, int *spaceIndices, int *outputTypes) {
-        int result = 0;
-        if (isGesture) {
-            mGestureDecoder->setPrevWord(prevWordChars, prevWordLength);
-            result = mGestureDecoder->getSuggestions(proximityInfo, xcoordinates, ycoordinates,
-                    times, pointerIds, codes, codesSize, commitPoint,
-                    outWords, frequencies, spaceIndices, outputTypes);
-            return result;
-        } else {
-            std::map<int, int> bigramMap;
-            uint8_t bigramFilter[BIGRAM_FILTER_BYTE_SIZE];
-            mBigramDictionary->fillBigramAddressToFrequencyMapAndFilter(prevWordChars,
-                    prevWordLength, &bigramMap, bigramFilter);
-            result = mUnigramDictionary->getSuggestions(proximityInfo, xcoordinates,
-                    ycoordinates, codes, codesSize, &bigramMap, bigramFilter,
-                    useFullEditDistance, outWords, frequencies, outputTypes);
-            return result;
-        }
-    }
+            int *frequencies, int *spaceIndices, int *outputTypes);
 
     int getBigrams(const int32_t *word, int length, int *codes, int codesSize,
-            unsigned short *outWords, int *frequencies, int *outputTypes) const {
-        if (length <= 0) return 0;
-        return mBigramDictionary->getBigrams(word, length, codes, codesSize, outWords, frequencies,
-                outputTypes);
-    }
+            unsigned short *outWords, int *frequencies, int *outputTypes) const;
 
     int getFrequency(const int32_t *word, int length) const;
     bool isValidBigram(const int32_t *word1, int length1, const int32_t *word2, int length2) const;
@@ -82,7 +59,7 @@
     int getDictSize() const { return mDictSize; }
     int getMmapFd() const { return mMmapFd; }
     int getDictBufAdjust() const { return mDictBufAdjust; }
-    ~Dictionary();
+    virtual ~Dictionary();
 
     // public static utility methods
     // static inline methods should be defined in the header file
diff --git a/native/jni/src/proximity_info.cpp b/native/jni/src/proximity_info.cpp
index 53ae1ea..cee408d 100644
--- a/native/jni/src/proximity_info.cpp
+++ b/native/jni/src/proximity_info.cpp
@@ -22,10 +22,9 @@
 #define LOG_TAG "LatinIME: proximity_info.cpp"
 
 #include "additional_proximity_chars.h"
+#include "char_utils.h"
 #include "defines.h"
-#include "dictionary.h"
 #include "proximity_info.h"
-#include "proximity_info_state.h"
 
 namespace latinime {
 
@@ -216,7 +215,7 @@
 void ProximityInfo::getCenters(int *centerXs, int *centerYs, int *codeToKeyIndex,
         int *keyToCodeIndex, int *keyCount, int *keyWidth) const {
     *keyCount = KEY_COUNT;
-    *keyWidth = sqrt((float)MOST_COMMON_KEY_WIDTH_SQUARE);
+    *keyWidth = sqrt(static_cast<float>(MOST_COMMON_KEY_WIDTH_SQUARE));
 
     for (int i = 0; i < KEY_COUNT; ++i) {
         const int code = mKeyCharCodes[i];
diff --git a/native/jni/src/proximity_info_state.cpp b/native/jni/src/proximity_info_state.cpp
index 04a2017..86c8a69 100644
--- a/native/jni/src/proximity_info_state.cpp
+++ b/native/jni/src/proximity_info_state.cpp
@@ -14,14 +14,12 @@
  * limitations under the License.
  */
 
-#include <cassert>
+#include <cstring> // for memset()
 #include <stdint.h>
 
 #define LOG_TAG "LatinIME: proximity_info_state.cpp"
 
-#include "additional_proximity_chars.h"
 #include "defines.h"
-#include "dictionary.h"
 #include "proximity_info.h"
 #include "proximity_info_state.h"
 
@@ -131,8 +129,8 @@
         const int keyIndex, const int inputIndex) const {
     const float sweetSpotCenterX = mProximityInfo->getSweetSpotCenterXAt(keyIndex);
     const float sweetSpotCenterY = mProximityInfo->getSweetSpotCenterYAt(keyIndex);
-    const float inputX = (float)mInputXCoordinates[inputIndex];
-    const float inputY = (float)mInputYCoordinates[inputIndex];
+    const float inputX = static_cast<float>(mInputXCoordinates[inputIndex]);
+    const float inputY = static_cast<float>(mInputYCoordinates[inputIndex]);
     return square(inputX - sweetSpotCenterX) + square(inputY - sweetSpotCenterY);
 }
 } // namespace latinime
diff --git a/native/jni/src/proximity_info_state.h b/native/jni/src/proximity_info_state.h
index 456e3ec..76d4551 100644
--- a/native/jni/src/proximity_info_state.h
+++ b/native/jni/src/proximity_info_state.h
@@ -17,11 +17,9 @@
 #ifndef LATINIME_PROXIMITY_INFO_STATE_H
 #define LATINIME_PROXIMITY_INFO_STATE_H
 
-#include <cassert>
 #include <stdint.h>
 #include <string>
 
-#include "additional_proximity_chars.h"
 #include "char_utils.h"
 #include "defines.h"
 
diff --git a/native/jni/src/unigram_dictionary.cpp b/native/jni/src/unigram_dictionary.cpp
index efcf512..b6b0210 100644
--- a/native/jni/src/unigram_dictionary.cpp
+++ b/native/jni/src/unigram_dictionary.cpp
@@ -19,13 +19,15 @@
 
 #define LOG_TAG "LatinIME: unigram_dictionary.cpp"
 
+#include "binary_format.h"
 #include "char_utils.h"
 #include "defines.h"
 #include "dictionary.h"
-#include "unigram_dictionary.h"
-
-#include "binary_format.h"
+#include "proximity_info.h"
 #include "terminal_attributes.h"
+#include "unigram_dictionary.h"
+#include "words_priority_queue.h"
+#include "words_priority_queue_pool.h"
 
 namespace latinime {
 
diff --git a/native/jni/src/words_priority_queue.h b/native/jni/src/words_priority_queue.h
index b24cf84..c0dedb5 100644
--- a/native/jni/src/words_priority_queue.h
+++ b/native/jni/src/words_priority_queue.h
@@ -18,7 +18,6 @@
 #define LATINIME_WORDS_PRIORITY_QUEUE_H
 
 #include <cstring> // for memcpy()
-#include <iostream>
 #include <queue>
 
 #include "correction.h"