MucConfiguration.java

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