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