From 1d20af98eae56e07432b86f262f2461610a5f422 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Sat, 6 May 2023 21:19:29 -0500 Subject: [PATCH] Make text-multi and multi-jid work at all --- .../conversations/entities/Conversation.java | 33 +++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index 05f6d56262991ceab1be6345e4640a4bb98ead8b..ed312cb71de0259bc178a3abd07116e5de5d7b9d 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -2184,11 +2184,11 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl super(binding); binding.textinput.addTextChangedListener(this); } - protected Element mValue = null; + protected Field field = null; @Override public void bind(Item item) { - Field field = (Field) item; + field = (Field) item; binding.textinputLayout.setHint(field.getLabel().or("")); binding.textinputLayout.setHelperTextEnabled(field.getDesc().isPresent()); @@ -2211,16 +2211,15 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl String prefixLabel = field.el.findChildContent("x", "https://ns.cheogram.com/prefix-label"); binding.textinputLayout.setPrefixText(prefixLabel == null ? "" : prefixLabel); - mValue = field.getValue(); - binding.textinput.setText(mValue.getContent()); + binding.textinput.setText(String.join("\n", field.getValues())); setupInputType(field.el, binding.textinput, binding.textinputLayout); } @Override public void afterTextChanged(Editable s) { - if (mValue == null) return; + if (field == null) return; - mValue.setContent(s.toString()); + field.setValues(List.of(s.toString().split("\n"))); } @Override @@ -2347,6 +2346,28 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl return value; } + public void setValues(List values) { + for(Element child : el.getChildren()) { + if ("value".equals(child.getName()) && "jabber:x:data".equals(child.getNamespace())) { + el.removeChild(child); + } + } + + for (String value : values) { + el.addChild("value", "jabber:x:data").setContent(value); + } + } + + public List getValues() { + List values = new ArrayList<>(); + for(Element child : el.getChildren()) { + if ("value".equals(child.getName()) && "jabber:x:data".equals(child.getNamespace())) { + values.add(child.getContent()); + } + } + return values; + } + public List