aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/eu/siacs/conversations/ui
diff options
context:
space:
mode:
authoriNPUTmice <daniel@gultsch.de>2014-11-17 20:02:46 +0100
committeriNPUTmice <daniel@gultsch.de>2014-11-17 20:02:46 +0100
commitf41c3eee04a647fa3f44da20ca77928731ce8946 (patch)
tree1b60f0b00425ed4d4f354aef33f7a9eb8282337e /src/main/java/eu/siacs/conversations/ui
parent283d5058e5f91e11fc651a83ce2968580bd94d4a (diff)
context menu for muc participants + refactor trueCounterpart to use Jid class
Diffstat (limited to 'src/main/java/eu/siacs/conversations/ui')
-rw-r--r--src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java93
-rw-r--r--src/main/java/eu/siacs/conversations/ui/ConversationFragment.java3
-rw-r--r--src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java2
3 files changed, 74 insertions, 24 deletions
diff --git a/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java b/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java
index 780f02177..c97f9e56a 100644
--- a/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java
@@ -7,6 +7,7 @@ import android.content.IntentSender.SendIntentException;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle;
+import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
@@ -35,12 +36,12 @@ import eu.siacs.conversations.xmpp.stanzas.MessagePacket;
public class ConferenceDetailsActivity extends XmppActivity implements OnConversationUpdate, OnRenameListener {
public static final String ACTION_VIEW_MUC = "view_muc";
- private Conversation conversation;
+ private Conversation mConversation;
private OnClickListener inviteListener = new OnClickListener() {
@Override
public void onClick(View v) {
- inviteToConversation(conversation);
+ inviteToConversation(mConversation);
}
};
private TextView mYourNick;
@@ -54,6 +55,7 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
private Button mInviteButton;
private String uuid = null;
private List<User> users = new ArrayList<>();
+ private User mSelectedUser = null;
@Override
public void onRename(final boolean success) {
@@ -107,12 +109,12 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
@Override
public void onClick(View v) {
- quickEdit(conversation.getMucOptions().getActualNick(),
+ quickEdit(mConversation.getMucOptions().getActualNick(),
new OnValueEdited() {
@Override
public void onValueEdited(String value) {
- xmppConnectionService.renameInMuc(conversation,
+ xmppConnectionService.renameInMuc(mConversation,
value);
}
});
@@ -127,16 +129,16 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
finish();
break;
case R.id.action_edit_subject:
- if (conversation != null) {
- quickEdit(conversation.getName(), new OnValueEdited() {
+ if (mConversation != null) {
+ quickEdit(mConversation.getName(), new OnValueEdited() {
@Override
public void onValueEdited(String value) {
MessagePacket packet = xmppConnectionService
.getMessageGenerator().conferenceSubject(
- conversation, value);
+ mConversation, value);
xmppConnectionService.sendMessagePacket(
- conversation.getAccount(), packet);
+ mConversation.getAccount(), packet);
}
});
}
@@ -160,8 +162,8 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
@Override
protected String getShareableUri() {
- if (conversation != null) {
- return "xmpp:" + conversation.getContactJid().toBareJid().toString() + "?join";
+ if (mConversation != null) {
+ return "xmpp:" + mConversation.getContactJid().toBareJid().toString() + "?join";
} else {
return "";
}
@@ -174,31 +176,74 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
}
@Override
+ public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
+ Object tag = v.getTag();
+ if (tag instanceof User) {
+ getMenuInflater().inflate(R.menu.muc_details_context,menu);
+ final User user = (User) tag;
+ this.mSelectedUser = user;
+ String name;
+ final Contact contact = user.getContact();
+ if (contact != null) {
+ name = contact.getDisplayName();
+ } else if (user.getJid() != null) {
+ name = user.getJid().toBareJid().toString();
+ } else {
+ name = user.getName();
+ }
+ menu.setHeaderTitle(name);
+ MenuItem startConversation = menu.findItem(R.id.start_conversation);
+ if (user.getJid() == null) {
+ startConversation.setVisible(false);
+ }
+ }
+ super.onCreateContextMenu(menu,v,menuInfo);
+ }
+
+ @Override
+ public boolean onContextItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.start_conversation:
+ startConversation(mSelectedUser);
+ return true;
+ default:
+ return super.onContextItemSelected(item);
+ }
+ }
+
+ protected void startConversation(User user) {
+ if (user.getJid() != null) {
+ Conversation conversation = xmppConnectionService.findOrCreateConversation(this.mConversation.getAccount(),user.getJid(),false);
+ switchToConversation(conversation);
+ }
+ }
+
+ @Override
void onBackendConnected() {
if (getIntent().getAction().equals(ACTION_VIEW_MUC)) {
this.uuid = getIntent().getExtras().getString("uuid");
}
if (uuid != null) {
- this.conversation = xmppConnectionService
+ this.mConversation = xmppConnectionService
.findConversationByUuid(uuid);
- if (this.conversation != null) {
+ if (this.mConversation != null) {
populateView();
}
}
}
private void populateView() {
- mAccountJid.setText(getString(R.string.using_account, conversation
+ mAccountJid.setText(getString(R.string.using_account, mConversation
.getAccount().getJid().toBareJid()));
mYourPhoto.setImageBitmap(avatarService().get(
- conversation.getAccount(), getPixel(48)));
- setTitle(conversation.getName());
- mFullJid.setText(conversation.getContactJid().toBareJid().toString());
- mYourNick.setText(conversation.getMucOptions().getActualNick());
+ mConversation.getAccount(), getPixel(48)));
+ setTitle(mConversation.getName());
+ mFullJid.setText(mConversation.getContactJid().toBareJid().toString());
+ mYourNick.setText(mConversation.getMucOptions().getActualNick());
mRoleAffiliaton = (TextView) findViewById(R.id.muc_role);
- if (conversation.getMucOptions().online()) {
+ if (mConversation.getMucOptions().online()) {
mMoreDetails.setVisibility(View.VISIBLE);
- User self = conversation.getMucOptions().getSelf();
+ User self = mConversation.getMucOptions().getSelf();
switch (self.getAffiliation()) {
case User.AFFILIATION_ADMIN:
mRoleAffiliaton.setText(getReadableRole(self.getRole()) + " ("
@@ -214,19 +259,21 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
}
}
this.users.clear();
- this.users.addAll(conversation.getMucOptions().getUsers());
+ this.users.addAll(mConversation.getMucOptions().getUsers());
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
membersView.removeAllViews();
- for (final User user : conversation.getMucOptions().getUsers()) {
+ for (final User user : mConversation.getMucOptions().getUsers()) {
View view = inflater.inflate(R.layout.contact, membersView,
false);
this.setListItemBackgroundOnView(view);
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
- highlightInMuc(conversation, user.getName());
+ highlightInMuc(mConversation, user.getName());
}
});
+ registerForContextMenu(view);
+ view.setTag(user);
TextView name = (TextView) view
.findViewById(R.id.contact_display_name);
TextView key = (TextView) view.findViewById(R.id.key);
@@ -274,7 +321,7 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
PgpEngine pgp = xmppConnectionService.getPgpEngine();
if (pgp != null) {
PendingIntent intent = pgp.getIntentForKey(
- conversation.getAccount(), user.getPgpKeyId());
+ mConversation.getAccount(), user.getPgpKeyId());
if (intent != null) {
try {
startIntentSenderForResult(intent.getIntentSender(), 0,
diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
index 0742e17e3..cf02c9709 100644
--- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
+++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
@@ -494,6 +494,9 @@ public class ConversationFragment extends Fragment {
}
public void reInit(Conversation conversation) {
+ if (conversation == null) {
+ return;
+ }
if (this.conversation != null) {
this.conversation.setNextMessage(mEditMessage.getText().toString());
}
diff --git a/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java
index cdd096f5e..c8b418212 100644
--- a/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java
@@ -622,7 +622,7 @@ public class StartConversationActivity extends XmppActivity implements OnRosterU
}
private boolean handleJid(Invite invite) {
- List<Contact> contacts = xmppConnectionService.findContacts(invite.getJid().toString());
+ List<Contact> contacts = xmppConnectionService.findContacts(invite.getJid());
if (contacts.size() == 0) {
showCreateContactDialog(invite.getJid().toString(),invite.getFingerprint());
return false;