From e745c812691462380695da2275757e3f29bbbdb2 Mon Sep 17 00:00:00 2001 From: Jules Aguillon Date: Sat, 26 Nov 2022 22:30:45 +0100 Subject: 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. --- srcs/juloo.keyboard2/KeyboardData.java | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'srcs/juloo.keyboard2/KeyboardData.java') 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")) -- cgit v1.2.3