Merge "Calculate edit distances incrementally."
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_active_holo.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_active_holo.9.png
index 8bb66b7..9aa8db6 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_dark_active_holo.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_dark_active_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off_holo.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off_holo.9.png
index eb9d740..a3ba223 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off_holo.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on_holo.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on_holo.9.png
index 869a330..9f4587b 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on_holo.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off_holo.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off_holo.9.png
index 72d63da..655bc01 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off_holo.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on_holo.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on_holo.9.png
index fcc5cac..138e915 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on_holo.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_background_holo.9.png b/java/res/drawable-hdpi/keyboard_background_holo.9.png
index 714db43..7386875 100644
--- a/java/res/drawable-hdpi/keyboard_background_holo.9.png
+++ b/java/res/drawable-hdpi/keyboard_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_search_holo.png b/java/res/drawable-hdpi/sym_keyboard_search_holo.png
index d888214..b987a20 100644
--- a/java/res/drawable-hdpi/sym_keyboard_search_holo.png
+++ b/java/res/drawable-hdpi/sym_keyboard_search_holo.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_settings_holo.png b/java/res/drawable-hdpi/sym_keyboard_settings_holo.png
index c08b2b7..5af09ad 100644
--- a/java/res/drawable-hdpi/sym_keyboard_settings_holo.png
+++ b/java/res/drawable-hdpi/sym_keyboard_settings_holo.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_active_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_active_holo.9.png
index c8d7ee0..e810c77 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_dark_active_holo.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_dark_active_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off_holo.9.png
index 80fe863..fa24d59 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off_holo.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on_holo.9.png
index 196d6d9..f3fc641 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on_holo.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off_holo.9.png
index b34b957..53ea5f8 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off_holo.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on_holo.9.png
index 02f4b3d..69c84e7 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on_holo.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_background_holo.9.png b/java/res/drawable-mdpi/keyboard_background_holo.9.png
index 2776621..fbe97f7 100644
--- a/java/res/drawable-mdpi/keyboard_background_holo.9.png
+++ b/java/res/drawable-mdpi/keyboard_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_search_holo.png b/java/res/drawable-mdpi/sym_keyboard_search_holo.png
index 9eb214a..dd3c83a 100644
--- a/java/res/drawable-mdpi/sym_keyboard_search_holo.png
+++ b/java/res/drawable-mdpi/sym_keyboard_search_holo.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_settings_holo.png b/java/res/drawable-mdpi/sym_keyboard_settings_holo.png
index 7ac90d0..36c8c96 100644
--- a/java/res/drawable-mdpi/sym_keyboard_settings_holo.png
+++ b/java/res/drawable-mdpi/sym_keyboard_settings_holo.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_active_holo.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_dark_active_holo.9.png
index eba91db..d990c02 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_dark_active_holo.9.png
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_dark_active_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_off_holo.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_off_holo.9.png
index 0f709eb..bca39cf 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_off_holo.9.png
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_off_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_on_holo.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_on_holo.9.png
index 2f4de8e..ab8fb2e 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_on_holo.9.png
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_on_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_off_holo.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_off_holo.9.png
index 836ea6e..9125063 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_off_holo.9.png
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_off_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_on_holo.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_on_holo.9.png
index 279db1f..35ce67f 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_on_holo.9.png
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_on_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_background_holo.9.png b/java/res/drawable-xhdpi/keyboard_background_holo.9.png
index a0aa4ba..f5c9df3 100644
--- a/java/res/drawable-xhdpi/keyboard_background_holo.9.png
+++ b/java/res/drawable-xhdpi/keyboard_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_search_holo.png b/java/res/drawable-xhdpi/sym_keyboard_search_holo.png
index 0f4caad..f2fb2a2 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_search_holo.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_search_holo.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_settings_holo.png b/java/res/drawable-xhdpi/sym_keyboard_settings_holo.png
index 16a8aea..99ee97d 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_settings_holo.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_settings_holo.png
Binary files differ
diff --git a/java/res/values-ar/donottranslate-more-keys.xml b/java/res/values-ar/donottranslate-more-keys.xml
index 2596be0..36f670e 100644
--- a/java/res/values-ar/donottranslate-more-keys.xml
+++ b/java/res/values-ar/donottranslate-more-keys.xml
@@ -20,17 +20,24 @@
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- \u060c: ARABIC COMMA
          \u061b: ARABIC SEMICOLON
-         \u061f: ARABIC QUESTION MARK
-         \u0651: ARABIC SHADDA
+         \u061f: ARABIC QUESTION MARK -->
+    <!-- \u0650: ARABIC KASRA
+         \u064e: ARABIC FATHA
+         \u064b: ARABIC FATHATAN
+         \u0640: ARABIC TATWEEL
+         \u064d: ARABIC KASRATAN
+         \u0670: ARABIC LETTER SUPERSCRIPT ALEF
+         \u0656: ARABIC SUBSCRIPT ALEF
+         \u0654: ARABIC HAMZA ABOVE
+         \u0655: ARABIC HAMZA BELOW -->
+    <!-- \u0651: ARABIC SHADDA
          \u0652: ARABIC SUKUN
          \u064c: ARABIC DAMMATAN
-         \u0640: ARABIC TATWEEL
-         \u064f: ARABIC DAMMA
-         \u064e: ARABIC FATHA
-         \u0650: ARABIC KASRA
-         \u064b: ARABIC FATHATAN
-         \u064d: ARABIC KASRATAN -->
-    <string name="more_keys_for_punctuation">"\u060c,\u061b,\u061f,!,:,-,/,\',\",\u0651,\u0652,\u064c,\u0640,\u064f,\u064e,\u0650,\u064b,\u064d"</string>
+         \u0653: ARABIC MADDAH ABOVE
+         \u064f: ARABIC DAMMA -->
+    <!-- In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label. -->
+    <!-- TODO: Will introduce "grouping marks" to the more characters specification. -->
+    <string name="more_keys_for_punctuation">"\u060c,\u061b,\u061f,!,:,-,/,\',\",\u0640\u0640\u0640|\u0640,\u064e,\u0650,\u064b,\u064d,\u0670,\u0656,\u0655,\u0654,\u0653,\u0652,\u0651,\u064c,\u064f"</string>
     <integer name="mini_keyboard_column_for_punctuation">9</integer>
     <string name="keyhintlabel_for_punctuation">\u064b</string>
     <string name="keylabel_for_symbols_1">"١"</string>
@@ -43,16 +50,18 @@
     <string name="keylabel_for_symbols_8">"٨"</string>
     <string name="keylabel_for_symbols_9">"٩"</string>
     <string name="keylabel_for_symbols_0">"٠"</string>
-    <string name="more_keys_for_symbols_1">1,¹,½,⅓,¼,⅛</string>
-    <string name="more_keys_for_symbols_2">2,²,⅔</string>
-    <string name="more_keys_for_symbols_3">3,³,¾,⅜</string>
-    <string name="more_keys_for_symbols_4">4,⁴</string>
-    <string name="more_keys_for_symbols_5">5,⅝</string>
+    <string name="more_keys_for_symbols_1">1</string>
+    <string name="more_keys_for_symbols_2">2</string>
+    <string name="more_keys_for_symbols_3">3</string>
+    <string name="more_keys_for_symbols_4">4</string>
+    <string name="more_keys_for_symbols_5">5</string>
     <string name="more_keys_for_symbols_6">6</string>
-    <string name="more_keys_for_symbols_7">7,⅞</string>
+    <string name="more_keys_for_symbols_7">7</string>
     <string name="more_keys_for_symbols_8">8</string>
     <string name="more_keys_for_symbols_9">9</string>
-    <string name="more_keys_for_symbols_0">0,ⁿ,∅</string>
+    <!-- \u066b: ARABIC DECIMAL SEPARATOR
+         \u066c: ARABIC THOUSANDS SEPARATOR -->
+    <string name="more_keys_for_symbols_0">0,\u066b,\u066c</string>
     <string name="keylabel_for_comma">\u060c</string>
     <string name="keylabel_for_f1">\u060c</string>
     <string name="keylabel_for_symbols_question">\u061f</string>
@@ -65,15 +74,33 @@
     <string name="more_keys_for_f1_settings">\\,,\@icon/3|\@integer/key_settings</string>
     <!-- @icon/7 is iconTabKey -->
     <string name="more_keys_for_f1_navigate">\\,,\@icon/7|\@integer/key_tab</string>
-    <string name="more_keys_for_symbols_question">\?,¿</string>
+    <string name="more_keys_for_symbols_question">\?</string>
     <string name="more_keys_for_symbols_semicolon">;</string>
     <string name="more_keys_for_symbols_percent">%,‰</string>
-    <string name="keylabel_for_apostrophe">"،"</string>
+    <!-- \u060c: ARABIC COMMA
+         \u061b: ARABIC SEMICOLON
+         \u061f: ARABIC QUESTION MARK -->
+    <string name="keylabel_for_apostrophe">"\u060c"</string>
     <string name="keylabel_for_dash">"."</string>
-    <string name="keyhintlabel_for_apostrophe">"؟"</string>
+    <string name="keyhintlabel_for_apostrophe">"\u061f"</string>
     <string name="keyhintlabel_for_dash">"\u064b"</string>
     <string name="more_keys_for_apostrophe">"\u061f,\u061b,!,:,-,/,\',\""</string>
-    <string name="more_keys_for_dash">"\u0651,\u0652,\u064c,\u0640,\u064f,\u064e,\u0650,\u064b,\u064d"</string>
+    <!-- \u0651: ARABIC SHADDA
+         \u0652: ARABIC SUKUN
+         \u064c: ARABIC DAMMATAN
+         \u0653: ARABIC MADDAH ABOVE
+         \u064f: ARABIC DAMMA -->
+    <!-- \u0650: ARABIC KASRA
+         \u064e: ARABIC FATHA
+         \u064b: ARABIC FATHATAN
+         \u0640: ARABIC TATWEEL
+         \u064d: ARABIC KASRATAN -->
+    <!-- \u0670: ARABIC LETTER SUPERSCRIPT ALEF
+         \u0656: ARABIC SUBSCRIPT ALEF
+         \u0654: ARABIC HAMZA ABOVE
+         \u0655: ARABIC HAMZA BELOW -->
+    <!-- In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label. -->
+    <string name="more_keys_for_dash">"\u0651,\u0652,\u064c,\u0653,\u064f,\u0650,\u064e,\u064b,\u0640\u0640\u0640|\u0640,\u064d,\u0654,\u0656,\u0655,\u0670"</string>
     <string name="more_keys_for_bullet">♪</string>
     <string name="more_keys_for_star">★</string>
 </resources>
diff --git a/java/res/xml-sw600dp/kbd_rows_arabic.xml b/java/res/xml-sw600dp/kbd_rows_arabic.xml
index 275df50..c2d3cd4 100644
--- a/java/res/xml-sw600dp/kbd_rows_arabic.xml
+++ b/java/res/xml-sw600dp/kbd_rows_arabic.xml
@@ -26,30 +26,47 @@
     <Row
         latin:keyWidth="8.0%p"
     >
+        <!-- \u0636: ARABIC LETTER DAD -->
         <Key
             latin:keyLabel="ض" />
+        <!-- \u0635: ARABIC LETTER SAD -->
         <Key
             latin:keyLabel="ص" />
+        <!-- \u062b: ARABIC LETTER THEH -->
         <Key
             latin:keyLabel="ث" />
+        <!-- \u0642: ARABIC LETTER QAF
+             \u06a8: ARABIC LETTER QAF WITH THREE DOTS ABOVE -->
         <Key
-            latin:keyLabel="ق" />
+            latin:keyLabel="ق"
+            latin:moreKeys="ڨ" />
+        <!-- \u0641: ARABIC LETTER FEH
+             \u06a4: ARABIC LETTER VEH
+             \u06a2: ARABIC LETTER FEH WITH DOT MOVED BELOW
+             \u06a5: ARABIC LETTER FEH WITH THREE DOTS BELOW -->
         <Key
             latin:keyLabel="ف"
-            latin:moreKeys="ڤ" />
+            latin:moreKeys="\u06a4,\u06a2,\u06a5" />
+        <!-- \u063a: ARABIC LETTER GHAIN -->
         <Key
             latin:keyLabel="غ" />
+        <!-- \u0639: ARABIC LETTER AIN -->
         <Key
             latin:keyLabel="ع" />
-        <!-- \ufeeb: ARABIC LETTER HEH INITIAL FORM
-             \u0647\u0640: ARABIC LETTER HEH + ARABIC TATWEEL -->
+        <!-- \u0647: ARABIC LETTER HEH
+             \ufeeb: ARABIC LETTER HEH INITIAL FORM
+             \u0647\u0640: ARABIC LETTER HEH + Zero width joiner -->
         <Key
             latin:keyLabel="ه"
-            latin:moreKeys="\ufeeb|\u0647\u0640" />
+            latin:moreKeys="\ufeeb|\u0647\u200D" />
+        <!-- \u062e: ARABIC LETTER KHAH -->
         <Key
             latin:keyLabel="خ" />
+        <!-- \u062d: ARABIC LETTER HAH -->
         <Key
             latin:keyLabel="ح" />
+        <!-- \u062c: ARABIC LETTER JEEM
+             \u0686: ARABIC LETTER TCHEH -->
         <Key
             latin:keyLabel="ج"
             latin:moreKeys="چ" />
@@ -61,18 +78,28 @@
     <Row
         latin:keyWidth="8.0%p"
     >
+        <!-- \u0634: ARABIC LETTER SHEEN
+             \u069c: ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE -->
         <Key
             latin:keyLabel="ش"
+            latin:moreKeys="ڜ"
             latin:keyXPos="3.0%p" />
+        <!-- \u0633: ARABIC LETTER SEEN -->
         <Key
             latin:keyLabel="س" />
+        <!-- \u064a: ARABIC LETTER YEH
+             \u0626: ARABIC LETTER YEH WITH HAMZA ABOVE
+             \u0649: ARABIC LETTER ALEF MAKSURA -->
         <Key
-            latin:keyLabel="ي" />
+            latin:keyLabel="ي"
+            latin:moreKeys="\u0626,\u0649" />
+        <!-- \u0628: ARABIC LETTER BEH
+             \u067e: ARABIC LETTER PEH -->
         <Key
             latin:keyLabel="ب"
             latin:moreKeys="پ" />
-        <!-- \ufefb: ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
-             \u0644: ARABIC LETTER LAM
+        <!-- \u0644: ARABIC LETTER LAM
+             \ufefb: ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
              \u0627: ARABIC LETTER ALEF
              \ufef7: ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
              \u0623: ARABIC LETTER ALEF WITH HAMZA ABOVE
@@ -83,21 +110,31 @@
         <Key
             latin:keyLabel="ل"
             latin:moreKeys="\ufefb|\u0644\u0627,\ufef7|\u0644\u0623,\ufef9|\u0644\u0625,\ufef5|\u0644\u0622" />
-        <!-- \u0623: ARABIC LETTER ALEF WITH HAMZA ABOVE
+        <!-- \u0627: ARABIC LETTER ALEF
+             \u0621: ARABIC LETTER HAMZA
+             \u0671: ARABIC LETTER ALEF WASLA
+             \u0623: ARABIC LETTER ALEF WITH HAMZA ABOVE
              \u0625: ARABIC LETTER ALEF WITH HAMZA BELOW
              \u0622: ARABIC LETTER ALEF WITH MADDA ABOVE -->
         <Key
             latin:keyLabel="ا"
-            latin:moreKeys="\u0623,\u0625,\u0622" />
+            latin:moreKeys="\u0621,\u0671,\u0623,\u0625,\u0622" />
+        <!-- \u062a: ARABIC LETTER TEH -->
         <Key
             latin:keyLabel="ت" />
+        <!-- \u0646: ARABIC LETTER NOON -->
         <Key
             latin:keyLabel="ن" />
+        <!-- \u0645: ARABIC LETTER MEEM -->
         <Key
             latin:keyLabel="م" />
+        <!-- \u0643: ARABIC LETTER KAF
+             \u06af: ARABIC LETTER GAF
+             \u06a9: ARABIC LETTER KEHEH -->
         <Key
             latin:keyLabel="ك"
-            latin:moreKeys="گ" />
+            latin:moreKeys="\u06af,\u06a9" />
+        <!-- \u0637: ARABIC LETTER TAH -->
         <Key
             latin:keyLabel="ط" />
         <Key
@@ -139,27 +176,39 @@
                     latin:keyStyle="smileyKeyStyle" />
             </default>
         </switch>
+        <!-- \u0626: ARABIC LETTER YEH WITH HAMZA ABOVE -->
         <Key
             latin:keyLabel="ئ" />
+        <!-- \u0621: ARABIC LETTER HAMZA -->
         <Key
             latin:keyLabel="ء" />
+        <!-- \u0624: ARABIC LETTER WAW WITH HAMZA ABOVE -->
         <Key
             latin:keyLabel="ؤ" />
+        <!-- \u0631: ARABIC LETTER REH -->
         <Key
             latin:keyLabel="ر" />
+        <!-- \u0630: ARABIC LETTER THAL -->
         <Key
             latin:keyLabel="ذ" />
+        <!-- \u0649: ARABIC LETTER ALEF MAKSURA -->
         <Key
             latin:keyLabel="ى" />
+        <!-- \u0629: ARABIC LETTER TEH MARBUTA -->
         <Key
             latin:keyLabel="ة" />
+        <!-- \u0648: ARABIC LETTER WAW -->
         <Key
             latin:keyLabel="و" />
+        <!-- \u0632: ARABIC LETTER ZAIN
+             \u0698: ARABIC LETTER JEH -->
         <Key
             latin:keyLabel="ز"
             latin:moreKeys="ژ" />
+        <!-- \u0638: ARABIC LETTER ZAH -->
         <Key
             latin:keyLabel="ظ" />
+        <!-- \u062f: ARABIC LETTER DAL -->
         <Key
             latin:keyLabel="د" />
     </Row>
diff --git a/java/res/xml-sw768dp/kbd_rows_arabic.xml b/java/res/xml-sw768dp/kbd_rows_arabic.xml
index 984ba50..7ec36fd 100644
--- a/java/res/xml-sw768dp/kbd_rows_arabic.xml
+++ b/java/res/xml-sw768dp/kbd_rows_arabic.xml
@@ -30,30 +30,47 @@
             latin:keyStyle="tabKeyStyle"
             latin:keyLabelOption="alignLeft"
             latin:keyWidth="7.500%p" />
+        <!-- \u0636: ARABIC LETTER DAD -->
         <Key
             latin:keyLabel="ض" />
+        <!-- \u0635: ARABIC LETTER SAD -->
         <Key
             latin:keyLabel="ص" />
+        <!-- \u062b: ARABIC LETTER THEH -->
         <Key
             latin:keyLabel="ث" />
+        <!-- \u0642: ARABIC LETTER QAF
+             \u06a8: ARABIC LETTER QAF WITH THREE DOTS ABOVE -->
         <Key
-            latin:keyLabel="ق" />
+            latin:keyLabel="ق"
+            latin:moreKeys="ڨ" />
+        <!-- \u0641: ARABIC LETTER FEH
+             \u06a4: ARABIC LETTER VEH
+             \u06a2: ARABIC LETTER FEH WITH DOT MOVED BELOW
+             \u06a5: ARABIC LETTER FEH WITH THREE DOTS BELOW -->
         <Key
             latin:keyLabel="ف"
-            latin:moreKeys="ڤ" />
+            latin:moreKeys="\u06a4,\u06a2,\u06a5" />
+        <!-- \u063a: ARABIC LETTER GHAIN -->
         <Key
             latin:keyLabel="غ" />
+        <!-- \u0639: ARABIC LETTER AIN -->
         <Key
             latin:keyLabel="ع" />
-        <!-- \ufeeb: ARABIC LETTER HEH INITIAL FORM
-             \u0647\u0640: ARABIC LETTER HEH + ARABIC TATWEEL -->
+        <!-- \u0647: ARABIC LETTER HEH
+             \ufeeb: ARABIC LETTER HEH INITIAL FORM
+             \u0647\u0640: ARABIC LETTER HEH + Zero width joiner -->
         <Key
             latin:keyLabel="ه"
-            latin:moreKeys="\ufeeb|\u0647\u0640" />
+            latin:moreKeys="\ufeeb|\u0647\u200D" />
+        <!-- \u062e: ARABIC LETTER KHAH -->
         <Key
             latin:keyLabel="خ" />
+        <!-- \u062d: ARABIC LETTER HAH -->
         <Key
             latin:keyLabel="ح" />
+        <!-- \u062c: ARABIC LETTER JEEM
+             \u0686: ARABIC LETTER TCHEH -->
         <Key
             latin:keyLabel="ج"
             latin:moreKeys="چ" />
@@ -69,17 +86,27 @@
             latin:keyStyle="toSymbolKeyStyle"
             latin:keyLabelOption="alignLeft"
             latin:keyWidth="9.375%p" />
+        <!-- \u0634: ARABIC LETTER SHEEN
+             \u069c: ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE -->
         <Key
-            latin:keyLabel="ش" />
+            latin:keyLabel="ش"
+            latin:moreKeys="ڜ" />
+        <!-- \u0633: ARABIC LETTER SEEN -->
         <Key
             latin:keyLabel="س" />
+        <!-- \u064a: ARABIC LETTER YEH
+             \u0626: ARABIC LETTER YEH WITH HAMZA ABOVE
+             \u0649: ARABIC LETTER ALEF MAKSURA -->
         <Key
-            latin:keyLabel="ي" />
+            latin:keyLabel="ي"
+            latin:moreKeys="\u0626,\u0649" />
+        <!-- \u0628: ARABIC LETTER BEH
+             \u067e: ARABIC LETTER PEH -->
         <Key
             latin:keyLabel="ب"
             latin:moreKeys="پ" />
-        <!-- \ufefb: ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
-             \u0644: ARABIC LETTER LAM
+        <!-- \u0644: ARABIC LETTER LAM
+             \ufefb: ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
              \u0627: ARABIC LETTER ALEF
              \ufef7: ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
              \u0623: ARABIC LETTER ALEF WITH HAMZA ABOVE
@@ -90,21 +117,30 @@
         <Key
             latin:keyLabel="ل"
             latin:moreKeys="\ufefb|\u0644\u0627,\ufef7|\u0644\u0623,\ufef9|\u0644\u0625,\ufef5|\u0644\u0622" />
-        <!-- \u0623: ARABIC LETTER ALEF WITH HAMZA ABOVE
+        <!-- \u0627: ARABIC LETTER ALEF
+             \u0621: ARABIC LETTER HAMZA
+             \u0671: ARABIC LETTER ALEF WASLA
+             \u0623: ARABIC LETTER ALEF WITH HAMZA ABOVE
              \u0625: ARABIC LETTER ALEF WITH HAMZA BELOW
              \u0622: ARABIC LETTER ALEF WITH MADDA ABOVE -->
         <Key
             latin:keyLabel="ا"
-            latin:moreKeys="\u0623,\u0625,\u0622" />
+            latin:moreKeys="\u0621,\u0671,\u0623,\u0625,\u0622" />
+        <!-- \u062a: ARABIC LETTER TEH -->
         <Key
             latin:keyLabel="ت" />
+        <!-- \u0646: ARABIC LETTER NOON -->
         <Key
             latin:keyLabel="ن" />
+        <!-- \u0645: ARABIC LETTER MEEM -->
         <Key
             latin:keyLabel="م" />
+        <!-- \u0643: ARABIC LETTER KAF
+             \u06af: ARABIC LETTER GAF -->
         <Key
             latin:keyLabel="ك"
             latin:moreKeys="گ" />
+        <!-- \u0637: ARABIC LETTER TAH -->
         <Key
             latin:keyLabel="ط" />
         <Key
@@ -115,28 +151,40 @@
     <Row
         latin:keyWidth="7.375%p"
     >
+        <!-- \u0626: ARABIC LETTER YEH WITH HAMZA ABOVE -->
         <Key
             latin:keyLabel="ئ"
             latin:keyXPos="12.750%p" />
+        <!-- \u0621: ARABIC LETTER HAMZA -->
         <Key
             latin:keyLabel="ء" />
+        <!-- \u0624: ARABIC LETTER WAW WITH HAMZA ABOVE -->
         <Key
             latin:keyLabel="ؤ" />
+        <!-- \u0631: ARABIC LETTER REH -->
         <Key
             latin:keyLabel="ر" />
+        <!-- \u0630: ARABIC LETTER THAL -->
         <Key
             latin:keyLabel="ذ" />
+        <!-- \u0649: ARABIC LETTER ALEF MAKSURA -->
         <Key
             latin:keyLabel="ى" />
+        <!-- \u0629: ARABIC LETTER TEH MARBUTA -->
         <Key
             latin:keyLabel="ة" />
+        <!-- \u0648: ARABIC LETTER WAW -->
         <Key
             latin:keyLabel="و" />
+        <!-- \u0632: ARABIC LETTER ZAIN
+             \u0698: ARABIC LETTER JEH -->
         <Key
             latin:keyLabel="ز"
             latin:moreKeys="ژ" />
+        <!-- \u0638: ARABIC LETTER ZAH -->
         <Key
             latin:keyLabel="ظ" />
+        <!-- \u062f: ARABIC LETTER DAL -->
         <Key
             latin:keyLabel="د" />
     </Row>
diff --git a/java/res/xml/kbd_rows_arabic.xml b/java/res/xml/kbd_rows_arabic.xml
index fba7271..dd5123e 100644
--- a/java/res/xml/kbd_rows_arabic.xml
+++ b/java/res/xml/kbd_rows_arabic.xml
@@ -26,69 +26,89 @@
     <Row
         latin:keyWidth="10%p"
     >
+        <!-- \u0636: ARABIC LETTER DAD -->
         <Key
             latin:keyLabel="ض"
-            latin:keyHintLabel="١"
-            latin:moreKeys="١,1" />
+            latin:keyHintLabel="1"
+            latin:moreKeys="1,١" />
+        <!-- \u0635: ARABIC LETTER SAD -->
         <Key
             latin:keyLabel="ص"
-            latin:keyHintLabel="٢"
-            latin:moreKeys="٢,2" />
+            latin:keyHintLabel="2"
+            latin:moreKeys="2,٢" />
+        <!-- \u0642: ARABIC LETTER QAF
+             \u06a8: ARABIC LETTER QAF WITH THREE DOTS ABOVE -->
         <Key
             latin:keyLabel="ق"
-            latin:keyHintLabel="٣"
-            latin:moreKeys="٣,3" />
-        <!-- \u06a4: ARABIC LETTER VEH -->
+            latin:keyHintLabel="3"
+            latin:moreKeys="3,٣,\u06a8" />
+        <!-- \u0641: ARABIC LETTER FEH
+             \u06a4: ARABIC LETTER VEH
+             \u06a2: ARABIC LETTER FEH WITH DOT MOVED BELOW
+             \u06a5: ARABIC LETTER FEH WITH THREE DOTS BELOW -->
         <Key
             latin:keyLabel="ف"
-            latin:keyHintLabel="٤"
-            latin:moreKeys="٤,4,\u06a4" />
+            latin:keyHintLabel="4"
+            latin:moreKeys="4,٤,\u06a4,\u06a2,\u06a5" />
+        <!-- \u063a: ARABIC LETTER GHAIN -->
         <Key
             latin:keyLabel="غ"
-            latin:keyHintLabel="٥"
-            latin:moreKeys="٥,5" />
+            latin:keyHintLabel="5"
+            latin:moreKeys="5,٥" />
+        <!-- \u0639: ARABIC LETTER AIN -->
         <Key
             latin:keyLabel="ع"
-            latin:keyHintLabel="٦"
-            latin:moreKeys="٦,6" />
-        <!-- \ufeeb: ARABIC LETTER HEH INITIAL FORM
+            latin:keyHintLabel="6"
+            latin:moreKeys="6,٦" />
+        <!-- \u0647: ARABIC LETTER HEH
+             \ufeeb: ARABIC LETTER HEH INITIAL FORM
              \u0647\u0640: ARABIC LETTER HEH + Zero width joiner -->
         <Key
             latin:keyLabel="ه"
-            latin:keyHintLabel="٧"
-            latin:moreKeys="٧,7,\ufeeb|\u0647\u200D" />
+            latin:keyHintLabel="7"
+            latin:moreKeys="7,٧,\ufeeb|\u0647\u200D" />
+        <!-- \u062e: ARABIC LETTER KHAH -->
         <Key
             latin:keyLabel="خ"
-            latin:keyHintLabel="٨"
-            latin:moreKeys="٨,8" />
+            latin:keyHintLabel="8"
+            latin:moreKeys="8,٨" />
+        <!-- \u062d: ARABIC LETTER HAH -->
         <Key
             latin:keyLabel="ح"
-            latin:keyHintLabel="٩"
-            latin:moreKeys="٩,9" />
-        <!-- \u0686: ARABIC LETTER TCHEH -->
+            latin:keyHintLabel="9"
+            latin:moreKeys="9,٩" />
+        <!-- \u062c: ARABIC LETTER JEEM
+             \u0686: ARABIC LETTER TCHEH -->
         <Key
             latin:keyLabel="ج"
-            latin:keyHintLabel="٠"
-            latin:moreKeys="٠,0,\u0686"
+            latin:keyHintLabel="0"
+            latin:moreKeys="0,٠,\u0686"
             latin:keyWidth="fillRight" />
     </Row>
     <Row
         latin:keyWidth="10%p"
     >
+        <!-- \u0634: ARABIC LETTER SHEEN
+             \u069c: ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE -->
         <Key
-            latin:keyLabel="ش" />
+            latin:keyLabel="ش"
+            latin:moreKeys="ڜ" />
+        <!-- \u0633: ARABIC LETTER SEEN -->
         <Key
             latin:keyLabel="س" />
-        <!-- \u0626: ARABIC LETTER YEH WITH HAMZA ABOVE
+        <!-- \u064a: ARABIC LETTER YEH
+             \u0626: ARABIC LETTER YEH WITH HAMZA ABOVE
              \u0649: ARABIC LETTER ALEF MAKSURA -->
         <Key
             latin:keyLabel="ي"
             latin:moreKeys="\u0626,\u0649" />
+        <!-- \u0628: ARABIC LETTER BEH
+             \u067e: ARABIC LETTER PEH -->
         <Key
             latin:keyLabel="ب"
             latin:moreKeys="پ" />
-        <!-- \ufefb: ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
-             \u0644: ARABIC LETTER LAM
+        <!-- \u0644: ARABIC LETTER LAM
+             \ufefb: ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
              \u0627: ARABIC LETTER ALEF
              \ufef7: ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
              \u0623: ARABIC LETTER ALEF WITH HAMZA ABOVE
@@ -99,44 +119,63 @@
         <Key
             latin:keyLabel="ل"
             latin:moreKeys="\ufefb|\u0644\u0627,\ufef7|\u0644\u0623,\ufef9|\u0644\u0625,\ufef5|\u0644\u0622" />
-        <!-- \u0621: ARABIC LETTER HAMZA
+        <!-- \u0627: ARABIC LETTER ALEF
+             \u0621: ARABIC LETTER HAMZA
+             \u0671: ARABIC LETTER ALEF WASLA
              \u0623: ARABIC LETTER ALEF WITH HAMZA ABOVE
              \u0625: ARABIC LETTER ALEF WITH HAMZA BELOW
              \u0622: ARABIC LETTER ALEF WITH MADDA ABOVE -->
         <Key
             latin:keyLabel="ا"
-            latin:moreKeys="\u0621,\u0623,\u0625,\u0622" />
+            latin:moreKeys="\u0621,\u0671,\u0623,\u0625,\u0622" />
+        <!-- \u062a: ARABIC LETTER TEH
+             \u062b: ARABIC LETTER THEH -->
         <Key
             latin:keyLabel="ت"
             latin:moreKeys="ث" />
+        <!-- \u0646: ARABIC LETTER NOON -->
         <Key
             latin:keyLabel="ن" />
+        <!-- \u0645: ARABIC LETTER MEEM -->
         <Key
             latin:keyLabel="م" />
+        <!-- \u0643: ARABIC LETTER KAF
+             \u06af: ARABIC LETTER GAF
+             \u06a9: ARABIC LETTER KEHEH -->
         <Key
             latin:keyLabel="ك"
-            latin:moreKeys="گ"
+            latin:moreKeys="\u06af,\u06a9"
             latin:keyWidth="fillRight" />
     </Row>
     <Row
         latin:keyWidth="10%p"
     >
+        <!-- \u0638: ARABIC LETTER ZAH -->
         <Key
             latin:keyLabel="ظ"
             latin:keyXPos="5.0%p" />
+        <!-- \u0637: ARABIC LETTER TAH -->
         <Key
             latin:keyLabel="ط" />
+        <!-- \u0630: ARABIC LETTER THAL -->
         <Key
             latin:keyLabel="ذ" />
+        <!-- \u062f: ARABIC LETTER DAL -->
         <Key
             latin:keyLabel="د" />
+        <!-- \u0632: ARABIC LETTER ZAIN
+             \u0698: ARABIC LETTER JEH -->
         <Key
             latin:keyLabel="ز"
             latin:moreKeys="ژ" />
+        <!-- \u0631: ARABIC LETTER REH -->
         <Key
             latin:keyLabel="ر" />
+        <!-- \u0629: ARABIC LETTER TEH MARBUTA -->
         <Key
             latin:keyLabel="ة" />
+        <!-- \u0648: ARABIC LETTER WAW
+             \u0624: ARABIC LETTER WAW WITH HAMZA ABOVE -->
         <Key
             latin:keyLabel="و"
             latin:moreKeys="ؤ" />
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 18a9fd8..517385c 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1038,17 +1038,8 @@
 
     @Override
     public boolean onEvaluateFullscreenMode() {
-        if (!super.onEvaluateFullscreenMode()) return false;
-
-        final EditorInfo ei = getCurrentInputEditorInfo();
-        if (ei != null) {
-            final int imeOptions = ei.imeOptions;
-            if ((imeOptions & EditorInfo.IME_FLAG_NO_EXTRACT_UI) != 0) {
-                return false;
-            }
-        }
-
-        return mResources.getBoolean(R.bool.config_use_fullscreen_mode);
+        return super.onEvaluateFullscreenMode()
+                && mResources.getBoolean(R.bool.config_use_fullscreen_mode);
     }
 
     @Override
@@ -1728,9 +1719,14 @@
     }
 
     public void showSuggestions(SuggestedWords suggestedWords, CharSequence typedWord) {
+        final boolean shouldBlockAutoCorrectionBySafetyNet =
+                Utils.shouldBlockAutoCorrectionBySafetyNet(suggestedWords, mSuggest);
+        if (shouldBlockAutoCorrectionBySafetyNet) {
+            suggestedWords.setShouldBlockAutoCorrection();
+        }
         setSuggestions(suggestedWords);
         if (suggestedWords.size() > 0) {
-            if (Utils.shouldBlockedBySafetyNetForAutoCorrection(suggestedWords, mSuggest)) {
+            if (shouldBlockAutoCorrectionBySafetyNet) {
                 mBestWord = typedWord;
             } else if (suggestedWords.hasAutoCorrectionWord()) {
                 mBestWord = suggestedWords.getWord(1);
diff --git a/java/src/com/android/inputmethod/latin/SuggestedWords.java b/java/src/com/android/inputmethod/latin/SuggestedWords.java
index 005db36..ed6359c 100644
--- a/java/src/com/android/inputmethod/latin/SuggestedWords.java
+++ b/java/src/com/android/inputmethod/latin/SuggestedWords.java
@@ -29,12 +29,13 @@
 
     public final List<CharSequence> mWords;
     public final boolean mTypedWordValid;
-    public final boolean mHasMinimalSuggestion;
+    public final boolean mHasAutoCorrectionCandidate;
     public final boolean mIsPunctuationSuggestions;
     private final List<SuggestedWordInfo> mSuggestedWordInfoList;
+    private boolean mShouldBlockAutoCorrection;
 
     private SuggestedWords(List<CharSequence> words, boolean typedWordValid,
-            boolean hasMinimalSuggestion, boolean isPunctuationSuggestions,
+            boolean hasAutoCorrectionCandidate, boolean isPunctuationSuggestions,
             List<SuggestedWordInfo> suggestedWordInfoList) {
         if (words != null) {
             mWords = words;
@@ -42,9 +43,10 @@
             mWords = Collections.emptyList();
         }
         mTypedWordValid = typedWordValid;
-        mHasMinimalSuggestion = hasMinimalSuggestion;
+        mHasAutoCorrectionCandidate = hasAutoCorrectionCandidate;
         mIsPunctuationSuggestions = isPunctuationSuggestions;
         mSuggestedWordInfoList = suggestedWordInfoList;
+        mShouldBlockAutoCorrection = false;
     }
 
     public int size() {
@@ -60,17 +62,25 @@
     }
 
     public boolean hasAutoCorrectionWord() {
-        return mHasMinimalSuggestion && size() > 1 && !mTypedWordValid;
+        return mHasAutoCorrectionCandidate && size() > 1 && !mTypedWordValid;
     }
 
     public boolean hasWordAboveAutoCorrectionScoreThreshold() {
-        return mHasMinimalSuggestion && ((size() > 1 && !mTypedWordValid) || mTypedWordValid);
+        return mHasAutoCorrectionCandidate && ((size() > 1 && !mTypedWordValid) || mTypedWordValid);
     }
 
     public boolean isPunctuationSuggestions() {
         return mIsPunctuationSuggestions;
     }
 
+    public void setShouldBlockAutoCorrection() {
+        mShouldBlockAutoCorrection = true;
+    }
+
+    public boolean shouldBlockAutoCorrection() {
+        return mShouldBlockAutoCorrection;
+    }
+
     public static class Builder {
         private List<CharSequence> mWords = new ArrayList<CharSequence>();
         private boolean mTypedWordValid;
@@ -176,6 +186,7 @@
             return mWords.get(pos);
         }
 
+        @Override
         public String toString() {
             // Pretty-print method to help debug
             final StringBuilder sb = new StringBuilder("StringBuilder: mTypedWordValid = "
diff --git a/java/src/com/android/inputmethod/latin/SuggestionsView.java b/java/src/com/android/inputmethod/latin/SuggestionsView.java
index 3271b82..937c2c9 100644
--- a/java/src/com/android/inputmethod/latin/SuggestionsView.java
+++ b/java/src/com/android/inputmethod/latin/SuggestionsView.java
@@ -303,6 +303,12 @@
             } else {
                 color = mColorTypedWord;
             }
+            if (LatinImeLogger.sDBG) {
+                if (index == mCenterSuggestionIndex && suggestions.mHasAutoCorrectionCandidate
+                        && suggestions.shouldBlockAutoCorrection()) {
+                    return 0xFFFF0000;
+                }
+            }
 
             final SuggestedWordInfo info = (pos < suggestions.size())
                     ? suggestions.getInfo(pos) : null;
diff --git a/java/src/com/android/inputmethod/latin/Utils.java b/java/src/com/android/inputmethod/latin/Utils.java
index 34c8c89..b29ff19 100644
--- a/java/src/com/android/inputmethod/latin/Utils.java
+++ b/java/src/com/android/inputmethod/latin/Utils.java
@@ -167,7 +167,9 @@
         throw new RuntimeException("Can not find input method id for " + packageName);
     }
 
-    public static boolean shouldBlockedBySafetyNetForAutoCorrection(SuggestedWords suggestions,
+    // TODO: Resolve the inconsistencies between the native auto correction algorithms and
+    // this safety net
+    public static boolean shouldBlockAutoCorrectionBySafetyNet(SuggestedWords suggestions,
             Suggest suggest) {
         // Safety net for auto correction.
         // Actually if we hit this safety net, it's actually a bug.
@@ -181,7 +183,8 @@
         if (typedWord.length() < MINIMUM_SAFETY_NET_CHAR_LENGTH) return false;
         final CharSequence suggestionWord = suggestions.getWord(1);
         final int typedWordLength = typedWord.length();
-        final int maxEditDistanceOfNativeDictionary = typedWordLength < 5 ? 2 : typedWordLength / 2;
+        final int maxEditDistanceOfNativeDictionary =
+                (typedWordLength < 5 ? 2 : typedWordLength / 2) + 1;
         final int distance = Utils.editDistance(typedWord, suggestionWord);
         if (DBG) {
             Log.d(TAG, "Autocorrected edit distance = " + distance
@@ -189,8 +192,8 @@
         }
         if (distance > maxEditDistanceOfNativeDictionary) {
             if (DBG) {
-                Log.d(TAG, "Safety net: before = " + typedWord + ", after = " + suggestionWord);
-                Log.w(TAG, "(Error) The edit distance of this correction exceeds limit. "
+                Log.e(TAG, "Safety net: before = " + typedWord + ", after = " + suggestionWord);
+                Log.e(TAG, "(Error) The edit distance of this correction exceeds limit. "
                         + "Turning off auto-correction.");
             }
             return true;
@@ -808,6 +811,7 @@
     }
 
     public static boolean willAutoCorrect(SuggestedWords suggestions) {
-        return !suggestions.mTypedWordValid && suggestions.mHasMinimalSuggestion;
+        return !suggestions.mTypedWordValid && suggestions.mHasAutoCorrectionCandidate
+                && !suggestions.shouldBlockAutoCorrection();
     }
 }