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}