abouttreesummaryrefslogcommitdiff
path: root/srcs/juloo.keyboard2/KeyValue.java
diff options
context:
space:
mode:
Diffstat (limited to 'srcs/juloo.keyboard2/KeyValue.java')
-rw-r--r--srcs/juloo.keyboard2/KeyValue.java249
1 files changed, 127 insertions, 122 deletions
diff --git a/srcs/juloo.keyboard2/KeyValue.java b/srcs/juloo.keyboard2/KeyValue.java
index eaec387..3d706f6 100644
--- a/srcs/juloo.keyboard2/KeyValue.java
+++ b/srcs/juloo.keyboard2/KeyValue.java
@@ -6,45 +6,46 @@ import java.util.HashMap;
class KeyValue
{
- /** Values for the [code] field. */
-
- public static final int EVENT_CONFIG = -2;
- public static final int EVENT_SWITCH_TEXT = -3;
- public static final int EVENT_SWITCH_NUMERIC = -4;
- public static final int EVENT_SWITCH_EMOJI = -5;
- public static final int EVENT_SWITCH_BACK_EMOJI = -6;
- public static final int EVENT_CHANGE_METHOD = -7;
- public static final int EVENT_ACTION = -8;
- public static final int EVENT_SWITCH_PROGRAMMING = -9;
-
- // Modifiers
+ public static enum Event
+ {
+ CONFIG,
+ SWITCH_TEXT,
+ SWITCH_NUMERIC,
+ SWITCH_EMOJI,
+ SWITCH_BACK_EMOJI,
+ CHANGE_METHOD,
+ ACTION,
+ SWITCH_PROGRAMMING
+ }
+
// Must be evaluated in the reverse order of their values.
- public static final int MOD_SHIFT = -100;
- public static final int MOD_FN = -101;
- public static final int MOD_CTRL = -102;
- public static final int MOD_ALT = -103;
- public static final int MOD_META = -104;
-
- // Dead-keys
- public static final int MOD_DOUBLE_AIGU = -200;
- public static final int MOD_DOT_ABOVE = -201;
- public static final int MOD_GRAVE = -202;
- public static final int MOD_AIGU = -203;
- public static final int MOD_CIRCONFLEXE = -204;
- public static final int MOD_TILDE = -205;
- public static final int MOD_CEDILLE = -206;
- public static final int MOD_TREMA = -207;
- public static final int MOD_SUPERSCRIPT = -208;
- public static final int MOD_SUBSCRIPT = -209;
- public static final int MOD_RING = -210;
- public static final int MOD_CARON = -211;
- public static final int MOD_MACRON = -212;
- public static final int MOD_ORDINAL = -213;
- public static final int MOD_ARROWS = -214;
- public static final int MOD_BOX = -215;
- public static final int MOD_OGONEK = -216;
- public static final int MOD_SLASH = -217;
- public static final int MOD_ARROW_RIGHT = -218;
+ public static enum Modifier
+ {
+ SHIFT,
+ FN,
+ CTRL,
+ ALT,
+ META,
+ DOUBLE_AIGU,
+ DOT_ABOVE,
+ GRAVE,
+ AIGU,
+ CIRCONFLEXE,
+ TILDE,
+ CEDILLE,
+ TREMA,
+ SUPERSCRIPT,
+ SUBSCRIPT,
+ RING,
+ CARON,
+ MACRON,
+ ORDINAL,
+ ARROWS,
+ BOX,
+ OGONEK,
+ SLASH,
+ ARROW_RIGHT
+ }
// Behavior flags
public static final int FLAG_LATCH = 1;
@@ -64,12 +65,13 @@ class KeyValue
public static final int FLAG_LOCALIZED = (1 << 8);
// Kind flags
- public static final int KIND_CHAR = (0 << 30);
- public static final int KIND_STRING = (1 << 30);
- public static final int KIND_EVENT = (2 << 30);
- public static final int KIND_MODIFIER = (3 << 30);
+ public static final int KIND_CHAR = (0 << 29);
+ public static final int KIND_STRING = (1 << 29);
+ public static final int KIND_KEYEVENT = (2 << 29);
+ public static final int KIND_EVENT = (3 << 29);
+ public static final int KIND_MODIFIER = (4 << 29);
- public static final int KIND_FLAGS = (0b11 << 30);
+ public static final int KIND_FLAGS = (0b111 << 29);
public final String name;
private final String _symbol;
@@ -82,7 +84,7 @@ class KeyValue
public static enum Kind
{
- Char, String, Event, Modifier
+ Char, String, Keyevent, Event, Modifier
}
public Kind getKind()
@@ -91,6 +93,7 @@ class KeyValue
{
case KIND_CHAR: return Kind.Char;
case KIND_STRING: return Kind.String;
+ case KIND_KEYEVENT: return Kind.Keyevent;
case KIND_EVENT: return Kind.Event;
case KIND_MODIFIER: return Kind.Modifier;
default: throw new RuntimeException("Corrupted kind flags");
@@ -114,25 +117,28 @@ class KeyValue
return _symbol;
}
- /** The char to be sent when the key is pressed.
- Defined only when [getKind() == Kind.Char]. */
+ /** Defined only when [getKind() == Kind.Char]. */
public char getChar()
{
return (char)_code;
}
- /** An Android event or one of the [EVENT_*] constants.
- Defined only when [getKind() == Kind.Event]. */
- public int getEvent()
+ /** Defined only when [getKind() == Kind.Keyevent]. */
+ public int getKeyevent()
{
return _code;
}
- /** Modifier activated by this key.
- Defined only when [getKind() == Kind.Modifier]. */
- public int getModifier()
+ /** Defined only when [getKind() == Kind.Event]. */
+ public Event getEvent()
{
- return _code;
+ return Event.values()[_code];
+ }
+
+ /** Defined only when [getKind() == Kind.Modifier]. */
+ public Modifier getModifier()
+ {
+ return Modifier.values()[_code];
}
/* Update the char and the symbol. */
@@ -151,9 +157,9 @@ class KeyValue
return new KeyValue(n, s, (_flags & KIND_FLAGS), _code, _flags);
}
- public KeyValue withEvent(int e)
+ public KeyValue withKeyevent(int code)
{
- return new KeyValue(name, _symbol, KIND_EVENT, e, _flags);
+ return new KeyValue(name, _symbol, KIND_KEYEVENT, code, _flags);
}
public KeyValue withFlags(int f)
@@ -209,87 +215,86 @@ class KeyValue
addKey(name, symbol, KIND_CHAR, c, flags);
}
- private static void addModifierKey(String name, String symbol, int code, int extra_flags)
+ private static void addModifierKey(String name, String symbol, Modifier m, int extra_flags)
{
- assert(code >= 100 && code < 300);
- addKey(name, symbol, KIND_MODIFIER, code,
+ addKey(name, symbol, KIND_MODIFIER, m.ordinal(),
FLAG_LATCH | FLAG_SPECIAL | extra_flags);
}
- private static void addSpecialKey(String name, String symbol, int event, int flags)
+ private static void addEventKey(String name, String symbol, Event e, int flags)
{
- addKey(name, symbol, KIND_EVENT, event, flags | FLAG_SPECIAL);
+ addKey(name, symbol, KIND_EVENT, e.ordinal(), flags | FLAG_SPECIAL);
}
- private static void addEventKey(String name, String symbol, int event, int flags)
+ private static void addKeyeventKey(String name, String symbol, int code, int flags)
{
- addKey(name, symbol, KIND_EVENT, event, flags);
+ addKey(name, symbol, KIND_KEYEVENT, code, flags);
}
static
{
addModifierKey("shift", "\n", // Can't write u000A because Java is stupid
- MOD_SHIFT, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
- addModifierKey("ctrl", "Ctrl", MOD_CTRL, FLAG_SMALLER_FONT);
- addModifierKey("alt", "Alt", MOD_ALT, FLAG_SMALLER_FONT);
- addModifierKey("accent_aigu", "\u0050", MOD_AIGU, FLAG_KEY_FONT);
- addModifierKey("accent_caron", "\u0051", MOD_CARON, FLAG_KEY_FONT);
- addModifierKey("accent_cedille", "\u0052", MOD_CEDILLE, FLAG_KEY_FONT);
- addModifierKey("accent_circonflexe", "\u0053", MOD_CIRCONFLEXE, FLAG_KEY_FONT);
- addModifierKey("accent_grave", "\u0054", MOD_GRAVE, FLAG_KEY_FONT);
- addModifierKey("accent_macron", "\u0055", MOD_MACRON, FLAG_KEY_FONT);
- addModifierKey("accent_ring", "\u0056", MOD_RING, FLAG_KEY_FONT);
- addModifierKey("accent_tilde", "\u0057", MOD_TILDE, FLAG_KEY_FONT);
- addModifierKey("accent_trema", "\u0058", MOD_TREMA, FLAG_KEY_FONT);
- addModifierKey("accent_ogonek", "\u0059", MOD_OGONEK, FLAG_KEY_FONT);
- addModifierKey("accent_dot_above", "\u005a", MOD_DOT_ABOVE, FLAG_KEY_FONT);
- addModifierKey("accent_double_aigu", "\u005b", MOD_DOUBLE_AIGU, FLAG_KEY_FONT);
+ Modifier.SHIFT, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
+ addModifierKey("ctrl", "Ctrl", Modifier.CTRL, FLAG_SMALLER_FONT);
+ addModifierKey("alt", "Alt", Modifier.ALT, FLAG_SMALLER_FONT);
+ addModifierKey("accent_aigu", "\u0050", Modifier.AIGU, FLAG_KEY_FONT);
+ addModifierKey("accent_caron", "\u0051", Modifier.CARON, FLAG_KEY_FONT);
+ addModifierKey("accent_cedille", "\u0052", Modifier.CEDILLE, FLAG_KEY_FONT);
+ addModifierKey("accent_circonflexe", "\u0053", Modifier.CIRCONFLEXE, FLAG_KEY_FONT);
+ addModifierKey("accent_grave", "\u0054", Modifier.GRAVE, FLAG_KEY_FONT);
+ addModifierKey("accent_macron", "\u0055", Modifier.MACRON, FLAG_KEY_FONT);
+ addModifierKey("accent_ring", "\u0056", Modifier.RING, FLAG_KEY_FONT);
+ addModifierKey("accent_tilde", "\u0057", Modifier.TILDE, FLAG_KEY_FONT);
+ addModifierKey("accent_trema", "\u0058", Modifier.TREMA, FLAG_KEY_FONT);
+ addModifierKey("accent_ogonek", "\u0059", Modifier.OGONEK, FLAG_KEY_FONT);
+ addModifierKey("accent_dot_above", "\u005a", Modifier.DOT_ABOVE, FLAG_KEY_FONT);
+ addModifierKey("accent_double_aigu", "\u005b", Modifier.DOUBLE_AIGU, FLAG_KEY_FONT);
addModifierKey("accent_slash", "\134", // Can't write u005c
- MOD_SLASH, FLAG_KEY_FONT);
- addModifierKey("accent_arrow_right", "\u005d", MOD_ARROW_RIGHT, FLAG_KEY_FONT);
- addModifierKey("superscript", "Sup", MOD_SUPERSCRIPT, FLAG_SMALLER_FONT);
- addModifierKey("subscript", "Sub", MOD_SUBSCRIPT, FLAG_SMALLER_FONT);
- addModifierKey("ordinal", "Ord", MOD_ORDINAL, FLAG_SMALLER_FONT);
- addModifierKey("arrows", "Arr", MOD_ARROWS, FLAG_SMALLER_FONT);
- addModifierKey("box", "Box", MOD_BOX, FLAG_SMALLER_FONT);
- addModifierKey("fn", "Fn", MOD_FN, FLAG_SMALLER_FONT);
- addModifierKey("meta", "Meta", MOD_META, FLAG_SMALLER_FONT);
-
- addSpecialKey("config", "\u0004", EVENT_CONFIG, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
- addSpecialKey("switch_text", "ABC", EVENT_SWITCH_TEXT, FLAG_SMALLER_FONT);
- addSpecialKey("switch_numeric", "123+", EVENT_SWITCH_NUMERIC, FLAG_SMALLER_FONT);
- addSpecialKey("switch_emoji", "\u0001" , EVENT_SWITCH_EMOJI, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
- addSpecialKey("switch_back_emoji", "ABC", EVENT_SWITCH_BACK_EMOJI, 0);
- addSpecialKey("switch_programming", "Prog", EVENT_SWITCH_PROGRAMMING, FLAG_SMALLER_FONT);
- addSpecialKey("change_method", "\u0009", EVENT_CHANGE_METHOD, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
- addSpecialKey("action", "Action", EVENT_ACTION, FLAG_SMALLER_FONT); // Will always be replaced
-
- addEventKey("esc", "Esc", KeyEvent.KEYCODE_ESCAPE, FLAG_SMALLER_FONT);
- addEventKey("enter", "\u000E", KeyEvent.KEYCODE_ENTER, FLAG_KEY_FONT);
- addEventKey("up", "\u0005", KeyEvent.KEYCODE_DPAD_UP, FLAG_KEY_FONT | FLAG_PRECISE_REPEAT);
- addEventKey("right", "\u0006", KeyEvent.KEYCODE_DPAD_RIGHT, FLAG_KEY_FONT | FLAG_PRECISE_REPEAT);
- addEventKey("down", "\u0007", KeyEvent.KEYCODE_DPAD_DOWN, FLAG_KEY_FONT | FLAG_PRECISE_REPEAT);
- addEventKey("left", "\u0008", KeyEvent.KEYCODE_DPAD_LEFT, FLAG_KEY_FONT | FLAG_PRECISE_REPEAT);
- addEventKey("page_up", "\u0002", KeyEvent.KEYCODE_PAGE_UP, FLAG_KEY_FONT);
- addEventKey("page_down", "\u0003", KeyEvent.KEYCODE_PAGE_DOWN, FLAG_KEY_FONT);
- addEventKey("home", "\u000B", KeyEvent.KEYCODE_MOVE_HOME, FLAG_KEY_FONT);
- addEventKey("end", "\u000C", KeyEvent.KEYCODE_MOVE_END, FLAG_KEY_FONT);
- addEventKey("backspace", "\u0011", KeyEvent.KEYCODE_DEL, FLAG_KEY_FONT);
- addEventKey("delete", "\u0010", KeyEvent.KEYCODE_FORWARD_DEL, FLAG_KEY_FONT);
- addEventKey("insert", "Ins", KeyEvent.KEYCODE_INSERT, FLAG_SMALLER_FONT);
- addEventKey("f1", "F1", KeyEvent.KEYCODE_F1, 0);
- addEventKey("f2", "F2", KeyEvent.KEYCODE_F2, 0);
- addEventKey("f3", "F3", KeyEvent.KEYCODE_F3, 0);
- addEventKey("f4", "F4", KeyEvent.KEYCODE_F4, 0);
- addEventKey("f5", "F5", KeyEvent.KEYCODE_F5, 0);
- addEventKey("f6", "F6", KeyEvent.KEYCODE_F6, 0);
- addEventKey("f7", "F7", KeyEvent.KEYCODE_F7, 0);
- addEventKey("f8", "F8", KeyEvent.KEYCODE_F8, 0);
- addEventKey("f9", "F9", KeyEvent.KEYCODE_F9, 0);
- addEventKey("f10", "F10", KeyEvent.KEYCODE_F10, 0);
- addEventKey("f11", "F11", KeyEvent.KEYCODE_F11, FLAG_SMALLER_FONT);
- addEventKey("f12", "F12", KeyEvent.KEYCODE_F12, FLAG_SMALLER_FONT);
- addEventKey("tab", "\u000F", KeyEvent.KEYCODE_TAB, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
+ Modifier.SLASH, FLAG_KEY_FONT);
+ addModifierKey("accent_arrow_right", "\u005d", Modifier.ARROW_RIGHT, FLAG_KEY_FONT);
+ addModifierKey("superscript", "Sup", Modifier.SUPERSCRIPT, FLAG_SMALLER_FONT);
+ addModifierKey("subscript", "Sub", Modifier.SUBSCRIPT, FLAG_SMALLER_FONT);
+ addModifierKey("ordinal", "Ord", Modifier.ORDINAL, FLAG_SMALLER_FONT);
+ addModifierKey("arrows", "Arr", Modifier.ARROWS, FLAG_SMALLER_FONT);
+ addModifierKey("box", "Box", Modifier.BOX, FLAG_SMALLER_FONT);
+ addModifierKey("fn", "Fn", Modifier.FN, FLAG_SMALLER_FONT);
+ addModifierKey("meta", "Meta", Modifier.META, FLAG_SMALLER_FONT);
+
+ addEventKey("config", "\u0004", Event.CONFIG, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
+ addEventKey("switch_text", "ABC", Event.SWITCH_TEXT, FLAG_SMALLER_FONT);
+ addEventKey("switch_numeric", "123+", Event.SWITCH_NUMERIC, FLAG_SMALLER_FONT);
+ addEventKey("switch_emoji", "\u0001" , Event.SWITCH_EMOJI, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
+ addEventKey("switch_back_emoji", "ABC", Event.SWITCH_BACK_EMOJI, 0);
+ addEventKey("switch_programming", "Prog", Event.SWITCH_PROGRAMMING, FLAG_SMALLER_FONT);
+ addEventKey("change_method", "\u0009", Event.CHANGE_METHOD, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
+ addEventKey("action", "Action", Event.ACTION, FLAG_SMALLER_FONT); // Will always be replaced
+
+ addKeyeventKey("esc", "Esc", KeyEvent.KEYCODE_ESCAPE, FLAG_SMALLER_FONT);
+ addKeyeventKey("enter", "\u000E", KeyEvent.KEYCODE_ENTER, FLAG_KEY_FONT);
+ addKeyeventKey("up", "\u0005", KeyEvent.KEYCODE_DPAD_UP, FLAG_KEY_FONT | FLAG_PRECISE_REPEAT);
+ addKeyeventKey("right", "\u0006", KeyEvent.KEYCODE_DPAD_RIGHT, FLAG_KEY_FONT | FLAG_PRECISE_REPEAT);
+ addKeyeventKey("down", "\u0007", KeyEvent.KEYCODE_DPAD_DOWN, FLAG_KEY_FONT | FLAG_PRECISE_REPEAT);
+ addKeyeventKey("left", "\u0008", KeyEvent.KEYCODE_DPAD_LEFT, FLAG_KEY_FONT | FLAG_PRECISE_REPEAT);
+ addKeyeventKey("page_up", "\u0002", KeyEvent.KEYCODE_PAGE_UP, FLAG_KEY_FONT);
+ addKeyeventKey("page_down", "\u0003", KeyEvent.KEYCODE_PAGE_DOWN, FLAG_KEY_FONT);
+ addKeyeventKey("home", "\u000B", KeyEvent.KEYCODE_MOVE_HOME, FLAG_KEY_FONT);
+ addKeyeventKey("end", "\u000C", KeyEvent.KEYCODE_MOVE_END, FLAG_KEY_FONT);
+ addKeyeventKey("backspace", "\u0011", KeyEvent.KEYCODE_DEL, FLAG_KEY_FONT);
+ addKeyeventKey("delete", "\u0010", KeyEvent.KEYCODE_FORWARD_DEL, FLAG_KEY_FONT);
+ addKeyeventKey("insert", "Ins", KeyEvent.KEYCODE_INSERT, FLAG_SMALLER_FONT);
+ addKeyeventKey("f1", "F1", KeyEvent.KEYCODE_F1, 0);
+ addKeyeventKey("f2", "F2", KeyEvent.KEYCODE_F2, 0);
+ addKeyeventKey("f3", "F3", KeyEvent.KEYCODE_F3, 0);
+ addKeyeventKey("f4", "F4", KeyEvent.KEYCODE_F4, 0);
+ addKeyeventKey("f5", "F5", KeyEvent.KEYCODE_F5, 0);
+ addKeyeventKey("f6", "F6", KeyEvent.KEYCODE_F6, 0);
+ addKeyeventKey("f7", "F7", KeyEvent.KEYCODE_F7, 0);
+ addKeyeventKey("f8", "F8", KeyEvent.KEYCODE_F8, 0);
+ addKeyeventKey("f9", "F9", KeyEvent.KEYCODE_F9, 0);
+ addKeyeventKey("f10", "F10", KeyEvent.KEYCODE_F10, 0);
+ addKeyeventKey("f11", "F11", KeyEvent.KEYCODE_F11, FLAG_SMALLER_FONT);
+ addKeyeventKey("f12", "F12", KeyEvent.KEYCODE_F12, FLAG_SMALLER_FONT);
+ addKeyeventKey("tab", "\u000F", KeyEvent.KEYCODE_TAB, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
addCharKey("\\t", "\\t", '\t', 0); // Send the tab character
addCharKey("space", "\r", ' ', FLAG_KEY_FONT);