1package eu.siacs.conversations.ui.forms;
2
3import android.content.Context;
4import android.text.Editable;
5import android.text.InputType;
6import android.text.TextWatcher;
7import android.widget.EditText;
8import android.widget.TextView;
9
10import java.util.ArrayList;
11import java.util.List;
12
13import eu.siacs.conversations.R;
14import eu.siacs.conversations.xmpp.forms.Field;
15
16public class FormTextFieldWrapper extends FormFieldWrapper {
17
18 protected EditText editText;
19
20 protected FormTextFieldWrapper(Context context, Field field) {
21 super(context, field);
22 editText = view.findViewById(R.id.field);
23 editText.setSingleLine(!"text-multi".equals(field.getType()));
24 if ("text-private".equals(field.getType())) {
25 editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
26 }
27 editText.addTextChangedListener(new TextWatcher() {
28 @Override
29 public void beforeTextChanged(CharSequence s, int start, int count, int after) {
30 }
31
32 @Override
33 public void onTextChanged(CharSequence s, int start, int before, int count) {
34 editText.setError(null);
35 invokeOnFormFieldValuesEdited();
36 }
37
38 @Override
39 public void afterTextChanged(Editable s) {
40 }
41 });
42 }
43
44 @Override
45 protected void setLabel(String label, boolean required) {
46 TextView textView = view.findViewById(R.id.label);
47 textView.setText(createSpannableLabelString(label, required));
48 }
49
50 protected String getValue() {
51 return editText.getText().toString();
52 }
53
54 @Override
55 public List<String> getValues() {
56 List<String> values = new ArrayList<>();
57 for (String line : getValue().split("\\n")) {
58 if (line.length() > 0) {
59 values.add(line);
60 }
61 }
62 return values;
63 }
64
65 @Override
66 protected void setValues(List<String> values) {
67 StringBuilder builder = new StringBuilder();
68 for(int i = 0; i < values.size(); ++i) {
69 builder.append(values.get(i));
70 if (i < values.size() - 1 && "text-multi".equals(field.getType())) {
71 builder.append("\n");
72 }
73 }
74 editText.setText(builder.toString());
75 }
76
77 @Override
78 public boolean validates() {
79 if (getValue().trim().length() > 0 || !field.isRequired()) {
80 return true;
81 } else {
82 editText.setError(context.getString(R.string.this_field_is_required));
83 editText.requestFocus();
84 return false;
85 }
86 }
87
88 @Override
89 protected int getLayoutResource() {
90 return R.layout.form_text;
91 }
92
93 @Override
94 void setReadOnly(boolean readOnly) {
95 editText.setEnabled(!readOnly);
96 }
97}