From 019f0f5e589c34c996dfb886d13f8deb0f43dc10 Mon Sep 17 00:00:00 2001 From: Christian Schneppe Date: Sun, 27 Jan 2019 15:11:43 +0100 Subject: add context menu for muc user adapter --- .../ui/util/MucDetailsContextMenuHelper.java | 40 ++++++++++++++++++---- 1 file changed, 33 insertions(+), 7 deletions(-) (limited to 'src/main/java/de/pixart/messenger/ui/util') 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 f4777e8f3..e154fda94 100644 --- a/src/main/java/de/pixart/messenger/ui/util/MucDetailsContextMenuHelper.java +++ b/src/main/java/de/pixart/messenger/ui/util/MucDetailsContextMenuHelper.java @@ -6,8 +6,10 @@ import android.support.v7.app.AlertDialog; import android.text.SpannableString; import android.text.Spanned; import android.text.style.TypefaceSpan; +import android.view.ContextMenu; import android.view.Menu; import android.view.MenuItem; +import android.view.View; import de.pixart.messenger.Config; import de.pixart.messenger.R; @@ -19,10 +21,32 @@ import de.pixart.messenger.services.XmppConnectionService; import de.pixart.messenger.ui.ConferenceDetailsActivity; import de.pixart.messenger.ui.ConversationFragment; import de.pixart.messenger.ui.ConversationsActivity; +import de.pixart.messenger.ui.MucUsersActivity; import de.pixart.messenger.ui.XmppActivity; import rocks.xmpp.addr.Jid; public final class MucDetailsContextMenuHelper { + + public static void onCreateContextMenu(ContextMenu menu, View v) { + final XmppActivity activity = XmppActivity.find(v); + final Object tag = v.getTag(); + if (tag instanceof MucOptions.User && activity != null) { + activity.getMenuInflater().inflate(R.menu.muc_details_context, menu); + final MucOptions.User user = (MucOptions.User) tag; + String name; + final Contact contact = user.getContact(); + if (contact != null && contact.showInContactList()) { + name = contact.getDisplayName(); + } else if (user.getRealJid() != null) { + name = user.getRealJid().asBareJid().toString(); + } else { + name = user.getName(); + } + menu.setHeaderTitle(name); + MucDetailsContextMenuHelper.configureMucDetailsContextMenu(activity, menu, user.getConversation(), user); + } + } + public static void configureMucDetailsContextMenu(Activity activity, Menu menu, Conversation conversation, User user) { final boolean advancedMode = PreferenceManager.getDefaultSharedPreferences(activity).getBoolean("advanced_muc_mode", false); final MucOptions mucOptions = conversation.getMucOptions(); @@ -44,7 +68,7 @@ public final class MucDetailsContextMenuHelper { if (contact != null && contact.showInRoster()) { showContactDetails.setVisible(!contact.isSelf()); } - if (activity instanceof ConferenceDetailsActivity && user.getRole() == MucOptions.Role.NONE) { + if ((activity instanceof ConferenceDetailsActivity || activity instanceof MucUsersActivity) && user.getRole() == MucOptions.Role.NONE) { invite.setVisible(true); } if (activity instanceof ConversationsActivity) { @@ -82,7 +106,8 @@ public final class MucDetailsContextMenuHelper { } } - public static boolean onContextItemSelected(MenuItem item, User user, Conversation conversation, XmppActivity activity) { + public static boolean onContextItemSelected(MenuItem item, User user, XmppActivity activity) { + final Conversation conversation = user.getConversation(); final XmppConnectionService.OnAffiliationChanged onAffiliationChanged = activity instanceof XmppConnectionService.OnAffiliationChanged ? (XmppConnectionService.OnAffiliationChanged) activity : null; final XmppConnectionService.OnRoleChanged onRoleChanged = activity instanceof XmppConnectionService.OnRoleChanged ? (XmppConnectionService.OnRoleChanged) activity : null; Jid jid = user.getRealJid(); @@ -94,7 +119,7 @@ public final class MucDetailsContextMenuHelper { } return true; case R.id.start_conversation: - startConversation(user, conversation, activity); + startConversation(user, activity); return true; case R.id.give_admin_privileges: activity.xmppConnectionService.changeAffiliationInConference(conversation, jid, MucOptions.Affiliation.ADMIN, onAffiliationChanged); @@ -109,7 +134,7 @@ public final class MucDetailsContextMenuHelper { activity.xmppConnectionService.changeAffiliationInConference(conversation, jid, MucOptions.Affiliation.MEMBER, onAffiliationChanged); return true; case R.id.remove_from_room: - removeFromRoom(user, conversation, activity, onAffiliationChanged, onRoleChanged); + removeFromRoom(user, activity, onAffiliationChanged, onRoleChanged); return true; case R.id.ban_from_conference: activity.xmppConnectionService.changeAffiliationInConference(conversation, jid, MucOptions.Affiliation.OUTCAST, onAffiliationChanged); @@ -138,7 +163,8 @@ public final class MucDetailsContextMenuHelper { } } - public static void removeFromRoom(final User user, Conversation conversation, XmppActivity activity, XmppConnectionService.OnAffiliationChanged onAffiliationChanged, XmppConnectionService.OnRoleChanged onRoleChanged) { + private static void removeFromRoom(final User user, XmppActivity activity, XmppConnectionService.OnAffiliationChanged onAffiliationChanged, XmppConnectionService.OnRoleChanged onRoleChanged) { + final Conversation conversation = user.getConversation(); if (conversation.getMucOptions().membersOnly()) { activity.xmppConnectionService.changeAffiliationInConference(conversation, user.getRealJid(), MucOptions.Affiliation.NONE, onAffiliationChanged); if (user.getRole() != MucOptions.Role.NONE) { @@ -165,9 +191,9 @@ public final class MucDetailsContextMenuHelper { } } - public static void startConversation(User user, Conversation conversation, XmppActivity activity) { + private static void startConversation(User user, XmppActivity activity) { if (user.getRealJid() != null) { - Conversation newConversation = activity.xmppConnectionService.findOrCreateConversation(conversation.getAccount(), user.getRealJid().asBareJid(), false, true); + Conversation newConversation = activity.xmppConnectionService.findOrCreateConversation(user.getAccount(), user.getRealJid().asBareJid(), false, true); activity.switchToConversation(newConversation); } } -- cgit v1.2.3