diff --git a/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java b/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java index a0b1cb59d..a0cf80ad9 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java @@ -125,7 +125,7 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers public void onClick(View v) { final MucOptions mucOptions = mConversation.getMucOptions(); AlertDialog.Builder builder = new AlertDialog.Builder(ConferenceDetailsActivity.this); - MucConfiguration configuration = MucConfiguration.get(ConferenceDetailsActivity.this, mucOptions); + MucConfiguration configuration = MucConfiguration.get(ConferenceDetailsActivity.this, mAdvancedMode, mucOptions); builder.setTitle(configuration.title); final boolean[] values = configuration.values; builder.setMultiChoiceItems(configuration.names, values, (dialog, which, isChecked) -> values[which] = isChecked); diff --git a/src/main/java/eu/siacs/conversations/ui/util/MucConfiguration.java b/src/main/java/eu/siacs/conversations/ui/util/MucConfiguration.java index ccdbf3a6f..3f40f714f 100644 --- a/src/main/java/eu/siacs/conversations/ui/util/MucConfiguration.java +++ b/src/main/java/eu/siacs/conversations/ui/util/MucConfiguration.java @@ -22,7 +22,7 @@ public class MucConfiguration { this.options = options; } - public static MucConfiguration get(Context context, MucOptions mucOptions) { + public static MucConfiguration get(Context context, boolean advanced, MucOptions mucOptions) { if (mucOptions.isPrivateAndNonAnonymous()) { String[] names = new String[]{ context.getString(R.string.allow_participants_to_edit_subject), @@ -38,18 +38,39 @@ public class MucConfiguration { }; return new MucConfiguration(R.string.conference_options, names, values, options); } else { - String[] names = new String[]{ - context.getString(R.string.non_anonymous), - context.getString(R.string.allow_participants_to_edit_subject), - }; - boolean[] values = new boolean[]{ - mucOptions.nonanonymous(), - mucOptions.participantsCanChangeSubject() - }; - final Option[] options = new Option[]{ - new Option("muc#roomconfig_whois","anyone","moderators"), - new Option("muc#roomconfig_changesubject") - }; + final String[] names; + final boolean[] values; + final Option[] options; + if (advanced) { + names = new String[]{ + context.getString(R.string.non_anonymous), + context.getString(R.string.allow_participants_to_edit_subject), + context.getString(R.string.moderated) + }; + values = new boolean[]{ + mucOptions.nonanonymous(), + mucOptions.participantsCanChangeSubject(), + mucOptions.moderated() + }; + options = new Option[]{ + new Option("muc#roomconfig_whois", "anyone", "moderators"), + new Option("muc#roomconfig_changesubject"), + new Option("muc#roomconfig_moderatedroom") + }; + } else { + names = new String[]{ + context.getString(R.string.non_anonymous), + context.getString(R.string.allow_participants_to_edit_subject), + }; + values = new boolean[]{ + mucOptions.nonanonymous(), + mucOptions.participantsCanChangeSubject() + }; + options = new Option[]{ + new Option("muc#roomconfig_whois", "anyone", "moderators"), + new Option("muc#roomconfig_changesubject") + }; + } return new MucConfiguration(R.string.channel_options, names, values, options); } } diff --git a/src/main/java/eu/siacs/conversations/ui/util/MucDetailsContextMenuHelper.java b/src/main/java/eu/siacs/conversations/ui/util/MucDetailsContextMenuHelper.java index 1eaf96c69..edf1d6593 100644 --- a/src/main/java/eu/siacs/conversations/ui/util/MucDetailsContextMenuHelper.java +++ b/src/main/java/eu/siacs/conversations/ui/util/MucDetailsContextMenuHelper.java @@ -63,7 +63,7 @@ public final class MucDetailsContextMenuHelper { MenuItem removeOwnerPrivileges = menu.findItem(R.id.revoke_owner_privileges); MenuItem removeAdminPrivileges = menu.findItem(R.id.remove_admin_privileges); MenuItem removeFromRoom = menu.findItem(R.id.remove_from_room); - MenuItem managePermisisons = menu.findItem(R.id.manage_permissions); + MenuItem managePermissions = menu.findItem(R.id.manage_permissions); removeFromRoom.setTitle(isGroupChat ? R.string.remove_from_room : R.string.remove_from_channel); MenuItem banFromConference = menu.findItem(R.id.ban_from_conference); banFromConference.setTitle(isGroupChat ? R.string.ban_from_conference : R.string.ban_from_channel); @@ -80,13 +80,15 @@ public final class MucDetailsContextMenuHelper { boolean managePermissionsVisible = false; if ((self.getAffiliation().ranks(MucOptions.Affiliation.ADMIN) && self.getAffiliation().outranks(user.getAffiliation())) || self.getAffiliation() == MucOptions.Affiliation.OWNER) { if (advancedMode) { - managePermissionsVisible = true; if (!user.getAffiliation().ranks(MucOptions.Affiliation.MEMBER)) { + managePermissionsVisible = true; giveMembership.setVisible(true); } else if (user.getAffiliation() == MucOptions.Affiliation.MEMBER) { + managePermissionsVisible = true; removeMembership.setVisible(true); } if (!Config.DISABLE_BAN) { + managePermissionsVisible = true; banFromConference.setVisible(true); } } else { @@ -98,23 +100,25 @@ public final class MucDetailsContextMenuHelper { } if (self.getAffiliation().ranks(MucOptions.Affiliation.OWNER)) { if (isGroupChat || advancedMode || user.getAffiliation() == MucOptions.Affiliation.OWNER) { - managePermissionsVisible = true; if (!user.getAffiliation().ranks(MucOptions.Affiliation.OWNER)) { + managePermissionsVisible = true; giveOwnerPrivileges.setVisible(true); } else if (user.getAffiliation() == MucOptions.Affiliation.OWNER){ + managePermissionsVisible = true; removeOwnerPrivileges.setVisible(true); } } if (!isGroupChat || advancedMode || user.getAffiliation() == MucOptions.Affiliation.ADMIN) { - managePermissionsVisible = true; if (!user.getAffiliation().ranks(MucOptions.Affiliation.ADMIN)) { + managePermissionsVisible = true; giveAdminPrivileges.setVisible(true); } else if (user.getAffiliation() == MucOptions.Affiliation.ADMIN) { + managePermissionsVisible = true; removeAdminPrivileges.setVisible(true); } } } - managePermisisons.setVisible(managePermissionsVisible); + managePermissions.setVisible(managePermissionsVisible); sendPrivateMessage.setVisible(!isGroupChat && mucOptions.allowPm() && user.getRole().ranks(MucOptions.Role.VISITOR)); } else { sendPrivateMessage.setVisible(true); diff --git a/src/main/res/menu/muc_details_context.xml b/src/main/res/menu/muc_details_context.xml index 2b735d1f5..54e0506eb 100644 --- a/src/main/res/menu/muc_details_context.xml +++ b/src/main/res/menu/muc_details_context.xml @@ -3,54 +3,56 @@ + android:visible="false" /> + android:visible="false" /> + android:visible="false" /> - + android:visible="false" /> + + android:visible="false" /> + android:visible="false" /> + android:visible="false" /> + android:visible="false" /> + android:visible="false" /> + android:visible="false" /> - + android:visible="false" /> + diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index fb7959971..a426afaf4 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -364,8 +364,8 @@ Outcast Member Advanced mode - Grant membership - Revoke membership + Grant member privileges + Revoke member privileges Grant admin privileges Revoke admin privileges Grant owner privileges @@ -375,14 +375,14 @@ Could not change affiliation of %s Ban from group chat Ban from channel - You are trying to remove %s from a public group chat. The only way to do that is to ban that user for ever. + You are trying to remove %s from a public channel. The only way to do that is to ban that user for ever. Ban now Could not change role of %s Private group chat configuration Public channel configuration Private, members only Make Jabber IDs visible to anyone - Moderated + Make channel moderated You are not participating Modified group chat options! Could not modify group chat options @@ -848,5 +848,5 @@ Jabber IDs are visible to anyone. This public channel has no participants. Invite your contacts or use the share button to distribute its XMPP address. This private group chat has no participants. - Manage permissions + Manage privileges