FormBooleanFieldWrapper.java

 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}