From 62d7cf44500132e8bdb4e5eeb0b03e4c03af4f13 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Wed, 22 Jun 2022 09:21:28 -0500 Subject: [PATCH] Support more text field types --- .../conversations/entities/Conversation.java | 42 +++++++++++++++---- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index 563169e74f064803acb8ef2721ef0c516294fab0..deeb93cc11f7a77b549374a44ca05b53be50ba54 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -1343,33 +1343,61 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl abstract public void bind(Element el); protected void setupInputType(Element field, TextView textinput) { - textinput.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT); + int flags = 0; + textinput.setInputType(flags | InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT); + + String type = field.getAttribute("type"); + if (type != null) { + if (type.equals("text-multi") || type.equals("jid-multi")) { + flags |= InputType.TYPE_TEXT_FLAG_MULTI_LINE; + } + + textinput.setInputType(flags | InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT); + + if (type.equals("jid-single") || type.equals("jid-multi")) { + textinput.setInputType(flags | InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); + } + + if (type.equals("text-private")) { + textinput.setInputType(flags | InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); + } + } + Element validate = field.findChild("validate", "http://jabber.org/protocol/xdata-validate"); if (validate == null) return; String datatype = validate.getAttribute("datatype"); + if (datatype == null) return; if (datatype.equals("xs:integer") || datatype.equals("xs:int") || datatype.equals("xs:long") || datatype.equals("xs:short") || datatype.equals("xs:byte")) { - textinput.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED); + textinput.setInputType(flags | InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED); } if (datatype.equals("xs:decimal") || datatype.equals("xs:double")) { - textinput.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED | InputType.TYPE_NUMBER_FLAG_DECIMAL); + textinput.setInputType(flags | InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED | InputType.TYPE_NUMBER_FLAG_DECIMAL); } if (datatype.equals("xs:date")) { - textinput.setInputType(InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_DATE); + textinput.setInputType(flags | InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_DATE); } if (datatype.equals("xs:dateTime")) { - textinput.setInputType(InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_NORMAL); + textinput.setInputType(flags | InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_NORMAL); } if (datatype.equals("xs:time")) { - textinput.setInputType(InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_TIME); + textinput.setInputType(flags | InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_TIME); } if (datatype.equals("xs:anyURI")) { - textinput.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI); + textinput.setInputType(flags | InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI); + } + + if (datatype.equals("html:tel")) { + textinput.setInputType(flags | InputType.TYPE_CLASS_PHONE); + } + + if (datatype.equals("html:email")) { + textinput.setInputType(flags | InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); } } }