From d3a8282bf6b3313450aa81b6eada2e07a9be870e Mon Sep 17 00:00:00 2001 From: Christian Schneppe Date: Mon, 1 Apr 2019 21:31:00 +0200 Subject: add ability to kick user from room and not just ban them --- .../ui/util/MucDetailsContextMenuHelper.java | 85 ++++++++++++++-------- src/main/res/menu/muc_details_context.xml | 12 +-- src/main/res/values/strings.xml | 9 ++- 3 files changed, 66 insertions(+), 40 deletions(-) (limited to 'src/main') diff --git a/src/main/java/de/pixart/messenger/ui/util/MucDetailsContextMenuHelper.java b/src/main/java/de/pixart/messenger/ui/util/MucDetailsContextMenuHelper.java index c229dbf00..b9876c4b4 100644 --- a/src/main/java/de/pixart/messenger/ui/util/MucDetailsContextMenuHelper.java +++ b/src/main/java/de/pixart/messenger/ui/util/MucDetailsContextMenuHelper.java @@ -61,10 +61,10 @@ public final class MucDetailsContextMenuHelper { MenuItem removeAdminPrivileges = menu.findItem(R.id.remove_admin_privileges); MenuItem giveOwnerPrivileges = menu.findItem(R.id.give_owner_privileges); MenuItem removeOwnerPrivileges = menu.findItem(R.id.revoke_owner_privileges); - MenuItem removeFromRoom = menu.findItem(R.id.remove_from_room); 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); + MenuItem removeFromRoom = menu.findItem(R.id.kick_from_room); + removeFromRoom.setTitle(isGroupChat ? R.string.kick_from_room : R.string.remove_from_channel); + MenuItem banFromConference = menu.findItem(R.id.ban_from_room); banFromConference.setTitle(isGroupChat ? R.string.ban_from_conference : R.string.ban_from_channel); MenuItem invite = menu.findItem(R.id.invite); MenuItem highlightInMuc = menu.findItem(R.id.highlight_in_muc); @@ -96,11 +96,11 @@ public final class MucDetailsContextMenuHelper { managePermissionsVisible = true; banFromConference.setVisible(true); } - } else { - if (!Config.DISABLE_BAN || conversation.getMucOptions().membersOnly()) { - removeFromRoom.setVisible(true); - } } + if (!Config.DISABLE_BAN) { + removeFromRoom.setVisible(true); + } + } if (self.getAffiliation().ranks(MucOptions.Affiliation.OWNER)) { if (isGroupChat || advancedMode || user.getAffiliation() == MucOptions.Affiliation.OWNER) { @@ -165,14 +165,11 @@ public final class MucDetailsContextMenuHelper { case R.id.revoke_owner_privileges: activity.xmppConnectionService.changeAffiliationInConference(conversation, jid, MucOptions.Affiliation.MEMBER, onAffiliationChanged); return true; - case R.id.remove_from_room: - removeFromRoom(user, activity, onAffiliationChanged); + case R.id.kick_from_room: + kickFromRoom(user, activity, onAffiliationChanged); return true; - case R.id.ban_from_conference: - activity.xmppConnectionService.changeAffiliationInConference(conversation, jid, MucOptions.Affiliation.OUTCAST, onAffiliationChanged); - if (user.getRole() != MucOptions.Role.NONE) { - activity.xmppConnectionService.changeRoleInConference(conversation, user.getName(), MucOptions.Role.NONE); - } + case R.id.ban_from_room: + banFromRoom(user, activity, onAffiliationChanged); return true; case R.id.send_private_message: if (activity instanceof ConversationsActivity) { @@ -195,32 +192,56 @@ public final class MucDetailsContextMenuHelper { } } - private static void removeFromRoom(final User user, XmppActivity activity, XmppConnectionService.OnAffiliationChanged onAffiliationChanged) { + private static void kickFromRoom(final User user, XmppActivity activity, XmppConnectionService.OnAffiliationChanged onAffiliationChanged) { final Conversation conversation = user.getConversation(); + AlertDialog.Builder builder = new AlertDialog.Builder(activity); + builder.setTitle(R.string.kick_from_conference); + String jid = user.getRealJid().asBareJid().toString(); + SpannableString message; if (conversation.getMucOptions().membersOnly()) { + message = new SpannableString(activity.getString(R.string.kicking_from_conference, jid)); + } else { + message = new SpannableString(activity.getString(R.string.kicking_from_public_conference, jid)); + } + int start = message.toString().indexOf(jid); + if (start >= 0) { + message.setSpan(new TypefaceSpan("monospace"), start, start + jid.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + } + builder.setMessage(message); + builder.setNegativeButton(R.string.cancel, null); + builder.setPositiveButton(R.string.kick_now, (dialog, which) -> { activity.xmppConnectionService.changeAffiliationInConference(conversation, user.getRealJid(), MucOptions.Affiliation.NONE, onAffiliationChanged); if (user.getRole() != MucOptions.Role.NONE) { activity.xmppConnectionService.changeRoleInConference(conversation, user.getName(), MucOptions.Role.NONE); } + }); + builder.create().show(); + } + + private static void banFromRoom(final User user, XmppActivity activity, XmppConnectionService.OnAffiliationChanged onAffiliationChanged) { + final Conversation conversation = user.getConversation(); + AlertDialog.Builder builder = new AlertDialog.Builder(activity); + builder.setTitle(R.string.ban_from_conference); + String jid = user.getRealJid().asBareJid().toString(); + SpannableString message; + if (conversation.getMucOptions().membersOnly()) { + message = new SpannableString(activity.getString(R.string.ban_from_conference_message, jid)); } else { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle(R.string.ban_from_conference); - String jid = user.getRealJid().asBareJid().toString(); - SpannableString message = new SpannableString(activity.getString(R.string.removing_from_public_conference, jid)); - int start = message.toString().indexOf(jid); - if (start >= 0) { - message.setSpan(new TypefaceSpan("monospace"), start, start + jid.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - } - builder.setMessage(message); - builder.setNegativeButton(R.string.cancel, null); - builder.setPositiveButton(R.string.ban_now, (dialog, which) -> { - activity.xmppConnectionService.changeAffiliationInConference(conversation, user.getRealJid(), MucOptions.Affiliation.OUTCAST, onAffiliationChanged); - if (user.getRole() != MucOptions.Role.NONE) { - activity.xmppConnectionService.changeRoleInConference(conversation, user.getName(), MucOptions.Role.NONE); - } - }); - builder.create().show(); + message = new SpannableString(activity.getString(R.string.ban_from_public_conference_message, jid)); } + int start = message.toString().indexOf(jid); + if (start >= 0) { + message.setSpan(new TypefaceSpan("monospace"), start, start + jid.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + } + builder.setMessage(message); + builder.setNegativeButton(R.string.cancel, null); + builder.setPositiveButton(R.string.ban_now, (dialog, which) -> { + activity.xmppConnectionService.changeAffiliationInConference(conversation, user.getRealJid(), MucOptions.Affiliation.OUTCAST, onAffiliationChanged); + if (user.getRole() != MucOptions.Role.NONE) { + activity.xmppConnectionService.changeRoleInConference(conversation, user.getName(), MucOptions.Role.NONE); + } + }); + builder.create().show(); } private static void startConversation(User user, XmppActivity activity) { diff --git a/src/main/res/menu/muc_details_context.xml b/src/main/res/menu/muc_details_context.xml index c3d54e5c6..44522cf87 100644 --- a/src/main/res/menu/muc_details_context.xml +++ b/src/main/res/menu/muc_details_context.xml @@ -49,14 +49,14 @@ android:id="@+id/revoke_owner_privileges" android:title="@string/remove_owner_privileges" android:visible="false" /> - + diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 477c74ddc..90bcb50b7 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -365,11 +365,16 @@ Revoke member privileges Grant admin privileges Revoke admin privileges - Remove from group chat + Kick from group chat Could not change affiliation of %s Ban from group chat - You are trying to remove %s from a public channel. The only way to do that is to ban that user for ever. + Kick from group chat + You are trying to ban %s for ever from a public channel. + You are trying to ban %s for ever from a group chat + You are trying to kick %s from a public channel. + You are trying to kick %s from a group chat. Ban now + Kick now Make Jabber IDs visible to anyone Make channel moderated You are not participating -- cgit v1.2.3