Explicitly map dead key for ñ

`KeyCharacterMap.getDeadChar` seems to not give the expected result on
Android 4.0. This might affect many more dead key combinations that are
not fixed by this commit.
This commit is contained in:
Jules Aguillon 2023-06-04 23:07:35 +02:00
parent 75e6add091
commit 01bfe73fc7

View File

@ -42,7 +42,7 @@ class KeyModifier
case GRAVE: return apply_dead_char(k, '\u02CB');
case AIGU: return apply_dead_char(k, '\u00B4');
case CIRCONFLEXE: return apply_dead_char(k, '\u02C6');
case TILDE: return apply_dead_char(k, '\u02DC');
case TILDE: return apply_map_or_dead_char(k, map_char_tilde, '\u02DC');
case CEDILLE: return apply_dead_char(k, '\u00B8');
case TREMA: return apply_dead_char(k, '\u00A8');
case CARON: return apply_dead_char(k, '\u02C7');
@ -107,6 +107,21 @@ class KeyModifier
}
}
/** Apply a [Map_char] or fallback to [apply_dead_char]. */
private static KeyValue apply_map_or_dead_char(KeyValue k, Map_char map, char dead_char)
{
switch (k.getKind())
{
case Char:
char kc = k.getChar();
char c = map.apply(kc);
if (kc == c)
return apply_dead_char(k, dead_char);
return k.withChar(c);
default: return k;
}
}
private static KeyValue apply_combining(KeyValue k, String combining)
{
switch (k.getKind())
@ -459,6 +474,18 @@ class KeyModifier
}
}
private static final Map_char map_char_tilde =
new Map_char() {
public char apply(char c)
{
switch (c)
{
case 'n': return 'ñ';
default: return c;
}
}
};
private static final Map_char map_char_double_aigu =
new Map_char() {
public char apply(char c)