context menu for muc participants + refactor trueCounterpart to use Jid class
This commit is contained in:
parent
283d5058e5
commit
f41c3eee04
|
@ -49,7 +49,7 @@ public class Message extends AbstractEntity {
|
||||||
public boolean markable = false;
|
public boolean markable = false;
|
||||||
protected String conversationUuid;
|
protected String conversationUuid;
|
||||||
protected Jid counterpart;
|
protected Jid counterpart;
|
||||||
protected String trueCounterpart;
|
protected Jid trueCounterpart;
|
||||||
protected String body;
|
protected String body;
|
||||||
protected String encryptedBody;
|
protected String encryptedBody;
|
||||||
protected long timeSent;
|
protected long timeSent;
|
||||||
|
@ -81,7 +81,7 @@ public class Message extends AbstractEntity {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Message(final String uuid, final String conversationUUid, final Jid counterpart,
|
public Message(final String uuid, final String conversationUUid, final Jid counterpart,
|
||||||
final String trueCounterpart, final String body, final long timeSent,
|
final Jid trueCounterpart, final String body, final long timeSent,
|
||||||
final int encryption, final int status, final int type, final String remoteMsgId, final String relativeFilePath) {
|
final int encryption, final int status, final int type, final String remoteMsgId, final String relativeFilePath) {
|
||||||
this.uuid = uuid;
|
this.uuid = uuid;
|
||||||
this.conversationUuid = conversationUUid;
|
this.conversationUuid = conversationUUid;
|
||||||
|
@ -108,10 +108,21 @@ public class Message extends AbstractEntity {
|
||||||
} catch (InvalidJidException e) {
|
} catch (InvalidJidException e) {
|
||||||
jid = null;
|
jid = null;
|
||||||
}
|
}
|
||||||
|
Jid trueCounterpart;
|
||||||
|
try {
|
||||||
|
String value = cursor.getString(cursor.getColumnIndex(TRUE_COUNTERPART));
|
||||||
|
if (value!=null) {
|
||||||
|
trueCounterpart = Jid.fromString(value);
|
||||||
|
} else {
|
||||||
|
trueCounterpart = null;
|
||||||
|
}
|
||||||
|
} catch (InvalidJidException e) {
|
||||||
|
trueCounterpart = null;
|
||||||
|
}
|
||||||
return new Message(cursor.getString(cursor.getColumnIndex(UUID)),
|
return new Message(cursor.getString(cursor.getColumnIndex(UUID)),
|
||||||
cursor.getString(cursor.getColumnIndex(CONVERSATION)),
|
cursor.getString(cursor.getColumnIndex(CONVERSATION)),
|
||||||
jid,
|
jid,
|
||||||
cursor.getString(cursor.getColumnIndex(TRUE_COUNTERPART)),
|
trueCounterpart,
|
||||||
cursor.getString(cursor.getColumnIndex(BODY)),
|
cursor.getString(cursor.getColumnIndex(BODY)),
|
||||||
cursor.getLong(cursor.getColumnIndex(TIME_SENT)),
|
cursor.getLong(cursor.getColumnIndex(TIME_SENT)),
|
||||||
cursor.getInt(cursor.getColumnIndex(ENCRYPTION)),
|
cursor.getInt(cursor.getColumnIndex(ENCRYPTION)),
|
||||||
|
@ -138,7 +149,11 @@ public class Message extends AbstractEntity {
|
||||||
} else {
|
} else {
|
||||||
values.put(COUNTERPART, counterpart.toString());
|
values.put(COUNTERPART, counterpart.toString());
|
||||||
}
|
}
|
||||||
values.put(TRUE_COUNTERPART, trueCounterpart);
|
if (trueCounterpart == null ) {
|
||||||
|
values.putNull(TRUE_COUNTERPART);
|
||||||
|
} else {
|
||||||
|
values.put(TRUE_COUNTERPART, trueCounterpart.toString());
|
||||||
|
}
|
||||||
values.put(BODY, body);
|
values.put(BODY, body);
|
||||||
values.put(TIME_SENT, timeSent);
|
values.put(TIME_SENT, timeSent);
|
||||||
values.put(ENCRYPTION, encryption);
|
values.put(ENCRYPTION, encryption);
|
||||||
|
@ -258,7 +273,7 @@ public class Message extends AbstractEntity {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTrueCounterpart(String trueCounterpart) {
|
public void setTrueCounterpart(Jid trueCounterpart) {
|
||||||
this.trueCounterpart = trueCounterpart;
|
this.trueCounterpart = trueCounterpart;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ public class MucOptions {
|
||||||
private int role;
|
private int role;
|
||||||
private int affiliation;
|
private int affiliation;
|
||||||
private String name;
|
private String name;
|
||||||
private String jid;
|
private Jid jid;
|
||||||
private long pgpKeyId = 0;
|
private long pgpKeyId = 0;
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
|
@ -54,11 +54,11 @@ public class MucOptions {
|
||||||
this.name = user;
|
this.name = user;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setJid(String jid) {
|
public void setJid(Jid jid) {
|
||||||
this.jid = jid;
|
this.jid = jid;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getJid() {
|
public Jid getJid() {
|
||||||
return this.jid;
|
return this.jid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,7 +165,7 @@ public class MucOptions {
|
||||||
user.setName(name);
|
user.setName(name);
|
||||||
user.setAffiliation(item.getAttribute("affiliation"));
|
user.setAffiliation(item.getAttribute("affiliation"));
|
||||||
user.setRole(item.getAttribute("role"));
|
user.setRole(item.getAttribute("role"));
|
||||||
user.setJid(item.getAttribute("jid"));
|
user.setJid(item.getAttributeAsJid("jid"));
|
||||||
user.setName(name);
|
user.setName(name);
|
||||||
if (name.equals(this.joinnick)) {
|
if (name.equals(this.joinnick)) {
|
||||||
this.isOnline = true;
|
this.isOnline = true;
|
||||||
|
@ -346,7 +346,7 @@ public class MucOptions {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getTrueCounterpart(String counterpart) {
|
public Jid getTrueCounterpart(String counterpart) {
|
||||||
for (User user : this.getUsers()) {
|
for (User user : this.getUsers()) {
|
||||||
if (user.getName().equals(counterpart)) {
|
if (user.getName().equals(counterpart)) {
|
||||||
return user.getJid();
|
return user.getJid();
|
||||||
|
|
|
@ -15,12 +15,11 @@ public class Roster {
|
||||||
this.account = account;
|
this.account = account;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Contact getContactFromRoster(String jid) {
|
public Contact getContactFromRoster(Jid jid) {
|
||||||
if (jid == null) {
|
if (jid == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
String cleanJid = jid.split("/", 2)[0];
|
Contact contact = contacts.get(jid.toBareJid().toString());
|
||||||
Contact contact = contacts.get(cleanJid);
|
|
||||||
if (contact != null && contact.showInRoster()) {
|
if (contact != null && contact.showInRoster()) {
|
||||||
return contact;
|
return contact;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -1971,7 +1971,7 @@ public class XmppConnectionService extends Service {
|
||||||
return this.mJingleConnectionManager;
|
return this.mJingleConnectionManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Contact> findContacts(String jid) {
|
public List<Contact> findContacts(Jid jid) {
|
||||||
ArrayList<Contact> contacts = new ArrayList<>();
|
ArrayList<Contact> contacts = new ArrayList<>();
|
||||||
for (Account account : getAccounts()) {
|
for (Account account : getAccounts()) {
|
||||||
if (!account.isOptionSet(Account.OPTION_DISABLED)) {
|
if (!account.isOptionSet(Account.OPTION_DISABLED)) {
|
||||||
|
|
|
@ -7,6 +7,7 @@ import android.content.IntentSender.SendIntentException;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.view.ContextMenu;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
@ -35,12 +36,12 @@ import eu.siacs.conversations.xmpp.stanzas.MessagePacket;
|
||||||
|
|
||||||
public class ConferenceDetailsActivity extends XmppActivity implements OnConversationUpdate, OnRenameListener {
|
public class ConferenceDetailsActivity extends XmppActivity implements OnConversationUpdate, OnRenameListener {
|
||||||
public static final String ACTION_VIEW_MUC = "view_muc";
|
public static final String ACTION_VIEW_MUC = "view_muc";
|
||||||
private Conversation conversation;
|
private Conversation mConversation;
|
||||||
private OnClickListener inviteListener = new OnClickListener() {
|
private OnClickListener inviteListener = new OnClickListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
inviteToConversation(conversation);
|
inviteToConversation(mConversation);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
private TextView mYourNick;
|
private TextView mYourNick;
|
||||||
|
@ -54,6 +55,7 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
|
||||||
private Button mInviteButton;
|
private Button mInviteButton;
|
||||||
private String uuid = null;
|
private String uuid = null;
|
||||||
private List<User> users = new ArrayList<>();
|
private List<User> users = new ArrayList<>();
|
||||||
|
private User mSelectedUser = null;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRename(final boolean success) {
|
public void onRename(final boolean success) {
|
||||||
|
@ -107,12 +109,12 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
quickEdit(conversation.getMucOptions().getActualNick(),
|
quickEdit(mConversation.getMucOptions().getActualNick(),
|
||||||
new OnValueEdited() {
|
new OnValueEdited() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onValueEdited(String value) {
|
public void onValueEdited(String value) {
|
||||||
xmppConnectionService.renameInMuc(conversation,
|
xmppConnectionService.renameInMuc(mConversation,
|
||||||
value);
|
value);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -127,16 +129,16 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
|
||||||
finish();
|
finish();
|
||||||
break;
|
break;
|
||||||
case R.id.action_edit_subject:
|
case R.id.action_edit_subject:
|
||||||
if (conversation != null) {
|
if (mConversation != null) {
|
||||||
quickEdit(conversation.getName(), new OnValueEdited() {
|
quickEdit(mConversation.getName(), new OnValueEdited() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onValueEdited(String value) {
|
public void onValueEdited(String value) {
|
||||||
MessagePacket packet = xmppConnectionService
|
MessagePacket packet = xmppConnectionService
|
||||||
.getMessageGenerator().conferenceSubject(
|
.getMessageGenerator().conferenceSubject(
|
||||||
conversation, value);
|
mConversation, value);
|
||||||
xmppConnectionService.sendMessagePacket(
|
xmppConnectionService.sendMessagePacket(
|
||||||
conversation.getAccount(), packet);
|
mConversation.getAccount(), packet);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -160,8 +162,8 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getShareableUri() {
|
protected String getShareableUri() {
|
||||||
if (conversation != null) {
|
if (mConversation != null) {
|
||||||
return "xmpp:" + conversation.getContactJid().toBareJid().toString() + "?join";
|
return "xmpp:" + mConversation.getContactJid().toBareJid().toString() + "?join";
|
||||||
} else {
|
} else {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
@ -173,32 +175,75 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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
|
@Override
|
||||||
void onBackendConnected() {
|
void onBackendConnected() {
|
||||||
if (getIntent().getAction().equals(ACTION_VIEW_MUC)) {
|
if (getIntent().getAction().equals(ACTION_VIEW_MUC)) {
|
||||||
this.uuid = getIntent().getExtras().getString("uuid");
|
this.uuid = getIntent().getExtras().getString("uuid");
|
||||||
}
|
}
|
||||||
if (uuid != null) {
|
if (uuid != null) {
|
||||||
this.conversation = xmppConnectionService
|
this.mConversation = xmppConnectionService
|
||||||
.findConversationByUuid(uuid);
|
.findConversationByUuid(uuid);
|
||||||
if (this.conversation != null) {
|
if (this.mConversation != null) {
|
||||||
populateView();
|
populateView();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void populateView() {
|
private void populateView() {
|
||||||
mAccountJid.setText(getString(R.string.using_account, conversation
|
mAccountJid.setText(getString(R.string.using_account, mConversation
|
||||||
.getAccount().getJid().toBareJid()));
|
.getAccount().getJid().toBareJid()));
|
||||||
mYourPhoto.setImageBitmap(avatarService().get(
|
mYourPhoto.setImageBitmap(avatarService().get(
|
||||||
conversation.getAccount(), getPixel(48)));
|
mConversation.getAccount(), getPixel(48)));
|
||||||
setTitle(conversation.getName());
|
setTitle(mConversation.getName());
|
||||||
mFullJid.setText(conversation.getContactJid().toBareJid().toString());
|
mFullJid.setText(mConversation.getContactJid().toBareJid().toString());
|
||||||
mYourNick.setText(conversation.getMucOptions().getActualNick());
|
mYourNick.setText(mConversation.getMucOptions().getActualNick());
|
||||||
mRoleAffiliaton = (TextView) findViewById(R.id.muc_role);
|
mRoleAffiliaton = (TextView) findViewById(R.id.muc_role);
|
||||||
if (conversation.getMucOptions().online()) {
|
if (mConversation.getMucOptions().online()) {
|
||||||
mMoreDetails.setVisibility(View.VISIBLE);
|
mMoreDetails.setVisibility(View.VISIBLE);
|
||||||
User self = conversation.getMucOptions().getSelf();
|
User self = mConversation.getMucOptions().getSelf();
|
||||||
switch (self.getAffiliation()) {
|
switch (self.getAffiliation()) {
|
||||||
case User.AFFILIATION_ADMIN:
|
case User.AFFILIATION_ADMIN:
|
||||||
mRoleAffiliaton.setText(getReadableRole(self.getRole()) + " ("
|
mRoleAffiliaton.setText(getReadableRole(self.getRole()) + " ("
|
||||||
|
@ -214,19 +259,21 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.users.clear();
|
this.users.clear();
|
||||||
this.users.addAll(conversation.getMucOptions().getUsers());
|
this.users.addAll(mConversation.getMucOptions().getUsers());
|
||||||
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||||
membersView.removeAllViews();
|
membersView.removeAllViews();
|
||||||
for (final User user : conversation.getMucOptions().getUsers()) {
|
for (final User user : mConversation.getMucOptions().getUsers()) {
|
||||||
View view = inflater.inflate(R.layout.contact, membersView,
|
View view = inflater.inflate(R.layout.contact, membersView,
|
||||||
false);
|
false);
|
||||||
this.setListItemBackgroundOnView(view);
|
this.setListItemBackgroundOnView(view);
|
||||||
view.setOnClickListener(new OnClickListener() {
|
view.setOnClickListener(new OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
highlightInMuc(conversation, user.getName());
|
highlightInMuc(mConversation, user.getName());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
registerForContextMenu(view);
|
||||||
|
view.setTag(user);
|
||||||
TextView name = (TextView) view
|
TextView name = (TextView) view
|
||||||
.findViewById(R.id.contact_display_name);
|
.findViewById(R.id.contact_display_name);
|
||||||
TextView key = (TextView) view.findViewById(R.id.key);
|
TextView key = (TextView) view.findViewById(R.id.key);
|
||||||
|
@ -274,7 +321,7 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
|
||||||
PgpEngine pgp = xmppConnectionService.getPgpEngine();
|
PgpEngine pgp = xmppConnectionService.getPgpEngine();
|
||||||
if (pgp != null) {
|
if (pgp != null) {
|
||||||
PendingIntent intent = pgp.getIntentForKey(
|
PendingIntent intent = pgp.getIntentForKey(
|
||||||
conversation.getAccount(), user.getPgpKeyId());
|
mConversation.getAccount(), user.getPgpKeyId());
|
||||||
if (intent != null) {
|
if (intent != null) {
|
||||||
try {
|
try {
|
||||||
startIntentSenderForResult(intent.getIntentSender(), 0,
|
startIntentSenderForResult(intent.getIntentSender(), 0,
|
||||||
|
|
|
@ -494,6 +494,9 @@ public class ConversationFragment extends Fragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reInit(Conversation conversation) {
|
public void reInit(Conversation conversation) {
|
||||||
|
if (conversation == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (this.conversation != null) {
|
if (this.conversation != null) {
|
||||||
this.conversation.setNextMessage(mEditMessage.getText().toString());
|
this.conversation.setNextMessage(mEditMessage.getText().toString());
|
||||||
}
|
}
|
||||||
|
|
|
@ -622,7 +622,7 @@ public class StartConversationActivity extends XmppActivity implements OnRosterU
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean handleJid(Invite invite) {
|
private boolean handleJid(Invite invite) {
|
||||||
List<Contact> contacts = xmppConnectionService.findContacts(invite.getJid().toString());
|
List<Contact> contacts = xmppConnectionService.findContacts(invite.getJid());
|
||||||
if (contacts.size() == 0) {
|
if (contacts.size() == 0) {
|
||||||
showCreateContactDialog(invite.getJid().toString(),invite.getFingerprint());
|
showCreateContactDialog(invite.getJid().toString(),invite.getFingerprint());
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item
|
||||||
|
android:id="@+id/start_conversation"
|
||||||
|
android:title="@string/start_conversation"
|
||||||
|
/>
|
||||||
</menu>
|
</menu>
|
Loading…
Reference in a new issue