1package eu.siacs.conversations.ui.forms;
2
3import android.content.Context;
4import android.widget.CheckBox;
5import android.widget.CompoundButton;
6
7import java.util.ArrayList;
8import java.util.List;
9
10import eu.siacs.conversations.R;
11import eu.siacs.conversations.xmpp.forms.Field;
12
13public class FormBooleanFieldWrapper extends FormFieldWrapper {
14
15 protected CheckBox checkBox;
16
17 protected FormBooleanFieldWrapper(Context context, Field field) {
18 super(context, field);
19 checkBox = view.findViewById(R.id.field);
20 checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
21 @Override
22 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
23 checkBox.setError(null);
24 invokeOnFormFieldValuesEdited();
25 }
26 });
27 }
28
29 @Override
30 protected void setLabel(String label, boolean required) {
31 CheckBox checkBox = view.findViewById(R.id.field);
32 checkBox.setText(createSpannableLabelString(label, required));
33 }
34
35 @Override
36 public List<String> getValues() {
37 List<String> values = new ArrayList<>();
38 values.add(Boolean.toString(checkBox.isChecked()));
39 return values;
40 }
41
42 @Override
43 protected void setValues(List<String> values) {
44 if (values.size() == 0) {
45 checkBox.setChecked(false);
46 } else {
47 checkBox.setChecked(Boolean.parseBoolean(values.get(0)));
48 }
49 }
50
51 @Override
52 public boolean validates() {
53 if (checkBox.isChecked() || !field.isRequired()) {
54 return true;
55 } else {
56 checkBox.setError(context.getString(R.string.this_field_is_required));
57 checkBox.requestFocus();
58 return false;
59 }
60 }
61
62 @Override
63 public boolean edited() {
64 if (field.getValues().size() == 0) {
65 return checkBox.isChecked();
66 } else {
67 return super.edited();
68 }
69 }
70
71 @Override
72 protected int getLayoutResource() {
73 return R.layout.form_boolean;
74 }
75
76 @Override
77 void setReadOnly(boolean readOnly) {
78 checkBox.setEnabled(!readOnly);
79 }
80}