[automerger skipped] Merge SPL-2020-03-05 Change-Id: I6eabb1bb0e3bd4e507501baa13abf60d7ce8f8e2 skipped: 91068d1ced

Change-Id: I71cf63c64b339b5b0f8a95f866bf8092c2363a91
diff --git a/java/res/xml/rowkeys_greek1.xml b/java/res/xml/rowkeys_greek1.xml
index 6d76779..45895a5 100644
--- a/java/res/xml/rowkeys_greek1.xml
+++ b/java/res/xml/rowkeys_greek1.xml
@@ -28,14 +28,14 @@
             <Key
                 latin:keySpec=":"
                 latin:keyHintLabel="1"
-                latin:moreKeys=";"
+                latin:moreKeys=";,&#x00B7;"
                 latin:additionalMoreKeys="1" />
         </case>
         <default>
             <Key
                 latin:keySpec=";"
                 latin:keyHintLabel="1"
-                latin:moreKeys=":"
+                latin:moreKeys=":,&#x00B7;"
                 latin:additionalMoreKeys="1" />
         </default>
     </switch>
@@ -64,17 +64,26 @@
     </switch>
         -->
     <!-- U+03B5: "ε" GREEK SMALL LETTER EPSILON
-         U+03AD: "έ" GREEK SMALL LETTER EPSILON WITH TONOS -->
+         U+03AD: "έ" GREEK SMALL LETTER EPSILON WITH TONOS
+         U+1F72: "ὲ" GREEK SMALL LETTER EPSILON WITH VARIA
+         U+1F10: "ἐ" GREEK SMALL LETTER EPSILON WITH PSILI
+         U+1F11: "ἑ" GREEK SMALL LETTER EPSILON WITH DASIA
+         U+1F14: "ἔ" GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
+         U+1F15: "ἕ" GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+         U+1F12: "ἒ" GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
+         U+1F13: "ἓ" GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA -->
     <Key
         latin:keySpec="&#x03B5;"
         latin:keyHintLabel="3"
         latin:additionalMoreKeys="3"
-        latin:moreKeys="&#x03AD;,%" />
-    <!-- U+03C1: "ρ" GREEK SMALL LETTER RHO -->
+        latin:moreKeys="&#x03AD;,%,&#x1F72;,&#x1F10;,&#x1F11;,&#x1F14;,&#x1F15;,&#x1F12;,&#x1F13;" />
+    <!-- U+03C1: "ρ" GREEK SMALL LETTER RHO
+         U+1FE5: "ῥ" GREEK SMALL LETTER RHO WITH DASIA -->
     <Key
         latin:keySpec="&#x03C1;"
         latin:keyHintLabel="4"
-        latin:additionalMoreKeys="4" />
+        latin:additionalMoreKeys="4"
+        latin:moreKeys="%,&#x1FE5;" />
     <!-- U+03C4: "τ" GREEK SMALL LETTER TAU -->
     <Key
         latin:keySpec="&#x03C4;"
@@ -83,12 +92,24 @@
     <!-- U+03C5: "υ" GREEK SMALL LETTER UPSILON
          U+03CD: "ύ" GREEK SMALL LETTER UPSILON WITH TONOS
          U+03CB: "ϋ" GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-         U+03B0: "ΰ" GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS -->
+         U+03B0: "ΰ" GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+         U+1F7A: "ὺ" GREEK SMALL LETTER UPSILON WITH VARIA
+         U+1FE6: "ῦ" GREEK SMALL LETTER UPSILON WITH PERISPOMENI
+         U+1F50: "ὐ" GREEK SMALL LETTER UPSILON WITH PSILI
+         U+1F51: "ὑ" GREEK SMALL LETTER UPSILON WITH DASIA
+         U+1F54: "ὔ" GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+         U+1F55: "ὕ" GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+         U+1F52: "ὒ" GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+         U+1F53: "ὓ" GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+         U+1F56: "ὖ" GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+         U+1F57: "ὗ" GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+         U+1FE2: "ῢ" GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+         U+1FE7: "ῧ" GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI -->
     <Key
         latin:keySpec="&#x03C5;"
         latin:keyHintLabel="6"
         latin:additionalMoreKeys="6"
-        latin:moreKeys="&#x03CD;,%,&#x03CB;,&#x03B0;" />
+        latin:moreKeys="&#x03CD;,%,&#x03CB;,&#x03B0;,&#x1F7A;,&#x1FE6;,&#x1F50;,&#x1F51;,&#x1F54;,&#x1F55;,&#x1F52;,&#x1F53;,&#x1F56;,&#x1F57;,&#x1FE2;,&#x1FE7;" />
     <!-- U+03B8: "θ" GREEK SMALL LETTER THETA -->
     <Key
         latin:keySpec="&#x03B8;"
@@ -97,19 +118,38 @@
     <!-- U+03B9: "ι" GREEK SMALL LETTER IOTA
          U+03AF: "ί" GREEK SMALL LETTER IOTA WITH TONOS
          U+03CA: "ϊ" GREEK SMALL LETTER IOTA WITH DIALYTIKA
-         U+0390: "ΐ" GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS -->
+         U+0390: "ΐ" GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+         U+1F76: "ὶ" GREEK SMALL LETTER IOTA WITH VARIA
+         U+1FD6: "ῖ" GREEK SMALL LETTER IOTA WITH PERISPOMENI
+         U+1F30: "ἰ" GREEK SMALL LETTER IOTA WITH PSILI
+         U+1F31: "ἱ" GREEK SMALL LETTER IOTA WITH DASIA
+         U+1F34: "ἴ" GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
+         U+1F35: "ἵ" GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
+         U+1F32: "ἲ" GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
+         U+1F33: "ἳ" GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
+         U+1F36: "ἶ" GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
+         U+1F37: "ἷ" GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+         U+1FD2: "ῒ" GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+         U+1FD7: "ῗ" GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI -->
     <Key
         latin:keySpec="&#x03B9;"
         latin:keyHintLabel="8"
         latin:additionalMoreKeys="8"
-        latin:moreKeys="&#x03AF;,%,&#x03CA;,&#x0390;" />
+        latin:moreKeys="&#x03AF;,%,&#x03CA;,&#x0390;,&#x1F76;,&#x1FD6;,&#x1F30;,&#x1F31;,&#x1F34;,&#x1F35;,&#x1F32;,&#x1F33;,&#x1F36;,&#x1F37;,&#x1FD2;,&#x1FD7;" />
     <!-- U+03BF: "ο" GREEK SMALL LETTER OMICRON
-         U+03CC: "ό" GREEK SMALL LETTER OMICRON WITH TONOS -->
+         U+03CC: "ό" GREEK SMALL LETTER OMICRON WITH TONOS
+         U+1F78: "ὸ" GREEK SMALL LETTER OMICRON WITH VARIA
+         U+1F40: "ὀ" GREEK SMALL LETTER OMICRON WITH PSILI
+         U+1F41: "ὁ" GREEK SMALL LETTER OMICRON WITH DASIA
+         U+1F44: "ὄ" GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
+         U+1F45: "ὅ" GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+         U+1F42: "ὂ" GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
+         U+1F43: "ὃ" GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA -->
     <Key
         latin:keySpec="&#x03BF;"
         latin:keyHintLabel="9"
         latin:additionalMoreKeys="9"
-        latin:moreKeys="&#x03CC;,%" />
+        latin:moreKeys="&#x03CC;,%,&#x1F78;,&#x1F40;,&#x1F41;,&#x1F44;,&#x1F45;,&#x1F42;,&#x1F43;" />
     <!-- U+03C0: "π" GREEK SMALL LETTER PI -->
     <Key
         latin:keySpec="&#x03C0;"
diff --git a/java/res/xml/rowkeys_greek2.xml b/java/res/xml/rowkeys_greek2.xml
index d8769ca..97dde5b 100644
--- a/java/res/xml/rowkeys_greek2.xml
+++ b/java/res/xml/rowkeys_greek2.xml
@@ -21,11 +21,55 @@
 <merge
     xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
 >
-    <!-- U+03B1: "α" GREEK SMALL LETTER ALPHA
-         U+03AC: "ά" GREEK SMALL LETTER ALPHA WITH TONOS -->
-    <Key
-        latin:keySpec="&#x03B1;"
-        latin:moreKeys="&#x03AC;" />
+    <switch>
+        <case
+            latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLockShifted"
+        >
+            <!-- U+0391: "Α" GREEK CAPITAL LETTER ALPHA
+                 U+0386: "Ά" GREEK CAPITAL LETTER ALPHA WITH TONOS
+                 U+1FBA: "Ὰ" GREEK CAPITAL LETTER ALPHA WITH VARIA
+                 U+1F08: "Ἀ" GREEK CAPITAL LETTER ALPHA WITH PSILI
+                 U+1F09: "Ἁ" GREEK CAPITAL LETTER ALPHA WITH DASIA
+                 U+1F04: "Ἄ" GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+                 U+1F05: "Ἅ" GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+                 U+1F0A: "Ἂ" GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+                 U+1F0B: "Ἃ" GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+                 U+1F0E: "Ἆ" GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+                 U+1F0F: "Ἇ" GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI -->
+            <Key
+                latin:keySpec="&#x0391;"
+                latin:moreKeys="&#x0386;,&#x1FBA;,&#x1F08;,&#x1F09;,&#x1F04;,&#x1F05;,&#x1F0A;,&#x1F0B;,&#x1F0E;,&#x1F0F;" />
+        </case>
+        <default>
+            <!-- U+03B1: "α" GREEK SMALL LETTER ALPHA
+                 U+03AC: "ά" GREEK SMALL LETTER ALPHA WITH TONOS
+                 U+1F70: "ὰ" GREEK SMALL LETTER ALPHA WITH VARIA
+                 U+1FB6: "ᾶ" GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+                 U+1F00: "ἀ" GREEK SMALL LETTER ALPHA WITH PSILI
+                 U+1F01: "ἁ" GREEK SMALL LETTER ALPHA WITH DASIA
+                 U+1F04: "ἄ" GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
+                 U+1F05: "ἅ" GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
+                 U+1F02: "ἂ" GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
+                 U+1F03: "ἃ" GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
+                 U+1F06: "ἆ" GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
+                 U+1F07: "ἇ" GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+                 U+1FB3: "ᾳ" GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+                 U+1FB4: "ᾴ" GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+                 U+1FB2: "ᾲ" GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+                 U+1FB7: "ᾷ" GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+                 U+1F80: "ᾀ" GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+                 U+1F81: "ᾁ" GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+                 U+1F84: "ᾄ" GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+                 U+1F85: "ᾅ" GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+                 U+1F82: "ᾂ" GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+                 U+1F83: "ᾃ" GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+                 U+1F86: "ᾆ" GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+                 U+1F87: "ᾇ" GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -->
+            <Key
+                latin:keySpec="&#x03B1;"
+                latin:moreKeys="&#x03AC;,&#x1F70;,&#x1FB6;,&#x1F00;,&#x1F01;,&#x1F04;,&#x1F05;,&#x1F02;,&#x1F03;,&#x1F06;,&#x1F07;,&#x1FB3;,&#x1FB4;,&#x1FB2;,&#x1FB7;,&#x1F80;,&#x1F81;,&#x1F84;,&#x1F85;,&#x1F82;,&#x1F83;,&#x1F86;,&#x1F87;" />
+        </default>
+    </switch>
     <!-- U+03C3: "σ" GREEK SMALL LETTER SIGMA -->
     <Key
         latin:keySpec="&#x03C3;" />
@@ -38,11 +82,55 @@
     <!-- U+03B3: "γ" GREEK SMALL LETTER GAMMA -->
     <Key
         latin:keySpec="&#x03B3;" />
-    <!-- U+03B7: "η" GREEK SMALL LETTER ETA
-         U+03AE: "ή" GREEK SMALL LETTER ETA WITH TONOS -->
-    <Key
-        latin:keySpec="&#x03B7;"
-        latin:moreKeys="&#x03AE;" />
+    <switch>
+        <case
+            latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLockShifted"
+        >
+            <!-- U+0397: "Η" GREEK CAPITAL LETTER ETA
+                 U+0389: "Ή" GREEK CAPITAL LETTER ETA WITH TONOS
+                 U+1FCA: "Ὴ" GREEK CAPITAL LETTER ETA WITH VARIA
+                 U+1F28: "Ἠ" GREEK CAPITAL LETTER ETA WITH PSILI
+                 U+1F29: "Ἡ" GREEK CAPITAL LETTER ETA WITH DASIA
+                 U+1F2C: "Ἤ" GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+                 U+1F2D: "Ἥ" GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+                 U+1F2A: "Ἢ" GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+                 U+1F2B: "Ἣ" GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+                 U+1F2E: "Ἦ" GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+                 U+1F2F: "Ἧ" GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI -->
+            <Key
+                latin:keySpec="&#x0397;"
+                latin:moreKeys="&#x0389;,&#x1FCA;,&#x1F28;,&#x1F29;,&#x1F2C;,&#x1F2D;,&#x1F2A;,&#x1F2B;,&#x1F2E;,&#x1F2F;" />
+        </case>
+        <default>
+            <!-- U+03B7: "η" GREEK SMALL LETTER ETA
+                 U+03AE: "ή" GREEK SMALL LETTER ETA WITH TONOS
+                 U+1F74: "ὴ" GREEK SMALL LETTER ETA WITH VARIA
+                 U+1FC6: "ῆ" GREEK SMALL LETTER ETA WITH PERISPOMENI
+                 U+1F20: "ἠ" GREEK SMALL LETTER ETA WITH PSILI
+                 U+1F21: "ἡ" GREEK SMALL LETTER ETA WITH DASIA
+                 U+1F24: "ἤ" GREEK SMALL LETTER ETA WITH PSILI AND OXIA
+                 U+1F25: "ἥ" GREEK SMALL LETTER ETA WITH DASIA AND OXIA
+                 U+1F22: "ἢ" GREEK SMALL LETTER ETA WITH PSILI AND VARIA
+                 U+1F23: "ἣ" GREEK SMALL LETTER ETA WITH DASIA AND VARIA
+                 U+1F26: "ἦ" GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
+                 U+1F27: "ἧ" GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+                 U+1FC3: "ῃ" GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+                 U+1FC4: "ῄ" GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+                 U+1FC2: "ῂ" GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+                 U+1FC7: "ῇ" GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+                 U+1F90: "ᾐ" GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+                 U+1F91: "ᾑ" GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+                 U+1F94: "ᾔ" GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+                 U+1F95: "ᾕ" GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+                 U+1F92: "ᾒ" GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+                 U+1F93: "ᾓ" GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+                 U+1F96: "ᾖ" GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+                 U+1F97: "ᾗ" GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -->
+            <Key
+                latin:keySpec="&#x03B7;"
+                latin:moreKeys="&#x03AE;,&#x1F74;,&#x1FC6;,&#x1F20;,&#x1F21;,&#x1F24;,&#x1F25;,&#x1F22;,&#x1F23;,&#x1F26;,&#x1F27;,&#x1FC3;,&#x1FC4;,&#x1FC2;,&#x1FC7;,&#x1F90;,&#x1F91;,&#x1F94;,&#x1F95;,&#x1F92;,&#x1F93;,&#x1F96;,&#x1F97;" />
+        </default>
+    </switch>
     <!-- U+03BE: "ξ" GREEK SMALL LETTER XI -->
     <Key
         latin:keySpec="&#x03BE;" />
diff --git a/java/res/xml/rowkeys_greek3.xml b/java/res/xml/rowkeys_greek3.xml
index 3f989bc..0c2667b 100644
--- a/java/res/xml/rowkeys_greek3.xml
+++ b/java/res/xml/rowkeys_greek3.xml
@@ -30,11 +30,55 @@
     <!-- U+03C8: "ψ" GREEK SMALL LETTER PSI -->
     <Key
         latin:keySpec="&#x03C8;" />
-    <!-- U+03C9: "ω" GREEK SMALL LETTER OMEGA
-         U+03CE: "ώ" GREEK SMALL LETTER OMEGA WITH TONOS -->
-    <Key
-        latin:keySpec="&#x03C9;"
-        latin:moreKeys="&#x03CE;" />
+    <switch>
+        <case
+            latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLockShifted"
+        >
+            <!-- U+03A9: "Ω" GREEK CAPITAL LETTER OMEGA
+                 U+038F: "Ώ" GREEK CAPITAL LETTER OMEGA WITH TONOS
+                 U+1FFA: "Ὼ" GREEK CAPITAL LETTER OMEGA WITH VARIA
+                 U+1F68: "Ὠ" GREEK CAPITAL LETTER OMEGA WITH PSILI
+                 U+1F69: "Ὡ" GREEK CAPITAL LETTER OMEGA WITH DASIA
+                 U+1F6C: "Ὤ" GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+                 U+1F6D: "Ὥ" GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+                 U+1F6A: "Ὢ" GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+                 U+1F6B: "Ὣ" GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+                 U+1F6E: "Ὦ" GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+                 U+1F6F: "Ὧ" GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI -->
+            <Key
+                latin:keySpec="&#x03C9;"
+                latin:moreKeys="&#x038F;,&#x1FFA;,&#x1F68;,&#x1F69;,&#x1F6C;,&#x1F6D;,&#x1F6A;,&#x1F6B;,&#x1F6E;,&#x1F6F;" />
+        </case>
+        <default>
+            <!-- U+03C9: "ω" GREEK SMALL LETTER OMEGA
+                 U+03CE: "ώ" GREEK SMALL LETTER OMEGA WITH TONOS
+                 U+1F7C: "ὼ" GREEK SMALL LETTER OMEGA WITH VARIA
+                 U+1FF6: "ῶ" GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+                 U+1F60: "ὠ" GREEK SMALL LETTER OMEGA WITH PSILI
+                 U+1F61: "ὡ" GREEK SMALL LETTER OMEGA WITH DASIA
+                 U+1F64: "ὤ" GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
+                 U+1F65: "ὥ" GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
+                 U+1F62: "ὢ" GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
+                 U+1F63: "ὣ" GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
+                 U+1F66: "ὦ" GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
+                 U+1F67: "ὧ" GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+                 U+1FF3: "ῳ" GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+                 U+1FF4: "ῴ" GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+                 U+1FF2: "ῲ" GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+                 U+1FF7: "ῷ" GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+                 U+1FA0: "ᾠ" GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+                 U+1FA1: "ᾡ" GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+                 U+1FA4: "ᾤ" GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+                 U+1FA5: "ᾥ" GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+                 U+1FA2: "ᾢ" GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+                 U+1FA3: "ᾣ" GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+                 U+1FA6: "ᾦ" GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+                 U+1FA7: "ᾧ" GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -->
+            <Key
+                latin:keySpec="&#x03C9;"
+                latin:moreKeys="&#x03CE;,&#x1F7C;,&#x1FF6;,&#x1F60;,&#x1F61;,&#x1F64;,&#x1F65;,&#x1F62;,&#x1F63;,&#x1F66;,&#x1F67;,&#x1FF3;,&#x1FF4;,&#x1FF2;,&#x1FF7;,&#x1FA0;,&#x1FA1;,&#x1FA4;,&#x1FA5;,&#x1FA2;,&#x1FA3;,&#x1FA6;,&#x1FA7;" />
+        </default>
+    </switch>
     <!-- U+03B2: "β" GREEK SMALL LETTER BETA -->
     <Key
         latin:keySpec="&#x03B2;" />
diff --git a/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java
index f7a1163..5c03d26 100644
--- a/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java
+++ b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java
@@ -243,7 +243,6 @@
         // Make sure we're not getting an EXIT event because the user slid
         // off the keyboard area, then force a key press.
         if (key != null) {
-            performClickOn(key);
             onHoverExitFrom(key);
         }
         setLastHoverKey(null);
diff --git a/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java
index a3511c6..7266aa8 100644
--- a/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java
+++ b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java
@@ -236,6 +236,7 @@
         // Obtain and initialize an AccessibilityNodeInfo with information about the virtual view.
         final AccessibilityNodeInfoCompat info = AccessibilityNodeInfoCompat.obtain();
         info.setPackageName(mKeyboardView.getContext().getPackageName());
+        info.setTextEntryKey(true);
         info.setClassName(key.getClass().getName());
         info.setContentDescription(keyDescription);
         info.setBoundsInParent(boundsInParent);
@@ -244,13 +245,9 @@
         info.setSource(mKeyboardView, virtualViewId);
         info.setEnabled(key.isEnabled());
         info.setVisibleToUser(true);
-        // Don't add ACTION_CLICK and ACTION_LONG_CLOCK actions while hovering on the key.
-        // See {@link #onHoverEnterTo(Key)} and {@link #onHoverExitFrom(Key)}.
-        if (virtualViewId != mHoveringNodeId) {
-            info.addAction(AccessibilityNodeInfoCompat.ACTION_CLICK);
-            if (key.isLongPressEnabled()) {
-                info.addAction(AccessibilityNodeInfoCompat.ACTION_LONG_CLICK);
-            }
+        info.addAction(AccessibilityNodeInfoCompat.ACTION_CLICK);
+        if (key.isLongPressEnabled()) {
+            info.addAction(AccessibilityNodeInfoCompat.ACTION_LONG_CLICK);
         }
 
         if (mAccessibilityFocusedView == virtualViewId) {
diff --git a/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java b/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java
index edda32d..3234993 100644
--- a/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java
+++ b/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java
@@ -62,13 +62,10 @@
     // The rectangle region to ignore hover events.
     private final Rect mBoundsToIgnoreHoverEvent = new Rect();
 
-    private final AccessibilityLongPressTimer mAccessibilityLongPressTimer;
 
     public MainKeyboardAccessibilityDelegate(final MainKeyboardView mainKeyboardView,
             final KeyDetector keyDetector) {
         super(mainKeyboardView, keyDetector);
-        mAccessibilityLongPressTimer = new AccessibilityLongPressTimer(
-                this /* callback */, mainKeyboardView.getContext());
     }
 
     /**
@@ -233,7 +230,6 @@
             Log.d(TAG, "onHoverEnterTo: key=" + key
                     + " inIgnoreBounds=" + mBoundsToIgnoreHoverEvent.contains(x, y));
         }
-        mAccessibilityLongPressTimer.cancelLongPress();
         if (mBoundsToIgnoreHoverEvent.contains(x, y)) {
             return;
         }
@@ -241,9 +237,6 @@
         // Further hover events should be handled.
         mBoundsToIgnoreHoverEvent.setEmpty();
         super.onHoverEnterTo(key);
-        if (key.isLongPressEnabled()) {
-            mAccessibilityLongPressTimer.startLongPress(key);
-        }
     }
 
     @Override
@@ -254,7 +247,6 @@
             Log.d(TAG, "onHoverExitFrom: key=" + key
                     + " inIgnoreBounds=" + mBoundsToIgnoreHoverEvent.contains(x, y));
         }
-        mAccessibilityLongPressTimer.cancelLongPress();
         super.onHoverExitFrom(key);
     }
 
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
index 4d337b6..91295c7 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
@@ -24,6 +24,8 @@
 import android.view.View;
 import android.view.inputmethod.EditorInfo;
 
+import androidx.annotation.NonNull;
+
 import com.android.inputmethod.compat.InputMethodServiceCompatUtils;
 import com.android.inputmethod.event.Event;
 import com.android.inputmethod.keyboard.KeyboardLayoutSet.KeyboardLayoutSetException;
@@ -88,17 +90,19 @@
                 InputMethodServiceCompatUtils.enableHardwareAcceleration(mLatinIME);
     }
 
-    public void updateKeyboardTheme() {
+    public void updateKeyboardTheme(@NonNull Context displayContext) {
         final boolean themeUpdated = updateKeyboardThemeAndContextThemeWrapper(
-                mLatinIME, KeyboardTheme.getKeyboardTheme(mLatinIME /* context */));
+                displayContext, KeyboardTheme.getKeyboardTheme(displayContext /* context */));
         if (themeUpdated && mKeyboardView != null) {
-            mLatinIME.setInputView(onCreateInputView(mIsHardwareAcceleratedDrawingEnabled));
+            mLatinIME.setInputView(
+                    onCreateInputView(displayContext, mIsHardwareAcceleratedDrawingEnabled));
         }
     }
 
     private boolean updateKeyboardThemeAndContextThemeWrapper(final Context context,
             final KeyboardTheme keyboardTheme) {
-        if (mThemeContext == null || !keyboardTheme.equals(mKeyboardTheme)) {
+        if (mThemeContext == null || !keyboardTheme.equals(mKeyboardTheme)
+                || !mThemeContext.getResources().equals(context.getResources())) {
             mKeyboardTheme = keyboardTheme;
             mThemeContext = new ContextThemeWrapper(context, keyboardTheme.mStyleId);
             KeyboardLayoutSet.onKeyboardThemeChanged();
@@ -454,13 +458,14 @@
         }
     }
 
-    public View onCreateInputView(final boolean isHardwareAcceleratedDrawingEnabled) {
+    public View onCreateInputView(@NonNull Context displayContext,
+            final boolean isHardwareAcceleratedDrawingEnabled) {
         if (mKeyboardView != null) {
             mKeyboardView.closing();
         }
 
         updateKeyboardThemeAndContextThemeWrapper(
-                mLatinIME, KeyboardTheme.getKeyboardTheme(mLatinIME /* context */));
+                displayContext, KeyboardTheme.getKeyboardTheme(displayContext /* context */));
         mCurrentInputView = (InputView)LayoutInflater.from(mThemeContext).inflate(
                 R.layout.input_view, null);
         mMainKeyboardFrame = mCurrentInputView.findViewById(R.id.main_keyboard_frame);
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 4b6ab7e..737bd0d 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -16,6 +16,8 @@
 
 package com.android.inputmethod.latin;
 
+import static android.view.Display.INVALID_DISPLAY;
+
 import static com.android.inputmethod.latin.common.Constants.ImeOption.FORCE_ASCII;
 import static com.android.inputmethod.latin.common.Constants.ImeOption.NO_MICROPHONE;
 import static com.android.inputmethod.latin.common.Constants.ImeOption.NO_MICROPHONE_COMPAT;
@@ -107,6 +109,7 @@
 import java.util.concurrent.TimeUnit;
 
 import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 
 /**
  * Input method implementation for Qwerty'ish keyboard.
@@ -118,7 +121,6 @@
     static final String TAG = LatinIME.class.getSimpleName();
     private static final boolean TRACE = false;
 
-    private static final int EXTENDED_TOUCHABLE_REGION_HEIGHT = 100;
     private static final int PERIOD_FOR_AUDIO_AND_HAPTIC_FEEDBACK_IN_KEY_REPEAT = 2;
     private static final int PENDING_IMS_CALLBACK_DURATION_MILLIS = 800;
     static final long DELAY_WAIT_FOR_DICTIONARY_LOAD_MILLIS = TimeUnit.SECONDS.toMillis(2);
@@ -166,6 +168,10 @@
     // {@link #onEvaluateInputViewShown()}.
     private boolean mIsExecutingStartShowingInputView;
 
+    // Used for re-initialize keyboard layout after onConfigurationChange.
+    @Nullable private Context mDisplayContext;
+    private int mCurDisplayId = INVALID_DISPLAY;
+
     // Object for reacting to adding/removing a dictionary pack.
     private final BroadcastReceiver mDictionaryPackInstallReceiver =
             new DictionaryPackInstallBroadcastReceiver(this);
@@ -594,10 +600,13 @@
         DebugFlags.init(PreferenceManager.getDefaultSharedPreferences(this));
         RichInputMethodManager.init(this);
         mRichImm = RichInputMethodManager.getInstance();
-        KeyboardSwitcher.init(this);
         AudioAndHapticFeedbackManager.init(this);
         AccessibilityUtils.init(this);
         mStatsUtilsManager.onCreate(this /* context */, mDictionaryFacilitator);
+        final WindowManager wm = getSystemService(WindowManager.class);
+        mDisplayContext = createDisplayContext(wm.getDefaultDisplay());
+        mCurDisplayId = wm.getDefaultDisplay().getDisplayId();
+        KeyboardSwitcher.init(this);
         super.onCreate();
 
         mHandler.onCreate();
@@ -785,9 +794,27 @@
     }
 
     @Override
+    public void onInitializeInterface() {
+        // TODO (b/133825283): Non-activity components Resources / DisplayMetrics update when
+        //  moving to external display.
+        // An issue in Q that non-activity components Resources / DisplayMetrics in
+        // Context doesn't well updated when moving to external display.
+        // Currently we do a workaround is to check if IME is moving to new display, if so,
+        // create new display context and re-init keyboard layout with this context.
+        final WindowManager wm = getSystemService(WindowManager.class);
+        final int newDisplayId = wm.getDefaultDisplay().getDisplayId();
+        if (mCurDisplayId != newDisplayId) {
+            mCurDisplayId = newDisplayId;
+            mDisplayContext = createDisplayContext(wm.getDefaultDisplay());
+            mKeyboardSwitcher.updateKeyboardTheme(mDisplayContext);
+        }
+    }
+
+    @Override
     public View onCreateInputView() {
         StatsUtils.onCreateInputView();
-        return mKeyboardSwitcher.onCreateInputView(mIsHardwareAcceleratedDrawingEnabled);
+        return mKeyboardSwitcher.onCreateInputView(mDisplayContext,
+                mIsHardwareAcceleratedDrawingEnabled);
     }
 
     @Override
@@ -870,7 +897,7 @@
         mGestureConsumer = GestureConsumer.NULL_GESTURE_CONSUMER;
         mRichImm.refreshSubtypeCaches();
         final KeyboardSwitcher switcher = mKeyboardSwitcher;
-        switcher.updateKeyboardTheme();
+        switcher.updateKeyboardTheme(mDisplayContext);
         final MainKeyboardView mainKeyboardView = switcher.getMainKeyboardView();
         // If we are starting input in a different text field from before, we'll have to reload
         // settings, so currentSettingsValues can't be final.
@@ -1212,9 +1239,7 @@
             final int touchLeft = 0;
             final int touchTop = mKeyboardSwitcher.isShowingMoreKeysPanel() ? 0 : visibleTopY;
             final int touchRight = visibleKeyboardView.getWidth();
-            final int touchBottom = inputHeight
-                    // Extend touchable region below the keyboard.
-                    + EXTENDED_TOUCHABLE_REGION_HEIGHT;
+            final int touchBottom = inputHeight;
             outInsets.touchableInsets = InputMethodService.Insets.TOUCHABLE_INSETS_REGION;
             outInsets.touchableRegion.set(touchLeft, touchTop, touchRight, touchBottom);
         }