diff options
| author | Jules Aguillon | 2022-11-26 22:30:45 +0100 |
|---|---|---|
| committer | Jules Aguillon | 2022-11-26 22:30:45 +0100 |
| commit | e745c812691462380695da2275757e3f29bbbdb2 (patch) | |
| tree | 1a6c9e62fffa6085455b9e2323533927a01a292d /srcs/juloo.keyboard2/KeyboardData.java | |
| parent | 09d984a1ab597cceab8a416b3f3cbf60bc1a5525 (diff) | |
| download | unexpected-keyboard-e745c812691462380695da2275757e3f29bbbdb2.tar.gz unexpected-keyboard-e745c812691462380695da2275757e3f29bbbdb2.zip | |
Allow using a custom layout
Add an option for specifying an XML layout description as a string.
The option is a bit rough at the moment:
- No documentation, users have to be aware of the keyboard's code to use
this option.
- No error are shown, the layout will fallback to qwerty on error.
Diffstat (limited to 'srcs/juloo.keyboard2/KeyboardData.java')
| -rw-r--r-- | srcs/juloo.keyboard2/KeyboardData.java | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/srcs/juloo.keyboard2/KeyboardData.java b/srcs/juloo.keyboard2/KeyboardData.java index 640ed3b..7b50f98 100644 --- a/srcs/juloo.keyboard2/KeyboardData.java +++ b/srcs/juloo.keyboard2/KeyboardData.java @@ -1,6 +1,9 @@ package juloo.keyboard2; import android.content.res.Resources; +import android.content.res.XmlResourceParser; +import android.util.Xml; +import java.io.StringReader; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; @@ -126,6 +129,7 @@ class KeyboardData return _pin_entry; } + /** Load a layout from a resource ID. Returns [null] on error. */ public static KeyboardData load(Resources res, int id) { KeyboardData l = _layoutCache.get(id); @@ -133,7 +137,9 @@ class KeyboardData { try { - l = parse_keyboard(res.getXml(id)); + XmlResourceParser parser = res.getXml(id); + l = parse_keyboard(parser); + parser.close(); _layoutCache.put(id, l); } catch (Exception e) @@ -144,6 +150,21 @@ class KeyboardData return l; } + /** Load a layout from a string. Returns [null] on error. */ + public static KeyboardData load_string(String src) + { + try + { + XmlPullParser parser = Xml.newPullParser(); + parser.setInput(new StringReader(src)); + return parse_keyboard(parser); + } + catch (Exception e) + { + return null; + } + } + private static KeyboardData parse_keyboard(XmlPullParser parser) throws Exception { if (!expect_tag(parser, "keyboard")) |
