1package eu.siacs.conversations.ui.forms;
2
3import android.content.Context;
4import android.widget.LinearLayout;
5
6import java.util.ArrayList;
7import java.util.List;
8
9import eu.siacs.conversations.xmpp.forms.Data;
10import eu.siacs.conversations.xmpp.forms.Field;
11
12public class FormWrapper {
13
14 private final LinearLayout layout;
15
16 private final Data form;
17
18 private final List<FormFieldWrapper> fieldWrappers = new ArrayList<>();
19
20 private FormWrapper(Context context, LinearLayout linearLayout, Data form) {
21 this.form = form;
22 this.layout = linearLayout;
23 this.layout.removeAllViews();
24 for(Field field : form.getFields()) {
25 FormFieldWrapper fieldWrapper = FormFieldFactory.createFromField(context,field);
26 if (fieldWrapper != null) {
27 layout.addView(fieldWrapper.getView());
28 fieldWrappers.add(fieldWrapper);
29 }
30 }
31 }
32
33 public Data submit() {
34 for(FormFieldWrapper fieldWrapper : fieldWrappers) {
35 fieldWrapper.submit();
36 }
37 this.form.submit();
38 return this.form;
39 }
40
41 public boolean validates() {
42 boolean validates = true;
43 for(FormFieldWrapper fieldWrapper : fieldWrappers) {
44 validates &= fieldWrapper.validates();
45 }
46 return validates;
47 }
48
49 public void setOnFormFieldValuesEditedListener(FormFieldWrapper.OnFormFieldValuesEdited listener) {
50 for(FormFieldWrapper fieldWrapper : fieldWrappers) {
51 fieldWrapper.setOnFormFieldValuesEditedListener(listener);
52 }
53 }
54
55 public void setReadOnly(boolean b) {
56 for(FormFieldWrapper fieldWrapper : fieldWrappers) {
57 fieldWrapper.setReadOnly(b);
58 }
59 }
60
61 public boolean edited() {
62 boolean edited = false;
63 for(FormFieldWrapper fieldWrapper : fieldWrappers) {
64 edited |= fieldWrapper.edited();
65 }
66 return edited;
67 }
68
69 public static FormWrapper createInLayout(Context context, LinearLayout layout, Data form) {
70 return new FormWrapper(context, layout, form);
71 }
72}