Please refer to
Example 166.** Service Sends Configuration Form to Owner
The Form.setAnswer(String, boolean) will create a submit FormField with <value/> set to ‘true’ or ‘false’. It seems that some xmpp server e.g. ejabberd accepts only ‘1’ or ‘0’ as boolean, otherwise it just ignore the FormField configuration change requested.
Since setAnswer() checks the submit value type against the configuration field.getType(), app is unable to override the Form class setAnswer with ‘1’ and ‘0’ for boolean.
=========== smack Form class ==========
public void setAnswer(String variable, boolean value) {
FormField field = getField(variable);
if (field == null) {
throw new IllegalArgumentException("Field not found for the specified variable name.");
}
if (field.getType() != FormField.Type.bool) {
throw new IllegalArgumentException("This field is not of type boolean.");
}
setAnswer(field, Boolean.toString(value));
}
======= debug log capture on aTalk =========
2020-03-27 13:19:15.365 4865-5015/org.atalk.android D/SMACK: SENT (0):
<iq to='chatroom-gk3v@conference.atalk.sytes.net' id='W2VK6-148' type='set'>
<query xmlns='http://jabber.org/protocol/muc#owner'>
<x xmlns='jabber:x:data' type='submit'>
<field var='FORM_TYPE' type='hidden'>
<value>
http://jabber.org/protocol/muc#roomconfig
</value>
</field>
<field var='muc#roomconfig_publicroom' type='boolean'>
<value>
false
</value>
</field>
<field var='public_list' type='boolean'>
<value>
true
</value>
</field>
<field var='muc#roomconfig_maxusers' type='list-single'>
<value>
100
</value>
</field>
<field var='muc#roomconfig_whois' type='list-single'>
<value>
anyone
</value>
</field>
<field var='muc#roomconfig_presencebroadcast' type='list-multi'>
<value>
moderator
</value>
<value>
participant
</value>
<value>
visitor
</value>
</field>
<field var='allow_private_messages_from_visitors' type='list-single'>
<value>
anyone
</value>
</field>
</x>
</query>
</iq>