abouttreesummaryrefslogcommitdiff
path: root/srcs/juloo.keyboard2/KeyboardData.java
diff options
context:
space:
mode:
Diffstat (limited to 'srcs/juloo.keyboard2/KeyboardData.java')
-rw-r--r--srcs/juloo.keyboard2/KeyboardData.java139
1 files changed, 139 insertions, 0 deletions
diff --git a/srcs/juloo.keyboard2/KeyboardData.java b/srcs/juloo.keyboard2/KeyboardData.java
new file mode 100644
index 0000000..c08fe8b
--- /dev/null
+++ b/srcs/juloo.keyboard2/KeyboardData.java
@@ -0,0 +1,139 @@
+package juloo.keyboard2;
+
+import android.content.res.XmlResourceParser;
+import java.util.ArrayList;
+
+class KeyboardData
+{
+ private ArrayList<Row> _rows;
+
+ public KeyboardData(XmlResourceParser parser)
+ {
+ ArrayList<Row> rows = new ArrayList<Row>();
+
+ try
+ {
+ int status;
+
+ while (parser.next() != XmlResourceParser.START_TAG)
+ continue ;
+ if (!parser.getName().equals("keyboard"))
+ throw new Exception("Unknow tag: " + parser.getName());
+ while ((status = parser.next()) != XmlResourceParser.END_DOCUMENT)
+ {
+ if (status == XmlResourceParser.START_TAG)
+ {
+ String tag = parser.getName();
+ if (tag.equals("row"))
+ rows.add(new Row(parser));
+ else
+ throw new Exception("Unknow keyboard tag: " + tag);
+ }
+ }
+ _rows = rows;
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ public ArrayList<Row> getRows()
+ {
+ return (_rows);
+ }
+
+ public class Row extends ArrayList<Key>
+ {
+ private float _keysWidth;
+
+ public Row(XmlResourceParser parser) throws Exception
+ {
+ super();
+
+ int status;
+ _keysWidth = 0;
+ while ((status = parser.next()) != XmlResourceParser.END_TAG)
+ {
+ if (status == XmlResourceParser.START_TAG)
+ {
+ String tag = parser.getName();
+ if (tag.equals("key"))
+ {
+ Key k = new Key(parser);
+ _keysWidth += k.width;
+ add(k);
+ }
+ else
+ throw new Exception("Unknow row tag: " + tag);
+ }
+ }
+ }
+
+ public float getWidth(float keyWidth, float keyMargin)
+ {
+ return (keyWidth * _keysWidth + ((size() - 1) * keyMargin));
+ }
+ }
+
+ public class Key
+ {
+ /*
+ ** 1 2
+ ** 0
+ ** 3 4
+ */
+ public KeyValue key0;
+ public KeyValue key1;
+ public KeyValue key2;
+ public KeyValue key3;
+ public KeyValue key4;
+
+ public float width;
+
+ public Key(XmlResourceParser parser) throws Exception
+ {
+ downPointer = -1;
+ key0 = KeyValue.getKeyByName(parser.getAttributeValue(null, "key0"));
+ key1 = KeyValue.getKeyByName(parser.getAttributeValue(null, "key1"));
+ key2 = KeyValue.getKeyByName(parser.getAttributeValue(null, "key2"));
+ key3 = KeyValue.getKeyByName(parser.getAttributeValue(null, "key3"));
+ key4 = KeyValue.getKeyByName(parser.getAttributeValue(null, "key4"));
+ try
+ {
+ width = parser.getAttributeFloatValue(null, "width", 1f);
+ }
+ catch (Exception e)
+ {
+ width = 1f;
+ }
+ while (parser.next() != XmlResourceParser.END_TAG)
+ continue ;
+ }
+
+ // TODO move it in Keyboard2View
+ private static final float SUB_VALUE_DIST = 5f;
+
+ public int downPointer;
+ public KeyValue downValue;
+ public float downX;
+ public float downY;
+
+ public KeyValue getDownValue(float x, float y)
+ {
+ x -= downX;
+ y -= downY;
+ if ((Math.abs(x) + Math.abs(y)) < SUB_VALUE_DIST)
+ return (key0);
+ if (x < 0)
+ {
+ if (y < 0)
+ return ((key1 == null) ? key0 : key1);
+ return ((key3 == null) ? key0 : key3);
+ }
+ else if (y < 0)
+ return ((key2 == null) ? key0 : key2);
+ return ((key4 == null) ? key0 : key4);
+ }
+ }
+}