diff options
Diffstat (limited to 'src/main/java')
7 files changed, 104 insertions, 49 deletions
diff --git a/src/main/java/de/pixart/messenger/ui/ConferenceDetailsActivity.java b/src/main/java/de/pixart/messenger/ui/ConferenceDetailsActivity.java index 92192de69..8fb8b0c1d 100644 --- a/src/main/java/de/pixart/messenger/ui/ConferenceDetailsActivity.java +++ b/src/main/java/de/pixart/messenger/ui/ConferenceDetailsActivity.java @@ -358,6 +358,14 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers return super.onOptionsItemSelected(menuItem); } + @Override + public boolean onContextItemSelected(MenuItem item) { + if (!MucDetailsContextMenuHelper.onContextItemSelected(item, mUserPreviewAdapter.getSelectedUser(), this)) { + return super.onContextItemSelected(item); + } + return true; + } + public void onMucEditButtonClicked(View v) { if (this.binding.mucEditor.getVisibility() == View.GONE) { final MucOptions mucOptions = mConversation.getMucOptions(); @@ -669,7 +677,7 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers } } }); - this.mUserPreviewAdapter.setUserList(MucOptions.sub(users, GridManager.getCurrentColumnCount(binding.users))); + this.mUserPreviewAdapter.submitList(MucOptions.sub(users, GridManager.getCurrentColumnCount(binding.users))); this.binding.invite.setVisibility(mucOptions.canInvite() ? View.VISIBLE : View.GONE); } diff --git a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java index 4f0486cf7..6815e11ec 100644 --- a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java +++ b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java @@ -3101,7 +3101,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke popupMenu.inflate(R.menu.muc_details_context); final Menu menu = popupMenu.getMenu(); MucDetailsContextMenuHelper.configureMucDetailsContextMenu(activity, menu, conversation, user); - popupMenu.setOnMenuItemClickListener(menuItem -> MucDetailsContextMenuHelper.onContextItemSelected(menuItem, user, conversation, activity)); + popupMenu.setOnMenuItemClickListener(menuItem -> MucDetailsContextMenuHelper.onContextItemSelected(menuItem, user, activity)); } else { final Contact contact = message.getContact(); if (contact.isSelf()) { diff --git a/src/main/java/de/pixart/messenger/ui/MucUsersActivity.java b/src/main/java/de/pixart/messenger/ui/MucUsersActivity.java index ffefedc80..b51da7635 100644 --- a/src/main/java/de/pixart/messenger/ui/MucUsersActivity.java +++ b/src/main/java/de/pixart/messenger/ui/MucUsersActivity.java @@ -5,6 +5,7 @@ import android.databinding.DataBindingUtil; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.view.MenuItem; +import android.widget.Toast; import java.util.ArrayList; import java.util.Collections; @@ -16,8 +17,9 @@ import de.pixart.messenger.entities.MucOptions; import de.pixart.messenger.services.XmppConnectionService; import de.pixart.messenger.ui.adapter.UserAdapter; import de.pixart.messenger.ui.util.MucDetailsContextMenuHelper; +import rocks.xmpp.addr.Jid; -public class MucUsersActivity extends XmppActivity implements XmppConnectionService.OnRosterUpdate { +public class MucUsersActivity extends XmppActivity implements XmppConnectionService.OnMucRosterUpdate, XmppConnectionService.OnAffiliationChanged, XmppConnectionService.OnRoleChanged { private UserAdapter userAdapter; @@ -47,7 +49,7 @@ public class MucUsersActivity extends XmppActivity implements XmppConnectionServ @Override public boolean onContextItemSelected(MenuItem item) { - if (!MucDetailsContextMenuHelper.onContextItemSelected(item, userAdapter.getSelectedUser(), mConversation, this)) { + if (!MucDetailsContextMenuHelper.onContextItemSelected(item, userAdapter.getSelectedUser(), this)) { return super.onContextItemSelected(item); } return true; @@ -59,13 +61,37 @@ public class MucUsersActivity extends XmppActivity implements XmppConnectionServ ActivityMucUsersBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_muc_users); setSupportActionBar((Toolbar) binding.toolbar); configureActionBar(getSupportActionBar(), true); - this.userAdapter = new UserAdapter(true); + this.userAdapter = new UserAdapter(getPreferences().getBoolean("advanced_muc_mode", false)); binding.list.setAdapter(this.userAdapter); } @Override - public void onRosterUpdate() { + public void onMucRosterUpdate() { loadAndSubmitUsers(); } + + private void displayToast(final String msg) { + runOnUiThread(() -> Toast.makeText(this, msg, Toast.LENGTH_SHORT).show()); + } + + @Override + public void onAffiliationChangedSuccessful(Jid jid) { + + } + + @Override + public void onAffiliationChangeFailed(Jid jid, int resId) { + displayToast(getString(resId, jid.asBareJid().toString())); + } + + @Override + public void onRoleChangedSuccessful(String nick) { + + } + + @Override + public void onRoleChangeFailed(String nick, int resId) { + displayToast(getString(resId, nick)); + } }
\ No newline at end of file diff --git a/src/main/java/de/pixart/messenger/ui/adapter/ListItemAdapter.java b/src/main/java/de/pixart/messenger/ui/adapter/ListItemAdapter.java index a9b07052e..a5350ff60 100644 --- a/src/main/java/de/pixart/messenger/ui/adapter/ListItemAdapter.java +++ b/src/main/java/de/pixart/messenger/ui/adapter/ListItemAdapter.java @@ -75,9 +75,8 @@ public class ListItemAdapter extends ArrayAdapter<ListItem> { } else { viewHolder = (ViewHolder) view.getTag(); } - + view.setBackground(StyledAttributes.getDrawable(view.getContext(), R.attr.list_item_background)); List<ListItem.Tag> tags = item.getTags(activity); - if (tags.size() == 0 || !this.showDynamicTags) { viewHolder.tags.setVisibility(View.GONE); } else { diff --git a/src/main/java/de/pixart/messenger/ui/adapter/UserAdapter.java b/src/main/java/de/pixart/messenger/ui/adapter/UserAdapter.java index f6a15aff4..3ca224a2a 100644 --- a/src/main/java/de/pixart/messenger/ui/adapter/UserAdapter.java +++ b/src/main/java/de/pixart/messenger/ui/adapter/UserAdapter.java @@ -28,15 +28,24 @@ import de.pixart.messenger.ui.ConferenceDetailsActivity; import de.pixart.messenger.ui.XmppActivity; import de.pixart.messenger.ui.util.AvatarWorkerTask; import de.pixart.messenger.ui.util.MucDetailsContextMenuHelper; +import rocks.xmpp.addr.Jid; public class UserAdapter extends ListAdapter<MucOptions.User, UserAdapter.ViewHolder> implements View.OnCreateContextMenuListener { - private MucOptions.User selectedUser = null; - static final DiffUtil.ItemCallback<MucOptions.User> DIFF = new DiffUtil.ItemCallback<MucOptions.User>() { @Override public boolean areItemsTheSame(@NonNull MucOptions.User a, @NonNull MucOptions.User b) { - return a == b; + final Jid fullA = a.getFullJid(); + final Jid fullB = b.getFullJid(); + final Jid realA = a.getRealJid(); + final Jid realB = b.getRealJid(); + if (fullA != null && fullB != null) { + return fullA.equals(fullB); + } else if (realA != null && realB != null) { + return realA.equals(realB); + } else { + return false; + } } @Override @@ -45,6 +54,7 @@ public class UserAdapter extends ListAdapter<MucOptions.User, UserAdapter.ViewHo } }; private final boolean advancedMode; + private MucOptions.User selectedUser = null; public UserAdapter(final boolean advancedMode) { super(DIFF); @@ -115,23 +125,7 @@ public class UserAdapter extends ListAdapter<MucOptions.User, UserAdapter.ViewHo @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { - 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); - } + MucDetailsContextMenuHelper.onCreateContextMenu(menu, v); } class ViewHolder extends RecyclerView.ViewHolder { diff --git a/src/main/java/de/pixart/messenger/ui/adapter/UserPreviewAdapter.java b/src/main/java/de/pixart/messenger/ui/adapter/UserPreviewAdapter.java index 5104ef86c..105503243 100644 --- a/src/main/java/de/pixart/messenger/ui/adapter/UserPreviewAdapter.java +++ b/src/main/java/de/pixart/messenger/ui/adapter/UserPreviewAdapter.java @@ -4,8 +4,10 @@ import android.databinding.DataBindingUtil; import android.support.annotation.NonNull; import android.support.v7.recyclerview.extensions.ListAdapter; import android.support.v7.widget.RecyclerView; +import android.view.ContextMenu; import android.view.LayoutInflater; import android.view.Menu; +import android.view.View; import android.view.ViewGroup; import android.widget.PopupMenu; @@ -18,7 +20,9 @@ import de.pixart.messenger.ui.XmppActivity; import de.pixart.messenger.ui.util.AvatarWorkerTask; import de.pixart.messenger.ui.util.MucDetailsContextMenuHelper; -public class UserPreviewAdapter extends ListAdapter<MucOptions.User, UserPreviewAdapter.ViewHolder> { +public class UserPreviewAdapter extends ListAdapter<MucOptions.User, UserPreviewAdapter.ViewHolder> implements View.OnCreateContextMenuListener { + + private MucOptions.User selectedUser = null; public UserPreviewAdapter() { super(UserAdapter.DIFF); @@ -40,23 +44,21 @@ public class UserPreviewAdapter extends ListAdapter<MucOptions.User, UserPreview activity.highlightInMuc(user.getConversation(), user.getName()); } }); + viewHolder.binding.getRoot().setOnCreateContextMenuListener(this); + viewHolder.binding.getRoot().setTag(user); viewHolder.binding.getRoot().setOnLongClickListener(v -> { - final XmppActivity activity = XmppActivity.find(v); - if (activity == null) { - return true; - } - final PopupMenu popupMenu = new PopupMenu(activity, v); - popupMenu.inflate(R.menu.muc_details_context); - final Menu menu = popupMenu.getMenu(); - MucDetailsContextMenuHelper.configureMucDetailsContextMenu(activity, menu, user.getConversation(), user); - popupMenu.setOnMenuItemClickListener(menuItem -> MucDetailsContextMenuHelper.onContextItemSelected(menuItem, user, user.getConversation(), activity)); - popupMenu.show(); - return true; + selectedUser = user; + return false; }); } - public void setUserList(List<MucOptions.User> users) { - submitList(users); + @Override + public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { + MucDetailsContextMenuHelper.onCreateContextMenu(menu, v); + } + + public MucOptions.User getSelectedUser() { + return selectedUser; } 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); } } |