diff options
| -rw-r--r-- | srcs/juloo.keyboard2/Config.java | 9 | ||||
| -rw-r--r-- | srcs/juloo.keyboard2/EmojiKeyButton.java | 3 | ||||
| -rw-r--r-- | srcs/juloo.keyboard2/KeyValue.java | 20 | ||||
| -rw-r--r-- | srcs/juloo.keyboard2/Keyboard2.java | 5 | ||||
| -rw-r--r-- | srcs/juloo.keyboard2/Keyboard2View.java | 28 | ||||
| -rw-r--r-- | srcs/juloo.keyboard2/KeyboardData.java | 123 | ||||
| -rw-r--r-- | srcs/juloo.keyboard2/Pointers.java | 11 |
7 files changed, 123 insertions, 76 deletions
diff --git a/srcs/juloo.keyboard2/Config.java b/srcs/juloo.keyboard2/Config.java index 2c68c92..e02868a 100644 --- a/srcs/juloo.keyboard2/Config.java +++ b/srcs/juloo.keyboard2/Config.java @@ -160,15 +160,12 @@ final class Config // first iteration then automatically added. final Set<KeyValue> extra_keys = new HashSet<KeyValue>(this.extra_keys); KeyboardData kw = original_kw.mapKeys(new KeyboardData.MapKeyValues() { - public KeyValue apply(KeyValue key) + public KeyValue apply(KeyValue key, boolean localized) { - if (key == null) - return null; boolean is_extra_key = extra_keys.contains(key); if (is_extra_key) extra_keys.remove(key); - int flags = key.getFlags(); - if ((flags & KeyValue.FLAG_LOCALIZED) != 0 && !is_extra_key) + if (localized && !is_extra_key) return null; switch (key.getKind()) { @@ -193,7 +190,7 @@ final class Config break; case Modifier: if (lockable_modifiers.contains(key.getModifier())) - return key.withFlags(flags | KeyValue.FLAG_LOCK); + return key.withFlags(key.getFlags() | KeyValue.FLAG_LOCK); break; } return key; diff --git a/srcs/juloo.keyboard2/EmojiKeyButton.java b/srcs/juloo.keyboard2/EmojiKeyButton.java index d551ac5..7fd3583 100644 --- a/srcs/juloo.keyboard2/EmojiKeyButton.java +++ b/srcs/juloo.keyboard2/EmojiKeyButton.java @@ -14,7 +14,8 @@ public class EmojiKeyButton extends Button { super(context, attrs); setOnClickListener(this); - _key = KeyValue.getKeyByName(attrs.getAttributeValue(null, "key")); + String key_name = attrs.getAttributeValue(null, "key"); + _key = (key_name == null) ? null : KeyValue.getKeyByName(key_name); setText(_key.getString()); if (_key.hasFlags(KeyValue.FLAG_KEY_FONT)) setTypeface(Theme.getSpecialKeyFont(context)); diff --git a/srcs/juloo.keyboard2/KeyValue.java b/srcs/juloo.keyboard2/KeyValue.java index 4009525..d786959 100644 --- a/srcs/juloo.keyboard2/KeyValue.java +++ b/srcs/juloo.keyboard2/KeyValue.java @@ -58,8 +58,6 @@ final class KeyValue public static final int FLAG_SMALLER_FONT = (1 << 25); // Used by [Pointers]. public static final int FLAG_LOCKED = (1 << 26); - // Language specific keys that are removed from the keyboard by default. - public static final int FLAG_LOCALIZED = (1 << 27); // Kinds public static final int KIND_CHAR = (0 << 29); @@ -196,27 +194,11 @@ final class KeyValue _code = kind | flags | value; } - private static String stripPrefix(String s, String prefix) - { - if (s.startsWith(prefix)) - return s.substring(prefix.length()); - else - return null; - } - public static KeyValue getKeyByName(String name) { - if (name == null) - return null; - KeyValue kv = KeyValue.keys.get(name); + KeyValue kv = keys.get(name); if (kv != null) return kv; - String localized = stripPrefix(name, "loc "); - if (localized != null) - { - kv = getKeyByName(localized); - return kv.withFlags(kv.getFlags() | FLAG_LOCALIZED); - } if (name.length() == 1) return new KeyValue(name, KIND_CHAR, name.charAt(0), 0); else diff --git a/srcs/juloo.keyboard2/Keyboard2.java b/srcs/juloo.keyboard2/Keyboard2.java index f57d7fe..2a54111 100644 --- a/srcs/juloo.keyboard2/Keyboard2.java +++ b/srcs/juloo.keyboard2/Keyboard2.java @@ -296,10 +296,9 @@ public class Keyboard2 extends InputMethodService return; KeyboardData layout = getLayout(_config.programming_layout).mapKeys(new KeyboardData.MapKeyValues() { - public KeyValue apply(KeyValue key) + public KeyValue apply(KeyValue key, boolean localized) { - if (key != null - && key.getKind() == KeyValue.Kind.Event + if (key.getKind() == KeyValue.Kind.Event && key.getEvent() == KeyValue.Event.SWITCH_PROGRAMMING) return KeyValue.getKeyByName("switch_text"); return key; diff --git a/srcs/juloo.keyboard2/Keyboard2View.java b/srcs/juloo.keyboard2/Keyboard2View.java index 71f05a7..25edd00 100644 --- a/srcs/juloo.keyboard2/Keyboard2View.java +++ b/srcs/juloo.keyboard2/Keyboard2View.java @@ -266,26 +266,30 @@ public class Keyboard2View extends View return defaultColor; } - private void drawLabel(Canvas canvas, KeyValue k, float x, float y, float keyH, boolean isKeyDown) + private void drawLabel(Canvas canvas, KeyboardData.Corner k, float x, float y, float keyH, boolean isKeyDown) { - k = KeyModifier.modify(k, _mods); if (k == null) return; - float textSize = scaleTextSize(k, _config.labelTextSize, keyH); - Paint p = _theme.labelPaint(k.hasFlags(KeyValue.FLAG_KEY_FONT)); - p.setColor(labelColor(k, isKeyDown, _theme.labelColor)); + KeyValue kv = KeyModifier.modify(k.kv, _mods); + if (kv == null) + return; + float textSize = scaleTextSize(kv, _config.labelTextSize, keyH); + Paint p = _theme.labelPaint(kv.hasFlags(KeyValue.FLAG_KEY_FONT)); + p.setColor(labelColor(kv, isKeyDown, _theme.labelColor)); p.setTextSize(textSize); - canvas.drawText(k.getString(), x, (keyH - p.ascent() - p.descent()) / 2f + y, p); + canvas.drawText(kv.getString(), x, (keyH - p.ascent() - p.descent()) / 2f + y, p); } - private void drawSubLabel(Canvas canvas, KeyValue k, float x, float y, float keyW, float keyH, Paint.Align a, Vertical v, boolean isKeyDown) + private void drawSubLabel(Canvas canvas, KeyboardData.Corner k, float x, float y, float keyW, float keyH, Paint.Align a, Vertical v, boolean isKeyDown) { - k = KeyModifier.modify(k, _mods); if (k == null) return; - float textSize = scaleTextSize(k, _config.sublabelTextSize, keyH); - Paint p = _theme.subLabelPaint(k.hasFlags(KeyValue.FLAG_KEY_FONT), a); - p.setColor(labelColor(k, isKeyDown, _theme.subLabelColor)); + KeyValue kv = KeyModifier.modify(k.kv, _mods); + if (kv == null) + return; + float textSize = scaleTextSize(kv, _config.sublabelTextSize, keyH); + Paint p = _theme.subLabelPaint(kv.hasFlags(KeyValue.FLAG_KEY_FONT), a); + p.setColor(labelColor(kv, isKeyDown, _theme.subLabelColor)); p.setTextSize(textSize); float subPadding = _config.keyPadding; if (v == Vertical.CENTER) @@ -296,7 +300,7 @@ public class Keyboard2View extends View x += keyW / 2f; else x += (a == Paint.Align.LEFT) ? subPadding : keyW - subPadding; - canvas.drawText(k.getString(), x, y, p); + canvas.drawText(kv.getString(), x, y, p); } private float scaleTextSize(KeyValue k, float rel_size, float keyH) diff --git a/srcs/juloo.keyboard2/KeyboardData.java b/srcs/juloo.keyboard2/KeyboardData.java index 1449b7c..c95dc51 100644 --- a/srcs/juloo.keyboard2/KeyboardData.java +++ b/srcs/juloo.keyboard2/KeyboardData.java @@ -177,11 +177,11 @@ class KeyboardData ** 0 ** 3 4 */ - public final KeyValue key0; - public final KeyValue key1; - public final KeyValue key2; - public final KeyValue key3; - public final KeyValue key4; + public final Corner key0; + public final Corner key1; + public final Corner key2; + public final Corner key3; + public final Corner key4; /** Key width in relative unit. */ public final float width; @@ -190,7 +190,7 @@ class KeyboardData /** Put keys 1 to 4 on the edges instead of the corners. */ public final boolean edgekeys; - protected Key(KeyValue k0, KeyValue k1, KeyValue k2, KeyValue k3, KeyValue k4, float w, float s, boolean e) + protected Key(Corner k0, Corner k1, Corner k2, Corner k3, Corner k4, float w, float s, boolean e) { key0 = k0; key1 = k1; @@ -204,11 +204,11 @@ class KeyboardData public static Key parse(XmlResourceParser parser) throws Exception { - KeyValue k0 = KeyValue.getKeyByName(parser.getAttributeValue(null, "key0")); - KeyValue k1 = KeyValue.getKeyByName(parser.getAttributeValue(null, "key1")); - KeyValue k2 = KeyValue.getKeyByName(parser.getAttributeValue(null, "key2")); - KeyValue k3 = KeyValue.getKeyByName(parser.getAttributeValue(null, "key3")); - KeyValue k4 = KeyValue.getKeyByName(parser.getAttributeValue(null, "key4")); + Corner k0 = Corner.parse_of_attr(parser, "key0"); + Corner k1 = Corner.parse_of_attr(parser, "key1"); + Corner k2 = Corner.parse_of_attr(parser, "key2"); + Corner k3 = Corner.parse_of_attr(parser, "key3"); + Corner k4 = Corner.parse_of_attr(parser, "key4"); float width = parser.getAttributeFloatValue(null, "width", 1f); float shift = parser.getAttributeFloatValue(null, "shift", 0.f); boolean edgekeys = parser.getAttributeBooleanValue(null, "edgekeys", false); @@ -225,27 +225,30 @@ class KeyboardData public KeyValue getKeyValue(int i) { + Corner c; switch (i) { - case 0: return key0; - case 1: return key1; - case 2: return key2; - case 3: return key3; - case 4: return key4; - default: return null; + case 0: c = key0; break; + case 1: c = key1; break; + case 2: c = key2; break; + case 3: c = key3; break; + case 4: c = key4; break; + default: c = null; break; } + return (c == null) ? null : c.kv; } public Key withKeyValue(int i, KeyValue kv) { - KeyValue k0 = key0, k1 = key1, k2 = key2, k3 = key3, k4 = key4; + Corner k0 = key0, k1 = key1, k2 = key2, k3 = key3, k4 = key4; + Corner k = Corner.of_kv(kv); switch (i) { - case 0: k0 = kv; break; - case 1: k1 = kv; break; - case 2: k2 = kv; break; - case 3: k3 = kv; break; - case 4: k4 = kv; break; + case 0: k0 = k; break; + case 1: k1 = k; break; + case 2: k2 = k; break; + case 3: k3 = k; break; + case 4: k4 = k; break; } return new Key(k0, k1, k2, k3, k4, width, shift, edgekeys); } @@ -255,6 +258,7 @@ class KeyboardData */ public KeyValue getAtDirection(int direction) { + Corner c = null; if (edgekeys) { // \ 1 / @@ -264,10 +268,10 @@ class KeyboardData // / 4 \ switch (direction) { - case 2: case 3: return key1; - case 4: case 5: return key2; - case 6: case 7: return key4; - case 8: case 1: return key3; + case 2: case 3: c = key1; break; + case 4: case 5: c = key2; break; + case 6: case 7: c = key4; break; + case 8: case 1: c = key3; break; } } else @@ -279,13 +283,56 @@ class KeyboardData // 3 | 4 switch (direction) { - case 1: case 2: return key1; - case 3: case 4: return key2; - case 5: case 6: return key4; - case 7: case 8: return key3; + case 1: case 2: c = key1; break; + case 3: case 4: c = key2; break; + case 5: case 6: c = key4; break; + case 7: case 8: c = key3; break; } } - return null; + return (c == null) ? null : c.kv; + } + } + + public static final class Corner + { + public final KeyValue kv; + /** Whether the kv is marked with the "loc " prefix. To be removed if not + specified in the [extra_keys]. */ + public final boolean localized; + + protected Corner(KeyValue k, boolean l) + { + kv = k; + localized = l; + } + + public static Corner parse_of_attr(XmlResourceParser parser, String attr) throws Exception + { + String name = parser.getAttributeValue(null, attr); + boolean localized = false; + + if (name == null) + return null; + String name_loc = stripPrefix(name, "loc "); + if (name_loc != null) + { + localized = true; + name = name_loc; + } + return new Corner(KeyValue.getKeyByName(name), localized); + } + + public static Corner of_kv(KeyValue kv) + { + return new Corner(kv, false); + } + + private static String stripPrefix(String s, String prefix) + { + if (s.startsWith(prefix)) + return s.substring(prefix.length()); + else + return null; } } @@ -295,13 +342,23 @@ class KeyboardData } public static abstract class MapKeyValues implements MapKey { - abstract public KeyValue apply(KeyValue kv); + abstract public KeyValue apply(KeyValue c, boolean localized); public Key apply(Key k) { return new Key(apply(k.key0), apply(k.key1), apply(k.key2), apply(k.key3), apply(k.key4), k.width, k.shift, k.edgekeys); } + + private Corner apply(Corner c) + { + if (c == null) + return null; + KeyValue kv = apply(c.kv, c.localized); + if (kv == null) + return null; + return Corner.of_kv(kv); + } } /** Parsing utils */ diff --git a/srcs/juloo.keyboard2/Pointers.java b/srcs/juloo.keyboard2/Pointers.java index 0548b88..1bb358c 100644 --- a/srcs/juloo.keyboard2/Pointers.java +++ b/srcs/juloo.keyboard2/Pointers.java @@ -140,7 +140,7 @@ public final class Pointers implements Handler.Callback // Don't take latched modifiers into account if an other key is pressed. // The other key already "own" the latched modifiers and will clear them. Modifiers mods = getModifiers(isOtherPointerDown()); - KeyValue value = _handler.modifyKey(key.key0, mods); + KeyValue value = handleKV(key.key0, mods); Pointer ptr = new Pointer(pointerId, key, value, x, y, mods); _ptrs.add(ptr); if (value != null && !value.hasFlags(KeyValue.FLAG_SPECIAL)) @@ -159,7 +159,7 @@ public final class Pointers implements Handler.Callback private KeyValue getKeyAtDirection(Pointer ptr, int direction) { if (direction == 0) - return _handler.modifyKey(ptr.key.key0, ptr.modifiers); + return handleKV(ptr.key.key0, ptr.modifiers); KeyValue k; for (int i = 0; i > -3; i = (~i>>31) - i) { @@ -173,6 +173,13 @@ public final class Pointers implements Handler.Callback return null; } + private KeyValue handleKV(KeyboardData.Corner c, Modifiers modifiers) + { + if (c == null) + return null; + return _handler.modifyKey(c.kv, modifiers); + } + public void onTouchMove(float x, float y, int pointerId) { Pointer ptr = getPtr(pointerId); |
