diff --git a/src/cheogram/res/layout/command_spinner_field.xml b/src/cheogram/res/layout/command_spinner_field.xml new file mode 100644 index 0000000000000000000000000000000000000000..4654307c254b9f79026e06ca16d7ac9ae838b6f4 --- /dev/null +++ b/src/cheogram/res/layout/command_spinner_field.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index 6b46fbd5bb44764fe55cbd9ec074ac4c451ed3e6..65a12f1c0518cd71d40f6032cc3e9a3efc344160 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -13,8 +13,10 @@ import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; +import android.widget.AdapterView; import android.widget.CompoundButton; import android.widget.TextView; +import android.widget.Spinner; import android.webkit.WebView; import android.webkit.WebViewClient; @@ -51,6 +53,7 @@ import eu.siacs.conversations.databinding.CommandPageBinding; import eu.siacs.conversations.databinding.CommandNoteBinding; import eu.siacs.conversations.databinding.CommandResultFieldBinding; import eu.siacs.conversations.databinding.CommandCheckboxFieldBinding; +import eu.siacs.conversations.databinding.CommandSpinnerFieldBinding; import eu.siacs.conversations.databinding.CommandTextFieldBinding; import eu.siacs.conversations.databinding.CommandWebviewBinding; import eu.siacs.conversations.persistance.DatabaseBackend; @@ -1418,6 +1421,85 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl } } + class SpinnerFieldViewHolder extends ViewHolder implements AdapterView.OnItemSelectedListener { + public SpinnerFieldViewHolder(CommandSpinnerFieldBinding binding) { + super(binding); + binding.spinner.setOnItemSelectedListener(this); + } + protected Element mValue = null; + + @Override + public void bind(Element field) { + String label = field.getAttribute("label"); + if (label == null) label = field.getAttribute("var"); + if (label == null) { + binding.label.setVisibility(View.GONE); + } else { + binding.label.setVisibility(View.VISIBLE); + binding.label.setText(label); + binding.spinner.setPrompt(label); + } + + String desc = field.findChildContent("desc", "jabber:x:data"); + if (desc == null) { + binding.desc.setVisibility(View.GONE); + } else { + binding.desc.setVisibility(View.VISIBLE); + binding.desc.setText(desc); + } + + mValue = field.findChild("value", "jabber:x:data"); + if (mValue == null) { + mValue = field.addChild("value", "jabber:x:data"); + } + + ArrayAdapter