MucConfiguration.java

  1package eu.siacs.conversations.ui.util;
  2
  3import android.content.Context;
  4import android.os.Bundle;
  5
  6import androidx.annotation.StringRes;
  7
  8import eu.siacs.conversations.R;
  9import eu.siacs.conversations.entities.MucOptions;
 10
 11public class MucConfiguration {
 12
 13    public final @StringRes
 14    int title;
 15    public final String[] names;
 16    public final boolean[] values;
 17    public final Option[] options;
 18
 19    private MucConfiguration(@StringRes int title, String[] names, boolean[] values, Option[] options) {
 20        this.title = title;
 21        this.names = names;
 22        this.values = values;
 23        this.options = options;
 24    }
 25
 26    public static MucConfiguration get(Context context, boolean advanced, MucOptions mucOptions) {
 27        if (mucOptions.isPrivateAndNonAnonymous()) {
 28            String[] names = new String[]{
 29                    context.getString(R.string.allow_participants_to_edit_subject),
 30                    context.getString(R.string.allow_participants_to_invite_others)
 31            };
 32            boolean[] values = new boolean[]{
 33                    mucOptions.participantsCanChangeSubject(),
 34                    mucOptions.allowInvites()
 35            };
 36            final Option[] options = new Option[]{
 37                    new Option("muc#roomconfig_changesubject"),
 38                    new Option("muc#roomconfig_allowinvites")
 39            };
 40            return new MucConfiguration(R.string.conference_options, names, values, options);
 41        } else {
 42            final String[] names;
 43            final boolean[] values;
 44            final Option[] options;
 45            if (advanced) {
 46                names = new String[]{
 47                        context.getString(R.string.non_anonymous),
 48                        context.getString(R.string.allow_participants_to_edit_subject),
 49                        context.getString(R.string.moderated)
 50                };
 51                values = new boolean[]{
 52                        mucOptions.nonanonymous(),
 53                        mucOptions.participantsCanChangeSubject(),
 54                        mucOptions.moderated()
 55                };
 56                options = new Option[]{
 57                        new Option("muc#roomconfig_whois", "anyone", "moderators"),
 58                        new Option("muc#roomconfig_changesubject"),
 59                        new Option("muc#roomconfig_moderatedroom")
 60                };
 61            } else {
 62                names = new String[]{
 63                        context.getString(R.string.non_anonymous),
 64                        context.getString(R.string.allow_participants_to_edit_subject),
 65                };
 66                values = new boolean[]{
 67                        mucOptions.nonanonymous(),
 68                        mucOptions.participantsCanChangeSubject()
 69                };
 70                options = new Option[]{
 71                        new Option("muc#roomconfig_whois", "anyone", "moderators"),
 72                        new Option("muc#roomconfig_changesubject")
 73                };
 74            }
 75            return new MucConfiguration(R.string.channel_options, names, values, options);
 76        }
 77    }
 78
 79    public static String describe(final Context context, final MucOptions mucOptions) {
 80        final StringBuilder builder = new StringBuilder();
 81        if (mucOptions.isPrivateAndNonAnonymous()) {
 82            if (mucOptions.participantsCanChangeSubject()) {
 83                builder.append(context.getString(R.string.anyone_can_edit_subject));
 84            } else {
 85                builder.append(context.getString(R.string.owners_can_edit_subject));
 86            }
 87            builder.append(' ');
 88            if (mucOptions.allowInvites()) {
 89                builder.append(context.getString(R.string.anyone_can_invite_others));
 90            } else {
 91                builder.append(context.getString(R.string.owners_can_invite_others));
 92            }
 93        } else {
 94            if (mucOptions.nonanonymous()) {
 95                builder.append(context.getString(R.string.jabber_ids_are_visible_to_anyone));
 96            } else {
 97                builder.append(context.getString(R.string.jabber_ids_are_visible_to_admins));
 98            }
 99            builder.append(' ');
100            if (mucOptions.participantsCanChangeSubject()) {
101                builder.append(context.getString(R.string.anyone_can_edit_subject));
102            } else {
103                builder.append(context.getString(R.string.admins_can_edit_subject));
104            }
105        }
106        return builder.toString();
107    }
108
109    public Bundle toBundle(boolean[] values) {
110        Bundle bundle = new Bundle();
111        for(int i = 0; i < values.length; ++i) {
112            final Option option = options[i];
113            bundle.putString(option.name,option.values[values[i] ? 0 : 1]);
114        }
115        return bundle;
116    }
117
118    private static class Option {
119        public final String name;
120        public final String[] values;
121
122        private Option(String name) {
123            this.name = name;
124            this.values = new String[]{"1","0"};
125        }
126
127        private Option(String name, String on, String off) {
128            this.name = name;
129            this.values = new String[]{on,off};
130        }
131    }
132
133}