MucConfiguration.java

  1package eu.siacs.conversations.ui.util;
  2
  3import android.content.Context;
  4import android.os.Bundle;
  5import android.support.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, 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            String[] names = new String[]{
 42                    context.getString(R.string.non_anonymous),
 43                    context.getString(R.string.allow_participants_to_edit_subject),
 44            };
 45            boolean[] values = new boolean[]{
 46                    mucOptions.nonanonymous(),
 47                    mucOptions.participantsCanChangeSubject()
 48            };
 49            final Option[] options = new Option[]{
 50                    new Option("muc#roomconfig_whois","anyone","moderators"),
 51                    new Option("muc#roomconfig_changesubject")
 52            };
 53            return new MucConfiguration(R.string.channel_options, names, values, options);
 54        }
 55    }
 56
 57    public static String describe(final Context context, final MucOptions mucOptions) {
 58        final StringBuilder builder = new StringBuilder();
 59        if (mucOptions.isPrivateAndNonAnonymous()) {
 60            if (mucOptions.participantsCanChangeSubject()) {
 61                builder.append(context.getString(R.string.anyone_can_edit_subject));
 62            } else {
 63                builder.append(context.getString(R.string.owners_can_edit_subject));
 64            }
 65            builder.append(' ');
 66            if (mucOptions.allowInvites()) {
 67                builder.append(context.getString(R.string.anyone_can_invite_others));
 68            } else {
 69                builder.append(context.getString(R.string.owners_can_invite_others));
 70            }
 71        } else {
 72            if (mucOptions.nonanonymous()) {
 73                builder.append(context.getString(R.string.jabber_ids_are_visible_to_anyone));
 74            } else {
 75                builder.append(context.getString(R.string.jabber_ids_are_visible_to_admins));
 76            }
 77            builder.append(' ');
 78            if (mucOptions.participantsCanChangeSubject()) {
 79                builder.append(context.getString(R.string.anyone_can_edit_subject));
 80            } else {
 81                builder.append(context.getString(R.string.admins_can_edit_subject));
 82            }
 83        }
 84        return builder.toString();
 85    }
 86
 87    public Bundle toBundle(boolean[] values) {
 88        Bundle bundle = new Bundle();
 89        for(int i = 0; i < values.length; ++i) {
 90            final Option option = options[i];
 91            bundle.putString(option.name,option.values[values[i] ? 0 : 1]);
 92        }
 93        return bundle;
 94    }
 95
 96    private static class Option {
 97        public final String name;
 98        public final String[] values;
 99
100        private Option(String name) {
101            this.name = name;
102            this.values = new String[]{"1","0"};
103        }
104
105        private Option(String name, String on, String off) {
106            this.name = name;
107            this.values = new String[]{on,off};
108        }
109    }
110
111}