@@ -3663,7 +3663,7 @@ public class XmppConnectionService extends Service {
Element configuration = pubsub == null ? null : pubsub.findChild("configure");
Element x = configuration == null ? null : configuration.findChild("x", Namespace.DATA);
if (x != null) {
- Data data = Data.parse(x);
+ final Data data = Data.parse(x);
data.submit(options);
sendIqPacket(account, mIqGenerator.publishPubsubConfiguration(jid, node, data), new OnIqPacketReceived() {
@Override
@@ -3695,6 +3695,12 @@ public class XmppConnectionService extends Service {
final boolean moderated = "1".equals(options.getString("muc#roomconfig_moderatedroom"));
options.putString("members_by_default", moderated ? "0" : "1");
}
+ if (options.containsKey("muc#roomconfig_allowpm")) {
+ // ejabberd :-/
+ final boolean allow = "anyone".equals(options.getString("muc#roomconfig_allowpm"));
+ options.putString("allow_private_messages", allow ? "1" : "0");
+ options.putString("allow_private_messages_from_visitors", allow ? "anyone" : "nobody");
+ }
final IqPacket request = new IqPacket(IqPacket.TYPE.GET);
request.setTo(conversation.getJid().asBareJid());
request.query("http://jabber.org/protocol/muc#owner");
@@ -3714,6 +3720,7 @@ public class XmppConnectionService extends Service {
if (packet.getType() == IqPacket.TYPE.RESULT) {
callback.onPushSucceeded();
} else {
+ Log.d(Config.LOGTAG,"failed: "+packet.toString());
callback.onPushFailed();
}
}
@@ -128,28 +128,39 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
}
};
- private final OnClickListener mChangeConferenceSettings = new OnClickListener() {
- @Override
- public void onClick(View v) {
- final MucOptions mucOptions = mConversation.getMucOptions();
- final MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(ConferenceDetailsActivity.this);
- MucConfiguration configuration = MucConfiguration.get(ConferenceDetailsActivity.this, mAdvancedMode, mucOptions);
- builder.setTitle(configuration.title);
- final boolean[] values = configuration.values;
- builder.setMultiChoiceItems(configuration.names, values, (dialog, which, isChecked) -> values[which] = isChecked);
- builder.setNegativeButton(R.string.cancel, null);
- builder.setPositiveButton(R.string.confirm, (dialog, which) -> {
- final Bundle options = configuration.toBundle(values);
- options.putString("muc#roomconfig_persistentroom", "1");
- options.putString("{http://prosody.im/protocol/muc}roomconfig_allowmemberinvites", options.getString("muc#roomconfig_allowinvites"));
- xmppConnectionService.pushConferenceConfiguration(mConversation,
- options,
- ConferenceDetailsActivity.this);
- });
- builder.create().show();
- }
- };
-
+ private final OnClickListener mChangeConferenceSettings =
+ new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ final MucOptions mucOptions = mConversation.getMucOptions();
+ final MaterialAlertDialogBuilder builder =
+ new MaterialAlertDialogBuilder(ConferenceDetailsActivity.this);
+ MucConfiguration configuration =
+ MucConfiguration.get(
+ ConferenceDetailsActivity.this, mAdvancedMode, mucOptions);
+ builder.setTitle(configuration.title);
+ final boolean[] values = configuration.values;
+ builder.setMultiChoiceItems(
+ configuration.names,
+ values,
+ (dialog, which, isChecked) -> values[which] = isChecked);
+ builder.setNegativeButton(R.string.cancel, null);
+ builder.setPositiveButton(
+ R.string.confirm,
+ (dialog, which) -> {
+ final Bundle options = configuration.toBundle(values);
+ options.putString("muc#roomconfig_persistentroom", "1");
+ if (options.containsKey("muc#roomconfig_allowinvites")) {
+ options.putString(
+ "{http://prosody.im/protocol/muc}roomconfig_allowmemberinvites",
+ options.getString("muc#roomconfig_allowinvites"));
+ }
+ xmppConnectionService.pushConferenceConfiguration(
+ mConversation, options, ConferenceDetailsActivity.this);
+ });
+ builder.create().show();
+ }
+ };
@Override
public void onConversationUpdate() {
@@ -10,13 +10,13 @@ import eu.siacs.conversations.entities.MucOptions;
public class MucConfiguration {
- public final @StringRes
- int title;
+ public final @StringRes int title;
public final String[] names;
public final boolean[] values;
public final Option[] options;
- private MucConfiguration(@StringRes int title, String[] names, boolean[] values, Option[] options) {
+ private MucConfiguration(
+ @StringRes int title, String[] names, boolean[] values, Option[] options) {
this.title = title;
this.names = names;
this.values = values;
@@ -25,52 +25,62 @@ public class MucConfiguration {
public static MucConfiguration get(Context context, boolean advanced, MucOptions mucOptions) {
if (mucOptions.isPrivateAndNonAnonymous()) {
- String[] names = new String[]{
- context.getString(R.string.allow_participants_to_edit_subject),
- context.getString(R.string.allow_participants_to_invite_others)
- };
- boolean[] values = new boolean[]{
- mucOptions.participantsCanChangeSubject(),
- mucOptions.allowInvites()
- };
- final Option[] options = new Option[]{
- new Option("muc#roomconfig_changesubject"),
- new Option("muc#roomconfig_allowinvites")
- };
+ String[] names =
+ new String[] {
+ context.getString(R.string.allow_participants_to_edit_subject),
+ context.getString(R.string.allow_participants_to_invite_others)
+ };
+ boolean[] values =
+ new boolean[] {
+ mucOptions.participantsCanChangeSubject(), mucOptions.allowInvites()
+ };
+ final Option[] options =
+ new Option[] {
+ new Option("muc#roomconfig_changesubject"),
+ new Option("muc#roomconfig_allowinvites")
+ };
return new MucConfiguration(R.string.conference_options, names, values, options);
} else {
final String[] names;
final boolean[] values;
final Option[] options;
if (advanced) {
- names = new String[]{
- context.getString(R.string.non_anonymous),
- context.getString(R.string.allow_participants_to_edit_subject),
- context.getString(R.string.moderated)
- };
- values = new boolean[]{
- mucOptions.nonanonymous(),
- mucOptions.participantsCanChangeSubject(),
- mucOptions.moderated()
- };
- options = new Option[]{
- new Option("muc#roomconfig_whois", "anyone", "moderators"),
- new Option("muc#roomconfig_changesubject"),
- new Option("muc#roomconfig_moderatedroom")
- };
+ names =
+ new String[] {
+ context.getString(R.string.non_anonymous),
+ context.getString(R.string.allow_participants_to_edit_subject),
+ context.getString(R.string.moderated),
+ context.getString(R.string.allow_private_messages)
+ };
+ values =
+ new boolean[] {
+ mucOptions.nonanonymous(),
+ mucOptions.participantsCanChangeSubject(),
+ mucOptions.moderated(),
+ mucOptions.allowPm()
+ };
+ options =
+ new Option[] {
+ new Option("muc#roomconfig_whois", "anyone", "moderators"),
+ new Option("muc#roomconfig_changesubject"),
+ new Option("muc#roomconfig_moderatedroom"),
+ new Option("muc#roomconfig_allowpm", "anyone", "moderators"),
+ };
} else {
- names = new String[]{
- context.getString(R.string.non_anonymous),
- context.getString(R.string.allow_participants_to_edit_subject),
- };
- values = new boolean[]{
- mucOptions.nonanonymous(),
- mucOptions.participantsCanChangeSubject()
- };
- options = new Option[]{
- new Option("muc#roomconfig_whois", "anyone", "moderators"),
- new Option("muc#roomconfig_changesubject")
- };
+ names =
+ new String[] {
+ context.getString(R.string.non_anonymous),
+ context.getString(R.string.allow_participants_to_edit_subject),
+ };
+ values =
+ new boolean[] {
+ mucOptions.nonanonymous(), mucOptions.participantsCanChangeSubject()
+ };
+ options =
+ new Option[] {
+ new Option("muc#roomconfig_whois", "anyone", "moderators"),
+ new Option("muc#roomconfig_changesubject")
+ };
}
return new MucConfiguration(R.string.channel_options, names, values, options);
}
@@ -108,9 +118,9 @@ public class MucConfiguration {
public Bundle toBundle(boolean[] values) {
Bundle bundle = new Bundle();
- for(int i = 0; i < values.length; ++i) {
+ for (int i = 0; i < values.length; ++i) {
final Option option = options[i];
- bundle.putString(option.name,option.values[values[i] ? 0 : 1]);
+ bundle.putString(option.name, option.values[values[i] ? 0 : 1]);
}
return bundle;
}
@@ -121,13 +131,12 @@ public class MucConfiguration {
private Option(String name) {
this.name = name;
- this.values = new String[]{"1","0"};
+ this.values = new String[] {"1", "0"};
}
private Option(String name, String on, String off) {
this.name = name;
- this.values = new String[]{on,off};
+ this.values = new String[] {on, off};
}
}
-
}