diff --git a/res/xml/azerty.xml b/res/xml/azerty.xml index b22fa14..ada3f93 100644 --- a/res/xml/azerty.xml +++ b/res/xml/azerty.xml @@ -32,14 +32,13 @@ - - + + - - - + + diff --git a/srcs/juloo.keyboard2/KeyValue.java b/srcs/juloo.keyboard2/KeyValue.java index 20af817..1b6ef23 100644 --- a/srcs/juloo.keyboard2/KeyValue.java +++ b/srcs/juloo.keyboard2/KeyValue.java @@ -5,97 +5,70 @@ import java.util.HashMap; class KeyValue { - // KEY_A("a", 'a'), - // KEY_A2("à", 'à'), - // KEY_B("b", 'b'), - // KEY_C("c", 'c'), - // KEY_C2("ç", 'ç'), - // KEY_D("d", 'd'), - // KEY_E("e", 'e'), - // KEY_E2("é", 'é'), - // KEY_E3("è", 'è'), - // KEY_F("f", 'f'), - // KEY_G("g", 'g'), - // KEY_H("h", 'h'), - // KEY_I("i", 'i'), - // KEY_J("j", 'j'), - // KEY_K("k", 'k'), - // KEY_L("l", 'l'), - // KEY_M("m", 'm'), - // KEY_N("n", 'n'), - // KEY_O("o", 'o'), - // KEY_P("p", 'p'), - // KEY_Q("q", 'q'), - // KEY_R("r", 'r'), - // KEY_S("s", 's'), - // KEY_T("t", 't'), - // KEY_U("u", 'u'), - // KEY_V("v", 'v'), - // KEY_W("w", 'w'), - // KEY_X("x", 'x'), - // KEY_Y("y", 'y'), - // KEY_Z("z", 'z'), - // KEY_0("0", '0'), - // KEY_1("1", '1'), - // KEY_2("2", '2'), - // KEY_3("3", '3'), - // KEY_4("4", '4'), - // KEY_5("5", '5'), - // KEY_6("6", '6'), - // KEY_7("7", '7'), - // KEY_8("8", '8'), - // KEY_9("9", '9'), - // KEY_AND("&", '&'), - // KEY_DQUOTE("\"", '"'), - // KEY_QUOTE("'", '\''), - // KEY_PARENTHESIS("(", '('), - // KEY_MINUS("-", '-'), - // KEY_UNDERSCORE("_", '_'), - // KEY_TILDE("~", '~'), - // KEY_DIESE("#", '#'), - // KEY_BLOCK("{", '{'), - // KEY_SQUARE("[", '['), - // KEY_PIPE("|", '|'), - // KEY_BACKQUOTE("`", '`'), - // KEY_BACKSLASH("\\", '\\'), - // KEY_XOR("^", '^'), - // KEY_AROBASE("@", '@'), - // KEY_ENTER("enter", '\n'), - // KEY_SPACE("space", ' '), - // KEY_DEL("del", '\u007F'); - private String _name; + private String _symbol; private char _char; - private KeyValue(String name, char c) - { - _name = name; - _char = c; - } - public String getName() { return (_name); } + public String getSymbol() + { + return (_symbol); + } + public char getChar() { return (_char); } - // private static HashMap keys = new HashMap(); + private static HashMap keys = new HashMap(); - // static - // { - // for (KeyValue k : KeyValue.values()) - // keys.put(k.getName(), k); - // } + private KeyValue(String name, String symbol, char c) + { + _name = name; + _symbol = symbol; + _char = c; + } public static KeyValue getKeyByName(String name) { - // return (KeyValue.keys.get(name)); - if (name == null || name.length() == 0) - return (null); - return (new KeyValue(name, name.charAt(0))); + return (KeyValue.keys.get(name)); + } + + private static void add(String name, String symbol, char c) + { + keys.put(name, new KeyValue(name, symbol, c)); + } + + static + { + String chars = "abcdefghijklmnopqrstuvwxyz" + + "àçéèêë" + + "0123456789<>" + + "&é\"'(-_)=°+" + + "~#{[|`\\^@]}" + + "^$ù*,;:!¨£%µ?./§"; + for (int i = 0; i < chars.length(); i++) + add(chars.substring(i, i + 1), chars.substring(i, i + 1), chars.charAt(i)); + add("shift", "Shift", 'S'); + add("ctrl", "Ctrl", 'C'); + add("alt", "Alt", 'A'); + + add("back", "⌫", '\u007F'); + add("up", "↑", 'U'); + add("right", "→", 'R'); + add("down", "↓", 'D'); + add("left", "←", 'L'); + add("page_up", "⇞", 'U'); + add("page_down", "⇟", 'D'); + add("home", "↖", 'H'); + add("end", "↗", 'E'); + add("tab", "↹", '\t'); + add("return", "↵", '\n'); + add("space", " ", ' '); + add("delete", "⌦", 'D'); } } diff --git a/srcs/juloo.keyboard2/Keyboard2.java b/srcs/juloo.keyboard2/Keyboard2.java index 4a116cb..38a9294 100644 --- a/srcs/juloo.keyboard2/Keyboard2.java +++ b/srcs/juloo.keyboard2/Keyboard2.java @@ -27,6 +27,11 @@ public class Keyboard2 extends InputMethodService return (_inputView); } + public void handleKey(KeyValue key) + { + Keyboard2.log("Key up " + key.getName()); + } + public static void log(String str) { Log.d(TAG, str); diff --git a/srcs/juloo.keyboard2/Keyboard2View.java b/srcs/juloo.keyboard2/Keyboard2View.java index 146e146..da3c852 100644 --- a/srcs/juloo.keyboard2/Keyboard2View.java +++ b/srcs/juloo.keyboard2/Keyboard2View.java @@ -17,6 +17,8 @@ public class Keyboard2View extends View private Keyboard2 _ime; private KeyboardData _keyboard; + private KeyValue _downValue; + private float _verticalMargin; private float _horizontalMargin; private float _keyWidth; @@ -33,6 +35,7 @@ public class Keyboard2View extends View { super(context, attrs); DisplayMetrics dm = context.getResources().getDisplayMetrics(); + _downValue = null; _verticalMargin = getResources().getDimension(R.dimen.vertical_margin); _horizontalMargin = getResources().getDimension(R.dimen.horizontal_margin); _keyHeight = getResources().getDimension(R.dimen.key_height); @@ -101,7 +104,8 @@ public class Keyboard2View extends View if (v != k.downValue) { k.downValue = v; - Keyboard2.log("Key down " + v.getName()); + if (v != null) + _downValue = v; } } } @@ -127,7 +131,7 @@ public class Keyboard2View extends View if (touchX >= x && touchX < (x + keyW) && k.downPointer == -1) { if (k.key0 != null) - Keyboard2.log("Key down " + k.key0.getName()); + _downValue = k.key0; k.downPointer = pointerId; k.downValue = k.key0; k.downX = touchX; @@ -149,9 +153,27 @@ public class Keyboard2View extends View if (k.downPointer == pointerId) { if (k.downValue != null) - Keyboard2.log("Key up " + k.downValue.getName()); + _ime.handleKey(k.downValue); + _downValue = null; k.downPointer = -1; + nextDownValue(); invalidate(); + return ; + } + } + } + } + + private void nextDownValue() + { + for (keyboardData.Row row : _keyboard.getRows()) + { + for (KeyboardData.Key k : row) + { + if (k.downPointer != -1) + { + _downValue = k.downValue; + return ; } } } @@ -190,22 +212,22 @@ public class Keyboard2View extends View canvas.drawRect(x + _keyBgPadding, y + _keyBgPadding, x + keyW - _keyBgPadding, y + _keyHeight - _keyBgPadding, _keyBgPaint); if (k.key0 != null) - canvas.drawText(k.key0.getName(), keyW / 2 + x, + canvas.drawText(k.key0.getSymbol(), keyW / 2 + x, (_keyHeight + _keyLabelPaint.getTextSize()) / 2 + y, _keyLabelPaint); float textOffsetY = _keySubLabelPaint.getTextSize() / 2; float subPadding = _keyPadding + _keyBgPadding; if (k.key1 != null) - canvas.drawText(k.key1.getName(), x + subPadding, + canvas.drawText(k.key1.getSymbol(), x + subPadding, y + subPadding + textOffsetY, _keySubLabelPaint); if (k.key2 != null) - canvas.drawText(k.key2.getName(), x + keyW - subPadding, + canvas.drawText(k.key2.getSymbol(), x + keyW - subPadding, y + subPadding + textOffsetY, _keySubLabelPaint); textOffsetY /= 2; // lol if (k.key3 != null) - canvas.drawText(k.key3.getName(), x + subPadding, + canvas.drawText(k.key3.getSymbol(), x + subPadding, y + _keyHeight - subPadding + textOffsetY, _keySubLabelPaint); if (k.key4 != null) - canvas.drawText(k.key4.getName(), x + keyW - subPadding, + canvas.drawText(k.key4.getSymbol(), x + keyW - subPadding, y + _keyHeight - subPadding + textOffsetY, _keySubLabelPaint); x += keyW; }