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 int title;
 14    public final String[] names;
 15    public final boolean[] values;
 16    public final Option[] options;
 17
 18    private MucConfiguration(
 19            @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 =
 29                    new String[] {
 30                        context.getString(R.string.allow_participants_to_edit_subject),
 31                        context.getString(R.string.allow_participants_to_invite_others)
 32                    };
 33            boolean[] values =
 34                    new boolean[] {
 35                        mucOptions.participantsCanChangeSubject(), mucOptions.allowInvites()
 36                    };
 37            final Option[] options =
 38                    new Option[] {
 39                        new Option("muc#roomconfig_changesubject"),
 40                        new Option("muc#roomconfig_allowinvites")
 41                    };
 42            return new MucConfiguration(R.string.conference_options, names, values, options);
 43        } else {
 44            final String[] names;
 45            final boolean[] values;
 46            final Option[] options;
 47            if (advanced) {
 48                names =
 49                        new String[] {
 50                            context.getString(R.string.non_anonymous),
 51                            context.getString(R.string.allow_participants_to_edit_subject),
 52                            context.getString(R.string.moderated),
 53                            context.getString(R.string.allow_private_messages)
 54                        };
 55                values =
 56                        new boolean[] {
 57                            mucOptions.nonanonymous(),
 58                            mucOptions.participantsCanChangeSubject(),
 59                            mucOptions.moderated(),
 60                            mucOptions.allowPmRaw()
 61                        };
 62                options =
 63                        new Option[] {
 64                            new Option("muc#roomconfig_whois", "anyone", "moderators"),
 65                            new Option("muc#roomconfig_changesubject"),
 66                            new Option("muc#roomconfig_moderatedroom"),
 67                            new Option("muc#roomconfig_allowpm", "anyone", "moderators"),
 68                        };
 69            } else {
 70                names =
 71                        new String[] {
 72                            context.getString(R.string.non_anonymous),
 73                            context.getString(R.string.allow_participants_to_edit_subject),
 74                        };
 75                values =
 76                        new boolean[] {
 77                            mucOptions.nonanonymous(), mucOptions.participantsCanChangeSubject()
 78                        };
 79                options =
 80                        new Option[] {
 81                            new Option("muc#roomconfig_whois", "anyone", "moderators"),
 82                            new Option("muc#roomconfig_changesubject")
 83                        };
 84            }
 85            return new MucConfiguration(R.string.channel_options, names, values, options);
 86        }
 87    }
 88
 89    public static String describe(final Context context, final MucOptions mucOptions) {
 90        final StringBuilder builder = new StringBuilder();
 91        if (mucOptions.isPrivateAndNonAnonymous()) {
 92            if (mucOptions.participantsCanChangeSubject()) {
 93                builder.append(context.getString(R.string.anyone_can_edit_subject));
 94            } else {
 95                builder.append(context.getString(R.string.owners_can_edit_subject));
 96            }
 97            builder.append(' ');
 98            if (mucOptions.allowInvites()) {
 99                builder.append(context.getString(R.string.anyone_can_invite_others));
100            } else {
101                builder.append(context.getString(R.string.owners_can_invite_others));
102            }
103        } else {
104            if (mucOptions.nonanonymous()) {
105                builder.append(context.getString(R.string.jabber_ids_are_visible_to_anyone));
106            } else {
107                builder.append(context.getString(R.string.jabber_ids_are_visible_to_admins));
108            }
109            builder.append(' ');
110            if (mucOptions.participantsCanChangeSubject()) {
111                builder.append(context.getString(R.string.anyone_can_edit_subject));
112            } else {
113                builder.append(context.getString(R.string.admins_can_edit_subject));
114            }
115        }
116        return builder.toString();
117    }
118
119    public Bundle toBundle(boolean[] values) {
120        Bundle bundle = new Bundle();
121        for (int i = 0; i < values.length; ++i) {
122            final Option option = options[i];
123            bundle.putString(option.name, option.values[values[i] ? 0 : 1]);
124        }
125        return bundle;
126    }
127
128    private static class Option {
129        public final String name;
130        public final String[] values;
131
132        private Option(String name) {
133            this.name = name;
134            this.values = new String[] {"1", "0"};
135        }
136
137        private Option(String name, String on, String off) {
138            this.name = name;
139            this.values = new String[] {on, off};
140        }
141    }
142}